For those scratching their head: Gridmapper is a web app to draw dungeons: https://campaignwiki.org/gridmapper

Text Mapper is a web app to generate maps from text: https://campaignwiki.org/text-mapper/
Very cool! Here's a mini-dungeon.

0101 empty door-e
0201 empty door-e
0301 empty door-s
0102 empty trap door-n
0202 empty stair-small-e door-w
0302 empty door-s
0103 empty door-e door-n
0203 empty door-w secret-e
0303 empty
other Gridmapper& Text Mapper!

license Gridmapper SVG Map Icons. This work is dedicated to the Public Domain .
include http://campaignwiki.org/contrib/gridmapper.txt

include file:///home/alex/src/hex-mapping/contrib/gridmapper.txt

I generated 10 random maps at https://campaignwiki.org/text-mapper/gridmapper/random and got orphaned stairways 30% of the time. Just FYI.
Yeah, think I know what the problem is: I'm looking for a space to put the stairs based on their end point but then I realized that the tile is centred on the start point, and so now it's possible to find a place that's either beyond the edge to the north or south and therefore off the map, or beyond the edge to the east and west and therefore wrapped around, appearing at the opposite end.
I just tested another ten: 90% started with room 1, which is good. I think the spiral staircases was an inspired solution for when there is nowhere to put a downward stair! And the random times the stairway starts somewhere else will certainly keep players on their toes!

Could you add https://campaignwiki.org/text-mapper/gridmapper/redirect%5D%5D" alt="Image/Photo" /> to the devil's cave complex?

Old dungeons often have rooms just labeled "E" for empty. So an easy extension might be to have 0-4 empty rooms.
I just added the 5 room dungeon to the devil trouble table entry. I think what would work is if we used something like this:
  • in the dungeon table we generate various sequences, for example room-room-room-room-temple, or room-trap-room-room-room
  • then we pass this information along to the algorithm, e.g. "room 5 is a temple" or "room 2 is a trap" via the URL, maybe redirect https://campaignwiki.org/text-mapper/gridmapper/redirect?room5=temple which ought to work because we know this from the first step
  • the map that is generated matches the description that is generated
I'm not sure whether it's worth doing this for empty rooms, but we could: if the dungeon rule says the 2nd room is empty, we can pass it via room2=empty to Text Mapper and then I can skip the number and place an E in the room instead. But I don't think it's worth to do this for small five room dungeons. "Let's have something cool in all the rooms" sounds better to me. But if we start generating larger dungeons, we could definitely think about this again.
What if the contents were passed from Hex Describe rather than just a few labels?

Where LF indicates any remaining squares in this row are empty?

Any room specified this way would just be a rectangle with the specified dimensions.

For instance, I have a trap room with a chasm:


A temple:

Or we could use single characters, a la Gridmapper:
b=bed B=bed-rotated
g=chair G=chair-rotated
h=chest H=chest-rotated
j=screen J=screen-rotated
m=table m=table-rotated

The first number would be the row length.
Sounds like what Megadungeon does with Gridmapper; and click one of the preview images. As part of the url it basically sends the keyboard stream required to recreate the dungeon. The format is also used when saving to the wiki. Click some examples to get a feel for it. When I considered it, I had two issues:
  • The format wasn’t easy to generate from Hex Describe: how to rotate maps, how to generate doors in the appropriate places, all of that wasn’t clear to me.
  • I still needed the Text Mapper format because that’s the tool I have to parse maps and generate SVG maps. Otherwise I would have had to write yet another app. 😅
There’s still a way to do this, however: if you want to experiment, feel free to use Gridmapper for now and I can write a translator later.

The part that’s most interesting is that Gridmapper has relative addresses. If you’re interested, there’s more in the scripting section of the manual.
I guess if every geomorph was encoded using relative addresses, we could do it: the dungeon table writes the starting position for every room and then calls the geomorph table, which then prints the instructions for a single room. And we could have shorthand’s for “draw a geomorph and add a statue in the middle” and the like.
OK, here's an experiment with @Robin Green's first two geomorphs. As I said, they can't be rotated, and the geomorphs Robin drew aren't symmetric, i.e. they don' all have openings in the same positions on all four sides. This is why I have to put them into different categories (since using just geomorphs would not allow me to add corridors at a later stage). Anyway, long story short: this is what you get when you click on the generated link:

