What would be really cool would be to figure out how to construct our own dungeons in the game, but I'm not sure I care to figure that out.
As I understand, at the most basic level, construction of a new dungeon consists in creating a .map file and adding a link to it in maplist.tsv? Then, map layout specification requires to fill the coordinate grind with reserved symbols. Some of these symbols are specified in map.tjs, while others like ⑴ or ❶ probably are in some other file I haven't found.
The map renderer, so to call it, processes cells in the coordinate grid differently based on their location, whether a cell belongs to a numbered column/row or not (if I got it right). Those that do apparently correspond to actual tiles in the dungeon (onto which the characters can move), while adjacent cells in the map layout specify boundaries between actual tiles. So, a treasure chest won't show in-game if placed in a non-numbered cell, while walls can be placed in a non-numbered row or column (depending on the wall orientation, vertical or horizontal). Since an accidental removal of a wrong cell risks inverting the status of all further cells in the row, something like Excel might be convenient for filling the grid and then copying it into the map file. On that note, to facilitate the layout of convoluted shapes (such as elongated hallways), a larger rectangle can be created first and then chopped down to the intended shape.
Filling the coordinated grid concerns the basic placement of stuff in the dungeon. As for the scripts, they seem to be mainly invoked either by macros (those special, uh, functions that start with @ and are described in xmacro.ks, for example) or built-in functions for classes and their objects (inside master.tjs, chara.tjs, and so on). Simple code strings that do not warrant a separate macro can be indicated directly in .map files by using @eval exp = ''. Not sure if it supports one string at most or can contain a block with several variables and functions.
One difficulty with scripts seems to concern the order in which functions should be called to produce a desired result (and, closely connected to it, the area of variables effect). For example, createGropingCutin() apparently contains all image-visualizing functions needed to display an animation of a girl getting a tentacle caress, but it features variables that are not sent to the function as a direct input (probably should be specified by another function triggering before this). I sort of tried substituting these variables with specific values, but game.currTarget.createGropingCutin("blue") in a .map file still didn't display any animation

(despite currTarget being set and displayed correctly in the next eval). Perhaps it needed to be called in some form of a battle environment, since the code for 淫魔の触手 (tentacle trap in a chest specifically) is stored in cmddata.tjs along with the usual in-battle tentacle grope (no idea how it works, since it has only getTouchableCrotchsImage() for the grope availability and not createGropingCutin(), yet it works, I must be overlooking some crucial file). At least @eval exp='game.curTarget.removeEquipmentsByForce(["hip"])' works much smoother

.
That stuff I typed might be obvious to everyone else who looked into the files, lol. But since there haven't been other comments about custom dungeons, why not to type it. The worse problem is that I might have gotten something in the description quite wrong.