Infinite Remix: The Story of the Link to the Past Randomizer

Live. Randomize. Repeat.

In The Beginning…

Nintendo’s 1992 masterpiece, The Legend of Zelda: A Link to the Past is a perfectly paced action adventure game, where our plucky hero, Link, must travel the world of Hyrule acquiring the knowledge and tools necessary to defeat Ganon, the King of Evil, and restore balance to the Light and Dark Worlds. The progression is straightforward, with Link acquiring items at opportune times to advance to the next dungeon, eventually becoming strong enough to defeat the final boss. When a hacked version of A Link to the Past surfaced in the early months of 2016, randomly distributing the items Link needs to complete his quest, it took a classic and gave it new life, creating a game that feels like a new experience every time you play.

This hacked version of the game is the brainchild of David “Dessyreqt” Carroll, who had previously worked on randomized versions of Super Metroid and Final Fantasy VI. These two games, along with ALttP make up Carroll’s three favorite games, on his favorite system, the Super Nintendo. To him “it was just natural that I would go ahead and randomize A Link to the Past after having built Randomizers for the other two.”

While working on his Super Metroid Randomizer, Carroll “stumbled upon a new algorithm for shuffling items” that he realized he could use to easily build a Randomizer for Link to the Past. This was somewhere in the middle of 2014. In these early days, Carroll was a one-man show, working on the Randomizer in secret. One thing he hit on early in his work was that in a normal speedrun of ALttP, there are many locations in the game that players never visit because there are no key items in these areas of the game world. The Randomizer can potentially force players to run to all corners of the map to find items, and Carroll saw this as something that would be appealing to players looking for a new challenge.

Carroll’s own challenges that he faced were that he wasn’t really a ROM hacker, and admits to still being quite unfamiliar with 65816 (SNES) assembly, so everything he did to randomize items was trial and error. Making use of the ALttP ROM editor, Hyrule Magic, to change items at various locations and using a binary diff tool to help him identify what addresses led to what chests in the game’s code, Carroll plugged away at his project. Finding every item location, and determining what items were needed to get to that location was a painstakingly slow process that was certainly the most tedious and error-prone part for Carroll.

Life would get in the way for Carroll as work, family and other projects cut into his time, and bringing the Randomizer to life was put on hold. He was actually surprised that when he was finally able to pick the project back up in 2016, no one had created a randomized ALttP yet. 

Back From the Dead: The Randomizer is Revived

The revived Randomizer project began to take steps towards completion in February of 2016, when Carroll approached members of the ALttP speedrunning community, jumping onto the #alttp channel on the SpeedRunsLive IRC with the first build of the Randomizer. He wanted speedrunners to test his version of ALttP, and as Karkat, one of the runners approached, puts it “speedrunners tend to put more stress on a game, so it was probably a good idea to have us all test it.” Karkat and others put the game through its paces, and he was the first to jump in to help smooth out the bugs in the early build.

Now in charge of ASM (programming language) development for the Link to the Past Randomizer, Karkat was the first to join the team and put his skills in ROM hacking and 65816 (SNES) assembly to work. Able to dig further into the ROM and manipulate more code, Karkat would add randomization to the freestanding heart pieces found throughout the land of Hyrule (Carroll’s original build only randomized items found in chests and items received from NPCs) and added a toggle system to the menu screen to allow for items that occupy the same space in the menu, among other things. (fig. 1)

fig.1 the Y-Toggle in action

The work under-the-hood of the Randomizer was extensive, Karkat recalls. “Things like making King Zora throw the fire rod or finding the blue mail sitting up on the desert ledge are far from trivial.” He elaborated on this by saying “the problem ultimately comes down to the fact that the SNES is essentially a very old, slow computer. The system has very little video memory and so the original developers generally didn’t leave anything loaded that wasn’t strictly needed at the time.

There is no simple way, for example, to just “change” the flippers King Zora throws into a fire rod. There just plain isn’t a freestanding fire rod item in the game. You’re expected to find it in a chest, so a standalone sprite was never made.” So if you’re watching someone run the Randomizer, and you see King Zora toss a fire rod, or a player quickly switch between the flute and the shovel in the item menu, there’s a lot more going on than you think.

fig.2 code for the Y-Toggle in the item menu. -courtesy of Karkat-

