Advanced Dungeons and Dragons 1st Edition Random Dungeon Generator

I have started on this and only now and again for a few days, given ran out of holidays and had to go back to work a week or so ago.

However, it is doing the basics.

https://github.com/bluetyson/ADnD1e-Random-Dungeon-Generator

What it is not is something that generates a box image and fills it in a la donjon or others. It is a translation of the procedural tables. The TLDR version is it can do X number of rolls. If a stair/elevator or whatever goes down, it follows that and keeps going. If empty rooms have secret doors, it will fill this in recursively, but not follow any of those randomly in particular. The key output is being used for debugging, but will be turned into room descriptions. Rooms can ‘not fit’ and be chopped off, so the default size might not reflect the plot.

Definitely bugs here or there as just started, and some events are pretty rare so there will be plenty of oddball edge cases. Things I am aware on and working on eventually are here https://github.com/bluetyson/ADnD1e-Random-Dungeon-Generator/issues

e.g. no actual rolled monsters/treasure from DMG tables as yet. No Pools, that sort of thing.

Basic legend code is at the bottom

Here’s a level 1 and level 7 from a 200 ‘Rolls’ test. Level 7 being the one the players would want to get to.

DUNGEON
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBCstBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBCBBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBDCDBBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBDDCBBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1CBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1OR1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBCR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BCBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
CBBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1R1R1R1R1R1R1R1CCCBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBBR1R1R1R1R1R1R1R1R1R1BBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

Key: 1

{‘shape’: ‘R’, ‘size’: [10, 13], ‘water’: ‘S’, ‘fancy_shape’: ‘H’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘R’, 2: ‘L’, 3: ‘O’, 4: ‘S’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’, 3: ‘A’, 4: ‘A’}}

Key: 2

{‘shape’: ‘R’, ‘size’: [3, 4], ‘fromdoor’: ‘Y’, ‘contents’: {‘monster’: {}, ‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 4400, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Bloody Great Chests’, ‘protection’: ‘hide’, ‘hide’: ‘Secret room nearby’}}, ‘exits’: 1, ‘exitstype’: ‘door’, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ‘A’}}

Key: 3

{‘shape’: ‘R’, ‘size’: [9, 12], ‘water’: ‘S’, ‘fancy_shape’: ‘H’, ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {1: {(3, 6, -4): ‘xmin’, (2, 6, -4): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(3, 9, -4): ‘xmin’, (2, 9, -4): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 3: {(11, 0, -4): ‘xmax’, (12, 0, -4): {‘beyond’: ’45BA’, ‘loc’: ‘xmaxloc’}}, 4: {(11, 6, -4): ‘xmax’, (12, 6, -4): {‘beyond’: ‘A’, ‘loc’: ‘xmaxloc’}}, 5: {(11, 10, -4): ‘xmax’, (12, 10, -4): {‘beyond’: ’45BA’, ‘loc’: ‘xmaxloc’}}, 6: {(4, 0, -4): ‘ymin’, (4, -1, -4): {‘beyond’: ‘Room’, ‘loc’: ‘yminloc’}}, 7: {(6, 0, -4): ‘ymin’, (6, -1, -4): {‘beyond’: ‘Room’, ‘loc’: ‘yminloc’}}, 8: {(9, 0, -4): ‘ymin’, (9, -1, -4): {‘beyond’: ‘P’, ‘loc’: ‘yminloc’}}, 9: {(4, 10, -4): ‘ymax’, (4, 11, -4): {‘beyond’: ‘Room’, ‘loc’: ‘ymaxloc’}}, 10: {(8, 10, -4): ‘ymax’, (8, 11, -4): {‘beyond’: ‘P’, ‘loc’: ‘ymaxloc’}}, 11: {(9, 10, -4): ‘ymax’, (9, 11, -4): {‘beyond’: ‘A’, ‘loc’: ‘ymaxloc’}}}, ‘secret_door_count’: 11}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 4

{‘shape’: ‘R’, ‘size’: [1, 2], ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {1: {(2, 7, -4): ‘xmin’, (1, 7, -4): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(2, 7, -4): ‘ymax’, (2, 8, -4): {‘beyond’: ‘Room’, ‘loc’: ‘ymaxloc’}}}, ‘secret_door_count’: 2}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 5

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘L’, 2: ‘R’, 3: ‘O’}, ‘exitdirections’: {1: ’45AB’, 2: ‘A’, 3: ‘A’}}

