Des-file format (UnNetHack)
This is a preliminary document of the Des-file format used by UnNetHack.
UnNethack, like Sporkhack started with the new level compiler patch, and added most of the changes from Spork.
A level consists of any number of Header statements, and one or more of Level definitions.
Header statements
FUNCTION
FUNCTION name() { Level statements }
Defines a function. The level statements defined inside the function body will be executed when the function is called. Function must be defined before it can be called. Call the function by using it's name, for example name()
INCLUDE
INCLUDE "filename.des"
Includes the contents of the file in the current file.
Level definitions
Level definition consists of LEVEL, optional FLAGS and any number of Level statements.
LEVEL
LEVEL:"name"
FLAGS
FLAGS:noteleport,mazelevel
Defines special flags for the whole level. Parameters are a comma-separated list of flags: noteleport, sheol, hardfloor, nommap, arboreal, shortsighted, noflipx, noflipy, noflip, mazelevel, premapped, shroud, stormy, graveyard, and sky.
Level statements
MESSAGE
MESSAGE:"any string goes here"
INIT_MAP
INIT_MAP:solidfill, ' ' INIT_MAP:mines, '.' , ' ', true, true, random, true INIT_MAP:sheollev INIT_MAP:mazegrid,'-'
Initializes the map with different algorithm.
ALTAR
ALTAR:coord or variable, alignment, altartype
Create an altar.
GRAVE
GRAVE:coord or variable, "Any epitaph message" GRAVE:coord or variable, random GRAVE:coord or variable
variable
Variable names start with a dollar sign, and can contain any alphanumeric characters. Variables must be defined before they can be used.
$foo = 123 $foo = "any string" $foo = mathematical expression $foo = $bar $foo = TERRAIN:'T' $foo = MONSTER:'d' $foo = MONSTER:"little dog" $foo = MONSTER:('d', "little dog") $foo = MONSTER:random $foo = OBJECT:'/' $foo = OBJECT:"elven cloak" $foo = OBJECT:('?', "identify") $foo = (40, 12) $foo = (5,5, 40,12)
Array variables:
$foo = { 1, 2, 3, 4, 5 } $foo = { "string a", "bcdef", "and something" } $foo = { (1,2), (40,12) } $foo = { (5,5,40,12), (1,1,20,18), (40,10,50,12) } $foo = TERRAIN: { 'T', 'L', '.' } $foo = MONSTER: { 'n', "newt", ('d', "little dog") } $foo = OBJECT: { '/', "elven cloak", ('?', "identify") }
To access one element of an array variable, use eg. $foo[0] to access variable $foo's first element.
coord or variable
This parameter can be either a coordinate, or a variable of the coordinate type. For example:
GRAVE: (10,5)
Hard-coded coordinate.
$foo = (4,10) GRAVE: $foo
$foo = { (4,10), (3,12), (50,2) } GRAVE: $foo[0]
GRAVE: rndcoord(selection)
A random coordinate selected from within the selection
mathematical expression
A mathematical expression can consist of plain integer values, D-notations, and the operands '+', '-', '*', '/', and '%'. For example: 1 + 2, or 3d6 * (2 + 3). Negative integer values should be enclosed inside parenthesis: (-1) * (-3)