Spread the love

The Legend of Zelda: Link to the Past and Super Metroid are perhaps the two most significant games of the Super Nintendo era of retro video games. Their emphasis on collectible items allowing for forward advancement through mazes, and the polish on these ideas compared to their NES counterparts, have made them highly influential classics. When randomizers emerged a few years back as a fun new way to retro game, someone had the crazy idea to quite literally turn Link to the Past and Super Metroid into the same thing. Today, I’m speaking to the current developers of the Cas’ Branch of the Z3/SM randomizer.

1. So first of all, could you please introduce yourselves, and explain how you got involved in the project?

Matt: I’m MattEqualsCoder! I was introduced to SMZ3 by watching betus’s SMZ3 streams, and I was interested in playing it. Not too long after I started watching the streams, Vivelin created her fork of the SMZ3 randomizer with a built-in tracker. At the time it didn’t have a map tracker, and as someone who had only played both ALttP and Super Metroid once each, I desperately needed a map to be able to play it – so I made one myself!

Vivelin: And I’m Laura, better known as Vivelin. Like Matt, I too got introduced to SMZ3 by Betus’ streams. As Matt says, I started the Cas’ fork of the randomizer when it became clear the original rando devs weren’t going to agree with the changes I wanted to contribute.

CPColin: I’m CPColin! I’m the most recent developer to contribute to the “Cas’ Branch” of the SMZ3 Randomizer. I started contributing in late 2022 after learning about the project from watching Let’s Play superstar Diabetus stream it on twitch.tv/the_betus.

2. Gameplay wise, what appeals to you about this mashup randomizer? What do you get from mashing up Zelda and Metroid together in the same randomizer that you don’t get from the separate ones?

CPColin: Smooshing the games together adds enough potential item locations to keep things fresh when one has played enough Z3 Randomizer seeds for them to all start feeling the same. A fun extra wrinkle that SMZ3 adds are the portals between the games, which can make for bizarre necessary routes, like reaching Misery Mire in Z3 without the Flute, via the portal in Lower Norfair.

Matt: Mostly just that switching between the two breaks up the gameplay a good amount. You do get some seeds where you beat 10% of Zelda, then 100% of Metroid, then the rest of Zelda. But many times you’re swapping between the two and get really different experiences.

Vivelin: I don’t actually really play SMZ3, but I’ve always been fascinated by randomizers. Most of my contributions to the randomizer were actually just as a viewer, but I get a ton of feedback just from watching the stream, so I managed okay, I think. I don’t think combining the two games adds depth, necessarily, but it definitely is an interesting and unique concept that will have new viewers do a double-take once they see the transition or see items show up in the “wrong” game.

3. In programming terms, what sort of challenges are there in making this randomizer work?

Matt: While some of the UI based things can be pretty annoying, as far as programming goes, the assembly takes the cake as the most challenging thing. I had one assembly class in college, so I really had to dust off my knowledge of assembly to start messing with it. Plus when you’re messing with assembly, things can really easily break in bizarre ways with the most mundane of typos. You also have to be conscious about how efficient you are because both games can be pretty laggy vanilla at times, so any assembly we add on top of it can just make that even worse. However, I’d say the most challenging parts of it weren’t made by any of us, though. Total was the one who originally made the randomizer and did a lot of the magic of switching games, and there’s a lot that has to happen for that. Each time you switch games, it has to save the game, then cleanly start swapping around some of the memory to change games without things crashing.

Vivelin: Yeah, before Matt and Colin contributed to the fork, actual changes to the game were limited to minor changes or integrating patches from metroidconstruction.com. Most of the work I did was all the parts you don’t typically see on a stream — seed generation, UI, Tracker, all that.

4. What would you say the most difficult bug was to resolve?

Matt: Getting the Zelda hint tiles to work nicely and consistently was the bane of my existence. lol I had to fix them up several times.

5. To be quite honest, I’m surprised at times that it even works at all. This just seems to be a huge expansion on both of the existing games. Could you hypothetically play the Z3/SM Randomizer on a real Super Nintendo? If so, how? And if not, why not?

CPColin: Yes! The ROM files are valid SNES ROMs and will play on real hardware. There’s even a way to enable auto-tracking when playing on an SNES, but I don’t know the details.

Matt: I haven’t tried myself, but you should be able to as long as you have a cartridge that lets you play roms. I know for sure it works on hardware that emulates the SNES like the SuperNT. Because all of it was developed for software that emulates the SNES, none of the assembly that was created does anything outside of the realm of the power of the SNES.

6. Is there an ideal set-up for being able to play the Z3/SM Randomizer?

CPColin: Matt has done a lot of work lately with trying to give players move options. I think most players use Windows and Snes9x, though.

Vivelin: And with Matt’s recent efforts, you don’t even need to be on Windows anymore if voice recognition is not important to you. I personally don’t play retro games much, so Snes9x is sufficient for me.

Matt: I wouldn’t say there is a single ideal setup as there are multiple options. My personal preference is either playing on the SuperNT with the FxPak pro or in RetroArch with either the BSNES or Snes9x cores.

7. I understand that this project has been forked in the past. Would you mind explaining how, and why, it was forked?