Key: 6

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 2, ‘exitlocations’: {1: ‘O’, 2: ‘S’}, ‘exitdirections’: {1: ’45AB’, 2: ‘A’}}

Key: 7

{‘shape’: ‘R’, ‘size’: [1, 1], ‘fromdoor’: ‘Y’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘O’, 2: ‘O’, 3: ‘S’}, ‘exitdirections’: {1: ‘A’, 2: ’45AB’, 3: ‘A’}}

Key: 8

{‘shape’: ‘R’, ‘size’: [3, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘O’, 2: ‘L’, 3: ‘O’, 4: ‘O’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’, 3: ‘A’, 4: ‘A’}}

Key: 9

{‘shape’: ‘R’, ‘size’: [4, 4], ‘contents’: {‘trap’: {}}, ‘exits’: 2, ‘exitlocations’: {1: ‘O’, 2: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ‘A’}}

Key: 10

{‘shape’: ‘R’, ‘size’: [2, 2], ‘contents’: {‘monster’: {}, ‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 7, ‘magic’: 0}, ‘store’: ‘Stone Jars’, ‘protection’: ‘hide’, ‘hide’: ‘Magic: Invisibility’}}, ‘exits’: 1, ‘exitstype’: ‘door’, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ‘A’}}

Key: 11

{‘shape’: ‘R’, ‘size’: [3, 5], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘O’}, ‘exitdirections’: {1: ‘A’}}

Key: 12

{‘shape’: ‘R’, ‘size’: [3, 5], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 2, ‘exitlocations’: {1: ‘R’, 2: ‘S’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’}}

Key: 13

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 700, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Coffers’, ‘protection’: ‘hide’, ‘hide’: ‘Secret: Loose stone – in wall’}, ‘secret_door_dict’: {1: {(13, 3, -7): ‘xmin’, (12, 3, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(14, 4, -7): ‘xmax’, (15, 4, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xmaxloc’}}}, ‘secret_door_count’: 2}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 14

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ‘A’}}

Key: 15

{‘shape’: ‘R’, ‘size’: [2, 2], ‘contents’: {‘treasure’: {‘type’: {‘copper’: 8000, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Loose’, ‘protection’: ‘guard’, ‘guard’: ‘Poison needles: handle’}}, ‘exits’: 3, ‘exitlocations’: {1: ‘R’, 2: ‘R’, 3: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ‘A’, 3: ‘A’}}

Key: 16

{‘shape’: ‘R’, ‘size’: [4, 6], ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {1: {(14, 8, -7): ‘xmin’, (13, 8, -7): {‘beyond’: ’45BA’, ‘loc’: ‘xminloc’}}, 2: {(14, 6, -7): ‘ymin’, (14, 5, -7): {‘beyond’: ’45AB’, ‘loc’: ‘yminloc’}}}, ‘secret_door_count’: 2}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 17

{‘shape’: ‘R’, ‘size’: [4, 6], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘O’, 2: ‘L’, 3: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ‘A’, 3: ‘A’}}

Key: 18

{‘shape’: ‘R’, ‘size’: [9, 13], ‘water’: ‘W’, ‘fancy_shape’: ‘H’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘S’}, ‘exitdirections’: {1: ‘A’}}

Key: 19

{‘shape’: ‘R’, ‘size’: [4, 6], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘O’, 2: ‘O’, 3: ‘L’, 4: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’, 3: ‘A’, 4: ’45AB’}}

Key: 20

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {}, ‘secret_door_count’: 0}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 21

{‘shape’: ‘R’, ‘size’: [3, 4], ‘fromdoor’: ‘Y’, ‘contents’: {‘monster’: {}, ‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 1925, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Stone Jars’, ‘protection’: ‘hide’, ‘hide’: ‘Magic: Invisibility’}, ‘secret_door_dict’: {1: {(0, 8, -7): ‘xmin’, (-1, 8, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(2, 8, -7): ‘xmax’, (3, 8, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xmaxloc’}}, 3: {(0, 8, -7): ‘ymin’, (0, 7, -7): {‘beyond’: ‘A’, ‘loc’: ‘yminloc’}}, 4: {(0, 11, -7): ‘ymax’, (0, 12, -7): {‘beyond’: ’45AB’, ‘loc’: ‘ymaxloc’}}}, ‘secret_door_count’: 4}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 22

{‘shape’: ‘R’, ‘size’: [1, 2], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘R’, 2: ‘L’, 3: ‘L’, 4: ‘S’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’, 3: ‘A’, 4: ’45BA’}}

