... now with 35% more arrogance!

Showing posts with label nonlinear. Show all posts
Showing posts with label nonlinear. Show all posts

Monday, April 24, 2017

Non-Linear Dungeon-Making: Variant

I wanted to offer an alternative method for setting up tunnels in non-linear dungeons. Consider the illustration on the left, which is similar to the illustration in SubMethod II for the pre-connected method, and which may be used as a substitute if you don't want to use the "clock" method. It's basically an expansion of the d8 variant described in the other post. For this variant, you would check where a door leads by rolling a d10.

The rooms numbered 1 through 8 represent directions. Room 9 is the starting point, with one "sample" door in each of the four directions.

If, for example, you were checking where a door in the north wall of a room leads, you would roll a d10. Rolling a 1 means that the door leads due north, to Room 1 in the illustration, or in that general direction. You would extend the white corridor stub to the north so that it would connect Room 9 and Room 1. If, instead, you roll a 5, that would indicate that the north door leads south, which would mean the corridor would go around Room 9, and has two possible routes: the red path to the left or the blue path to the right. Flip a coin, or roll a d6: tails or odd numbers means use the left-hand path, heads or even numbers means use the right hand path.

If you would like more variety, you can use the coin toss or even/odd roll every time you have a choice between a red path and a blue path, so that a corridor could take either the shortest route or the longest route to reach its destination. In cases where there are three choices (red, white and blue,) any result of 5+ on 1d6 means use the white path, or go straight. So, the route from the north door in Room 9 to Room 1 could be short and straight, or make three left turns or three right turns and spiral around Room 9 on its way to Room 1.

On a roll of 9, the corridor leads back to the starting room. Roll a d6 for the location of the second door:

  1. North Wall
  2. East Wall
  3. South Wall
  4. West Wall
  5. Ladder Up/Down, center of room
  6. Stairs Up/Down, center of room

Connect the first and second door, making sure to include a ladder or staircase in the opposite direction if the result was 5+.

On a result of 0 for the d10 roll, the door goes nowhere: it opens on a blank wall or a short, dead-end tunnel. You can roll a d6 for tunnel length (in squares,) treating a 6 as a length of 0, and rolling another d6 to have the tunnel turn left or right after 2 squares.

All of this assumes that you know which walls in your starting room has exits, possibly because you've already rolled some kind of door check (for example, rolling four d8s and reading the result off the d6 table above, with 7+ meaning no door.) But an alternative approach would be to roll four d10s all at once and reading the result as if you were using a drop-dice table, with the positions of the dice indicating the approximate position of the door, and the result indicating where the door leads. Or make the number of d10s rolled variable by rolling 2d3 first for the number of dice to roll.

Once you have your network of corridors leading out of your starting room, you can use the junction table from either SubMethod II or the pre-loaded leximorph method, along with some method of checking every 60 feet of corridor for additional exits, to fill in extra details.

Thursday, April 20, 2017

Pre-Connecting Random Non-Linear Dungeons, SubMethod II

Next up on our look at modifying random dungeon generators to make them more non-linear, I wanted to look at a different approach to rolling for a corridor's destination. SubMethod I relies on room numbers as references pointing to physical locations. This works great if you want to use room numbers as your way of keying rooms, but not so great if you prefer letters or multicharacter labels. It doesn't allow for nested structure labeling (room 1 as a main room and 1A/1B as subrooms.) And it doesn't work well at all if you want to use numbers for any point of interest, like a trapped intersection, not just literal rooms.

The solution is to use some kind of relative numbering system, something better than "roll dice and add a modifier to get the actual room number". One answer is to number the relative positions around the current room, for example using 12-hour clock positions, with 12 o'clock as the area due north of the current room, 3 o'clock as due east, 6 o'clock as due south, and 9 o'clock as due west, so that you can roll a d12 to select the room that is in that relative position as the destination of a corridor. In the illustration to the left, the main room in the center has a door in the north wall. We would roll a d12 for the destination of that door; a result of 12 would mean that the corridor heads straight north to Room 12, while a 7 would mean that the corridor turns west for about 40 feet, then south until it connects with Room 7.

(Incidentally, I've been using Alex Schroeder's Gridmapper for these quick demonstration pics. I only recently found out about it, but I've been out of the loop for a while, so probably everyone already knows about it. I work on the pic in another tab as I'm writing the blogpost, then use a Chrome extension called Nimbus Screenshot to quickly save the pic and insert it into my post.)

An alternative that might be easier for some people would be to mentally overlay a tic-tac-toe board over the map of the area immediately around the starting room, with the center square as the current room, and number the other squares clockwise from 1 to 8, starting at the top. Use a d8 with this method to indicate the destination square.

In either case, the corridor heads towards the indicated destination. If the area hasn't been mapped yet, you can roll to see what is in the area using a d10:

  • On a 0, the passage dead ends.
  • On any result up to 6, there's a junction. Roll again twice for destination with either the d12 or d8 (whichever method used above,) with doubles indicating that the junction is a turn rather than an intersection.
  • On any result over 6, there's a room. Roll on any table you prefer to determine room size, shape and description.

