Extending Geomorphs

I recently had this blog added to the RPG Blog Alliance (there’s even a wee banner in the links section); I won’t insult anyone by describing what it is.

This aggregator has shown me a slew of blogs I wasn’t aware of and I’ve found some articles that greatly interested me.  There are a lot of old school games and gamers out there, many people designing new games, and a fairly significant number of people interested in mapping.

There also appears to be a large overlap between the mapping and old school contingent who like to use and develop geomorphs.  I’m coming to find them interesting myself.  I’m a big fan of semi-random techniques and these are really coming to strike a chord with me.

However, I think I see ways to do them better.

I have seen quite a few ‘random map generators’, but they never seem to build maps that really look natural to me because there is no real sense to them.  They produce rooms and corridors joining them, but it really just amounts to boxes and lines.  This can be adequate for some purposes, but I find them kind of flavorless.

Geomorphs, on the other hand, are small, usually relatively coherent, map fragments that may be combined to form larger maps.  Rather than the randomized “boxes and lines”, there can be clear themes or purpose to each geomorph — a small temple, a small crypt, a cavern, and so on.  The pictures can be a little more detailed and related rooms can be placed nearby.

The emerging standard is a 10×10 block, with connectors (hallways or tunnels) on the third and eighth square of each side (the association with old school play suggests they are 10′ squares, supported by the blocks also being described as 100×100).  They can be rotated in any direction and expected to fit.  There are also 5×10 blocks used for map edges and 5×5 blocks for corners.

I have also seen a few people talk about ‘side view geomorphs’ that can be used to describe vertical arrangements, such as you might see in a larger dungeon (and especially ‘megadungeons’) showing the relationship between various dungeon levels.

Dave’s Mapper is a damn shiny online tool that uses geomorphs provided by a number of different artists to create random maps.  The maps can be tweaked (size of the map, as measured in geomorphs, and individual geomorphs can be rotated, exchanged, and replaced).  You can also select which artists to use; if you particularly like a certain artist’s work you can focus on using those geomorphs (and conversely, if you dislike like a particular artist you can exclude those geomorphs).

All in all, I kind of like the idea.  However, I see a limitation — a reasonable one, all things considered, but a place to perhaps improve things.

Extension: Connector Types

The description I gave of geomorphs also reveals something that may be a limitation in how they are used.  All connectors are traversable passages (hallways or tunnels) that may be arbitrarily connected (with some small number of ‘rooms’ that hook up to the connectors… but these don’t usually look quite right).  I can understand the implementational benefit of this (they are all compatible, which greatly simplifies selection and placement — pick a tile, put it down, done).  I think it could be feasible to do <i>more</i>, though.

Multiple Connector Types

I can see numerous connector types possible.  Instead of just traversable passages, how about

  • Wall (no passage)
  • Hall (worked passage, fairly regular shape)
  • Tunnel (unworked passage, less regular shape, usual in cave tiles)
  • River (linear water feature)
  • Crevasse (big crack in the floor)
  • Lava (linear feature of molten rock)
  • Door (openable blockage)

There are also nonlinear features to consider.  These might run from the center of the side to the identified corner (the northeast ‘room’ runs from the center of the north wall to the northeast corner) or from the identified connector to the nearest corner.

  • Room (worked open area)
  • Cave (unworked open area)
  • Lake (water area)
  • Magma (lava area)

Keep the same connection points (squares 3 and 8 of each side) but allow the actual connector type to vary.  This allows tile designers to have rivers that cross tiles,  tiles that don’t have eight entry/exit points (‘Wall’), and so on.  I think the additional options can provide an increased richness to the maps produced using the geomorphs.

I’d like to find alternate names for the nonlinear features so mnemonic abbreviations can be unique.  I like the idea of classifying tiles by the eight connectors — tile0001-wwrtwrtt.png is closed on the north edge, and a river (presumably) running from the eastnorth corner (as opposed to the northeast corner) to the southwest corner, and tunnels in the eastsouth corner and both of the west connectors.  It’s not critical, but if this information can be conveniently encoded in the name it may make it easier to categorize and place the tiles when needed.

In the description above, the first cardinal direction is the side of the tile the connector is on, the second is the end of that side — eastnorth is the northernmost connector on the east side, while northeast is the easternmost connector on the north side.  Of course, the cardinal orientation is only relevant to how the tile is drawn, since it will be rotated and flipped as needed to place it.

After consideration of hexmorphs (see below), it may be that a particular geomorph could have a linear and a nonlinear component to each connector.  I can easily see a river flowing through a room that spans several tiles.  I think this may be a complexity that isn’t worth getting into at this time, but may be worth consideration later.

Placement Algorithm

As far as I can see, the placement algorithms are very simple (happy consequence of the current design).  Pick a tile, rotate it randomly, stick it in.

