Here's my contribution to Finmer's (as of yet) rather limited collection of modules. It's called "Deep Forest", and it replaces the "deep forest" location with a 10x10 randomly-generated maze! This maze is generated the first time you enter, and then saved; every time you re-enter it will be the same maze. The module generates perfect mazes, which means that every "cell" has exactly one path to it.
With this change comes a minor reorganization of basically everything happening inside the forest, and this also means that the module is almost guaranteed to be incompatible with any other modules that touch the forest. The standard encounter area (i.e. Chip) can now be found in the bottom-right corner of the maze. There were also changes to the ring part of the "Finding Rux" quest, which I think work really well with the maze itself. (I haven't tested it, but there's a pretty good chance that Arlo -- from the Commission02 module -- can be found in the same place as Chip, assuming it uses the same "encounter" API.)
Deep Forest also comes with an API -- see "DeepForest_MazeAPI.lua" in the module. It can be used to add custom "exits," increase the size of the maze, and one or two other things. Most of it has documentation. Deep Forest's source can be found here, along with information on the exact libraries in use (since plagiarising random Lua libraries seems like a Bad Idea -- I'm pretty sure the MIT License requires attribution anyway, so behold: attribution). Unfortunately, furballs don't have metadata fields for module credits or the version, but that doesn't mean I can't put that information in there anyway.
If anyone wants to examine the contents of the module, I would recommend downloading a copy of the repository, since it has comments and stuff on the json files -- things that were erased when the module underwent the lossy transformation into furball form.
Lastly, I have tested everything in the module at least once, but there could still be bugs. And while the module should be compatible with existing saves, I would still create a new one first. (Besides, then you can experience the ring shenanigans.)
That's about all the important stuff about the module, so now I'm going to talk a little about why I made this module, and then some challenges I faced making it, since I think at the very least the latter would be interesting to read about.
To begin with, I've been wanting to test the limits of Finmer's engine, especially when it comes to precedurally-generated stuff, because I think it'd be fun -- both for me and hopefully for anyone who plays through the modules that come out of it -- and because no one else has done it yet (I'm not sure anyone else will). It's also a great way to find out what parts of the engine will immediately cause problems. I originally had a different module I was working on, but I got stuck on a combinatorial explosion of descriptions and decided to do something a little simpler first, and that's where this module came in.
Now, the first challenge I faced was actually saving the maze. If you've perused Finmer's API documentation (or if perhaps, you've written it) you may know that there's only three kinds of things you can shove in the save data: booleans, numbers, and strings. Obviously, an entire maze is not really any of those; the maze is a table (of tables). You can't store a table in the save data, or can you? I proceeded to bundle an entire JSON parser in the module, all so I could turn the maze into a string and save that. It was pretty effective actually.
Another challenge was getting any of the scene patches to work, and honestly, Finmer's scene patching capabilities are pretty underwhelming. There ended up being a lot of duplicating sometimes-large portions of scene code because I couldn't say, replace a node, or a node's script(s), or a compass's destination, etc. It also wasn't immediately obvious to me that you couldn't have scene-level scripts in a patch. I probably struggled the most with the scenes actually -- half the initial problems I faced getting the module to load were the scenes not being up to Finmer's standards. Here's a funny example: if you have a choice node in the root node, you'll get the following load error: "Node 'Root' contains a link to '' but the target node is not a state. (Choices can only contain States or links to States)". That one confused me until I realized I needed to wrap the choice in a state. (Finmer's engine treats root nodes like choices internally, which is why this happens. It's just an edge-case I'm guessing no one else has encountered yet.)
The last major challenge I encountered after I remembered the ring shenanigans exist and decided I wanted to reimplement it right, by using an entire A* path-finder to guide the player to Rux's place. I spent so long getting that stuff working, but I think the end result is worth the effort.
Finally, I think I'll end this post with the following cursed information: I didn't use the editor for any of this -- not even for packaging the module. If anything, it was an enlightening experience. I really wouldn't recommend forgoing the editor to anyone else, as doing away with it requires a special kind of problem-solving ability, Lua programming knowledge, and of course, a program to actually create the furball. (I should also mention that I'm avoiding the editor mostly because I can. And since ≥60% of this module is hand-written or otherwise copied Lua code, I may as well hand-write the jsons too. Plus, it lets me sprinkle comments into the json files!)