The enthusiasm of the community to jump in and offer their services was something that Caroll had not expected. “[It] really surprised me how quickly and strongly the whole ALttP community latched onto the Randomizer. Everyone wanted to help with everything; this was entirely unlike working on the Super Metroid Randomizer, where people enjoyed it, but nobody seemed interested in contributing ideas. This helped the ALttP Randomizer grow more quickly than I could have ever imagined.”      

Almost immediately after Karkat joined the development team, another one of the members of the Link to the Past speedrunning community would come aboard, and the project “started to become a more serious thing” according to Karkat.

The Team Fills Out

ChristosOwen, a 20-something Brit, Link to the Past speedrunner, and tea aficionado, was aware of the Super Metroid Randomizer built by Carroll, and that it had become quite popular, so when the ALttP Randomizer was presented to the group he was immediately interested in how it worked. He believes that “the game was almost built for randomization, with the flexibility of the world design, openness of dungeon order, and differing item requirements to reach locations,” and as such, jumped at the chance to be involved in the Randomizer’s development. Reaching out to Carroll, they began to work towards optimizing the logic of the game. ChristosOwen, knowing the game inside and out, was the perfect person to figure out where items could and couldn’t be, where dungeon keys needed to be placed to avoid keylocking, as well as identifying any other possible softlock situations.

He says that the game logic “has been through lots and lots of iterations” and has been a VERY involved process, with Chris spending a considerable amount of hours writing logic that accounts for the various game modes offered in the Randomizer including a mode that requires “No Glitches” to complete, one that allows for “Overworld Glitches” and a “Major Glitches” mode. Each variation “required complete rewrites from the ground up multiple times” by “going through every item location in turn and listing the item requirements and the possible routes to get to each location.” Karkat recalls that for one update “Christos and [fellow developer] Veetorp updated the logic for Palace of Darkness after twenty hours of discussion and working out the logic.”

For example, there are four sets of conditions to reach the Catfish in the Lake of Ill Omen, one of the more complex pieces of logic, as drawn out by ChristosOwen (fig. 3):

fig.3 ChristosOwen’s logic for the Catfish with the four conditions to reach him.

So, if the Catfish is holding a key item that helps you progress, one of these four conditions has to be met to avoid a softlock situation. To break this down in a way that might be easier to grasp, if the second scenario is the one chosen by the Randomizer’s algorithm, it means that in order to get to the Catfish, the player must be able to access the northwest region of the Dark World (which itself has its own logic whereby the player must have a glove upgrade & the hammer, or both glove upgrades, or the ability to fight Agahnim and the hookshot), plus the Moon Pearl, the flippers, and a glove upgrade of some sort. Some combination of these items will be distributed to chests the player can reach before the player gets to the Catfish. He won’t be holding the flippers if you need the flippers to get to him. The logic won’t allow it. Each location gets a similar treatment in a document that runs hundreds of lines. 

Lights, Camera, Rando!

As the relatively small group of speedrunners played around with this new toy, and work on refining it continued, the ALttP Randomizer maintained a relatively low profile. The first appearance of the Randomizer on SpeedRunsLive shows up on May 29, 2016. EvilAsh25, current holder of the Chrono Cross speedrun record (any%, good ending), has dabbled in Link to the Past since 2013, and remembers the early builds as being a bit limited. At the time, “being good at Randomizer was more about knowing where all the chests in the game were, as people were still learning how to play and where to go… it really played like a different game back then.” Once Carroll, Karkat and ChristosOwen began to further randomize elements, EvilAsh25 says it “struck a good balance between exploration and execution, giving players the feeling of playing the game again for the first time,” a sentiment echoed by many in the community. Endless replayability is an elusive golden goose for game designers, and thanks to the work of a few hardworking speedrunners and programmers, it has been found here in the Randomizer.

The ALttP Randomizer went live when version 1.0 was released on Jun 2, 2016 giving people outside of the select group of speedrunners access to the hacked game. In the first month, 64 speedrunners took part in races of the Randomizer on SpeedRunsLive as more kinks were worked out. The first version of the Randomizer was updated to version 3.0 by July 1. As more people started playing, there were more eyes able to spot issues and add their own thoughts on how better to streamline the experience. So many aspects of the game need to be reworked in the code to get the Randomizer optimized like it is, and as you dig down deeper into the ROM, you learn how the game was built.

