ChatGPT uses – random tables

Things along these lines:

please continue as above, starting at 22
22: {
'6th Level': 'Spiritwrack',
'7th Level': None,
'8th Level': None,
'9th Level': None
},
23: {
'6th Level': 'Stone To Flesh',
'7th Level': None,
'8th Level': None,
'9th Level': None
},
24: {
'6th Level': 'Tenser's Transformation',
'7th Level': None,
'8th Level': None,
'9th Level': None
}
}




please continue as above, starting at 17
Sure, here is the python dictionary for the table starting at level 17:

python
Copy code
spells = {
    6: {
        '17': 'Otiluke\'s Freezing Sphere',
        '18': 'Part Water',
        '19': 'Project Image',
        '20': 'Reincarnation',
        '21': 'Repulsion',
        '22': 'Spiritwrack',
        '23': 'Stone To Flesh',
        '24': 'Tenser\'s Transformation'
    },
    7: {
    },
    8: {
    },
    9: {
    },
}
Please note that the numbers in the outermost dictionary are the spell level and the numbers in the innermost dictionaries are the spell numbers.





can you give me the full 7th 8th and 9th levels as above?
Sure, here is the full python dictionary for the 7th, 8th, and 9th levels:

python
Copy code
{
    7th Level: {
    '1': 'Anti-Magic Shell',
    '2': 'Bigby's Grasping Hand',
    '3': 'Bigby's Forceful Hand',
    '4': 'Control Weather',
    '5': 'Death Spell',
    '6': 'Disintegrate',
    '7': 'Enchant An Item',
    '8': 'Extension III',
    '9': 'Geas',
    '10': 'Glassee',
    '11': 'Globe Of Invulnerability',
    '12': 'Guards And Wards',
    '13': 'Invisible Stalker',
    '14': 'Legend Lore',
    '15': 'Lower Water',
    '16': 'Monster Summoning IV',
    '17': 'Move Earth',
    '18': 'Otiluke's Freezing Sphere',
    '19': 'Part Water',
    '20': 'Project Image',
    '21': 'Reincarnation',
    '22': 'Repulsion',
    '23': 'Spiritwrack',
    '24': 'Stone To Flesh',
    '25': 'Tenser's Transformation'
    },
    8th Level: {
    '1': 'Antipathy/Sympathy',
    '2': 'Cacodemon',
    '3': 'Bigby's Clenched Fist',
    '4': 'Bigby's Crushing Hand',
    '5': 'Charm Plants',
    '6': 'Clone',
    '7': '



please finish the table from 3 responses ago that ended at 21: {
'Move Earth': '',
'Vanish': '',
'Trap The Soul': '',
},
22: {
'Otiluke's Freezing Sphere': '',
'Part Water': '',
'Project Image': '',
'Reincarnation': '',
'Repulsion': '',
'Spiritwrack': '',
'Stone To Flesh': '',
'Tenser's Transformation': '',
},
23: {
'Anti-Magic Shell': 'Bigby's Grasping Hand',
'Bigby's Forceful Hand': 'Cacodemon',
'Control Weather': 'Charm Plants',
'Death Spell': 'Delayed Blast Fireball',
'Disintegrate': "Drawmij's Instant Summons",
'Enchant An Item': 'Duo-Dimension',
'Extension III': 'Limited Wish',
'Geas': 'Mass Invisibility',
'Glassee': 'Monster Summoning V',
'Globe Of Invulnerability': "Mordenkainen's Sword",
},




The below, for if I want to rewrite to lazily add to my generic shared host here.

convert this python function to perl     def random_check():
        pc_dict = {}
        pc = roll_dice(1,20)
        
        if pc <= 2:
            pc_dict['direction'] = 'ahead'
            pc_dict['check'] = 6
        elif pc >= 3 and pc <= 5:
            pc_dict['direction'] = 'exit'
            pc_dict['check'] = 6
        elif pc >= 6 and pc <= 10:
            pc_dict['direction'] = 'side'
            pc_dict['check'] = 3
        elif pc >= 11 and pc <= 13:
            pc_dict['direction'] = 'turn'
            pc_dict['check'] = 3
        elif pc >= 14 and pc <= 16:
            pc_dict['direction'] = 'room'
            pc_dict['check'] = 3
        elif pc == 17:
            pc_dict['direction'] = 'level'
            pc_dict['check'] = 'up_down'
            if LEVEL == "N": #make this what you like or could be config
                pc_dict['direction'] = 'room'
                pc_dict['check'] = 3
        elif pc == 18:
            pc_dict['direction'] = 'stop'
            pc_dict['check'] = 'spy_things'
        elif pc == 19:
            pc_dict['direction'] = 'bad_things'
            pc_dict['check'] = 3
        elif pc == 20:
            pc_dict['direction'] = 'random_encounter'
            pc_dict['check'] = 'roll_again'
            

        if VERBOSITY:
            print("RANDOM_CHECK",pc, pc_dict['direction'])

        #test purposes
        #pc_dict['direction'] = 'ahead'

        return pc_dict
sub random_check {
my $pc_hash = {};
my $pc = roll_dice(1,20);

if ($pc <= 2) {
$pc_hash->{'direction'} = 'ahead';
$pc_hash->{'check'} = 6;
} elsif ($pc >= 3 && $pc <= 5) {
$pc_hash->{'direction'} = 'exit';
$pc_hash->{'check'} = 6;
} elsif ($pc >= 6 && $pc <= 10) {
$pc_hash->{'direction'} = 'side';
$pc_hash->{'check'} = 3;
} elsif ($pc >= 11 && $pc <= 13) {
$pc_hash->{'direction'} = 'turn';
$pc_hash->{'check'} = 3;
} elsif ($pc >= 14 && $pc <= 16) {
$pc_hash->{'direction'} = 'room';
$pc_hash->{'check'} = 3;
} elsif ($pc == 17) {
$pc_hash->{'direction'} = 'level';
$pc_hash->{'check'} = 'up_down';
if ($LEVEL eq "N") {
$pc_hash->{'direction'} = 'room';
$pc_hash->{'check'} = 3;
}
} elsif ($pc == 18) {
$pc_hash->{'direction'} = 'stop';
$pc_hash->{'check'} = 'spy_things';
} elsif ($pc == 19) {
$pc_hash->{'direction'} = 'bad_things';
$pc_hash->{'check'} = 3;
} elsif ($pc == 20) {
$pc_hash->{'direction'} = 'random_encounter';
$pc_hash->{'check'} = 'roll_again';
}

if ($VERBOSITY) {
print "RANDOM_CHECK $pc $pc_hash->{'direction'}\n";
}

return $pc_hash;
}




I had already done monsters before I thought of this - and they were standard mostly, so a parser did all 10 levels reasonbly well.
Did magic items and spells with ChatGPT assistance.  Possibly not lots and lots quicker - but easier on the fingers and wrists.

The 1000 Dungeon Project

Thanks to the AD&D Random Dungeon Generator I wrote https://github.com/bluetyson/ADnD1e-Random-Dungeon-Generator, I can parallelise, so doing this only takes less than a minute.

The basic random walk theory these talk is ‘Ahead’ is the y positive direction and always follow exits – e.g. stairs down (and can go up sometimes too).

The first 1000 dungeons I have done with 10 Periodic Checks as the DMG table calls them. e.g. a roll on the main table.

Here’s a summary :-

https://docs.google.com/spreadsheets/d/1kpZhtAO4cLtyLnh6bCCRVdigOL8jbjAFJ6CFyEZ2cX8/edit?usp=sharing

Wandering Monster Totals
Wandering Monster XP histogram
Monster numbers
Monster XP histogram
Rooms

Here you can have the situation if you find an empy room it can have secret doors – beyond which are more rooms, which can have secret doors if empty – I have it so it follows that stack down, then goes back – e.g. Rooms are the interesting thing.

So with 10 checks, a couple of rooms is likely.

In fact, here are the medians for this batch of 1000:

monster_xp                            0.0
wm_xp                                 0.0
monster_total                         0.0
wm_total                              0.0
traps                                 1.0
rooms                                 2.0
total_treasure_copper                 0.0
total_treasure_silver                 0.0
total_treasure_electrum               0.0
total_treasure_gold                   0.0
total_treasure_platinum               0.0
total_treasure_gems                   0.0
total_treasure_jewellery              0.0
total_treasure_magic                  0.0
total_treasure_monster_copper         0.0
total_treasure_monster_silver         0.0
total_treasure_monster_electrum       0.0
total_treasure_monster_gold           0.0
total_treasure_monster_platinum       0.0
total_treasure_monster_gems           0.0
total_treasure_monster_jewellery      0.0
total_treasure_monster_magic          0.0
wm_total_treasure_copper              0.0
wm_total_treasure_silver              0.0
wm_total_treasure_electrum            0.0
wm_total_treasure_gold                0.0
wm_total_treasure_platinum            0.0
wm_total_treasure_gems                0.0
wm_total_treasure_jewellery           0.0
wm_total_treasure_magic               0.0
Coins                                11.0
Gems                                  0.0
Jewellery                             0.0
Magic                                 0.0
Total Gold Equivalent                21.5
x                                    13.0
y                                    16.0
z                                     1.0

Median room size is 13 by 16 – y dimensions are likely to be bigger.

So if we call a median room an exemplar, let’s have a look:

Selecting all the 13 by 16 the medians:
monster_xp                            0.0
wm_xp                                19.0
monster_total                         0.0
wm_total                              0.5
traps                                 0.0
rooms                                 3.5
total_treasure_copper                 0.0
total_treasure_silver                 0.0
total_treasure_electrum               0.0
total_treasure_gold                   0.0
total_treasure_platinum               0.0
total_treasure_gems                   0.0
total_treasure_jewellery              0.0
total_treasure_magic                  0.0
total_treasure_monster_copper         0.0
total_treasure_monster_silver         0.0
total_treasure_monster_electrum       0.0
total_treasure_monster_gold           0.0
total_treasure_monster_platinum       0.0
total_treasure_monster_gems           0.0
total_treasure_monster_jewellery      0.0
total_treasure_monster_magic          0.0
wm_total_treasure_copper              0.0
wm_total_treasure_silver              0.0
wm_total_treasure_electrum            0.0
wm_total_treasure_gold                0.0
wm_total_treasure_platinum            0.0
wm_total_treasure_gems                0.0
wm_total_treasure_jewellery           0.0
wm_total_treasure_magic               0.0
Coins                                60.0
Gems                                  0.0
Jewellery                             0.0
Magic                                 0.0
Total Gold Equivalent                60.0
x                                    13.0
y                                    16.0
z                                     2.0
Periodic Checks                      10.0

So these are therefore likely to have an exit to level 2 – [z = 2]

The distribution of area of the Dungeons:

Dungeon area, x by y by z

Here are the individual stats for the Dungeons:

https://docs.google.com/spreadsheets/d/1rbTE5-d4ju9nuQC57Dt8rCNPvuNbW3VR-JA7iAMqyvc/edit?usp=sharing

Textmapper with Gridmapper

Making SVG maps from icons based on coordinates

Example data file: https://campaignwiki.org/contrib/gridmapper-example.txt

https://campaignwiki.org/text-mapper

GitHub

https://github.com/kensanata/hex-mapping

There’s a git repository for the perl library version at the campaignwiki link,too. I should see if my generic shared hosting here can handle that sometime.

AD&D 1e Random Dungeon Generator Binder

So you can run this in a browser:

https://mybinder.org/v2/gh/bluetyson/ADnD1e-Random-Dungeon-Generator/HEAD

  • click the above to fire up a web container environment that lets you run this in your browser
  • you get jupyterlab, just click on the terminal link at the lower left and then type ‘python dungeon.py 1’ [or however many rolls as you like] and the files created will also be in the main directory, one for each dungeon level. 

Dungeon23 – 024 Ruby Base Level 13 Key 1

Level 12 is basically basalt to split the ship from what looks to be some giant sort of craft.

GM: At Key 1 is a fully charged and ready to fly dirigible. Some of the South wall of rock has been removed and is actually only a hologram with some light cover that can be quickly removed but is enough to help keep the weather out, lined with canvas etc.

Dungeon23 – 023 Ruby Base Level 13 Key 2

Level 12 is basically basalt to split the ship from what looks to be some giant sort of craft.

GM: At Key 2 is equipment and supplies to stock, fuel, repair and build the dirigible. There’s also crates of old reading material, newspapers and magazines in the end.

Ruby base dirigible flying over the island  - 1940s grey green
Ruby Base dirigible 1
Ruby base dirigible launching - 1940s grey green
Ruby Base dirigible 2
Ruby base dirigible moored on basalat - 1940s grey green
Ruby Base dirigible 3

%d bloggers like this: