No real blog post for the month, but I did want to plug this informative panel from AGDQ 2019 about building a randomizer. It includes a very good breakdown of the different types of algorithms being used across various randomizers and some of the theory and challenges involved in creating a randomizer. As a result, I wanted to do a brief reflection on the current state of Mini-Rando with respect to the ideas presented in this video.
A Reflection on Mini-Rando
At this point in time, I’ve already decided on how items and item locations are represented in Mini-Rando, as well as what algorithm will be used to fill the item locations. However, this panel did give me a better idea of what some alternative options might have looked like. Previously on this blog, I posted a randomizer algorithm that I wrote for Mini-Rando, as well as the world representation that I am using, which are identified in this presentation as an assumed filler algorithm with a location list representation of the world. The alternative world representation that the panel mentions is a world graph. Interestingly, it is mentioned that the world graph is a more robust solution for modifying logic constraints, which I must admit, I did not take into account when representing the world in Mini-Rando. However, it does have the trade-off of being a bit slower, so it’s not a strictly superior solution. Since I don’t intend for Mini-Rando to be a particularly large game, I doubt I will switch to the world graph representation, but it is something I will definitely consider if I ever decide to expand on Mini-Rando and make a larger game. For the filler algorithm, the presenters listed three different solutions: a random fill, a forward fill, and an assumed fill. I have always considered the assumed filler to be the superior option of the three, but a good case was made for the random filler. Based on the mathematical notion of “memorylessness”, a random filler can be superior in a competitive setting due to its lack of selection bias. Now, of course, this generate and test algorithm is always going to take infinite time in a worst case scenario, but in a sufficiently restricted setting, realistically speaking, this will never happen. It has been reported that some randomizers that use this algorithm can take from several minutes to over an hour to generate a seed, which seems a bit absurd, but usually those are cases where it is more probable not to find a solution than it is to find one. Ultimately, however, I am still not convinced that the trade-offs for using random fill are worthwhile, since in most randomizers, the selection bias is not that noticeable when playing the game. The consistent seed generation time can also be more useful when generating a large number of seeds for seed analysis. In a highly constrained game, which Mini-Rando could easily become depending on how I choose to design it, random fill could become incredibly slow, so I feel that it would actually be less flexible to use random fill.
Additional thoughts
During the panel, TestRunner (the ZOOTR developer) mentioned a scenario in Spirit Temple where the assumed filler can fail and be forced to retry. I thought that this was an interesting case, since it may be characteristic of a deficiency in the generality of the assumed fill algorithm. It may just be the case that a new algorithm will be developed that can also handle these kinds of cases without any reliance on special logic. I also found the Q&A session to be interesting, since there was a question about cheating in randomizers. I was surprised to hear that some anti-cheat measures have already been added to ALTTP’s randomizer for tournament seeds. Another surprise for me was the mention of a PRNG bug causing ALTTP randomizer seeds generated in quick succession to place multiple items in the same locations across seeds. It is good to hear that they simply fixed this by switching to a cryptographically secure PRNG, but it is something that I will try to keep in mind as I continue to work on Mini-Rando. Overall, I am glad to see this type of content popping up and I hope to see more of it in the future.