Provided by: nethack-common_3.4.3-14_amd64 bug

NAME

       dgn_comp - NetHack dungeon compiler

SYNOPSIS

       dgn_comp [ file ]

       If no arguments are given, it reads standard input.

DESCRIPTION

       Dgn_comp is a dungeon compiler for NetHack version 3.2 and higher.  It takes a description
       file as an argument and produces a dungeon "script" that is to be  loaded  by  NetHack  at
       runtime.

       The  purpose  of  this  tool  is to provide NetHack administrators and implementors with a
       convenient way to create a custom dungeon for the game, without having  to  recompile  the
       entire world.

GRAMMAR

       DUNGEON: name bonesmarker ( base , rand ) [ %age ]

       where  name is the dungeon name, bonesmarker is a letter for marking bones files, ( base ,
       rand ) is the number of levels, and %age is its percentage chance of being  generated  (if
       absent, 100% chance).

       DESCRIPTION: tag

       where tag is currently one of HELLISH, MAZELIKE, or ROGUELIKE.

       ALIGNMENT | LEVALIGN: [ lawful | neutral | chaotic | unaligned ]

       gives the alignment of the dungeon/level (default is unaligned).

       ENTRY: level

       the  dungeon  entry  point.   The  dungeon  connection attaches at this level of the given
       dungeon.  If the value of level is negative, the entry level is calculated from the bottom
       of  the  dungeon,  with -1 being the last level.  If this line is not present in a dungeon
       description, the entry level defaults to 1.

       PROTOFILE: name

       the prototypical name for dungeon level files in this dungeon.  For example, the PROTOFILE
       name for the dungeon Vlad's Tower is tower.

       LEVEL: name bonesmarker @ ( base , rand ) [ %age ]

       where  name  is  the level name, bonesmarker is a letter for marking bones files, ( base ,
       rand ) is the location and %age is the generation percentage, as above.

       RNDLEVEL: name bonesmarker @ ( base , rand ) [ %age ] rndlevs

       where name is the level name, bonesmarker is a letter for marking bones files,  (  base  ,
       rand  )  is  the location, %age is the generation percentage, as above, and rndlevs is the
       number of similar levels available to choose from.

       CHAINLEVEL: name bonesmarker prev_name + ( base , rand ) [ %age ]

       where name is the level name, bonesmarker is a letter for marking bones  files,  prev_name
       is  the  name  of a level defined previously, ( base , rand ) is the offset from the level
       being chained from, and %age is the generation percentage.

       RNDCHAINLEVEL: name bonesmarker prev_name + ( base , rand ) [ %age ] rndlevs

       where name is the level name, bonesmarker is a letter for marking bones  files,  prev_name
       is  the  name  of a level defined previously, ( base , rand ) is the offset from the level
       being chained from, %age is the generation  percentage,  and  rndlevs  is  the  number  of
       similar levels available to choose from.

       LEVELDESC: type

       where  type  is the level type, (see DESCRIPTION, above). The type is used to override any
       pre-set value used to describe the entire dungeon, for this level only.

       BRANCH: name @ ( base , rand ) [ stair | no_up | no_down | portal ] [ up | down ]

       where name is the name of the dungeon to branch to, and ( base , rand ) is the location of
       the  branch.   The  last  two optional arguments are the branch type and branch direction.
       The type of a branch can be a two-way stair connection, a one-way stair connection,  or  a
       magic  portal.   A one-way stair is described by the types no_up and no_down which specify
       which stair direction is missing.  The default branch type is stair.  The direction for  a
       stair  can  be  either  up  or  down; direction is not applicable to portals.  The default
       direction is down.

       CHAINBRANCH: name prev_name + ( base , rand ) [ stair | no_up | no_down | portal ] [ up  |
       down ]

       where  name is the name of the dungeon to branch to, prev_name is the name of a previously
       defined level and ( base , rand ) is the offset from the level being  chained  from.   The
       optional branch type and direction are the same as described above.

GENERIC RULES

       Each  dungeon  must  have  a  unique  bonesmarker  ,  and  each  special level must have a
       bonesmarker unique within its dungeon (letters may be reused in different  dungeons).   If
       the  bonesmarker  has  the  special  value "none", no bones files will be created for that
       level or dungeon.

       The value base may be in the range of 1 to MAXLEVEL (as defined in global.h ).

       The value rand may be in the range of -1 to MAXLEVEL.

       If rand is -1 it will be replaced with the value (num_dunlevs(dungeon) - base) during  the
       load process (ie. from here to the end of the dungeon).

       If rand is 0 the level is located absolutely at base.

       Branches  don't  have  a  probability.   Dungeons  do.  If a dungeon fails to be generated
       during load, all its levels and branches are skipped.

       No level or branch may be chained from a level with a percentage  generation  probability.
       This  is  to  prevent  non-resolution during the load.  In addition, no branch may be made
       from a dungeon with a percentage generation probability for the same reason.

       As a general rule using the dungeon compiler:

       If a dungeon has a protofile name associated with it (eg.  tower) that file will be used.

       If a special level is present, it will override the above rule and  the  appropriate  file
       will be loaded.

       If  neither  of  the  above  are present, the standard generator will take over and make a
       "normal" level.

       A level alignment, if present, will override the alignment of the dungeon that  it  exists
       within.

EXAMPLE

       Here is the current syntax of the dungeon compiler's "language":

       #
       #       The dungeon description file for the "standard" original
       #       3.0 NetHack.
       #
       DUNGEON:        "The Dungeons of Doom" "D" (25, 5)
       LEVEL:          "rogue" "none" @ (15, 4)
       LEVEL:          "oracle" "none" @ (5, 7)
       LEVEL:          "bigroom" "B" @ (12, 3) 15
       LEVEL:          "medusa" "none" @ (20, 5)
       CHAINLEVEL:     "castle" "medusa" + (1, 4)
       CHAINBRANCH:    "Hell" "castle" + (0, 0) no_down
       BRANCH:         "The Astral Plane" @ (1, 0) no_down up

       DUNGEON:        "Hell" "H" (25, 5)
       DESCRIPTION:    mazelike
       DESCRIPTION:    hellish
       BRANCH:         "Vlad's Tower" @ (13, 5) up
       LEVEL:          "wizard" "none" @ (15, 10)
       LEVEL:          "fakewiz" "A" @ (5, 5)
       LEVEL:          "fakewiz" "B" @ (10, 5)
       LEVEL:          "fakewiz" "C" @ (15, 5)
       LEVEL:          "fakewiz" "D" @ (20, 5)
       LEVEL:          "fakewiz" "E" @ (25, 5)

       DUNGEON:        "Vlad's Tower" "T" (3, 0)
       PROTOFILE:      "tower"
       DESCRIPTION:    mazelike
       ENTRY:          -1

       DUNGEON:        "The Astral Plane" "A" (1, 0)
       DESCRIPTION:    mazelike
       PROTOFILE:      "endgame"

       NOTES:
       Lines beginning with '#' are considered comments.
       A  special  level  must be explicitly aligned.  The alignment of the dungeon it is in only
       applies to non-special levels within that dungeon.

AUTHOR

       M. Stephenson (from the level compiler by Jean-Christophe Collet).

SEE ALSO

       lev_comp(6), nethack(6)

BUGS

       Probably infinite.