This is an experimental idea I've had for a while. Rather than having a world generator design every screen, have a randomizer shuffle small DMaps that are designed like pieces of a jigsaw puzzle to "build" a random overworld.
So I made a script and a bunch of functions that fill a 16 x 16 screen world with 4 x 4 DMaps. There can be more DMaps to fill with than the 16 needed. In addition, the DMaps could be designed in such a way that every other row or column has an offset, basically allowing 6 "adjacent" DMaps to every DMap instead of 4.
I've actually made 4 variations of the scripts to account for different setups.
This Zip File contains the Example quests and related zScript files each uses.
There are 4 Examples of the random overworld through randomized DMaps.
Example 1 is the most basic, it just fills a 16 x 16 area with 16 DMaps. There are 18 DMaps it can choose from. It allows offsets of rows or columns. It also has a few hardcoded features compared to other examples, to simplify what you would need to change to work with it.
Example 2 has an overworld and an underworld. Both are 16 x 16 and use a different set of 18 DMaps to fill each. It also is a little less hardcoded when it comes to locations of the warps or the array of 18 DMaps it places
Example 3 is based on Example 1, except it places DMaps based on a "difficulty group". You always start in a difficulty 0 DMap, and the difficulty increases the further away you go.
Example 4 is a combination of Examples 2 and 3, having two 16 x 16 areas and a difficulty system.
All current examples assume the 16 x 16 world wraps around on all sides. This simplifies how the DMaps must be designed to support the side warps. In addition, all offsets are exactly 2 screens shifted over, or half the length of a DMap.
It is suggested you look over the quests in zQuest to understand what needs to be set up for the shuffled DMaps. In addition, there are some screens that act as "visual aid" for what the scripts are doing, especially when it comes to difficulty. In these cases, the difficulty is color coded and goes Green, Yellow, Blue, then Red for 0 - 3.
As this concept is still under development, I expect some changes to the script will be made to fix bugs or improve efficiency. In addition, there can be more Examples developed for other scenarios that come up.
But I've been doing randomizers for a while. Why share these scripts first? Because I see a lot of potential use of them from a variety of developers who understand zScript. I personally plan to turn Example 4 into a quest sometime in the near future. Example 1 could work for a more open overworld quest like what Mirage Island or most of my other randomizers were built around. And I could see Example 3 for a Metroidvania style quest. I also see the potential of a collaboration project where multiple users submit DMaps designed to be shuffled this way.