For instance, in the opening sequence, Link must open a hidden door in the throne room of Hyrule Castle. This door will only open if Link has the lamp, normally the first item he finds on his quest. The code of the game is written in such a way that when that item is not present in Link’s inventory, the switch that allows the door to be opened will not be triggered. In the Randomizer, Link is often not going to have the lamp, so to fix an issue like this, Karkat has to find that specific switch, and rewrite it so that the door can always be opened.

One of the biggest decisions the development team had to make was how to randomize pendants and crystals, the key collectible items in A Link to the Past. There was a lot of talk about putting the pendants and crystals into the general prize pool, where you might open a treasure chest in Kakariko Village and find a crystal, but the team didn’t want the Randomizer to stray too far from the original flow of the gameplay. Instead, the decision was made to randomize which dungeons the pendants and crystals would be found in. ChristosOwen explains the reasoning as giving the player an “overarching, big-picture route for you to solve from the start while you explore the individual regions and find items. It allows you to have big-picture planning (strategy) and small-picture planning (quick decisions, on-the-fly routing, small time saving tactics).” The logic and coding for the randomization of the pendants and crystals was implemented with the version 7.0 update, which was released at the end of 2016. This would be a changing of the guard for the ALttP Randomizer, as Carroll would take a step back and let the team he introduced the game to take the lead.

Randomizer’s All Grown Up…

Leaving his creation in capable hands, Carroll moved on to other projects, but remains a presence in the community, popping in from time to time to see how things are going. Like a father watching their child head off to college, Carroll knew it was time to let the Randomizer become its own thing. He’d done everything he could to help it grow, and now it was on its own, out in the wilds of the speedrunning world.

Jumping in to help the development team, Veetorp, a programmer, knew he wanted to get involved with the Randomizer after being introduced to it around version 5.0. Hearing about new features piqued his interest. “As a programmer, I got the new features working in a branch of the original code, and we were testing that out. Once I was really digging into the code, my programmer nature of figuring out algorithms kicked in, and I started to really try to come up with a faster algorithm that met all of the logical constraints of the system.” Veetorp also introduced the website that would make seed generation and usage for non-Windows users easier. A seed, in this case, essentially works as a patch that goes over the ROM of the game, applying the randomized changes to the original version. The seed patch and the original ROM are joined together and a ‘new’ Randomizer ROM is generated.

With the development team locked in, the process for vetting changes became pretty straightforward. The team looks for ideas that would offer the “most bang for the player’s buck,” Veetorp assuring me that the team “do have a lot of ideas sitting on our radar, and try to entertain them regularly to see if we can get them into the Randomizer” which is promising for the future of this project.

With Veetorp on board, the Randomizer was ready to take on 2017 and build on the success of the past year. One of the first things to come in the new year, was the Spring Randomizer Tournament, and here is where interest in the Randomizer hits fever pitch. On SpeedRunsLive, a total of 163 runners had attempted a race by March 25, which is when the tournament kicked off. EvilAsh25 recalls his first tournament race being promoted to the front page of Twitch with around 3000-plus people watching. The tournament would prove to be the perfect stage to showcase why the Randomizer is popular with runners and viewers alike.

Spring [Randomizer Tournament] is in the Air

The tournament was hosted on Twitch by the SpeedGaming channel, a channel created with the sole purpose of organizing and streaming tournaments. It has expanded to include four channels now, and runs tournaments for Shovel Knight, Mega Man, Super Metroid, and Pokémon to name a few.

The ALttP Randomizer is arguably the channel’s largest draw, with the number of people interested surprising the development team: “our initial estimates of how many people would participate were way below the number that actually entered,” recalls Veetorp. EvilAsh25 feels like the Twitch arena is the perfect venue for the Randomizer, impressed by “how well it lends itself to watching a 1v1 format on stream. The knowledge the audience has that the individual runners don’t, combined with having seeds that troll the runners horribly really adds to a hype viewing experience.” Through group stages, and then a finals bracket, the tournament would go on for three months, drawing in thousands of viewers, and ending with Ben, aka ajneb174, emerging victorious as the first Randomizer champion. He took the title in a thrilling best of five against the logicmaster himself, ChristosOwen.