You can change the target number of 6 to a different number to shift the proportion of corridors to rooms, or use the junction table on the pre-loaded non-linear dungeon post instead.

If there is a room or corridor already in that location, the new corridor connects with it. (Notice that we don't need to connect with a room, or even with a keyed location...)  Alternatively, for corridors, use the d10 table for crossing pre-existing corridors from the SubMethod I post, which will add a chance for sublevels above or below the main level.

Tuesday, April 18, 2017

Pre-Connecting Random Non-Linear Dungeons, SubMethod I

To continue on the topic of making sure randomly-generated dungeons contain loops to avoid linear designs, let's look at the second method. The first method, you will recall, is to include the loops beforehand and built your dungeon around that skeleton, which I called "pre-loading". I was almost going to call the second method "post-directing", to contrast it to "pre-loading", but I didn't like that name. I'll call it "pre-connecting" instead.

The fundamental idea, remember, is that instead of waiting for the random twists and turns of a corridor to connect to a room, you roll immediately for where the corridor goes and adjust the shape to fit. You are thus connecting the rooms in advance, before knowing where the corridor actually appears to lead. Since most GMs number their rooms, the brute force method of rolling for connections would be to just roll the room number. For example, in the image to the left, if we begin in Room A and need to know where the door in the upper right leads, we could roll a d4 and read the result as the room number. If the result is 1, we draw the corridor turning north (upper blue squares,) then west to connect to the door in Room 1. On a 2, we extend the corridor east (upper red squares) until we connect to Room 2. On a 3 or 4, we extend the corridor south (green squares) and then turn east (lower blue squares) or west (lower red squares,) depending on whether we are connecting to Room 3 or Room 4.

The problem with this is that we need a die roll that matches the number of rooms in the dungeon... and we might not know how many rooms the dungeon has yet. Instead of rolling directly for the room number, then, we could instead roll for the relative room number. We could roll a d10 on the following table:

RollRoom #|RollRoom #
1Current Room - 4|6Current Room + 1
2Current Room - 3|7Current Room + 2
3Current Room - 2|8Current Room + 3
4Current Room - 1|9Current Room + 4
5Back to Current Room|0To Distant Room, Same Direction

In other words, subtract 5 from the current room number, then add the result of a d10 to get the destination room number. This means that most corridors will lead to nearby rooms: rooms you have just drawn, or rooms you are about to draw.

If the result is less than 5, it's one of the previous four rooms you've drawn. Draw your corridor as straight as possible towards that room. You might have to make one or two turns, if the corridor starts in the opposite direction (the way Room 1 in the example picture above is west of the door in Room A, so the corridor must make a U-Turn to connect.) You can still use the random corridor shape tables from whatever generator you are using to test the corridor every 60 feet or so for side passages or doors.

If the result is 5, the corridor re-connects with the room it leaves. Either there are two doors in the room and the corridor connects them, or the corridor splits into a Y or T and forms a loop that way. Again, check every 60 feet, or possibly even every 30 feet, for doors or branches off the main corridor.

If the result is more than 5, the corridor leads to a new room. assuming you haven't drawn those rooms yet. The general direction of the room is the general direction the initial door or doorway is facing. You can use the standard tables from whatever generation system you are using to test the corridor every 60 feet for turns or side passages, or you can roll a d10 for corridor length:
  • on a 0, there is no corridor and the door leads directly into the new room;
  • on a 1-6, multiply the result by 10 for the length of the corridor;
  • on a 7+, draw 60 feet of corridor and then test for turns, doors, or side passages.
If the result is a 0, the corridor connects to a distant room in the same general direction. Find the first numbered room on the map in that direction and use that room number as your "current" room, then roll on the table again for the destination. If the corridor's general direction is into an unmapped area (quite possible when you've just started mapping,) postpone mapping the corridor until you've mapped that area.

For the first five rooms of a map, use the results as the raw room number. If a corridor has to cross other corridors or rooms to reach its destination, roll on the following table:

d10 RollResult
1-4corridor runs under area
5secret door connects to area
6-9corridor runs above area
0dead end, no connection

If the corridor runs under or above the area, there will be stairs just before it crosses the area, and stairs on the other side. Optionally, there are stairs on even rolls and ladders on odd rolls.

If the corridor ends, either with a secret door or a true dead end, there is no need to worry about finishing the connection on the other side of the already-mapped area.

Friday, April 14, 2017

Pre-Loaded Random Non-Linear Example: Blood of Prokopius

I've been sick for the last few days and unable to write the next installment of the random non-linear dungeon series, so I'll instead link to an example dungeon by FrDave at the Blood of Prokopius blog: The Sunken Halls of the Ape Brotherhood. This uses the leximorph-based pre-loading method to establish the main corridor structure, although instead of randomly-selecting letters using a table, he picked the letters "A", "P", and "E" from the most important descriptive keyword in the dungeon title.

