Underdark cave generator

This is an Underdark cave generator what I have made for my Underdark campaign, I hope you can use it as well.
It is just a location and lacks any living monsters, but it can add some hooks.
If you have any ideas how to improve it or if you find a mistake/error, then please contact me at lszatmary@index.hu

Result

Geometry

Resolve: {|Roll on "Cave_gen" (cols="2", filter="Formed by", filter_cols="1")}

Resolve: {30%?|30%?The whole cave slopes {slightly|steeply} {from left to right|from right to left|towards you|from you} {| and {40%?slightly|20%?sharply|} turns to {left|right}}.|The whole cave {slightly|} turns to {left|right}.}

{% cave_width_base = {1d8 *15} %} {% cave_width_toler= {1d3 *15} %}
{% cave_depth_base = {1d8 *15} %} {% cave_depth_toler= {1d3 *15} %}
{% cave_height_base = {2d4 *15} %} {% cave_height_toler= {1d3 *15} %}
{# {% end %} #}

Width: {$cave_width_base} - Roll {$cave_width_base} + {$cave_width_toler} feet. (It is wider at the Resolve: {closer side|middle|farther side} of the cave.)
Depth: {$cave_depth_base} - Roll {$cave_depth_base} + {$cave_depth_toler} feet. (It is longer at the Resolve: {left side|middle|right side} of the cave.)
Height: {$cave_height_base} - Roll {$cave_height_base} + {$cave_height_toler} feet. (It is higher at the Resolve: {closer side|left side|middle|right side|farther side} of the cave.)

{% cave_chamb_num = {1d4-1} %}

{%if {$cave_chamb_num} > 0%}

Chambers

The cave has {$cave_chamb_num} {%if {$cave_chamb_num} > 1%}chambers{%else%}chamber{%end%}:
{%for i in range from: 1 to:{$cave_chamb_num}%}
{% cave_width_chamb = {2d8 *5} %}
{% cave_depth_chamb = {2d8 *5} %}
{% cave_height_chamb = {2d8 *5} %}

  • a {$cave_width_chamb} feet wide, {$cave_depth_chamb} feet long and {$cave_height_chamb} feet tall one on the Resolve: {right wall|left wall|opposite wall|close wall, {left|right} from you}.Resolve: {| A Roll 3d5 feet wide, Roll 2d10 feet long {passage| and Roll 3d5 feet tall tunnel} connects it to the main cave.}
    Resolve: {|However it is hidden by an **illusion**, made by a {70%?{30%?drow|40%?deep gnome|10%?duergar|4%?human|7%?dwarf|3%?elf|2%?hobbit|2%?tiefling|dragonborn} spellcaster|{35%?{50%?deva|solar|planetar}|55%?{demon|devil}|5%?demi-god|god}} {ages|long time|not so long} ago.}
    {%end%}{%end%}

{%if {$cave_width_base} > {$cave_depth_base}%} {% cave_shape_var = "wide" %} {%end%}

{%if {$cave_depth_base} > {$cave_width_base}%} {% cave_shape_var = "elongated" %} {%end%}

Exits

{% cave_exit_num  = {10%?0|{d4}}%}

{%if {$cave_exit_num} > 0%}

Beside that Roll 2d6 feet wide and Roll 2d8 feet tall exit what you have used to reach this cave, it has {%if {$cave_exit_num} > 1%}{$cave_exit_num} other ones{%else%}another one{%end%}:

{%for i in range from: 1 to:{$cave_exit_num}%}
{%cave_exit_pos = {on the {right wall|left wall|opposite wall|close wall, {left|right} from you}}%}
{%cave_exit_chamb = 0%}
{%if {$cave_chamb_num} > 0%}{%cave_exit_chamb = {0|35%?1}%}
{%if {$cave_exit_chamb} == 1%}{%cave_exit_pos = {in the {1d{$cave_chamb_num}}. chamber} %}{%end%}
{%end%}

  • a Roll 2d6 feet wide and Roll 2d8 feet tall one {$cave_exit_pos}.Resolve: {| It starts Roll 1d6 feet above the ground.}
    Resolve: {|However it is hidden by an **illusion**, made by a {70%?{30%?drow|40%?deep gnome|10%?duergar|4%?human|7%?dwarf|3%?elf|2%?hobbit|2%?tiefling|dragonborn} spellcaster|{35%?{50%?deva|solar|planetar}|55%?{demon|devil}|5%?demi-god|god}} {ages|long time|not so long} ago.}{%end%}

{%else%}This cave has no exit except that Roll 2d6 feet wide and Roll 2d8 feet tall one what you have used to reach it.{%end%}

Light

{% cave_is_faer  = {0|3%?1}%}

The cave is Resolve: {15%?totally **dark**{% cave_is_faer  = 0%}|{20%?|70%?dimly|brightly} illuminated by Roll on {33%?**lichen**|30%?**moss**|30%?**fungi**|3%?**molten rock**|2%?{blue|white|green|amber coloured} **radiating crystals**|constant {blue|green|violet} **faerie fires**} 1d3 times (unique results only){%if {$cave_is_faer} == 1%}, **faerzress**{%end%}}.

Features

{%for i in range from:2 to:{3d2}%}
{%cave_feature_chamb = 0%}
{%if {$cave_chamb_num} > 0%}{%cave_feature_chamb = {0|35%?1}%}{%end%}

{%if cave_is_faer  == 1%}{% feature_type = "Faerzress"%}{% cave_is_faer  = 0%}
{%else%}
{% feature_type = {5%?Rift|5%?Stream|45%?Sediments|5%?Shaft|5%?Lake|4%?Skeleton|3%?Corpse|Petrified Body|25%?Plateau|1%?Portal} %}
{%end%}
{$feature_type}

Roll on "Cave_gen" (cols="2", filter="{$feature_type}", filter_cols="1")
Resolve: {| However it is just merely an **illusion**, made by a {70%?{30%?drow|40%?deep gnome|10%?duergar|4%?human|7%?dwarf|3%?elf|2%?hobbit|2%?tiefling|dragonborn} spellcaster|{35%?{50%?deva|solar|planetar}|55%?{demon|devil}|5%?demi-god|god}} {ages|long time|not so long} ago.}
{%end%}


Subcharts

Cave_gen (d15)

d15 Feature Result

1

Rift

{% cave_rift_width = {ceil(1d{$cave_depth_base}/15)*5} %}

{% cave_rift_depth = {1d20*100} %}

{% cave_rift_height = {1d20*100} %}

{% cave_rift_bridge_con = {80%?weary |15%?|new } %}

There is a circa {$cave_rift_width} feet wide rift which runs across the Resolve: {middle|closer part|farther part|left side|right side} of the cave. Its other side is Resolve: {40%?at the same level as|30%?Roll 1d12 feet higher than|Roll 1d12 feet lower than} the closer one. Its depth is about {$cave_rift_depth} feetResolve: {80%?| and a {{80%?|lava }stream} flows at the bottom}.

Resolve: {|It continues on the walls and on the ceiling too, its height is about {$cave_rift_height} feet.}Resolve: {| A {$cave_rift_bridge_con}{rope-and-bone|stone|iron} **bridge** spans over it}

2

Stream

{% cave_stream_type = {dried out **streambed**|70%?{75%?|very {hot |cold }|5%?slightly acidic }**stream**|5%?**lava stream**} %}

{% cave_stream_bridge_con = {80%?weary |15%?|new } %}

There is a circa Roll ceil(1d{$cave_depth_base}/15)*5 feet wide and Roll 1d4 feet deep {$cave_stream_type}, which runs across the Resolve: {middle|closer part|farther part|left side|right side} of the cave.Resolve: {80%?|A {$cave_stream_bridge_con}{rope-and-bone|stone|iron} bridge spans across it|Some boulders can be used to go over the stream.}}

