From 36736f2cf7483f25af9d2d797aaa760df91607ff Mon Sep 17 00:00:00 2001 From: nhw_cron Date: Tue, 14 Jan 2020 11:17:34 -0500 Subject: [PATCH] This is cron-daily v1-Jan-14-2020. manpages updated: lev_comp.txt --- doc/lev_comp.txt | 1115 ++++++++++++++++++++-------------------------- 1 file changed, 476 insertions(+), 639 deletions(-) diff --git a/doc/lev_comp.txt b/doc/lev_comp.txt index 4a28fcea6..d6745409e 100644 --- a/doc/lev_comp.txt +++ b/doc/lev_comp.txt @@ -1,726 +1,563 @@ - - - -LEV_COMP(6) 1996 LEV_COMP(6) +LEV_COMP(6) Games Manual LEV_COMP(6) NAME - lev_comp - NetHack special levels compiler + lev_comp - NetHack special levels compiler SYNOPSIS - lev_comp [ -w ] [ files ] + lev_comp [ -w ] [ files ] - If no arguments are given, it reads standard input. + If no arguments are given, it reads standard input. DESCRIPTION - Lev_comp is a special level compiler for NetHack version 3.2 - and higher. It takes description files as arguments and - produces level files that can be loaded by NetHack at run- - time. + Lev_comp is a special level compiler for NetHack version 3.2 and + higher. It takes description files as arguments and produces level + files that can be loaded by NetHack at runtime. - The purpose of this tool is to provide NetHack administra- - tors and implementors with a convenient way for adding spe- - cial levels to the game, or modifying existing ones, without - having to recompile the entire world. + The purpose of this tool is to provide NetHack administrators and + implementors with a convenient way for adding special levels to the + game, or modifying existing ones, without having to recompile the + entire world. - The -w option causes lev_comp to perform extra checks on the - level and display extra warnings, however these warnings are - sometimes superfluous, so they are not normally displayed. + The -w option causes lev_comp to perform extra checks on the level and + display extra warnings, however these warnings are sometimes superflu- + ous, so they are not normally displayed. GRAMMAR - file : /* nothing */ - | levels - ; - - levels : level - | level levels - ; - - level : maze_level - | room_level - ; - - maze_level : maze_def flags lev_init messages regions - ; - - room_level : level_def flags lev_init messages rreg_init rooms corridors_def - ; - - level_def : LEVEL_ID ':' string - ; - - lev_init : /* nothing */ - | LEV_INIT_ID ':' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled - ; - - walled : BOOLEAN - | RANDOM_TYPE - - - -May Last change: 16 1 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - ; - - flags : /* nothing */ - | FLAGS_ID ':' flag_list - ; - - flag_list : FLAG_TYPE ',' flag_list - | FLAG_TYPE - ; - - messages : /* nothing */ - | message messages - ; - - message : MESSAGE_ID ':' STRING - ; - - rreg_init : /* nothing */ - | rreg_init init_rreg - ; - - init_rreg : RANDOM_OBJECTS_ID ':' object_list - | RANDOM_MONSTERS_ID ':' monster_list - ; - - rooms : /* Nothing - dummy room for use with INIT_MAP */ - | roomlist - ; - - roomlist : aroom - | aroom roomlist - ; - - corridors_def : random_corridors - | corridors - ; - - random_corridors: RAND_CORRIDOR_ID - ; - - corridors : /* nothing */ - | corridors corridor - ; - - corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec - | CORRIDOR_ID ':' corr_spec ',' INTEGER - ; - - corr_spec : '(' INTEGER ',' DIRECTION ',' door_pos ')' - ; - - aroom : room_def room_details - - - -May Last change: 16 2 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - | subroom_def room_details - ; - - subroom_def : SUBROOM_ID ':' room_type ',' light_state ',' subroom_pos ',' room_size ',' string roomfill - ; - - room_def : ROOM_ID ':' room_type ',' light_state ',' room_pos ',' room_align ',' room_size roomfill - ; - - roomfill : /* nothing */ - | ',' BOOLEAN - ; - - room_pos : '(' INTEGER ',' INTEGER ')' - | RANDOM_TYPE - ; - - subroom_pos : '(' INTEGER ',' INTEGER ')' - | RANDOM_TYPE - ; - - room_align : '(' h_justif ',' v_justif ')' - | RANDOM_TYPE - ; - - room_size : '(' INTEGER ',' INTEGER ')' - | RANDOM_TYPE - ; - - room_details : /* nothing */ - | room_details room_detail - ; - - room_detail : room_name - | room_chance - | room_door - | monster_detail - | object_detail - | trap_detail - | altar_detail - | fountain_detail - | sink_detail - | pool_detail - | gold_detail - | engraving_detail - | stair_detail - ; - - room_name : NAME_ID ':' string - ; - - room_chance : CHANCE_ID ':' INTEGER - - - -May Last change: 16 3 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - ; - - room_door : DOOR_ID ':' secret ',' door_state ',' door_wall ',' door_pos - ; - - secret : BOOLEAN - | RANDOM_TYPE - ; - - door_wall : DIRECTION - | RANDOM_TYPE - ; - - door_pos : INTEGER - | RANDOM_TYPE - ; - - maze_def : MAZE_ID ':' string ',' filling - ; - - filling : CHAR - | RANDOM_TYPE - ; - - regions : aregion - | aregion regions - ; - - aregion : map_definition reg_init map_details - ; - - map_definition : NOMAP_ID - | map_geometry MAP_ID - ; - - map_geometry : GEOMETRY_ID ':' h_justif ',' v_justif - ; - - h_justif : LEFT_OR_RIGHT - | CENTER - ; - - v_justif : TOP_OR_BOT - | CENTER - ; - - reg_init : /* nothing */ - | reg_init init_reg - ; - - init_reg : RANDOM_OBJECTS_ID ':' object_list - | RANDOM_PLACES_ID ':' place_list - - - -May Last change: 16 4 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - | RANDOM_MONSTERS_ID ':' monster_list - ; - - object_list : object - | object ',' object_list - ; - - monster_list : monster - | monster ',' monster_list - ; + file : /* nothing */ + | levels + ; - place_list : place - | place ',' place_list - ; + levels : level + | level levels + ; - map_details : /* nothing */ - | map_details map_detail - ; + level : maze_level + | room_level + ; - map_detail : monster_detail - | object_detail - | door_detail - | trap_detail - | drawbridge_detail - | region_detail - | stair_region - | portal_region - | teleprt_region - | branch_region - | altar_detail - | fountain_detail - | mazewalk_detail - | wallify_detail - | ladder_detail - | stair_detail - | gold_detail - | engraving_detail - | diggable_detail - | passwall_detail - ; + maze_level : maze_def flags lev_init messages regions + ; - monster_detail : MONSTER_ID chance ':' monster_c ',' m_name ',' coordinate - monster_infos - ; + room_level : level_def flags lev_init messages rreg_init rooms corridors_def + ; - monster_infos : /* nothing */ - | monster_infos monster_info - ; + level_def : LEVEL_ID ':' string + ; - monster_info : ',' string - | ',' MON_ATTITUDE - | ',' MON_ALERTNESS + lev_init : /* nothing */ + | LEV_INIT_ID ':' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled + ; + + walled : BOOLEAN + | RANDOM_TYPE + ; + + flags : /* nothing */ + | FLAGS_ID ':' flag_list + ; + flag_list : FLAG_TYPE ',' flag_list + | FLAG_TYPE + ; + messages : /* nothing */ + | message messages + ; -May Last change: 16 5 + message : MESSAGE_ID ':' STRING + ; + rreg_init : /* nothing */ + | rreg_init init_rreg + ; + init_rreg : RANDOM_OBJECTS_ID ':' object_list + | RANDOM_MONSTERS_ID ':' monster_list + ; + rooms : /* Nothing - dummy room for use with INIT_MAP */ + | roomlist + ; + roomlist : aroom + | aroom roomlist + ; + corridors_def : random_corridors + | corridors + ; -LEV_COMP(6) 1996 LEV_COMP(6) + random_corridors: RAND_CORRIDOR_ID + ; + corridors : /* nothing */ + | corridors corridor + ; + corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec + | CORRIDOR_ID ':' corr_spec ',' INTEGER + ; - | ',' alignment - | ',' MON_APPEARANCE string - ; + corr_spec : '(' INTEGER ',' DIRECTION ',' door_pos ')' + ; - object_detail : OBJECT_ID object_desc - | COBJECT_ID object_desc - ; + aroom : room_def room_details + | subroom_def room_details + ; - object_desc : chance ':' object_c ',' o_name ',' object_where object_infos - ; + subroom_def : SUBROOM_ID ':' room_type ',' light_state ',' subroom_pos ',' room_size ',' string roomfill + ; - object_where : coordinate - | CONTAINED - ; + room_def : ROOM_ID ':' room_type ',' light_state ',' room_pos ',' room_align ',' room_size roomfill + ; - object_infos : /* nothing */ - | ',' curse_state ',' monster_id ',' enchantment optional_name - | ',' curse_state ',' enchantment optional_name - | ',' monster_id ',' enchantment optional_name - ; + roomfill : /* nothing */ + | ',' BOOLEAN + ; - curse_state : RANDOM_TYPE - | CURSE_TYPE - ; + room_pos : '(' INTEGER ',' INTEGER ')' + | RANDOM_TYPE + ; - monster_id : STRING - ; + subroom_pos : '(' INTEGER ',' INTEGER ')' + | RANDOM_TYPE + ; - enchantment : RANDOM_TYPE - | INTEGER - ; + room_align : '(' h_justif ',' v_justif ')' + | RANDOM_TYPE + ; - optional_name : /* nothing */ - | ',' NONE - | ',' STRING - ; + room_size : '(' INTEGER ',' INTEGER ')' + | RANDOM_TYPE + ; - door_detail : DOOR_ID ':' door_state ',' coordinate - ; + room_details : /* nothing */ + | room_details room_detail + ; + + room_detail : room_name + | room_chance + | room_door + | monster_detail + | object_detail + | trap_detail + | altar_detail + | fountain_detail + | sink_detail + | pool_detail + | gold_detail + | engraving_detail + | stair_detail + ; + + room_name : NAME_ID ':' string + ; + + room_chance : CHANCE_ID ':' INTEGER + ; + + room_door : DOOR_ID ':' secret ',' door_state ',' door_wall ',' door_pos + ; + + secret : BOOLEAN + | RANDOM_TYPE + ; + + door_wall : DIRECTION + | RANDOM_TYPE + ; + + door_pos : INTEGER + | RANDOM_TYPE + ; + + maze_def : MAZE_ID ':' string ',' filling + ; + + filling : CHAR + | RANDOM_TYPE + ; + + regions : aregion + | aregion regions + ; + + aregion : map_definition reg_init map_details + ; + + map_definition : NOMAP_ID + | map_geometry MAP_ID + ; + + map_geometry : GEOMETRY_ID ':' h_justif ',' v_justif + ; + + h_justif : LEFT_OR_RIGHT + | CENTER + ; + + v_justif : TOP_OR_BOT + | CENTER + ; + + reg_init : /* nothing */ + | reg_init init_reg + ; + + init_reg : RANDOM_OBJECTS_ID ':' object_list + | RANDOM_PLACES_ID ':' place_list + | RANDOM_MONSTERS_ID ':' monster_list + ; + + object_list : object + | object ',' object_list + ; + + monster_list : monster + | monster ',' monster_list + ; + + place_list : place + | place ',' place_list + ; + + map_details : /* nothing */ + | map_details map_detail + ; + + map_detail : monster_detail + | object_detail + | door_detail + | trap_detail + | drawbridge_detail + | region_detail + | stair_region + | portal_region + | teleprt_region + | branch_region + | altar_detail + | fountain_detail + | mazewalk_detail + | wallify_detail + | ladder_detail + | stair_detail + | gold_detail + | engraving_detail + | diggable_detail + | passwall_detail + ; + + monster_detail : MONSTER_ID chance ':' monster_c ',' m_name ',' coordinate + monster_infos + ; - trap_detail : TRAP_ID chance ':' trap_name ',' coordinate - ; + monster_infos : /* nothing */ + | monster_infos monster_info + ; - drawbridge_detail: DRAWBRIDGE_ID ':' coordinate ',' DIRECTION ',' door_state - ; + monster_info : ',' string + | ',' MON_ATTITUDE + | ',' MON_ALERTNESS + | ',' alignment + | ',' MON_APPEARANCE string + ; - mazewalk_detail : MAZEWALK_ID ':' coordinate ',' DIRECTION - ; + object_detail : OBJECT_ID object_desc + | COBJECT_ID object_desc + ; - wallify_detail : WALLIFY_ID - ; + object_desc : chance ':' object_c ',' o_name ',' object_where object_infos + ; + object_where : coordinate + | CONTAINED + ; + object_infos : /* nothing */ + | ',' curse_state ',' monster_id ',' enchantment optional_name + | ',' curse_state ',' enchantment optional_name + | ',' monster_id ',' enchantment optional_name + ; + + curse_state : RANDOM_TYPE + | CURSE_TYPE + ; + + monster_id : STRING + ; + + enchantment : RANDOM_TYPE + | INTEGER + ; + + optional_name : /* nothing */ + | ',' NONE + | ',' STRING + ; + + door_detail : DOOR_ID ':' door_state ',' coordinate + ; + + trap_detail : TRAP_ID chance ':' trap_name ',' coordinate + ; + + drawbridge_detail: DRAWBRIDGE_ID ':' coordinate ',' DIRECTION ',' door_state + ; + + mazewalk_detail : MAZEWALK_ID ':' coordinate ',' DIRECTION + ; + + wallify_detail : WALLIFY_ID + ; + + ladder_detail : LADDER_ID ':' coordinate ',' UP_OR_DOWN + ; + + stair_detail : STAIR_ID ':' coordinate ',' UP_OR_DOWN + ; + + stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN + ; + + portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' string + ; + + teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail + ; + branch_region : BRANCH_ID ':' lev_region ',' lev_region + ; -May Last change: 16 6 + teleprt_detail : /* empty */ + | ',' UP_OR_DOWN + ; + lev_region : region + | LEV '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')' + ; + fountain_detail : FOUNTAIN_ID ':' coordinate + ; + sink_detail : SINK_ID ':' coordinate + ; + pool_detail : POOL_ID ':' coordinate + ; + diggable_detail : NON_DIGGABLE_ID ':' region + ; -LEV_COMP(6) 1996 LEV_COMP(6) + passwall_detail : NON_PASSWALL_ID ':' region + ; + region_detail : REGION_ID ':' region ',' light_state ',' room_type prefilled + ; + altar_detail : ALTAR_ID ':' coordinate ',' alignment ',' altar_type + ; - ladder_detail : LADDER_ID ':' coordinate ',' UP_OR_DOWN - ; + gold_detail : GOLD_ID ':' amount ',' coordinate + ; - stair_detail : STAIR_ID ':' coordinate ',' UP_OR_DOWN - ; + engraving_detail: ENGRAVING_ID ':' coordinate ',' engraving_type ',' string + ; - stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN - ; + monster_c : monster + | RANDOM_TYPE + | m_register + ; - portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' string - ; + object_c : object + | RANDOM_TYPE + | o_register + ; - teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail - ; + m_name : string + | RANDOM_TYPE + ; - branch_region : BRANCH_ID ':' lev_region ',' lev_region - ; + o_name : string + | RANDOM_TYPE + ; - teleprt_detail : /* empty */ - | ',' UP_OR_DOWN - ; + trap_name : string + | RANDOM_TYPE + ; - lev_region : region - | LEV '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')' - ; + room_type : string + | RANDOM_TYPE + ; - fountain_detail : FOUNTAIN_ID ':' coordinate - ; + prefilled : /* empty */ + | ',' FILLING + | ',' FILLING ',' BOOLEAN + ; - sink_detail : SINK_ID ':' coordinate - ; + coordinate : coord + | p_register + | RANDOM_TYPE + ; - pool_detail : POOL_ID ':' coordinate - ; + door_state : DOOR_STATE + | RANDOM_TYPE + ; - diggable_detail : NON_DIGGABLE_ID ':' region - ; + light_state : LIGHT_STATE + | RANDOM_TYPE + ; - passwall_detail : NON_PASSWALL_ID ':' region - ; + alignment : ALIGNMENT + | a_register + | RANDOM_TYPE + ; - region_detail : REGION_ID ':' region ',' light_state ',' room_type prefilled - ; + altar_type : ALTAR_TYPE + | RANDOM_TYPE + ; - altar_detail : ALTAR_ID ':' coordinate ',' alignment ',' altar_type - ; + p_register : P_REGISTER '[' INTEGER ']' + ; - gold_detail : GOLD_ID ':' amount ',' coordinate - ; + o_register : O_REGISTER '[' INTEGER ']' + ; - engraving_detail: ENGRAVING_ID ':' coordinate ',' engraving_type ',' string - ; + m_register : M_REGISTER '[' INTEGER ']' + ; - - -May Last change: 16 7 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - monster_c : monster - | RANDOM_TYPE - | m_register - ; - - object_c : object - | RANDOM_TYPE - | o_register - ; - - m_name : string - | RANDOM_TYPE - ; - - o_name : string - | RANDOM_TYPE - ; - - trap_name : string - | RANDOM_TYPE - ; - - room_type : string - | RANDOM_TYPE - ; - - prefilled : /* empty */ - | ',' FILLING - | ',' FILLING ',' BOOLEAN - ; - - coordinate : coord - | p_register - | RANDOM_TYPE - ; - - door_state : DOOR_STATE - | RANDOM_TYPE - ; - - light_state : LIGHT_STATE - | RANDOM_TYPE - ; - - alignment : ALIGNMENT - | a_register - | RANDOM_TYPE - ; - - altar_type : ALTAR_TYPE - | RANDOM_TYPE - ; - - - -May Last change: 16 8 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - p_register : P_REGISTER '[' INTEGER ']' - ; - - o_register : O_REGISTER '[' INTEGER ']' - ; - - m_register : M_REGISTER '[' INTEGER ']' - ; - - a_register : A_REGISTER '[' INTEGER ']' - ; - - place : coord - ; - - monster : CHAR - ; - - object : CHAR - ; - - string : STRING - ; - - amount : INTEGER - | RANDOM_TYPE - ; - - chance : /* empty */ - | PERCENT - ; - - engraving_type : ENGRAVING_TYPE - | RANDOM_TYPE - ; - - coord : '(' INTEGER ',' INTEGER ')' - ; - - region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')' - ; - - NOTE: - Lines beginning with '#' are considered comments. - - The contents of a "MAP" description of a maze is a rectangle - showing the exact level map that should be used for the - given part of a maze. Each character in the map corresponds - to a location on the screen. Different location types are - denoted using different ASCII characters. The following - characters are recognized. To give an idea of how these are - used, see the EXAMPLE, below. The maximum size of a map is - - - -May Last change: 16 9 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - normally 76 columns by 21 rows. - - '-' horizontal wall - '|' vertical wall - '+' a doorway (state is specified in a DOOR declaration) - 'A' open air - 'B' boundary room location (for bounding unwalled irregular regions) - 'C' cloudy air - 'I' ice - 'S' a secret door - 'H' a secret corridor - '{' a fountain - '\' a throne - 'K' a sink (if SINKS is defined, else a room location) - '}' a part of a moat or other deep water - 'P' a pool - 'L' lava - 'W' water (yes, different from a pool) - 'T' a tree - 'F' iron bars - '#' a corridor - '.' a normal room location (unlit unless lit in a REGION declaration) - ' ' stone + a_register : A_REGISTER '[' INTEGER ']' + ; + + place : coord + ; + + monster : CHAR + ; + + object : CHAR + ; + + string : STRING + ; + + amount : INTEGER + | RANDOM_TYPE + ; + + chance : /* empty */ + | PERCENT + ; + + engraving_type : ENGRAVING_TYPE + | RANDOM_TYPE + ; + + coord : '(' INTEGER ',' INTEGER ')' + ; + + region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')' + ; + + NOTE: + Lines beginning with '#' are considered comments. + + The contents of a "MAP" description of a maze is a rectangle showing + the exact level map that should be used for the given part of a maze. + Each character in the map corresponds to a location on the screen. + Different location types are denoted using different ASCII characters. + The following characters are recognized. To give an idea of how these + are used, see the EXAMPLE, below. The maximum size of a map is nor- + mally 76 columns by 21 rows. + + '-' horizontal wall + '|' vertical wall + '+' a doorway (state is specified in a DOOR declaration) + 'A' open air + 'B' boundary room location (for bounding unwalled irregular regions) + 'C' cloudy air + 'I' ice + 'S' a secret door + 'H' a secret corridor + '{' a fountain + '\' a throne + 'K' a sink + '}' a part of a moat or other deep water + 'P' a pool + 'L' lava + 'W' water (yes, different from a pool) + 'T' a tree + 'F' iron bars + '#' a corridor + '.' a normal room location (unlit unless lit in a REGION declaration) + ' ' stone EXAMPLE - Here is an example of a description file (a very simple - one): - - MAZE : "fortress", random - GEOMETRY : center , center - MAP - }}}}}}}}} - }}}|-|}}} - }}|-.-|}} - }|-...-|} - }|.....|} - }|-...-|} - }}|-.-|}} - }}}|-|}}} - }}}}}}}}} - ENDMAP - MONSTER: '@', "Wizard of Yendor", (4,4) - OBJECT: '"', "Amulet of Yendor", (4,4) - # a hell hound flanking the Wiz on a random side - RANDOM_PLACES: (4,3), (4,5), (3,4), (5,4) - MONSTER: 'd', "hell hound", place[0] - # a chest on another random side - OBJECT: '(', "chest", place[1] - # a sack on a random side, with a diamond and maybe a ruby in it - CONTAINER: '(', "sack", place[2] - OBJECT: '*', "diamond", contained - OBJECT[50%]: '*', "ruby", contained - - - -May Last change: 16 10 - - - - - - -LEV_COMP(6) 1996 LEV_COMP(6) - - - - # a random dragon somewhere - MONSTER: 'D', random, random - # 3 out of 4 chance for a random trap in the EAST end - TRAP[75%]: random, (6,4) - # an electric eel below the SOUTH end - MONSTER: ';', "electric eel", (4,8) - # make the walls non-diggable - NON_DIGGABLE: (0,0,8,8) - TELEPORT_REGION: levregion(0,0,79,20), (0,0,8,8) - - This example will produce a file named "fortress" that can - be integrated into one of the numerous mazes of the game. - - Note especially the final, TELEPORT_REGION specification. - This says that level teleports or other non-stairway - arrivals on this level can land anywhere on the level except - the area of the map. This shows the use of the ``levre- - gion'' prefix allowed in certain region specifications. - Normally, regions apply only to the most recent MAP specifi- - cation, but when prefixed with ``levregion'', one can refer - to any area of the level, regardless of the placement of the - current MAP in the level. + Here is an example of a description file (a very simple one): + + MAZE : "fortress", random + GEOMETRY : center , center + MAP + }}}}}}}}} + }}}|-|}}} + }}|-.-|}} + }|-...-|} + }|.....|} + }|-...-|} + }}|-.-|}} + }}}|-|}}} + }}}}}}}}} + ENDMAP + MONSTER: '@', "Wizard of Yendor", (4,4) + OBJECT: '"', "Amulet of Yendor", (4,4) + # a hell hound flanking the Wiz on a random side + RANDOM_PLACES: (4,3), (4,5), (3,4), (5,4) + MONSTER: 'd', "hell hound", place[0] + # a chest on another random side + OBJECT: '(', "chest", place[1] + # a sack on a random side, with a diamond and maybe a ruby in it + CONTAINER: '(', "sack", place[2] + OBJECT: '*', "diamond", contained + OBJECT[50%]: '*', "ruby", contained + # a random dragon somewhere + MONSTER: 'D', random, random + # 3 out of 4 chance for a random trap in the EAST end + TRAP[75%]: random, (6,4) + # an electric eel below the SOUTH end + MONSTER: ';', "electric eel", (4,8) + # make the walls non-diggable + NON_DIGGABLE: (0,0,8,8) + TELEPORT_REGION: levregion(0,0,79,20), (0,0,8,8) + + This example will produce a file named "fortress" that can be inte- + grated into one of the numerous mazes of the game. + + Note especially the final, TELEPORT_REGION specification. This says + that level teleports or other non-stairway arrivals on this level can + land anywhere on the level except the area of the map. This shows the + use of the ``levregion'' prefix allowed in certain region specifica- + tions. Normally, regions apply only to the most recent MAP specifica- + tion, but when prefixed with ``levregion'', one can refer to any area + of the level, regardless of the placement of the current MAP in the + level. AUTHOR - Jean-Christophe Collet, David Cohrs. + Jean-Christophe Collet, David Cohrs. SEE ALSO - dgn_comp(6), nethack(6) + dgn_comp(6), nethack(6) BUGS - Probably infinite. Most importantly, still needs additional - bounds checking. - - - - - - - - - - - - - - - - - - - - - - + Probably infinite. Most importantly, still needs additional bounds + checking. -May Last change: 16 11 +COPYRIGHT + This file is Copyright (C) Kenneth Lorber and was last modified + 2018/04/25 (version NetHack-3.6.0:1.7). NetHack may be freely redis- + tributed. See license for details. +NETHACK 25 May 2015 LEV_COMP(6) -- 2.40.0