The increased number of connector types complicates this, more than a little.  Each type of connector is compatible with itself, but there may be additional, less-favored options.

  • Hall-Tunnel is viable, but not preferred.  Halls should link to halls, tunnels to tunnels… most of the time.  Moving from one type to another might be better done in a tile rather than at the interface between tiles, it makes for more coherent structure.  Weight tunnel-tunnel and hall-hall higher than hall-tunnel, but still allow the latter.
  • Door-room and door-cave might be similar (like door-room, accept door-cave), same with door-hall and door-tunnel.

To fill the board:

  • Draw a tile randomly.  Rotate and flip (eight possible orientations) and place at a defined start point (such as the NW corner).

Until the board is filled:

  • Draw a tile randomly.
  • For each potential place, rotate and flip the tile (eight possible orientations) and determine an acceptability value (a conflict is failure, anything that does not lead to a conflict may be acceptable).  I would weight this by the number of edges explicitly matched, thereby favoring placements that ‘fill holes’ over placements into otherwise empty space — perhaps a coefficient of 1 for matching on one edge, 3 for matching two edges, 6 for matching three edges, and 10 for matching four edges.  Multiply the acceptability by this coefficient, store the result (position, orientation, weight) into a list.  Once all possibilities have been checked, randomly select and position and orientation by weight and place accordingly.  If no acceptable fit is found, either reject the tile and draw again, or reserve the tile and reconsider for later placement until it can be placed.
    • Important: ensure there is an end condition.  If an acceptable tile cannot be found (or cannot be found in five tries, say) the map may be complete with empty locations.  Consider random generation of tiles to fit (using a random map generator as described earlier) or just create ‘caps’ for each of the connectors that would enter the empty locations.
  • As mentioned above, the default mode of Dave’s Mapper is to ‘Close Off Dungeon Edges’ using 5×10 and 5×5 tiles.  These look as though they can usually be placed with only two orientations each (5×5 tiles flipped on the diagonal passing through the inner and outer corners, the 5×10 tiles flipped about the midline parallel to the short edges) for each location they may be placed.  Consider placing edges and corners either before placing all 10×10 tiles or after placing all 10×10 tiles.  Note that edge and corner pieces may offer entrances and exits, which may have similar characteristics to the other connectors (cave entrance, guardpost with doors, river (or pipe), and so on) that need not align with other connectors.

Obviously this will require a larger number of geomorphs in order to provide for all connector relationships, but I think will lead to a greater richness of mapping possibilities.

Extension: Hexmorphs

The mechanisms described above could also be extended for use in overland maps.  I favor the use of hexagonal tiles for this because it can provide greater variation in the form.  Buildings (and dungeons) tend to be oriented at right angles, with exceptions, but overland and wilderness maps appear to work well on hex maps.  This is both because hexcrawls work better mathematically than ‘squarecrawls’, and because things outdoors don’t seem to align as well or as rigidly as indoors.

I imagine the following linear features:

  • Rivers
  • Streams (small rivers)
  • Roads
  • Trails (small roads)

As above, rivers and streams can be compatible, but river-river and stream-stream would be preferred.  You might even have ‘point features’ such as cities (kind of similar to doors in the dungeon example)… but overall it may be simpler to just not put such features on the edge of the tiles.

Nonlinear features get pretty big:

  • Mountains
  • Foothills
  • Hills
  • Plains
  • Desert
  • Forest
  • Wood (light forest)
  • Jungle (wet forest)
  • Swamp
  • Tundra
  • Water (lake or sea)

… and so on.  Again, you might have preferred matches and disallowed matches.  You might rule that mountains can never butt up against swamp, or land to water — the coastline must be ‘in’ a hex rather than at the edge of a hex).  Overall, I suspect it would work best to require matching nonlinear features — mountain must match mountain, jungle must match jungle, and so on.  The hex edges would make for very, very noticeable transactions.

Differences in Implementation

I would expect differences in implementation.  The most obvious is that a hexmorph would have twelve orientations possible (flipped and rotated).

Hmm.  May need to specify that this is a layout tool only, since you can identify ‘mountainous region’ simply enough, but without a moderately sophisticated tool I don’t think I would want to come up with some kind of standard symbology that can be oriented twelve different directions.

Where the nonlinear features for dungeon tiles run from the connector to the nearest corner, it would probably work best for hexmorphs to have the nonlinear feature run from the center of the hex side to the specified corner.  That is, the ‘first half’ of the north edge of this hexmorph is land, the ‘second half’ is water (this tile presumably displays a shoreline).

A hexmorph will likely often have a linear feature and a nonlinear feature for each connector.  A road running parallel to a shoreline, for example, might have on one edge water and land, and on the ‘land half’ have a road.

Extension: Citymorphs