3

Fungus

The Resolve: {whole|middle|left side of the|right side of the|closer side of the|farther side of the} cave is spotted by fungi

4

Sediments

{%if {$cave_feature_chamb} == 1%}{%cave_sedi_pos = {in the {1d{$cave_chamb_num}}. chamber} %}{%else%}{%cave_sedi_pos = {at the {middle|closer side|farther side|left side|right side} of the cave}%}{%end%}

{% cave_sediment_type = {UNQ(1d4, {20%?**stalactites**|20%?**stalagmites**|10%?**columns**|7%?**cave pearls**|7%?**soda straws**|3%?cave **blankets**|3%?cave **curtains**|**rocks**})} %}

Resolve: {There {is a {big|huge|strange shaped|broken|{badly|lightly} damaged}, lone {**stalactite**|**stalagmite**|**column**}| are Roll 1d6+1 {big|huge|strange shaped|broken|{badly|lightly} damaged} {**stalactites**|**stalagmites**|**columns**}} {$cave_sedi_pos}.|The {middle|closer part|farther part|left side|right side} of the cave is covered by LOWER(Roll on {$cave_sediment_type})}.

5

Shaft

{%if {$cave_feature_chamb} == 1%}{%cave_shaft_pos = {in the {1d{$cave_chamb_num}}. chamber} %}{%else%}{%cave_shaft_pos = {at the {middle|closer side|farther side|left side|right side} of the cave}%}{%end%}

