Hello and welcome to another installment of Randomizer Thoughts! Where we unravel the mysteries and complexities of Zelda randomizers and discuss what’s new in the world of randomizers. This week, we’re talking about the biggest tool in any competitive Randomizer runners toolkit, Trackers! We also have the final four competitors for the Link to the Past Randomizer Invitational for you and a new race seed to try out!
If you’re new to Randomizer Thoughts, check out our FAQ for a little bit of a lesson on what exactly Randomizers are as well as our previous installment where we discussed programming flags and how to use them to your advantage. Without further ado though, let’s get into this week’s topic.
So, before we really get into the nitty gritty of this topic, what are trackers exactly? Essentially, a tracker is a visual guide to help you remember what items you’ve gotten ahold of, what chests you’ve checked already, and what chests you currently have the ability to check. They can be invaluable towards remembering the fact that in your rush to snag a bunch chests in Death Mountain, you forgot to actually look in the spinning Goron pot while you were there, or perhaps realizing that now that you have the hookshot, you can get to the man on the roof in Kakariko.
There are a number of different trackers available out there, many of which take different kinds of approaches to doing what they need to. Some are hosted online while some are downloadable executables and mods. Some are actively updating maps of the environment with complex coding others are literally just Google spreadsheets. Some auto-update for you with game synchronization while some are just designed to help you make sense of shuffled entrances. If there’s a need you have for your playstyle, there’s almost certainly a tracker for you.
The most notable tracker is of course, EmoTracker. Not only is it among one of the most supported trackers out there, it also has support for an incredible amount of randomizers, including just about every major Zelda title. It even includes an overlay you can use on your Twitch stream if you want your viewers to follow along with you. Beyond it’s scope, the biggest advantage EmoTracker has is the massive degree of detail in many of it’s overlays. It is among the trackers that will give you colored markers to see which places on your map are inaccessible, partially accessible, and completely open, on top of a guided list of every chest in the game.
One thing that must be discussed when it comes to trackers though is auto-tracking. For the casual player, auto-tracking is a fantastic way to save yourself some time and make sure you never forget to mark down a certain chest. However, after a lengthy degree of discourse and discussion, it has been decided that in almost all major competitive randomizer scenes, auto-tracking is strictly banned. Trackers are perfectly allowable, but they must be updated manually. Part of this goes into the fact auto-trackers are not inherently a part of the game normally, and that any additional tools used should come with some degree of downside for using them. So make sure to turn that auto-tracker off if you ever get into the big leagues.
Next up, we have our Randomizer Spotlight for the week! Each installment, we’ll be covering various individuals in the randomizer in the community as well as highlighting their developers! As often as I can, I’ll be trying to reach out to them to get their direct input on the process and development of the randomizer, but regardless, we hope we can bring attention to a lot of unique randomizers and enlighten people on the complicated and devoted process that many of these developers go through to make these work.
This week, I reached out to AECX, the lead developer of the Twilight Princess Randomizer, and one of the only Zelda Randomizers out there that doesn’t use a Rom Patcher in order to create its seeds. The Randomizer is incredibly unique for this, and offered a lot of interesting challenges to face which AECX was able to elaborate on. A warning in advance, a couple questions in this interview get a bit more technical than my usual, so if you find yourself a bit lost, don’t worry, you probably aren’t the only one. Most of the questions are fairly straightforward.
Let’s Start With a Brief Introduction
“I’m AECX (ay-ex), a 21 y.o. CS student and lead developer of the Twilight Princess Randomizer and passionate producer of various other tools and mods for this and other games.”
What exactly makes this randomizer unique? What prompted the decision to develop it that way?
“I am assuming this is about our rather unconventional REL approach. Other randomizers typically use ROM patchers that require the user to copy the entire dump of their game for each playthrough, now with randos like OOTR or MMR this isn’t a big deal since the ROMs are comparatively small but [Twilight Princess for Gamecube] is about 1.3 GB which often cannot be copied quickly. However even if you don’t mind the copying there’s another reason we opted for this solution: Compatibility.
TPR is supported by every device that is capable of accurately running TP-GC, assuming you have access to the [memory card data]. In fact we support original Gamecube hardware, Wii hardware, Wii Nintendont, Wii U Nintendont and Dolphin. People have the choice to play with their actual disc or a ROM. The biggest “downside” I’ve noticed so far is the lack of custom models like in TWWR [Wind Waker Randomizer], since we don’t modify the ROM at all this is nearly impossible to implement (for us). I personally don’t think that custom models fall under the description of a “randomizer” and thus never really cared about it, after all I wanted to create a randomizer for my favorite game. However I know people care about it and because of our approach we can leave this an option to those who really care; if someone were to create a ROM patcher that replaces and/or modifies models and textures without touching any of the code it would very likely be compatible with TPR!”
Can you explain a bit more about the REL Save for those less familiar with modding?
“In order to run rando off your console we have to get it there somehow, this is done by covering the executable code up as a save-file. Imagine renaming a file from
image.pngto hide the fact its a program, this is (approximately) what we do with the randomizer. One thing that’s confusing to a lot of people is the term “save-file”, a Game (i.e. TP) can have multiple save-files, imagine the game as a directory and the save-files its content. For TP there’s only one vanilla save-file which holds information about the 3 Quest Logs. In the rando [programming], we place the randomizer executable in a seperate save-file which then can be loaded through one of these methods: A) Cheat Code The cheat code looks for our custom save-file (with rando in it) and loads it into memory interpreted as a program (REL) B) Hacked Quest Log By abusing a bug in the strcpy standard function we can actually run code off of starting a Quest Log, this allows us to basically place the cheat code inside a Quest Log and upon selecting it execute whats described in a. This does work on vanilla hardware as long as you have a way to copy two files (the hacked save-file and the rando save-file) onto your memory card.”
While that may sound a bit complicated to install, this method actually makes for an incredibly easy use most of the time as essentially all that the player needs to do in order to install the randomizer is to get the rando executable onto their memory card which is as easy as a couple clicks on Dolphin. As stated by AECX, this also means the randomizer can be run on original hardware with relative ease compared to N64 Randomizers. The Twilight Princess Randomizer website runs you through the process of doing so quite well.
What prompted you to set your sights on Twilight Princess for the purposes of randomizing? Was it because no one had done it, or was there a different reason?
“Twilight Princess has always been my favorite game, I started playing in 2007 and did some private fun speedruns of it to test myself without knowing any of the fancy speedrun tricks. When I found out about speedrunning as a competitive scene it didn’t take me long to get involved with the community and develop the Twilight Editor, a tool that allows you to modify your save data. This was basically how I learned about the technical side of the game with a lot of help and resources from Dragonbane.
The randomizer was initiated by our community member and “HD Guy” Jacquaid, who didn’t know how to code or implement the ideas he envisioned. Luckily another speedrunning community for the game Paper Mario: The Thousand Year Door had just created a method of loading custom REL files for GameCube games, allowing for feature rich modifications. This patch/hack was originally created by the very skilled programmer “PistonMiner” and was ported over to TP by “Zephiles” who is now admin of TPR and helping in the background with QC and coding. This enabled me to work with Zeph on the first version(s) of the randomizer using the data and logic rules Jacquaid provided. I’m intentionally leaving out details because the sheer amount of work involved is nearly impossible to summarize, all I can say is that all of the mentioned players and devs were key to making this possible and there’s even more people who helped at various points with testing, coding and supporting this project!”
What have been the unique challenges of working on the Gamecube hardware in terms of randomization?
“The biggest “issue” with GC development is RAM limitations, we have to be careful with data management and think of efficient ways to implement our code. From this perspective I’d imagine N64 and (S)NES development even harder. Since Twilight Princess is a pretty demanding game there’s certain areas and scenarios in which the memory is nearly maxed out, the worst case scenario is [Iza’s Rapid Ride] with approx. 1 MB of free memory. We try to keep the max. allocated memory size of rando below 1/2 of said 1 MB to ensure the game has still memory left to work with.”
In the Randomizer, there are a couple places where chests appear instead of raw items like scents and the fishing rod. Is that something you guys had to implement or was that built into the code of the game already?
“We had to implement it ourselves and luckily for this interview it was me who did most of the research on this: We knew that the game reads (most of the) actors from the dzx, this is essentially a file with defining information on the current room and/or stage. So my first first thought was to somehow manipulate the read data whenever the game tries to fetch a new room, later I realised that it would be sufficient to append or replace one of the actors even after the game has read the data from the disc/ROM. I opted to go with the latter because it was quicker and easier to implement at the moment, when the game is in the loading screen it will at some point trigger functions that place all the actors listed at a given location in memory. For rando we just copy this list of actors to a new location and append additional custom chests; each with their own xyz coordinate, save-flag and item id. The save-flag was actually the most time consuming thing to reverse engineer. Then we change the location these functions will look for actors to place to our custom location and let the game do the rest”
Is there a reason for what kinds of chests that appear?
“Wolf Link can’t open big chests without the Twilight Crystal so it plays into logic and sometimes terrain forces a certain type of chest because the game is very picky about links position (mainly height) relative to the chest in order to show the “open” prompt”
Anything else you’d like to add for those trying to understand randomizers?
“Generally speaking it is always fun to try randomizers, they bring new life to old games that you may remember from your childhood. It’s easy to beat a game over and over when you know exactly what to do, I’ve done it with TP for years and occasionally challenge myself to speedrun it. With randomizers you get to re-experience your favourite game in new and fun ways over and over whilst challenging yourself! Obviously it is much easier to try randomizers for games that you already know but there’s also beginner friendly settings and/or seeds for most of the games.”
As a Computer Science graduate myself, this interview was an incredible treat to get a lot of insight into how more advanced games like Twilight Princess tick and what goes into the technical side of randomizers. Twilight Princess has quickly become one of my favorite Zelda games to play randomized and the work AECX and his team have put in is phenomenal. Currently, the team is restructuring for the 1.0 update for the randomizer which will massively enhance the logic and offer even more stable and easy-to-run seeds.
You can follow AECX on Twitter right here and the Twilight Princess Randomizer Twitter here. You can find instructions on how to download and install the Twilight Princess Randomizer on it’s website right here! Be sure to check out the Discord for the Randomizer as well if you find yourself stuck at all. As well, AECX welcomes all questions to his Discord and Twitter.
Next up, we have some news from the world of Randomizer Leagues, a community of folks who specialize in streamed one on one matches through the routed/race format of randomizers.
More teams were eliminated from the A Link to the Past Randomizer Invitational this week! The Light Conference saw the elimination of Error 216 and Last Locationers despite their early advantages in the bracket! This leaves Triple Dino Disaster and The 2019 Titan’s Mitts of 2019 to face off for the conference champion. Over in the Dark Conference, the opposite occurred fittingly enough. Despite winning over their first opponents, WJPDTB and Team Kappa were eliminated by the division champs Shaktool’s Digging Game and Phendrana Drifters who will now face off for the champs of the Dark World. As always, tune into SpeedGaming and ALTTPR League‘s Twitch accounts to see the teams duke it out for champion!
As well, this is the final reminder of the open qualifiers for Season 4 of the Ocarina of Time Randomizer league. The final run will occur on January 20th, so by next time, slots will be done. Make sure the get into their Discord now if you want to test your mettle!
Our last news on competitions is that the Majora’s Mask Randomizer League has officially formed! You can find more details about the upcoming schedules as well as participate in their asynchronized races (Races kind of like ours where players aren’t racing in real time.) over on their Discord! More news to come!
Zelda Dungeon Seed #004 (A Bit of a Mess)
Finally, we have our bi-weekly official Zelda Dungeon Randomizer seed! Essentially, using the seed provided here, you can receive the same exact randomization as anyone else who uses the seed. This allows for both potential discussion of the contents of the seed among others and an opportunity for the particular run to be quality checked beforehand to ensure it’s fun and engaging and meets certain themes. I alternate between Blind and Race seeds, so there will be one of each, each month! Race seeds will also come with a Zelda Dungeon time (set by yours truly) to try and beat.
This month features LagoLunatic’s Wind Waker Randomizer! This time it is the race seed! Like before, it will set you in a random spot in the middle of the Great Sea and task you with reaching Ganondorf starting off with only a sail and the Wind Waker. I definitely wouldn’t say this one is as hard as last installment’s blind seed, but it’ll definitely test your mettle in your ability to route. There are a lot of places to cut corners.
In order to play the seed, you’ll need to go to this link right here and download the rom patcher executable. From there, submit your base rom to the patcher and then you’ll want to put the following into the permalink at the bottom of the screen:
Note, that it will need to be English copy of the original Gamecube Wind Waker in order to work. If you did it correctly, the Seed box at the top should read ‘FoolishWildAryll’. From there, modify the cosmetic settings if you so desire, patch the rom, and stick it into your preferred method of play and have fun! The Zelda Dungeon Time to complete this seed is 3:28:17. If you manage to beat it, send a screenshot of your time and we’ll feature in next month’s Randomizer Thoughts!
A couple hints for your run here!
- Pay very close attention to what the items are in the spoiler log! Some are listed as necessary, but actually aren’t.
- You can certainly use the spoiler log’s recommended route, but you’ll be backtracking quite a bit
- You’ll be taking out Big Octos with bombs and arrows in this run, so have a plan to keep a good stock.
- Remember that you might need heart containers! There aren’t too many on the main route.
- Once again, dungeon entrances are shuffled, so keep that in mind as you plan.
- The Goddess Pearls are required to unlock The Tower of the Gods, but they do not need to be placed. The Tower will just appear when you get your third pearl.
- There are no rupees necessary, but remember that the Bait Bag, Delivery Bag, and Spoil Bag are necessary to use any of those kinds of items!
That’s all for now, but check in next time where we’ll be talking about tips and tricks towards becoming a mad randomizer speedrunner!
Emi Curtis is a junior editor with Zelda Dungeon. They are a freelance artist and programmer with maybe a bit of an addiction to video games. They can frequently be found playing Randomizer runs of Twilight Princess and Wind Waker, their two favorite Zelda games. Currently, they are in the midst of writing a Breath of the Wild tabletop rulebook and replaying Stardew Valley and EarthBound. They can be found on Twitter and Twitch as their VTuber alter-ego Bianca Duba, playing classic games good, bad, and weird alike.