CPColin: The “Cas’ Branch” is a fork of the mainline SMZ3 Randomizer, found at https://samus.link. Vivelin made a fork of the mainline code back in April 2021 and immediately removed Infinite Bomb Jumps from the list of tricks players are expected to know in order to complete the Super Metroid side of the game. Vivelin and Matt probably have more details. The mainline branch is still under active development, as are the randomizers for the individual games. Our branch wouldn’t exist without the continued hard work of those developers.

Matt: The original reasoning for the SMZ3 Cas’ Randomizer fork was because the original SMZ3 version required infinite bomb jumping. This is a trick in Super Metroid you have to get to high up places by really precisely timing the morph ball bombs for like a minute or two. It’s just something that betus’s community felt was tedious to play and boring to watch. I believe that change was rejected on the mainline repo, most likely due to them focusing on a smaller number of options to avoid complexity and to make it easier to do races and things like that. Since then, the original SMZ3 repo has made changes on their side, and so have we, so there are parts that are fairly incompatible at this point. But, I think that’s good in its own right as they offer two different experiences.

Vivelin: Yeah. Over time, my fork has slowly morphed into a more casual, approachable version. We’ve implemented optional patches that make the game itself easier to control, and many options to control what sort of techniques you’re expected to be able to perform. But in addition to that, we’ve also improved the experience as a whole by adding a built-in Tracker with hints/spoilers capabilities, Twitch integration and custom music support through MSU-1.

8. Do you expect to have any new features of note going forward, or is the project primarily just bug fixes at this point?

Vivelin: As long as the game is being played by the communities we’re part of, we’ll probably always have things to add. I think we all have full-time jobs though, so finding time for it is the real problem.

CPColin: I keep claiming to the others that I’m going to implement graph-based logic, but then I keep not working on it! The graph-based logic would define the logic for each room individually, theoretically giving us more flexibility to try implementing different game modes.

Matt: We have a couple big things we’re hoping to do once the stars align and we have the time to focus on them. I’ve been wanting to come up with game mode where you have to do random objectives rather than strictly beat all of the bosses. I’d also like to try to get it added to Archipelago, but that’s a pretty low priority.

9. Has working on this project helped you appreciate Link to the Past or Super Metroid in any new way that you never could have imagined before you got started? How so?

CPColin: I never knew how many alternate paths and out-of-the-way rooms Super Metroid had until I had to start checking them for items! It’s amazing how much of that game you can just skip. I’m pretty sure I didn’t know about the Charge Beam the first few times I beat (vanilla) SM, for instance.

Matt: Not necessarily Link to the Past or Super Metroid specifically, but working in the assembly definitely gave me more respect for the original devs for having to make full games in it back in the day! Other than that, I think something I didn’t fully know about and appreciate is the variety of hardware at the disposal of devs and how it could actually impact the development of games. Game cartidges could be SlowROM and FastROM, or they could have things like the SA-1 chip to be included on the cartidge to offload some of the processing from the SNES CPU onto it. But, these things would require different memory usage or consideration on what could be on the SA-1 chip since it couldn’t access VRAM or WRAM. There was just a ton that needed to be considered!

10. Aesthetically speaking, would you care to state whether you prefer Link to the Past or Super Metroid more?

Matt: Probably A Link to the Past for me, mostly because while I love sci-fi, I’ve always enjoyed fantasy stuff more in general.

CPColin: Z3 has a lovely, vibrant simplicity to its graphics, but I’m still impressed every now and then that SM does everything it does without relying on an accelerator chip in the cartridge. They packed a lot of graphics and effects programming into those 24 megabits!

Vivelin: While I’ve played more Zelda games than Metroid games overall, I think I’m gonna have to give this one to Super Metroid.

11. What about in terms of programming?

CPColin: Super Metroid has an excellent, complete disassembly here. I never could have implemented MSU Resume or Hyper Beam Counting without it.

Matt: Unfortunately I haven’t done enough in the A Link to the Past assembly to really comment here. I have heard there are some parts that are kind of notoriously inefficiently written, such as the UI in A Link to the Past, but I can’t really speak to that myself.

Vivelin: Most of my time was spent outside of the SNES assembly stuff. I did have an easier time finding community-made patches to integrate for Super Metroid than for Link to the Past.

12. Those are all the questions I have. Are there any questions I didn’t ask that you’d like to answer anyway?

Matt: I just want to thank everyone who plays the SMZ3 Cas’ rando as seeing folks play and enjoy it really makes it all worth it! And, if you haven’t played any randomizers yourself but are curious, I’d really recommend giving it a shot – be it SMZ3 or a randomizer for your favorite game. There are tons of randomizers out there nowadays. It can really seem intimidating at first, but most randomizers have trackers and maps that can really help out. Plus, I think generally a lot of the randomizer communities have been drifting towards making things more accessible for new people over the last few years. So definitely take a stab at it if you’ve been on the fence about it.

Vivelin: Definitely also a huge shoutout to Betus and the other folks that play our version. As a viewer rather than a player, seeing other people enjoy my efforts is what drove me to get the randomizer fork to this point in the first place.

Well, it was great speaking to you all. Keep up the great work!