{% cave_shaft_maxdiam = {min({$cave_depth_base}, {$cave_width_base})} %}

{% cave_shaft_up = {0|1} %} {%cave_shaft_down = {0|1} %} {% cave_shaft_ventilup = 0 %} {%cave_shaft_ventildown = 0 %}

{%if {$cave_shaft_up} == 1%}

{% cave_shaft_ventilup = {0|30%?1} %}

There is a Roll ceil(1d{$cave_shaft_maxdiam}/2) feet diameter shaft In the ceiling {$cave_shaft_pos}. Its height is about Roll 1d8*100 feet.

{%if {$cave_shaft_down} == 1%}

It continues below in the ground too. Its depth is about Roll 1d8*100 feetResolve: {80%?| and a {80%?stream|5%?lava stream|river} flows at the bottom}.{%if {$cave_shaft_ventilup} == 0%} {% cave_shaft_ventildown = {0|30%?1} %} {%end%}{%end%}

{%else%}

There is a Roll ceil(1d{$cave_shaft_maxdiam}/2) feet diameter shaft In the ground {$cave_shaft_pos}. Its depth is about Roll 1d8*100 feetResolve: {80%?| and a {80%?stream|5%?lava stream|river} flows at the bottom}.{% cave_shaft_ventildown = {0|30%?1} %}

{%end%}

