Provided by: nethack-common_3.4.3-10.1ubuntu3_i386 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 per‐
        centage, 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 percent‐
        age, 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 direc‐
        tion are the same as described above.
        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 dun‐
        geon).
 
        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 gener‐
        ation 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 dun‐
        geon 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  dun‐
        geon it is in only applies to non-special levels within that dungeon.
 

AUTHOR

        M. Stephenson (from the level compiler by Jean-Christophe Collet).
        lev_comp(6), nethack(6)
 

BUGS

        Probably infinite.