Key: 23

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ’45AB’}}

Key: 24

{‘shape’: ‘R’, ‘size’: [1, 2], ‘fromdoor’: ‘Y’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘S’, 2: ‘O’, 3: ‘S’}, ‘exitdirections’: {1: ’45AB’, 2: ‘A’, 3: ‘A’}}

Key: 25

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘R’, 2: ‘L’, 3: ‘R’}, ‘exitdirections’: {1: ‘A’, 2: ’45AB’, 3: ‘A’}}

Key: 26

{‘shape’: ‘R’, ‘size’: [28, 39], ‘water’: ‘N’, ‘fancy_shape’: ‘H’, ‘contents’: {‘monster’: {}}, ‘exits’: 2, ‘exitlocations’: {1: ‘S’, 2: ‘L’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’}}

Key: 27

{‘shape’: ‘R’, ‘size’: [2, 2], ‘contents’: {‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 8000, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Metal Urns’, ‘protection’: ‘hide’, ‘hide’: ‘Secret: Inside non-storage item’}}, ‘exits’: 1, ‘exitlocations’: {1: ‘O’}, ‘exitdirections’: {1: ’45BA’}}

Key: 28

{‘shape’: ‘R’, ‘size’: [4, 4], ‘contents’: {‘level’: {}}, ‘exits’: 4, ‘exitlocations’: {1: ‘O’, 2: ‘O’, 3: ‘L’, 4: ‘S’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’, 3: ‘A’, 4: ‘A’}}

Key: 29

{‘shape’: ‘R’, ‘size’: [4, 4], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 2, ‘exitlocations’: {1: ‘O’, 2: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’}}
DUNGEON
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBstCCCBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBR9R8R8R8pdBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBCCCR8R8R8CBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBR9R8R8R8CBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBR9R9CCCCCCBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBCBCR10mCBCBCBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBCCCR10R10jCBCBCBBBBBBBBBBB
BBBBBBBBBBBBBCCCpdBCwmCBCBBBCBCBBBBBBBBBB
BBBBBBBCBBCCCCR19R19wmBR14R13R13sdCCBCCCCCCCBBBBBBBB
BBCBBBCCCCBCBtdR19R19R19R19R14R13pR13R12CCdBBBR11R11R11BBBBBBBBB
BBBCBBCCCCCCCR20R19R19R19R19R17R17R16sdR12CCBBBR11R11R11BBBBBBBBB
BBBBCBCCCCCwmR24R20R19CCCR17R17R16CCCCCCR11R11R11BBBBBBBBB
BBCCCR22R21sdsdR21R21gsdR23wmtdR24BR19R19R19R19R17CR16sdR12R12R12CBCR11R11R11BBBBBBBBB
BBCCCR22R21R21R21mR23R23R25CBR19R19R19R19CR18R18R12R12R12CBBR11R11R11BBBBBBBBB
BBBBBBR21R21R21R23R23BCBBBCCBR18R18R18R18R18CBBBCBBBBBBBBBB
BBBBBBR21sdR21R21BBBCBBBBCBR18R18R18R18R18R18R18R18R18CBBBBBBBBBB
BBBBBBCBBBBBBBBBBBCR18R18R18R18R18R18R18R18R18CBBBBBBBBBB
BBBBBCBBBBBBBBBBBBBR18R18R18R18R18R18R18R18R18BBBBBBBBBBB
BBBBCBBBBBBBBBBBBBBR18R18R18R18R18R18R18R18R18BBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBR18R18R18R18R18R18R18R18R18BBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

Key: 1

{‘shape’: ‘R’, ‘size’: [10, 13], ‘water’: ‘S’, ‘fancy_shape’: ‘H’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘R’, 2: ‘L’, 3: ‘O’, 4: ‘S’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’, 3: ‘A’, 4: ‘A’}}

Key: 2

{‘shape’: ‘R’, ‘size’: [3, 4], ‘fromdoor’: ‘Y’, ‘contents’: {‘monster’: {}, ‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 4400, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Bloody Great Chests’, ‘protection’: ‘hide’, ‘hide’: ‘Secret room nearby’}}, ‘exits’: 1, ‘exitstype’: ‘door’, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ‘A’}}

Key: 3

