Difference between revisions of "Des-file format (UnNetHack)"
m (→variable: var type) |
m (some more info) |
||
Line 32: | Line 32: | ||
==Level statements== | ==Level statements== | ||
+ | |||
+ | Level statements include the following commands, and {{sa|variable}} definitions. | ||
===MESSAGE=== | ===MESSAGE=== | ||
Line 63: | Line 65: | ||
1/200 chance each turn to get one of the sounds defined. In this case, "You hear falling rocks.", "Kaboom!", "Mwahahah!", or "You feel hot!" | 1/200 chance each turn to get one of the sounds defined. In this case, "You hear falling rocks.", "Kaboom!", "Mwahahah!", or "You feel hot!" | ||
+ | ===BRANCH=== | ||
+ | BRANCH:(x1,y1,x2,y2), (x3,y3,x4,y4) | ||
+ | BRANCH:levregion(x1,y1,x2,y2), levregion(x3,y3,x4,y4) | ||
+ | |||
+ | ===CORRIDOR=== | ||
+ | CORRIDOR:(room_number, direction, door_position), (room_number, direction, door_position) | ||
+ | CORRIDOR:(room_number, direction, door_position), any_integer | ||
+ | |||
+ | ===SHUFFLE=== | ||
+ | SHUFFLE:any_array_variable | ||
+ | |||
+ | ===NON_DIGGABLE=== | ||
+ | NON_DIGGABLE:region_or_variable | ||
+ | |||
+ | ===ROOMDOOR=== | ||
+ | ROOMDOOR:secret, door_state, door_wall, door_pos | ||
+ | secret can be one of <tt>true</tt>, <tt>false</tt>, or <tt>random</tt>. | ||
+ | door_state can be one of open, closed, locked, nodoor, broken, secret, or <tt>random</tt>. | ||
+ | door_wall can be one of north, south, west, or east, a pipe-delimited list of those, or <tt>random</tt>. | ||
+ | door_pos is a positive integer value. | ||
+ | |||
+ | ===DOOR=== | ||
+ | DOOR:door_state, {{sa|selection}} | ||
+ | |||
+ | ===WALLWALK=== | ||
+ | WALLWALK:{{sa|coord or variable}}, map character or variable | ||
+ | WALLWALK:{{sa|coord or variable}}, map character or variable, 50% | ||
+ | WALLWALK:{{sa|coord or variable}}, map character or variable, map character or variable | ||
+ | WALLWALK:{{sa|coord or variable}}, map character or variable, map character or variable, 50% | ||
+ | |||
+ | ===DRAWBRIDGE=== | ||
+ | DRAWBRIDGE:{{sa|coord or variable}}, direction, door_state | ||
+ | |||
+ | ===ENGRAVING=== | ||
+ | ENGRAVING:{{sa|coord or variable}}, engraving_type, "string" | ||
+ | ENGRAVING:{{sa|coord or variable}}, engraving_type, $stringvariable | ||
+ | engraving_type can be one of dust, engrave, burn, mark, blood, or <tt>random</tt> | ||
+ | |||
+ | ===FOUNTAIN=== | ||
+ | FOUNTAIN:{{sa|selection}} | ||
+ | ===GOLD=== | ||
+ | GOLD:{{sa|mathematical expression}}, {{sa|coord or variable}} | ||
==variable== | ==variable== |
Revision as of 21:44, 7 January 2013
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
Level statements include the following commands, and variable definitions.
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
MON_GENERATION
Change the monster generation chances for this level.
MON_GENERATION:75%, (9, 'a'), (1, "fire giant")
75% of randomly generated monsters are either ants (90% chance), or fire giants (10% chance).
SOUNDS
Random sounds on this level.
SOUNDS:200, (hear, "falling rocks."), (pline, "Kaboom!"), (verbal, "Mwahahah!"), (feel, "hot!")
1/200 chance each turn to get one of the sounds defined. In this case, "You hear falling rocks.", "Kaboom!", "Mwahahah!", or "You feel hot!"
BRANCH
BRANCH:(x1,y1,x2,y2), (x3,y3,x4,y4) BRANCH:levregion(x1,y1,x2,y2), levregion(x3,y3,x4,y4)
CORRIDOR
CORRIDOR:(room_number, direction, door_position), (room_number, direction, door_position) CORRIDOR:(room_number, direction, door_position), any_integer
SHUFFLE
SHUFFLE:any_array_variable
NON_DIGGABLE
NON_DIGGABLE:region_or_variable
ROOMDOOR
ROOMDOOR:secret, door_state, door_wall, door_pos
secret can be one of true, false, or random. door_state can be one of open, closed, locked, nodoor, broken, secret, or random. door_wall can be one of north, south, west, or east, a pipe-delimited list of those, or random. door_pos is a positive integer value.
DOOR
DOOR:door_state, selection
WALLWALK
WALLWALK:coord or variable, map character or variable WALLWALK:coord or variable, map character or variable, 50% WALLWALK:coord or variable, map character or variable, map character or variable WALLWALK:coord or variable, map character or variable, map character or variable, 50%
DRAWBRIDGE
DRAWBRIDGE:coord or variable, direction, door_state
ENGRAVING
ENGRAVING:coord or variable, engraving_type, "string" ENGRAVING:coord or variable, engraving_type, $stringvariable
engraving_type can be one of dust, engrave, burn, mark, blood, or random
FOUNTAIN
FOUNTAIN:selection
GOLD
GOLD:mathematical expression, 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. Some variable definitions must have the variable type: TERRAIN, MONSTER, OBJECT and selection.
$foo = 123 $foo = "any string" $foo = mathematical expression $bar = $foo $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) $foo = selection:selection
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) $foo = (4,10) $bar = { (4,10), (3,12), (50,2) } GRAVE: $foo GRAVE: $bar[1]
GRAVE: rndcoord(selection)
A random coordinate selected from within the selection
region or variable
This parameter can be either a region, or a variable of the region type. For example:
NON_DIGGABLE:(5,5, 40,12) $foo = (5,5, 40,12) NON_DIGGABLE:$foo
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)
selection
A selection is a collection of map coordinates. The selection keyword is only needed when defining a variable of selection type.
$foo = selection:coord or variable $foo = selection:rect region or variable $foo = selection:fillrect region or variable $foo = selection:line coord or variable-coord or variable $foo = selection:randline coord or variable-coord or variable,mathematical expression $foo = selection:grow (selection) $foo = selection:grow (list of directions, selection) $foo = selection:filter (50%, selection)) $foo = selection:filter (selection, selection) $foo = selection:floodfill coord or variable $foo = selection:circle (coord or variable, mathematical expression) $foo = selection:circle (coord or variable, mathematical expression, filled) $foo = selection:circle (coord or variable, mathematical expression, unfilled) $foo = selection:ellipse (coord or variable, mathematical expression, mathematical expression) $foo = selection:ellipse (coord or variable, mathematical expression, mathematical expression, filled) $foo = selection:ellipse (coord or variable, mathematical expression, mathematical expression, unfilled) $bar = $foo
Selections can be added together with the '&' operator, for example rect(5,5, 50,18) & rect(10,2, 40,13):
$foo = selection:rect(5,5, 50,18) & rect(10,2, 40,13)
To select a random coordinate from a selection, use rndcoord(selection):
$bar = rndcoord(rect(5,5, 50,18) & rect(10,2, 40,13))