{# {%if {{$cave_shaft_ventilup} + {$cave_shaft_ventildown}} > 0 %} {% cave_shaft_ventil = "it" %} #}

{# {%if {{$cave_shaft_up} + {$cave_shaft_down}} > 1 %} {% cave_shaft_ventil = "the upper one" %} {%if {$cave_shaft_ventildown} == 1 %} {% cave_shaft_ventil = "the lower one" %} {% end %} {% end %} #}

{# A {strong|weak}, {warm|cool} wind is howling {from|towards} {$cave_shaft_ventil}. #}

{# {% end %} #}

6

Lake

{% cave_lake_type = {10%?geyser lake|{75%?|very {hot |cold }|5%?slightly acidic }lake} %}

{% cave_lake_width = {ceil(2d{$cave_width_base}/15)*5} %}

{% cave_lake_length = {ceil(2d{$cave_depth_base}/15)*5} %}

There is a circa {$cave_lake_width} feet wide, {$cave_lake_length} feet long and Roll 2d5 feet deep {$cave_lake_type} at the Resolve: {middle|closer part|farther part|left side|right side} of the cave.{%if {$cave_lake_type} == "geyser lake"%} It erupts for Roll 1d10 Resolve: {seconds|minutes} in every Roll 1d10 Resolve: {minutes|hours}.{%else%}Resolve: {| A cascade falls into the lake from a Roll 1d10 feet wide and Roll 1d10 feet {long hole in the ceiling|tall hole in the wall}.}{%end%}

7

Skeleton

{%if {$cave_feature_chamb} == 1%}{%cave_skelo_pos = {{1d{$cave_chamb_num}}. chamber} %}{%else%}{%cave_skelo_pos = {{30%?whole|{middle|closer side|farther side|left side|right side} of the} cave}%}{%end%}

{% cave_skelo_num = {45%?A|45%?Some|8%?A few dozen|A huge number of} %}

{% cave_skelo_race = {6%?orc|7%?kobold|3%?drow|2%?quaggoth|3%?grimlock|2%?dwarf|3%?deep gnome|1%?beholder|3%?kuo-toa|2%?giant|3%?rothe|3%?troglodyte|4%?giant bat|3%?giant lizard|5%?hobgoblin|3%?duergar|3%?giant spider|2%?hook horror|5%?ogre|2%?mind flayer|2%?grick|2%?otyugh|6%?bugbear|2%?minotaur|1%?nothic|1%?drider|1%?fomorian|2%?troll|2%?umber hulk|2%?ettin|1%?human|1%?elf|1%?hobbit|1%?tiefling|1%?dragonborn|1%?gnome|1%?basilisk|goblin} %}

{%if {$cave_skelo_num} == "A"%}{% cave_skelo ="skeleton" %}{% cave_skelo_verb ="is scattered through" %}{%else%}{% cave_skelo ="skeletons" %}{% cave_skelo_verb ="are scattered through" %}{%end%}

{$cave_skelo_num} {$cave_skelo_race} {$cave_skelo} {$cave_skelo_verb} the {$cave_skelo_pos}.

8

Corpse

{%if {$cave_feature_chamb} == 1%}{%cave_corpse_pos = {{1d{$cave_chamb_num}}. chamber} %}{%else%}{%cave_corpse_pos = {{30%?whole|{middle|closer side|farther side|left side|right side} of the} cave}%}{%end%}

{% cave_corpse_num = {45%?A|45%?Some|8%?A few dozen|A huge number of} %}

{% cave_corpse_race = {5%?orc|3%?myconid|6%?kobold|3%?drow|2%?quaggoth|3%?grimlock|2%?dwarf|3%?deep gnome|1%?beholder|3%?kuo-toa|2%?giant|3%?rothe|3%?troglodyte|4%?giant bat|3%?giant lizard|5%?hobgoblin|3%?duergar|3%?giant spider|2%?hook horror|5%?ogre|2%?mind flayer|2%?grick|2%?otyugh|6%?bugbear|2%?minotaur|1%?nothic|1%?drider|1%?fomorian|2%?troll|2%?umber hulk|2%?ettin|1%?human|1%?elf|1%?hobbit|1%?tiefling|1%?dragonborn|1%?gnome|1%?basilisk|goblin} %}

{%if {$cave_corpse_num} == "A"%}{% cave_corpse ="corpse" %}{%else%}{% cave_corpse ="corpses" %}{%end%}

{$cave_corpse_num} Resolve: {25%?fresh|rotting|torned apart|bloodless} {$cave_corpse_race} {$cave_corpse} can be found at the {$cave_corpse_pos}.

9

Petrified Body

{%if {$cave_feature_chamb} == 1%}{%cave_petrif_pos = {{1d{$cave_chamb_num}}. chamber} %}{%else%}{%cave_petrif_pos = {{30%?whole|{middle|closer side|farther side|left side|right side} of the} cave}%}{%end%}

{% cave_petrif_num = {45%?A|45%?Some|8%?A few dozen|A huge number of} %}

{% cave_petrif_race = {5%?orc|3%?myconid|6%?kobold|3%?drow|2%?quaggoth|3%?grimlock|2%?dwarf|3%?deep gnome|1%?beholder|3%?kuo-toa|2%?giant|3%?rothe|3%?troglodyte|4%?giant bat|3%?giant lizard|5%?hobgoblin|3%?duergar|3%?giant spider|2%?hook horror|5%?ogre|2%?mind flayer|2%?grick|2%?otyugh|6%?bugbear|2%?minotaur|1%?nothic|1%?drider|1%?fomorian|2%?troll|2%?umber hulk|2%?ettin|1%?human|1%?elf|1%?hobbit|1%?tiefling|1%?dragonborn|1%?gnome|1%?basilisk|goblin} %}

{%if {$cave_petrif_num} == "A"%}{% cave_petrif ="body" %}{%else%}{% cave_petrif ="bodies" %}{%end%}

{$cave_petrif_num} petrified {$cave_petrif_race} {$cave_petrif} can be found at the {$cave_petrif_pos}.

10

Plateau

{% cave_plateau_height = {ceil(1d{$cave_height_base}/15)*5} %}

{%cave_plateau_pos = {middle|closer part|farther part|left side|right side}%}

There is a {$cave_plateau_height} feet tall plateau at the {$cave_plateau_pos} of the cave. Resolve: {|{%if {$cave_plateau_pos} == "closer part"%}You can descend from it {%else%}Its top can be reached {%end%}by {a carved **stair**|a {natural|carved} **ramp**|climbing its walls}.}

11

Portal

{%if {$cave_feature_chamb} == 1%}{%cave_portal_pos = {in the {1d{$cave_chamb_num}}. chamber} %}{%else%}{%cave_portal_pos = {at the {30%?whole|{middle|closer side|farther side|left side|right side} of the} cave}%}{%end%}

{% cave_portal_dest = {20%? a {huge|small|} {cave|chasm|lake|river|{50%?drow|5%?aboleth|10%?deep gnome|10%?duergar|15%?mind flayer|3%?derro|dwarf} {city|settlement|town|outpost}} in the Underdark|5%? a {huge|small|} {valley|lake|forest|desert|lake|sea|mountain|river|{65%?human|15%?elf|5%?hobbit|5%?gnome|dwarf} {city|settlement|town}} on the surface|20%?the Shadowfell|2%?the Feywild|10%?the Ethereal Plane|10%?the Astral Plane|10%?the Elemental Plane of {70%?Earth|15%?Fire|5%?Air|5%?Water|Chaos}|{2%?Mount Celestia|4%?Bytopia|2%?Elysium|3%?The Beastlands|2%?Arborea|3%?Ysgard|7%?Limbo|4%?Pandemonium|25%?The Abyss|5%?Carceri|8%?Hades|9%?Gehenna|13%?The Nine Hells|6%?Acheron|4%?Mechanus|Arcadia}|7%?a Demiplane|1%?the Far Realm} %}

{% cave_portal_layer = 0 %}

{%if {$cave_portal_dest} == "Bytopia"%}{% cave_portal_layer = {1d2} %}{%end%}

{%if {$cave_portal_dest} == "Mount Celestia"%}{% cave_portal_layer = {1d7} %}{%end%}

{%if {$cave_portal_dest} == "Elysium"%}{% cave_portal_layer = {1d4} %}{%end%}

{%if {$cave_portal_dest} == "The Beastlands"%}{% cave_portal_layer = {1d3} %}{%end%}

{%if {$cave_portal_dest} == "Arborea"%}{% cave_portal_layer = {1d3} %}{%end%}

{%if {$cave_portal_dest} == "Ysgard"%}{% cave_portal_layer = {1d3} %}{%end%}

{%if {$cave_portal_dest} == "Limbo"%}{% cave_portal_layer = {1d5} %}{%end%}

{%if {$cave_portal_dest} == "Pandemonium"%}{% cave_portal_layer = {1d4} %}{%end%}

{%if {$cave_portal_dest} == "The Abyss"%}

{% cave_portal_layer = {1|2|3|4|5|6|7|8|9|10|11|12|13|14|17|21|23|27|32|45|46|47|48|49|52|53|57|65|66|67|68|69|70|71|72|73|74|77|79|81|88|89|90|92|99|100|111|113|128|137|142|148||176|177|181|191|193|222|223|230|241|245|248|274|277|297|300|303|313|333|340|348|359|377|399|400|403|421|422|423|444|452|471|480|487|489|493|499|500|503|507|518|519|524|528|531|548|550|558|566|570|586|597|600|601|628|643|651|652|663|665}%}

{%end%}

{%if {$cave_portal_dest} == "Carceri"%}{% cave_portal_layer = {1d6} %}{%end%}

{%if {$cave_portal_dest} == "Hades"%}{% cave_portal_layer = {1d3} %}{%end%}

{%if {$cave_portal_dest} == "Gehenna"%}{% cave_portal_layer = {1d4} %}{%end%}

{%if {$cave_portal_dest} == "The Nine Hells"%}{% cave_portal_layer = {1d9} %}{%end%}

{%if {$cave_portal_dest} == "Acheron"%}{% cave_portal_layer = {1d6} %}{%end%}

{%if {$cave_portal_dest} == "Arcadia"%}{% cave_portal_layer = {1d2} %}{%end%}

{% cave_portal_layseq = "th"%}

{% cave_portal_dec = {floor({$cave_portal_layer}/10)*10} %}

{%if {{$cave_portal_layer} - {$cave_portal_dec}} == 1%} {% cave_portal_layseq = "st"%}{%end%}{%if {{$cave_portal_layer} - {$cave_portal_dec}} == 2%} {% cave_portal_layseq = "nd"%}{%end%}{%if {{$cave_portal_layer} - {$cave_portal_dec}} == 3%} {% cave_portal_layseq = "rd"%}{%end%}

{%if {$cave_portal_layer} == 0%} There is a portal at the Resolve: {middle|right side|left side|opposite side|close side} of the cave which opens to {$cave_portal_dest}.

{%else%}

There is a Roll 3d4 feet wide and Roll 3d4feet tall portal Resolve: {on the {ceiling|floor}|at the wall} {$cave_portal_pos} which opens to the {$cave_portal_layer}{$cave_portal_layseq} layer of {$cave_portal_dest}. {%end%}

12

Formed by

Resolve: {However difficult to notice, but this cave seems to be|It is easy to notice that this cave is} formed by Resolve: {15%?picks|3%?acid|5%?big claws|5%?a huge worm|2%?desintegrate rays|1%?glacier|25%?vulcanic activity|water}, Resolve: {ages|long time|not so long} ago.

13

Environment

Resolve: {There are {giant spider cobwebs|some nests of {bats|stirges}} at the {middle|closer part|farther part|left side|right side} of the cave.|Some {small|tiny} tunnels are carved into the {{right wall|left wall|opposite wall|close wall, {left|right} from you}.|{floor|ceiling} at the {middle|closer part|farther part|left side|right side} of the cave.}}

14

Trap

There is a Resolve: {Roll 5d3 feet deep prit trap at the {middle|closer part|farther part|left side|right side} of the cave, cloaked by {smalll rocks|dust}|trip wire} .

15

Faerzress

{%if {$cave_feature_chamb} == 1%}{%cave_faer_pos = {{1d{$cave_chamb_num}}. chamber} %}{%else%}{%cave_faer_pos = {{80%?whole|{middle|closer side|farther side|left side|right side} of the} cave}%}{%end%}

The {$cave_faer_pos} is suffused with faerzress.