{‘shape’: ‘R’, ‘size’: [9, 12], ‘water’: ‘S’, ‘fancy_shape’: ‘H’, ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {1: {(3, 6, -4): ‘xmin’, (2, 6, -4): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(3, 9, -4): ‘xmin’, (2, 9, -4): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 3: {(11, 0, -4): ‘xmax’, (12, 0, -4): {‘beyond’: ’45BA’, ‘loc’: ‘xmaxloc’}}, 4: {(11, 6, -4): ‘xmax’, (12, 6, -4): {‘beyond’: ‘A’, ‘loc’: ‘xmaxloc’}}, 5: {(11, 10, -4): ‘xmax’, (12, 10, -4): {‘beyond’: ’45BA’, ‘loc’: ‘xmaxloc’}}, 6: {(4, 0, -4): ‘ymin’, (4, -1, -4): {‘beyond’: ‘Room’, ‘loc’: ‘yminloc’}}, 7: {(6, 0, -4): ‘ymin’, (6, -1, -4): {‘beyond’: ‘Room’, ‘loc’: ‘yminloc’}}, 8: {(9, 0, -4): ‘ymin’, (9, -1, -4): {‘beyond’: ‘P’, ‘loc’: ‘yminloc’}}, 9: {(4, 10, -4): ‘ymax’, (4, 11, -4): {‘beyond’: ‘Room’, ‘loc’: ‘ymaxloc’}}, 10: {(8, 10, -4): ‘ymax’, (8, 11, -4): {‘beyond’: ‘P’, ‘loc’: ‘ymaxloc’}}, 11: {(9, 10, -4): ‘ymax’, (9, 11, -4): {‘beyond’: ‘A’, ‘loc’: ‘ymaxloc’}}}, ‘secret_door_count’: 11}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 4

{‘shape’: ‘R’, ‘size’: [1, 2], ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {1: {(2, 7, -4): ‘xmin’, (1, 7, -4): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(2, 7, -4): ‘ymax’, (2, 8, -4): {‘beyond’: ‘Room’, ‘loc’: ‘ymaxloc’}}}, ‘secret_door_count’: 2}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 5

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘L’, 2: ‘R’, 3: ‘O’}, ‘exitdirections’: {1: ’45AB’, 2: ‘A’, 3: ‘A’}}

Key: 6

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 2, ‘exitlocations’: {1: ‘O’, 2: ‘S’}, ‘exitdirections’: {1: ’45AB’, 2: ‘A’}}

Key: 7

{‘shape’: ‘R’, ‘size’: [1, 1], ‘fromdoor’: ‘Y’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘O’, 2: ‘O’, 3: ‘S’}, ‘exitdirections’: {1: ‘A’, 2: ’45AB’, 3: ‘A’}}

Key: 8

{‘shape’: ‘R’, ‘size’: [3, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘O’, 2: ‘L’, 3: ‘O’, 4: ‘O’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’, 3: ‘A’, 4: ‘A’}}

Key: 9

{‘shape’: ‘R’, ‘size’: [4, 4], ‘contents’: {‘trap’: {}}, ‘exits’: 2, ‘exitlocations’: {1: ‘O’, 2: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ‘A’}}

Key: 10

{‘shape’: ‘R’, ‘size’: [2, 2], ‘contents’: {‘monster’: {}, ‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 7, ‘magic’: 0}, ‘store’: ‘Stone Jars’, ‘protection’: ‘hide’, ‘hide’: ‘Magic: Invisibility’}}, ‘exits’: 1, ‘exitstype’: ‘door’, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ‘A’}}

Key: 11

{‘shape’: ‘R’, ‘size’: [3, 5], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘O’}, ‘exitdirections’: {1: ‘A’}}

Key: 12

{‘shape’: ‘R’, ‘size’: [3, 5], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 2, ‘exitlocations’: {1: ‘R’, 2: ‘S’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’}}

Key: 13

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 700, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Coffers’, ‘protection’: ‘hide’, ‘hide’: ‘Secret: Loose stone – in wall’}, ‘secret_door_dict’: {1: {(13, 3, -7): ‘xmin’, (12, 3, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(14, 4, -7): ‘xmax’, (15, 4, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xmaxloc’}}}, ‘secret_door_count’: 2}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 14

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ‘A’}}

Key: 15

{‘shape’: ‘R’, ‘size’: [2, 2], ‘contents’: {‘treasure’: {‘type’: {‘copper’: 8000, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Loose’, ‘protection’: ‘guard’, ‘guard’: ‘Poison needles: handle’}}, ‘exits’: 3, ‘exitlocations’: {1: ‘R’, 2: ‘R’, 3: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ‘A’, 3: ‘A’}}

Key: 16

{‘shape’: ‘R’, ‘size’: [4, 6], ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {1: {(14, 8, -7): ‘xmin’, (13, 8, -7): {‘beyond’: ’45BA’, ‘loc’: ‘xminloc’}}, 2: {(14, 6, -7): ‘ymin’, (14, 5, -7): {‘beyond’: ’45AB’, ‘loc’: ‘yminloc’}}}, ‘secret_door_count’: 2}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 17

{‘shape’: ‘R’, ‘size’: [4, 6], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘O’, 2: ‘L’, 3: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ‘A’, 3: ‘A’}}

Key: 18

{‘shape’: ‘R’, ‘size’: [9, 13], ‘water’: ‘W’, ‘fancy_shape’: ‘H’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘S’}, ‘exitdirections’: {1: ‘A’}}

Key: 19

{‘shape’: ‘R’, ‘size’: [4, 6], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘O’, 2: ‘O’, 3: ‘L’, 4: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’, 3: ‘A’, 4: ’45AB’}}

Key: 20

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’, ‘secret_door_dict’: {}, ‘secret_door_count’: 0}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 21

{‘shape’: ‘R’, ‘size’: [3, 4], ‘fromdoor’: ‘Y’, ‘contents’: {‘monster’: {}, ‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 0, ‘electrum’: 0, ‘gold’: 1925, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Stone Jars’, ‘protection’: ‘hide’, ‘hide’: ‘Magic: Invisibility’}, ‘secret_door_dict’: {1: {(0, 8, -7): ‘xmin’, (-1, 8, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xminloc’}}, 2: {(2, 8, -7): ‘xmax’, (3, 8, -7): {‘beyond’: ‘Room’, ‘loc’: ‘xmaxloc’}}, 3: {(0, 8, -7): ‘ymin’, (0, 7, -7): {‘beyond’: ‘A’, ‘loc’: ‘yminloc’}}, 4: {(0, 11, -7): ‘ymax’, (0, 12, -7): {‘beyond’: ’45AB’, ‘loc’: ‘ymaxloc’}}}, ‘secret_door_count’: 4}, ‘exits’: 0, ‘secretdoors’: ‘check’, ‘exitlocations’: {}, ‘exitdirections’: {}}

Key: 22

{‘shape’: ‘R’, ‘size’: [1, 2], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 4, ‘exitlocations’: {1: ‘R’, 2: ‘L’, 3: ‘L’, 4: ‘S’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’, 3: ‘A’, 4: ’45BA’}}

Key: 23

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 1, ‘exitlocations’: {1: ‘R’}, ‘exitdirections’: {1: ’45AB’}}

Key: 24

{‘shape’: ‘R’, ‘size’: [1, 2], ‘fromdoor’: ‘Y’, ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘S’, 2: ‘O’, 3: ‘S’}, ‘exitdirections’: {1: ’45AB’, 2: ‘A’, 3: ‘A’}}

Key: 25

{‘shape’: ‘R’, ‘size’: [2, 3], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 3, ‘exitlocations’: {1: ‘R’, 2: ‘L’, 3: ‘R’}, ‘exitdirections’: {1: ‘A’, 2: ’45AB’, 3: ‘A’}}

Key: 26

{‘shape’: ‘R’, ‘size’: [28, 39], ‘water’: ‘N’, ‘fancy_shape’: ‘H’, ‘contents’: {‘monster’: {}}, ‘exits’: 2, ‘exitlocations’: {1: ‘S’, 2: ‘L’}, ‘exitdirections’: {1: ’45BA’, 2: ‘A’}}

Key: 27

{‘shape’: ‘R’, ‘size’: [2, 2], ‘contents’: {‘treasure’: {‘type’: {‘copper’: 0, ‘silver’: 8000, ‘electrum’: 0, ‘gold’: 0, ‘platinum’: 0, ‘gems’: 0, ‘jewellery’: 0, ‘magic’: 0}, ‘store’: ‘Metal Urns’, ‘protection’: ‘hide’, ‘hide’: ‘Secret: Inside non-storage item’}}, ‘exits’: 1, ‘exitlocations’: {1: ‘O’}, ‘exitdirections’: {1: ’45BA’}}

Key: 28

{‘shape’: ‘R’, ‘size’: [4, 4], ‘contents’: {‘level’: {}}, ‘exits’: 4, ‘exitlocations’: {1: ‘O’, 2: ‘O’, 3: ‘L’, 4: ‘S’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’, 3: ‘A’, 4: ‘A’}}

