About

A randomizer made by Saver.

What versions does this work on?

This randomizer has mainly been tested using v1.2, but most if not all features should work in v1.0 as well.

Wasn't Spiraster working on a randomizer for LADX?

He is! And he has done an amazing job. So much so that he has done things that I've been dreaming to figure out. He started with v1.0 and I started with v1.2, and he asked for us to collaborate but I've been too much of a nervous wreck to actually move anything forward between us (that and I was still learning how the ROM actually worked). It was almost like a personal learning challenge for me. I've been so focused on the sanity check portion of things that I felt that I would not have been able to contribute much until I felt that piece of my code actually worked. Now that it is working for the most part, I think I could actually have a coherent conversation to see where we can move our code forward.

How did this project start?

In 2016, PresJPolk hosted a Red Candle Classic Bounty Race where the goal was to learn a specific category from Z2, Z3, Z4, and Z1 and have a race to win cash prizes. I generally like weird and challenging tasks like this so I decided to enter, since I have some Z1 experience from FCoughlin's Z1 randomizer, and I've done some Any% runs in the past. I started with a Link to the Past since other streamers like EunosXX were practicing it weekly, so it was a good place to get lots of notes.

Eventually, once I was satisfied with running that route, I moved on to Link's Awakening (GB), Any% No Wrong Warp, No OoB (This was before the new category change). Since no one was practicing the category, I had to look at old record videos posted on speedrun.com and take notes from there. After doing around three runs, I looked at the leaderboard and noticed that the world record for the category could be improved by around two minutes, given only half successful instrument cutscene skips (ICS)! From there, I kept playing until I got the world record, which was taken away from time to time by TGH and zmaster91.

The mechanics just clicked for me and I really enjoyed playing all the runs (outside of failing a run to a failed Harp ICS). I even came up with an alternative route that saved 16 or so seconds after diving into maps and trying to figure out a better path. I enjoyed the game so much that I went on to make a video tutorial to help others learn the category, step by step, explaining every little thing in full detail. It was good, except I was sick during the recording, so my voice sounded pathetic, and my microphone was not that great either.

Afterwards, I thought it would be helpful if I made a little interactive web app to explain each and every little trick in Link's Awakening. I went around the game, doing multiple recordings of each individual tricks, and making a little article for it, explaining what is happening, why is it good, what are the risks, which versions it can and cannot be performed in, etc etc in full detail. I also needed some images so I could quickly look at something and know what the section was about, so I went around the game and took screenshots of many individual tricks.

Then I got to the point where I wanted to add more general things, like where heart containers and seashells were on an interactive overworld web app, along with the specific tricks in those individual screens. So I took screenshots of all 12 hearts containers, put it in a JSON list, and needed to number and describe their location in a quick and easy readable format. Once I numbered and gave some detailed fields for them, for some reason I wanted to add the memory addresses of them to be completely thorough. I think this is when I checked online to see if there's any programs that could help me, and I stumbled upon LALE (for those who don't know, is an AWESOME TOOL for Link's Awakening!). I found the memory address and put it in my list...and then decided to look at the hex code myself for hahas.

From there, I got bored one day and wanted to look at the rest of the hex and see its jumbled mess. Shortly after, I began to see some odd patterns of repeating code. I changed their values and saw what it changed in the game. Days later, I decided to take the whole ROM file and put it into excel so I could highlight certain sections of code with color, and place some side notes next to them for my interactive web app. This went on...for maybe four weeks, and I noticed I dug into something I probably didn't mean to. I basically dug myself so much in the code, highlighting patterns and makes notes everywhere, that I knew how to change chest data rather simply. So I decided to see if I could make a quick and dirty randomizer with this knowledge...little did I know where that would lead.

One thing lead to another, but the main problem was "Yeah, I could change all these things in the game, but how do I know I can complete it?" That's when I went into a nine month project of creating a visualizer that could tell me if the game was completable or not, starting with the original ROM. I work 8-10 hours a day, so I didn't have long stretches of time to focus on this project, but when I had spare time, you bet I went straight into trying to tackle this beast. Personally, I need to see things visually to understand them, and creating a program in the same language as the one I use at work just made sense to me. It helped me both professionally, and with my own boredom. It took so many months to finally make the program say "Yes, this ROM is completable." From there, add a little feature, and see the visualizer blow up. Fix the visualizer in the next two weeks, and hurray! Dig into the hex code and find another pattern. Corrupt it, debug it, make note of it, and implement it. And this cycle kept going on and on...

And that's how the project started...and continued.