Ben is usually a pretty chill speedrunner, but when I asked if he keeps it ice cold in tournament races, he says “I’m someone who gets really stressed when doing races, usually my playing is really bad at the start, but then gets better. Even with the number of races I’ve done, I still have a lot of stress before every race.” He’s humble, and thinks there are many runners better than him at the Randomizer, which speaks to one of its strengths. An underdog can get hot and win. Ben didn’t think he could compete against the very best, but somehow he prevailed. To become better at the Randomizer, Ben has this advice: “know the vanilla [normal] game, know how the logic works, always be moving towards something, and of course, you need luck.”

fig. 4 A scene from Game 5 of the Spring Tournament Finals between ChristosOwen & ajneb174.

In the aftermath of the Spring Tournament, interest in the Randomizer has only intensified further, with a total of 3185 races [as of Oct. 12] run on SpeedRunsLive by 736 different runners since that first race 16 months ago. For comparison’s sake, Super Metroid, usually a showpiece race at GDQ events, has been raced 3848 times by 697 runners since 2010. Those numbers for the Randomizer are staggering, but ultimately only reflect the number of people who stream and race the game, the community at large, is bigger than that.

It Takes a Village

The other side of the coin that has made the ALttP Randomizer so popular is the community built around the game. Ben says the ALttP community was already big, but with Randomizer, “a lot of people joined, and it’s just more and more people helping each other.” With so many positive people in the community, “it makes the game more fun to run/race, even if it’s competitive, all of this is mostly for fun, and helping each other is a part of that fun.” EvilAsh25, who does a lot of admin work on the Randomizer Discord, says that there are over 2500 people who log in regularly.

It’s the side that you don’t see while watching a Randomizer stream on Twitch, but it is equally important to the showier, public side of this whole thing. While you might learn about the development team and the work they do, or know about Ben because he won the Spring Tournament, you likely don’t know as much about SakuraTsubasa and her efforts to build a positive community around the Randomizer.

SakuraTsubasa is a Twitch gamer who came across the Randomizer by chance one night, following her usual routine of unwinding in the evenings with a Twitch stream before bed. Cruising through the available Link to the Past streams one night, she came across one that said “Randomizer.” After joining the channel and asking questions in the chat, she became interested in running it herself.

The folks in the chat said they would offer to help her, and on her next stream she ran the Randomizer herself. This was the first time she had ever played Link to the Past in any form. While her first run took over six hours to complete (where around two hours is generally considered a good time), she was hooked, describing the Randomizer as “like playing hide and seek with the items. I had no idea what I was going to get and that was thrilling to me. The feeling of relief once you find that last item and the race to the Triforce is exhilarating.”

Having enjoyed her experience so much, Sakura wanted others to be able to feel that same rush of excitement, and put her efforts into helping new players get a grasp of what the Randomizer is all about. By playing seeds with new players to guide them through the game, or analyzing cases where players find themselves stuck and pointing out where they might have gone wrong, Sakura’s role in the community flies under the radar, but is an essential piece to the Randomizer’s success.

She works closely with the development team to update players, new and old alike, when a new version of the Randomizer is released by creating YouTube tutorial videos explaining changes made to the game. This helps players better understand the Randomizer, and lessens the number of bug reports the developers are faced with, as everyone in the community stays up to date with changes made and are less likely to report changes to logic as a bug.

“There are two main reasons I started making the videos for the logic updates. The first was because I am making guides for players new to the game. As I started making those guides I realized they would quickly become out of date with each logic update. [The videos were] a solution to go along with those guides to keep them up to date. The second reason was because I knew that a video was a lot quicker and easier to watch/listen to then reading a page of text. You could listen to the video in the background while at work or if you are a visual learner, you could see the video and know the exact spot these changes had happened.” –SakuraTsubasa, on why she started making logic update tutorial videos for the community.

Tucked away on Discord lives this hive of activity, where SakuraTsubasa’s guides are shared, where hundreds of people chat about races they have seen, share new strats they want to try, and it’s this sense of community that is the beating heart of the Randomizer.

Participatory Culture: Sharing and Caring

With the two sides of the Randomizer working in concert, game development and community building, you can see that this is a perfect example of what is known as “participatory culture.” It’s a concept written about extensively by professor Henry Jenkins, which he defines as having the following criteria:

  • Having relatively low barriers to artistic expression and civic engagement (the Discord is accessible to all).
  • Known for having strong support for creating and sharing one’s creation with others (respecting the work the development team does, and offering to help where needed).
  • Having some type of informal mentorship whereby what is known by the most experienced is passed along to the novices (SakuraTsubasa’s work).
  • Where members believe that their contributions matter (doing commentary, being an admin, re-streaming, etc are all valued services in the community).
  • And a space where members feel some degree of social connection with one another (found on the Discord where hundreds are active daily).

