Des-file format (UnNetHack)

From NetHackWiki
Revision as of 17:50, 7 January 2013 by Paxed (talk | contribs) (moar info.)
Jump to navigation Jump to search

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)