I just took Robin's first two geomorphs and encoded them in Gridmapper notation, put them in the appropriate geomorph category, and started recreating the first dungeon:
;dungeon map with geomorphs 
1,<a href="[url=https://campaignwiki.org/gridmapper?]https://campaignwiki.org/gridmapper?[/url][gridmapper geomorphs]">see map on Gridmapper</a> 
# There are different kinds of geomorphs: 
#  - dead ends: N E S W 
#  - thoroughfares around corners: NE SE NW SW NS EW 
#  - t-junctions: NES SEW SWN NEW 
#  - the cross: NESW 
# We build maps from these: 
#       SE--W 
#       | 
#   E--NES 
#       | 
# » EW--NW 
# Each geomorph is a little Gridmapper script that uses relative 
# addressing. Geomorphs are 9x9 and we leave a border of 3 around it 
# all. 

It looks tricky to add more geomorphs, but on the other hand one could do it without programming. and you can always just concatenate all the strings, paste that into the Gridmapper text area and click the Import link in order to test it. That's what I did.


What do you think? Is this worth pursuing?

(Also tagging @ktrey to keep us all on the same page.)
Well, it would provide a ton of flexibility in terms of creating rooms that reflected the text, and vice versa. Probably I'd only do it in the final rooms to start, given the amount of work involved. But perhaps it's better not to do it at all, if it raises expectations too much - and certain rooms would have features not supported by the notation (different types of objects of interest).

I do think the idea of a "temple" geomorph won't work, though, as we already have a range of rooms with very different layouts. For instance, here's "chapel":
1,A small cobweb-covered vestry sits forlornly on the far wall of this room.
1,[1d6+1] rows of wooden pews crowd this room, facing an elevated dias.
1,Moth-eaten hassocks sit before long [masonry mat] benches here. They are angled toward an alcove adorned with religious carvings
1,Damaged mosaics depict religious parables along the walls of this room; a mostly burnt pulpit is in the center surrounded by circular benches.
1,Moldy, water-soaked prayer mats line the floor and smell of brine and sewage.

So maybe it's better left as is for this wave of the one-page dungeon generator. Eager to here what @ktrey thinks!
Yikes. Indeed, the text has too much detail and when I start adding detail to the maps on my own, it won't match the text.

I just added columns, for example:

I guess if you never refer to columns in the text, it would sort of work, but if you sometimes do and sometimes don't then the map had better match up – or never show any columns.
Same for statues, of course.
ktrey diaspora
I primarily stuck with textual dressings for flavor, not thinking we'd get to this point this quickly :). I'm not quite sure how we could hinge the generated descriptions off the generated map (or vice versa)...unless we generated the map with the GridMapper shorthand in tables somehow and this was passed to the renderer. We'd need to know about the room before generating descriptions or generate the room based on the tables, which seems a little daunting based on the above convo.

We could always be a little more careful with our descriptions to not include some of the details like this, but to me, the map could really just provide room dimensions and entrances/exits right now, and I'd be happy with everything else being textual at this stage.

I think we'll always have a bit more versatility with textual descriptions (just like with Hex Describe) as these don't require programming in any new illustrations for features etc, but that's just my two cents :)
I agree. Also, I think I want to get back to writing text and put that mapping excursion behind me. Enough of automatically generated maps unless the need arises as we develop the five-room dungeon descriptions somewhere.
I guess that's just me: I have a hard time putting down the keyboard and saying: this is good enough! 😅
ktrey diaspora
Provided the dungeon descriptions stay relatively small and "room/exit agnostic" they should still be relatively useful for a kind of "plug and play" thing. DMs could grab a small map or whip one up on the fly really. I think small "5 area" features like this can really fill out some of the emptier hexes, but I agree that we'd need to get things fleshed out a bit more.

My original thought is just having these called with an "anchor link" within a hex (with a dungeon name or something like "The Crypts Of the Manticore") and the anchor linking to a jump to the bottom (after the hex descriptions), kind of like a footnote....not cluttering things in Hex Describe, but still available if needed.
Hm, interesting thought: to banish all maps to the end of the document. It would be easy to do with a bit of rearranging of the HTML.
I think the maps as is are great and we should let the text do the heavy lifting. Much easier on all of us!

I do like them in place, because my binder typically has one page per hex, in order. Also I think they are visually interesting in the middle.

But my campaign document has an almanac at the end, typically for things that matter across hexes (gods, factions, random tables).