“Participatory culture” is an interesting concept, as it stands opposed to “consumer culture.” Consumer culture is straightforward capitalism, where a company or organization makes a product that is then bought by individuals (consumers). In a participatory culture, the same individuals normally seen merely as consumers, are part of a community that, more often than not, are producers themselves. Something that they create, usually some kind of media object (like the ALttP Randomizer), is shared in the community and used by others. The developers are some of these consumer/producers, as is SakuraTsubasa for creating the tutorial videos, as are the many people who have made item trackers for the Randomizer, and so are the people who do commentary. The work they put in is done not for financial gain, but they still commit their labor power to it. By producing something that contributes to the group, anyone can be part of this participatory culture.  

It is also Henry Jenkins who talks about what it takes for fandom to be successful, and likely why the Randomizer is such a hit. “Fandom is born out of fascination and some frustration. If you weren’t fascinated you wouldn’t continue to engage as a fan. If you weren’t frustrated, you often wouldn’t continue to rewrite or reinvent.” In reaching out to the community, “fascinated,” or a variant of, is the most commonly used descriptor in response to why the Randomizer caught a player’s eye. Many people, myself included, are in awe of just what this thing is, with little in the way to explain why other than fascination. Frustration might come in to play on the developer’s side, wanting to better optimize the logic of the game, but also from runners themselves who might work on new routes through the game to lower their best time. Because these two powerful forces are at play constantly with the Link to the Past Randomizer, it’s no surprise that the game has become so popular.

To Infinity and Beyond

We now find ourselves in the midst of the Fall Randomizer Tournament, with 250 participants in both the main draw, and the secondary (overflow) draw. There are people filling various roles to help make this tournament a success. Commentators who have never thought to step up to the mic before, Restreamers making use of their strong upload speeds to broadcast the races on SpeedGaming (1, 2, 3, & 4) and RandomizerMania (1, 2, 3, & 4) on Twitch, admins and moderators scheduling races and resolving any issues that arise, and new runners who saw the Randomizer and thought “I’d like to try that.” Some, with little to no previous experience with the game; a testament to the accessibility of the game and inclusiveness of the community.

In the qualifying rounds held before the tournament, runner AmatsuDF admits that he never actually sat down for a full Randomizer run until the qualifier, but knew after seeing ChristosOwen stream it one day, that he wanted to give it a go. Posting a six-hour time in that qualifier, but never giving up, AmatsuDF is now participating in the secondary tournament, and when they can, doing commentary work on other races. The same goes for runner Hazukitty, who had never even played ALttP until hearing about the Randomizer. After a ten-hour qualifying run, Hazu raced a sub-eight-hour run her second time out, keeping Twitch viewers up all night, cheering her on. Many runners give up if their time starts to climb that high, but Hazu said of her experience “it’s a bit awkward to quit when so many people have their eyes on you, I wanted to finish to prove to myself, if nobody else, that I could do it!” This is something SakuraTsubasa hoped would happen with the Fall Tournament, saying “the community is one of the friendliest and most helpful bunch of people ever, and I’m looking forward to all the new players that will be joining the community thanks to the tournament.”

Reflecting on how the Randomizer has come this far, Karkat says “whenever I think about it in the moment, I’m always a bit surprised by how fast the ALttP Randomizer has grown a fairly large community around it.” Veetorp, equally surprised by the response to the Randomizer, is “glad a project I’m working on is getting this much traction, mostly because a game I love and used to play as a child is really getting an amazing second wind.” And David Carroll, the man who started it all, is trying to figure out why the Randomizer has grown so popular in such a short time. “I just happened to hit on a niche that hadn’t been seriously tapped yet.”


The ALttP Randomizer Fall Tournament will be on Twitch from now until well into December. And it has just been announced that the Randomizer will make its first appearance at a main GDQ event, at AGDQ 2018, with a head-to-head race between ChristosOwen and well-known Link to the Past runner Andy.        

About The Author
More Stories by Sab0tender