1 2 3 4DGN_COMP(6) 1995 DGN_COMP(6) 5 6 7 8NAME 9 dgn_comp - NetHack dungeon compiler 10 11SYNOPSIS 12 dgn_comp [ file ] 13 14 If no arguments are given, it reads standard input. 15 16DESCRIPTION 17 Dgn_comp is a dungeon compiler for NetHack version 3.2 and 18 higher. It takes a description file as an argument and pro- 19 duces a dungeon "script" that is to be loaded by NetHack at 20 runtime. 21 22 The purpose of this tool is to provide NetHack administra- 23 tors and implementors with a convenient way to create a cus- 24 tom dungeon for the game, without having to recompile the 25 entire world. 26 27GRAMMAR 28 DUNGEON: name bonesmarker ( base , rand ) [ %age ] 29 30 where name is the dungeon name, bonesmarker is a letter for 31 marking bones files, ( base , rand ) is the number of lev- 32 els, and %age is its percentage chance of being generated 33 (if absent, 100% chance). 34 35 DESCRIPTION: tag 36 37 where tag is currently one of HELLISH, MAZELIKE, or ROGUE- 38 LIKE. 39 40 ALIGNMENT | LEVALIGN: [ lawful | neutral | chaotic | 41 unaligned ] 42 43 gives the alignment of the dungeon/level (default is 44 unaligned). 45 46 ENTRY: level 47 48 the dungeon entry point. The dungeon connection attaches at 49 this level of the given dungeon. If the value of level is 50 negative, the entry level is calculated from the bottom of 51 the dungeon, with -1 being the last level. If this line is 52 not present in a dungeon description, the entry level 53 defaults to 1. 54 55 PROTOFILE: name 56 57 the prototypical name for dungeon level files in this 58 dungeon. For example, the PROTOFILE name for the dungeon 59 Vlad's Tower is tower. 60 61 62 63Dec Last change: 12 1 64 65 66 67 68 69 70DGN_COMP(6) 1995 DGN_COMP(6) 71 72 73 74 LEVEL: name bonesmarker @ ( base , rand ) [ %age ] 75 76 where name is the level name, bonesmarker is a letter for 77 marking bones files, ( base , rand ) is the location and 78 %age is the generation percentage, as above. 79 80 RNDLEVEL: name bonesmarker @ ( base , rand ) [ %age ] 81 rndlevs 82 83 where name is the level name, bonesmarker is a letter for 84 marking bones files, ( base , rand ) is the location, %age 85 is the generation percentage, as above, and rndlevs is the 86 number of similar levels available to choose from. 87 88 CHAINLEVEL: name bonesmarker prev_name + ( base , rand ) [ 89 %age ] 90 91 where name is the level name, bonesmarker is a letter for 92 marking bones files, prev_name is the name of a level 93 defined previously, ( base , rand ) is the offset from the 94 level being chained from, and %age is the generation percen- 95 tage. 96 97 RNDCHAINLEVEL: name bonesmarker prev_name + ( base , rand ) 98 [ %age ] rndlevs 99 100 where name is the level name, bonesmarker is a letter for 101 marking bones files, prev_name is the name of a level 102 defined previously, ( base , rand ) is the offset from the 103 level being chained from, %age is the generation percentage, 104 and rndlevs is the number of similar levels available to 105 choose from. 106 107 LEVELDESC: type 108 109 where type is the level type, (see DESCRIPTION, above). The 110 type is used to override any pre-set value used to describe 111 the entire dungeon, for this level only. 112 113 BRANCH: name @ ( base , rand ) [ stair | no_up | no_down | 114 portal ] [ up | down ] 115 116 where name is the name of the dungeon to branch to, and ( 117 base , rand ) is the location of the branch. The last two 118 optional arguments are the branch type and branch direction. 119 The type of a branch can be a two-way stair connection, a 120 one-way stair connection, or a magic portal. A one-way 121 stair is described by the types no_up and no_down which 122 specify which stair direction is missing. The default 123 branch type is stair. The direction for a stair can be 124 either up or down; direction is not applicable to portals. 125 The default direction is down. 126 127 128 129Dec Last change: 12 2 130 131 132 133 134 135 136DGN_COMP(6) 1995 DGN_COMP(6) 137 138 139 140 CHAINBRANCH: name prev_name + ( base , rand ) [ stair | 141 no_up | no_down | portal ] [ up | down ] 142 143 where name is the name of the dungeon to branch to, 144 prev_name is the name of a previously defined level and ( 145 base , rand ) is the offset from the level being chained 146 from. The optional branch type and direction are the same 147 as described above. 148 149GENERIC RULES 150 Each dungeon must have a unique bonesmarker , and each spe- 151 cial level must have a bonesmarker unique within its dungeon 152 (letters may be reused in different dungeons). If the 153 bonesmarker has the special value "none", no bones files 154 will be created for that level or dungeon. 155 156 The value base may be in the range of 1 to MAXLEVEL (as 157 defined in global.h ). 158 159 The value rand may be in the range of -1 to MAXLEVEL. 160 161 If rand is -1 it will be replaced with the value 162 (num_dunlevs(dungeon) - base) during the load process (ie. 163 from here to the end of the dungeon). 164 165 If rand is 0 the level is located absolutely at base. 166 167 Branches don't have a probability. Dungeons do. If a 168 dungeon fails to be generated during load, all its levels 169 and branches are skipped. 170 171 No level or branch may be chained from a level with a per- 172 centage generation probability. This is to prevent non- 173 resolution during the load. In addition, no branch may be 174 made from a dungeon with a percentage generation probability 175 for the same reason. 176 177 As a general rule using the dungeon compiler: 178 179 If a dungeon has a protofile name associated with it (eg. 180 tower) that file will be used. 181 182 If a special level is present, it will override the above 183 rule and the appropriate file will be loaded. 184 185 If neither of the above are present, the standard generator 186 will take over and make a "normal" level. 187 188 A level alignment, if present, will override the alignment 189 of the dungeon that it exists within. 190 191 192 193 194 195Dec Last change: 12 3 196 197 198 199 200 201 202DGN_COMP(6) 1995 DGN_COMP(6) 203 204 205 206EXAMPLE 207 Here is the current syntax of the dungeon compiler's 208 "language": 209 210 211 # 212 # The dungeon description file for the "standard" original 213 # 3.0 NetHack. 214 # 215 DUNGEON: "The Dungeons of Doom" "D" (25, 5) 216 LEVEL: "rogue" "none" @ (15, 4) 217 LEVEL: "oracle" "none" @ (5, 7) 218 LEVEL: "bigroom" "B" @ (12, 3) 15 219 LEVEL: "medusa" "none" @ (20, 5) 220 CHAINLEVEL: "castle" "medusa" + (1, 4) 221 CHAINBRANCH: "Hell" "castle" + (0, 0) no_down 222 BRANCH: "The Astral Plane" @ (1, 0) no_down up 223 224 DUNGEON: "Hell" "H" (25, 5) 225 DESCRIPTION: mazelike 226 DESCRIPTION: hellish 227 BRANCH: "Vlad's Tower" @ (13, 5) up 228 LEVEL: "wizard" "none" @ (15, 10) 229 LEVEL: "fakewiz" "A" @ (5, 5) 230 LEVEL: "fakewiz" "B" @ (10, 5) 231 LEVEL: "fakewiz" "C" @ (15, 5) 232 LEVEL: "fakewiz" "D" @ (20, 5) 233 LEVEL: "fakewiz" "E" @ (25, 5) 234 235 DUNGEON: "Vlad's Tower" "T" (3, 0) 236 PROTOFILE: "tower" 237 DESCRIPTION: mazelike 238 ENTRY: -1 239 240 DUNGEON: "The Astral Plane" "A" (1, 0) 241 DESCRIPTION: mazelike 242 PROTOFILE: "endgame" 243 244 NOTES: 245 Lines beginning with '#' are considered comments. 246 A special level must be explicitly aligned. The alignment 247 of the dungeon it is in only applies to non-special levels 248 within that dungeon. 249 250AUTHOR 251 M. Stephenson (from the level compiler by Jean-Christophe 252 Collet). 253 254SEE ALSO 255 lev_comp(6), nethack(6) 256 257 258 259 260 261Dec Last change: 12 4 262 263 264 265 266 267 268DGN_COMP(6) 1995 DGN_COMP(6) 269 270 271 272BUGS 273 Probably infinite. 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327Dec Last change: 12 5 328 329 330 331