The main thing I'll note is the loops and branching paths, which is what we are looking for in these methods. If entering from the south, there are three routes to choose from, all of which can connect to the same areas, forming a large loop: westwards from the western or middle branch to the apex of the "A", northwards through the flooded chambers, then southwards to the Bizarre Ice Gateway and out the eastern branch of the "E". There are several smaller loops as well: the apex of the "A" and the entire "A" form nesting triangular loops (although you'd have to clear some debris in one area,) the square loop of the "P", the loop(s) between the middle and eastern branches of the "E", and multiple loops of rooms off to the side of the major corridors.

On the whole, very loopy! And a tough environment, too!

Monday, April 10, 2017

Pre-Loading Random Non-Linear Dungeons

In the post on guaranteeing that a randomly-generated dungeon is non-linear (contains loops,) the first technique I mentioned was to start with a dungeon structure that already contains these loops, then generate rooms and additional corridors that connect to that structure. I call that technique "pre-loading". The predefined structure is a tunnel template which you then modify with dice rolls.

A long time ago, I toyed with the idea of leximorphs: using letters of the alphabet as if they were geomorphs. This could be used for a tunnel template. Assume that your dungeon is divided into sectors, for example four quarters. If you randomly select a four-letter word or character string, assign one character to each quarter, and draw them on a map so that each character touches the adjacent characters, you wind up with a network of tunnels. Some letters have loops built into them, for example "A", "B", "D" and "O". This guarantees at least a little bit on non-linearity. The loops can be drawn with curves or as angular shapes, as in the example image. Other curved strokes can be straightened or turned into angles as well, as desired.

There are a couple sources for random word generation, for example the random page feature of Wikipedia. But one quick option is to use this d10-based table:

Roll (d10)Letter Pattern
0R
1A
2D
3T
4Q
5L
6X
7P
8B
9lowercase g

I chose mostly letters with loops in them, although I did include three letters that do not contain any loops (T, L, and X,) just for variety. Roll a d10 once for each sector on your map. Optionally, roll a d4 for rotation of each letter (1= normal, 2= turn 90 degrees clockwise, 3= turn upside down, 4= turn 90 degrees counterclockwise.) Make sure each letter touches the adjacent letters, so that there aren't any disconnected lines. This is your base tunnel template.

At every corner or junction between letters or within each letter, roll to see how the two tunnels connect (d6).

  1. Ordinary Junction
  2. Trapped Junction
  3. Trapped Junction (disabled)
  4. Minor Obstacle (debris, pool of liquid)
  5. Door
  6. Room

Finally, check both sides of the tunnel every 60 feet for doors or branches (d8).

  1. Blank Wall
  2. Blank Wall with Secret Door
  3. Branch/Side Passage
  4. Two Diagonal Passages
  5. Blocked Passage
  6. Door
  7. Pair of Doors, side by side
  8. Stairs

I am assuming here that you are using tables borrowed from Appendix A or another random dungeon generator to roll for size and shape of rooms, type of door, what's behind each door, or other details as needed.

Friday, April 7, 2017

Random Non-Linear Dungeons

There was a recent forum discussion about non-linear or "jaquayed" dungeon generation. Justin Alexander introduced the term "jaquaying" to describe a method of non-linear dungeon design that uses lots of loops and alternate paths to avoid the stifling, railroaded feel of linear dungeons. What the forum discussion centered on was the problem of random dungeon generation, for example Appendix A in the AD&D Dungeon Master's Guide. Most random dungeon generators only produce loops by accident.

What Appendix A does, and many alternative generators copy, is it generates shapes or paths. You start at Room 1 and roll for doors or exits on each wall. Each exit leads to either another room or a corridor heading in some direction. Every so many feet of traveling down the corridor, you roll to see if the corridor turns, branches, ends in a T, or intersects with another corridor.

As you generate corridors (or, for that matter, additional rooms that have their own set of exits,) there is a random chance that the direction indicated would lead into an already mapped area, creating a loop. The chance improves as the map fills up. This means that such loops are more likely to be small, which means less of an opportunity for players to exploit the structure of the dungeon to bypass dangerous areas, slip around behind opponents, or evade pursuit. You wind up with less interesting dungeons that way.

My opinion: you really need to move away from randomly-rolled shapes if you want a better chance of getting loops. The way I see it, you have two choices:

  1. Start with a network of major corridors that already includes loops, then randomly connect rooms and minor corridors to that base structure.
  2. Roll for the destination of corridors or exits, instead of rolling for their shapes.
The best way to explain #1 is to look at the way Appendix A handles starting areas. The first dungeon level starts with either a random room (jump to Table V) or one of five starter areas with a good choice of rooms and passages leading off from the first room. To force loops into your random dungeon, you could similarly have five pre-defined corridor networks that include loops and alternate paths, then check each corridor every 60 feet for branching corridors or doors to build your dungeon around that framework.

For #2, you would replace any roll for direction with a roll for destination, for example rolling for a room number. You would then connect an exit or passage to that destination, adjusting the shape of the corridor to fit the map. As long as there's a possibility of rolling an already-mapped room as a destination, you will get some loops in your dungeon.

You can, of course, mix the two methods with each other or with the random shape method.

I have a couple experimental approaches to each method that I will present in separate posts.