At this point I am not particularly considering how this can be extended to cover the use of geomorphs (or hexmorphs?) for designing cities.  I think the same mechanisms may be useful (linear: road, alley, wall, river, etc.; non-linear: park, market, slum, etc.).

Closing Comments

I’ve never really looked much at geomorphs or hexmorphs before, perhaps because the selection was so small (I’ve got the original TSR geomorph packs, scored them at a used book store and never had the heart to butcher them for use, and I’ve got the Lankhmar citymorphs somewhere), but with the proliferation of them forming online, the standardization of format, and the tools available to make use of them, I think there is greater potential than ever for them.



  1. GreyKnight

    Could you give a sketch of what you mean by the nonlinear features? I’m not entirely clear. To take lava as an example; is it supposed to be a small lava lake contained within the tile and fed by a lava stream coming from the connector? Or is it just one corner of a lava lake that spills over the tile edge?

    The hexmorphs remind me of a hexagonal version of Carcassone I was fiddling with some time back. I might revisit the idea with an eye to terrain generation. There is a hex-tile product by Games Workshop called “Mighty Empires” which might interest you (like most of their stuff it’s wackily expensive so I don’t necessarily advocate purchasing it).

  2. In this post, ‘lava’ is a linear feature, a stream of lava from one tile to another. ‘magma’ is a nonlinear feature, a pool of lava that spills over from one tile to the next.

    On reconsideration the nonlinear features on square tiles should probably work the same as they do on hex tiles, spanning from the center of the side they’re on to the corner rather than from the connector to the corner. I’d overlooked the offset placement model (where each row is half a square to the side of the row below it, as shown in Dave’s Mapper).

    In fact, it might be worth having two pieces of information about each half-side — the nonlinear nature (room, cave, lake, lava, etc) and any linear connector running through it. This allows for things like a stream of lava running through a room at the tile edge, rather than it requiring that it pass through a wall (as the previous description may imply).

    I’ll see if I can do up some examples, maybe at lunch or after work.

  3. Carcassone is one of my influences in considering how this might work. We’ve got a number of fans of it here at work. And home, I’ve got the Big Box… it takes a looong time when you play with all the sane expansions. No catapult or wheel of fortune, but almost all the other expansions have seen play at the same time.

  4. Thanks for the mapper mention and interesting write-up.

    As geomorphs are related to my project, the idea to use geomorphs of this style has been brought up to me on several occasions, with one other online generator (I think at Inkwell Ideas – not certain) shown as an example of the style.

    The main reason I haven’t built the app to handle such tiles is because the mapper was originally built to handle geomorphs that already existed; the morphs came first, not the mapper. Since all of Dyson’s morphs were the same format, there was only need for a simple app to randomize and display tiles with very little in the way of an algorithm needed.

    To re-code the mapper to use the new tile system would be a task, but not out of the realm of possibility. It might be idealistic, but I think cartographers would be happy to jump onto the project if the code base was there first. But as for starting such a re-write – that’s a rant for another time and my own blog.

  5. Hi David, I figured the app was designed as it was for exactly that reason. It’s often advisable to have initial designs fit what you start with, not where you want to go. I’d rather take small steps that actually get me somewhere then plan a big leap.

    … actually, to be honest I like the idea of the big leap, I’ve just learned it doesn’t usually work.

    I’m mildly interested in taking a run at an app such as I’ve been describing… but I have enough projects on the go that I really shouldn’t get too involved in another unless it’s quick, and there’s enough unknowns here for me that it probably wouldn’t be.

    I’ve also considered a higher-resolution model where each square section of the tile gets coded (so 10 of them across each side of a 10×10 tile). Calculate for each of the eight permutations of the tile being placed the quality of the match (probably want to have empty space be ‘neutral’, matches anything). This allows for tiles with connectors ‘anywhere’… but again, you run into big tile availability problems.

    Part of me really wants to work on this. And work on Echelon. And rewrite my campaign setting and scenario design documents to make a cleaner, more cohesive document with examples. And sleep. Sleep really should be higher on my list of things to do, but it’s not as *cool*.

  6. Chakat Firepaw

    A thought on the hexmorphs:

    When it comes to rivers/streams you may need to include a rule that tracks the full length of the river/stream and will define a ‘downstream’. This would be to avoid situations where you have a river flowing into a stream.

    The obvious points to make this determination would be when you first draw a stream-river connection, (either on an edge or within a tile), or a tile with a river mouth.

  7. Chakat, I also realized… the algorithm I described could easily result in a river loop. Water just flows in a circle. Okay for roads, not so okay for rivers. Designating Upstream and Downstream would fix that, too.

  8. Pingback: Sample Geomorphs | Keith Davies — In My Campaign - Keith's thoughts on RPG design and play.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Back to Top