Key: 29

{‘shape’: ‘R’, ‘size’: [4, 4], ‘contents’: {’empty’: ‘Y’}, ‘exits’: 2, ‘exitlocations’: {1: ‘O’, 2: ‘O’}, ‘exitdirections’: {1: ‘A’, 2: ’45BA’}}
legend_dict =  {}
    legend_dict['O'] = "Outside Entrance"
    legend_dict['C'] = "Corridor/Passage"
    legend_dict['R'] = "Chamber/Room"
    legend_dict['D'] = "Dead End"
    legend_dict['d'] = "door"
    legend_dict[':'] = "direction of Door"
    legend_dict['wm'] = "Wandering Monster"
    legend_dict['sd'] = "Secret Door"
    legend_dict['st'] = "Stairs"
    legend_dict['ch'] = "Chute"
    legend_dict['cm'] = "Chimney"
    legend_dict['td'] = "Trapdoor"
    legend_dict['pi'] = "Pit Trap"
    legend_dict['pd'] = "Pit Trap: Secret Door"
    legend_dict['ps'] = "Pit Trap: Spikes"
    legend_dict['pc'] = "Pit Trap: Crushing Walls"
    legend_dict['el'] = "Elevator Trap"
    legend_dict['ar'] = "Arrow Trap"
    legend_dict['sp'] = "Spear Trap"
    legend_dict['df'] = "Door Falls Trap"
    legend_dict['sf'] = "Stone Falls Trap"
    legend_dict['gs'] = "Gas Trap"
    legend_dict['bw'] = "Blocked Wall Trap"
    legend_dict['ol'] = "Oil Trap"
    legend_dict['m'] = "Monster"
    legend_dict['t'] = "Treasure"
    legend_dict['p'] = "Pool"
    legend_dict['c'] = "Treasure: Copper"  
    legend_dict['s'] = "Treasure: Silver"
    legend_dict['e'] = "Treasure: Electrum"
    legend_dict['g'] = "Treasure: Gold"
    legend_dict['p'] = "Treasure: Platinum"
    legend_dict['G'] = "Treasure: Gems"
    legend_dict['j'] = "Treasure: Jewellery"
    legend_dict['M'] = "Treasure: Magic"

Cepheid’s Dungeon Tool – the Mite Massacre

https://docs.google.com/spreadsheets/d/1rus2u7HBCNQe_Mi0zhMXZQJbDY4lQ-02vfgBuE6grQM/edit#gid=1081359187

Yesterday I knew I had a random dungeon generated in text that wasn’t the DMG, so went to have a look in pos-migraine can’t be bothered doing anything recovery. Found the below.

The above dungeon google spreadsheet has a nice way of drawing a map by using conditional formatting which a handily done graph paper type grid already.

Add the random character generator for Labyrinth Lord from

https://truculent.org/llchar/?MakeChar=True&stats=3D6&class=Dwarf&align=Random&level=1&sex=Random&name=Random&userstat%5B%5D=&userstat%5B%5D=&userstat%5B%5D=&userstat%5B%5D=&userstat%5B%5D=&userstat%5B%5D=&username=

Which also lets you save characters as pdfs and there is a work and prep free start to an adventure. I created 6 characters at random, ending with three clerics, an elf, a thief and a fighter. All was going ok until they came to a chamber that had 25 mites (monsters from the Undercity 1-1 HD evil little humanoids that trap everything. The trap in this case being a poison gas cloud, save or 10p damage. Which of course will kill all first level characters. 3 survived to get the hell out.

Which led to some fortuitous hiring of 6 men at arms, 3 nomads and a thief as long as randomly gaining three more party members to replace the dead cleric, elf and fighter and a punitive organised expedition to retrieve some dead comrades. Spending some of the games from the 5K in gems in the room with the luckily non-vampiric giant bats.

Raise dead in the Undercity tables is 15000 gold, a bit out of the price range for 1st level characters but at least they get a funeral, revenge and gear going to a good home.

http://static.lulu.com/browse/product_thumbnail.php?productId=20616196&resolution=320http://static.lulu.com/browse/product_thumbnail.php?productId=20616196&resolution=320


https://tenfootpole.org/ironspike/wp-content/uploads/2013/07/ru.jpghttps://tenfootpole.org/ironspike/wp-content/uploads/2013/07/ru.jpg

%d bloggers like this: