Source:NetHack 3.2.0/dungeon.h

Below is the full text to dungeon.h from the source code of NetHack 3.2.0. To link to a particular line, write [[NetHack 3.2.0/dungeon.h#line123 ]], for example.

Warning! This is the source code from an old release. For the latest release, see Source code

1.   /*	SCCS Id: @(#)dungeon.h	3.2	95/12/08	*/ 2.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3.    /* NetHack may be freely redistributed. See license for details. */ 4.     5.    #ifndef DUNGEON_H 6.   #define DUNGEON_H 7.    8.    typedef struct d_flags {	/* dungeon/level type flags */ 9.   	Bitfield(town, 1);	/* is this a town? (levels only) */ 10.  	Bitfield(hellish, 1);	/* is this part of hell? */ 11.   	Bitfield(maze_like, 1);	/* is this a maze? */ 12.   	Bitfield(rogue_like, 1); /* is this an old-fashioned presentation? */ 13.   	Bitfield(align, 3);	/* dungeon alignment. */ 14.   	Bitfield(unused, 1);	/* etc... */ 15.   } d_flags; 16.   17.   #ifndef ALIGN_H 18.  #include "align.h"  19. #endif 20.   21.   typedef struct d_level {	/* basic dungeon level element */ 22.  	xchar	dnum;		/* dungeon number */ 23.  	xchar	dlevel;		/* level number */ 24.  } d_level; 25.   26.   typedef struct s_level {	/* special dungeon level element */ 27.  	struct	s_level	*next; 28.  	d_level	dlevel;		/* dungeon & level numbers */ 29.  	char	proto[15];	/* name of prototype file (eg. "tower") */ 30.  	char    boneid;		/* character to id level in bones files */ 31.  	uchar	rndlevs;	/* no. of randomly available similar levels */ 32.  	d_flags	flags;		/* type flags */ 33.  } s_level; 34.   35.   typedef struct stairway {	/* basic stairway identifier */ 36.  	xchar	sx, sy;		/* x / y location of the stair */ 37.  	d_level	tolev;		/* where does it go */ 38.  	char	up;		/* what type of stairway (up/down) */ 39.  } stairway; 40.   41.   /* level region types */ 42.  #define LR_DOWNSTAIR 0 43.  #define LR_UPSTAIR 1 44.  #define LR_PORTAL 2 45.  #define LR_BRANCH 3 46.  #define LR_TELE 4 47.  #define LR_UPTELE 5 48.  #define LR_DOWNTELE 6 49.   50.   typedef struct dest_area {	/* non-stairway level change indentifier */ 51.  	xchar	lx, ly;		/* "lower" left corner (near [0,0]) */ 52.  	xchar	hx, hy;		/* "upper" right corner (near [COLNO,ROWNO]) */ 53.  	xchar	nlx, nly;	/* outline of invalid area */ 54.  	xchar	nhx, nhy;	/* opposite corner of invalid area */ 55.  } dest_area; 56.   57.   typedef struct dungeon {	/* basic dungeon identifier */ 58.  	char	dname[24];	/* name of the dungeon (eg. "Hell") */ 59.  	char	proto[15];	/* name of prototype file (eg. "tower") */ 60.  	char	boneid;		/* character to id dungeon in bones files */ 61.  	d_flags	flags;		/* dungeon flags */ 62.  	xchar	entry_lev;	/* entry level */ 63.  	xchar	num_dunlevs;	/* number of levels in this dungeon */ 64.  	xchar	dunlev_ureached; /* how deep you have been in this dungeon */ 65.  	int	ledger_start,	/* the starting depth in "real" terms */ 66.  		depth_start;	/* the starting depth in "logical" terms */ 67.  } dungeon; 68.   69.   /*  70.    * A branch structure defines the connection between two dungeons. They 71.   * will be ordered by the dungeon number/level number of 'end1'. Ties 72.   * are resolved by 'end2'. 'Type' uses 'end1' arbitrarily as the primary 73.   * point. 74.   */  75.   typedef struct branch { 76.      struct branch *next;	/* next in the branch chain */ 77.      int		  id;		/* branch identifier */ 78.      int		  type;		/* type of branch */ 79.      d_level	  end1;		/* "primary" end point */ 80.      d_level	  end2;		/* other end point */ 81.      boolean	  end1_up;	/* does end1 go up? */ 82.   } branch; 83.   84.   /* branch types */ 85.  #define BR_STAIR   0	/* "Regular" connection, 2 staircases. */ 86.   #define BR_NO_END1 1	/* "Regular" connection. However, no stair from */ 87.  			/*	end1 to end2. There is a stair from end2 */ 88.  			/*	to end1. */ 89.   #define BR_NO_END2 2	/* "Regular" connection. However, no stair from */ 90.  			/*	end2 to end1. There is a stair from end1 */ 91.  			/*	to end2. */ 92.   #define BR_PORTAL  3	/* Connection by magic portals (traps) */ 93.   94.    95.   /* A particular dungeon contains num_dunlevs d_levels with dlevel 1.. 96.   * num_dunlevs. Ledger_start and depth_start are bases that are added 97.   * to the dlevel of a particular d_level to get the effective ledger_no 98.   * and depth for that d_level. 99.   *  100.   * Ledger_no is a bookkeeping number that gives a unique identifier for a  101. * particular d_level (for level.?? files, e.g.). 102.  *  103.   * Depth corresponds to the number of floors below the surface. 104.  */  105.  #define Is_astralevel(x)	(on_level(x, &astral_level)) 106. #define Is_earthlevel(x)	(on_level(x, &earth_level)) 107. #define Is_waterlevel(x)	(on_level(x, &water_level)) 108. #define Is_firelevel(x)		(on_level(x, &fire_level)) 109. #define Is_airlevel(x)		(on_level(x, &air_level)) 110. #define Is_medusa_level(x)	(on_level(x, &medusa_level)) 111. #define Is_oracle_level(x)	(on_level(x, &oracle_level)) 112. #define Is_valley(x)		(on_level(x, &valley_level)) 113. #define Is_asmo_level(x)	(on_level(x, &asmodeus_level)) 114. #define Is_baal_level(x)	(on_level(x, &baalzebub_level)) 115. #define Is_wiz1_level(x)	(on_level(x, &wiz1_level)) 116. #define Is_wiz2_level(x)	(on_level(x, &wiz2_level)) 117. #define Is_wiz3_level(x)	(on_level(x, &wiz3_level)) 118. #define Is_sanctum(x)		(on_level(x, &sanctum_level)) 119. #define Is_portal_level(x)	(on_level(x, &portal_level)) 120. #define Is_rogue_level(x)	(on_level(x, &rogue_level)) 121. #define Is_stronghold(x)	(on_level(x, &stronghold_level)) 122. #define Is_bigroom(x)		(on_level(x, &bigroom_level)) 123. #define Is_qstart(x)		(on_level(x, &qstart_level)) 124. #define Is_qlocate(x)		(on_level(x, &qlocate_level)) 125. #define Is_nemesis(x)		(on_level(x, &nemesis_level)) 126. #define Is_knox(x)		(on_level(x, &knox_level)) 127.  128.  #define Inhell			In_hell(&u.uz)	/* now gehennom */ 129. #define In_endgame(x)		((x)->dnum == astral_level.dnum) 130. #define within_bounded_area(X,Y,LX,LY,HX,HY) \ 131. 		((X) >= (LX) && (X) <= (HX) && (Y) >= (LY) && (Y) <= (HY)) 132.  133.  /* monster and object migration codes */ 134.  135.  #define MIGR_NOWHERE	      (-1)	/* failure flag for down_gate */ 136. #define MIGR_RANDOM		0 137. #define MIGR_APPROX_XY		1	/* approximate coordinates */ 138. #define MIGR_EXACT_XY		2	/* specific coordinates */ 139. #define MIGR_STAIRS_UP		3 140. #define MIGR_STAIRS_DOWN	4 141. #define MIGR_LADDER_UP		5 142. #define MIGR_LADDER_DOWN	6 143. #define MIGR_SSTAIRS		7	/* dungeon branch */ 144. #define MIGR_PORTAL		8	/* magic portal */ 145. #define MIGR_NEAR_PLAYER	9	/* mon: followers; obj: trap door */ 146.  147.  /* level information (saved via ledger number) */ 148.  149.  struct linfo { 150. 	unsigned char	flags; 151. #define VISITED		0x01	/* hero has visited this level */ 152. #define FORGOTTEN	0x02	/* hero will forget this level when reached */ 153. #define LFILE_EXISTS	0x04	/* a level file exists for this level */ 154. /*  155.   * Note:  VISITED and LFILE_EXISTS are currently almost always set at the 156.  * same time. However they _mean_ different things. 157.  */  158.   159.  #ifdef MFLOPPY 160. # define FROMPERM        1      /* for ramdisk use */ 161. # define TOPERM          2      /* for ramdisk use */ 162. # define ACTIVE          1 163. # define SWAPPED         2 164. 	int	where; 165. 	long	time; 166. 	long	size; 167. #endif /* MFLOPPY */ 168. };  169.   170.  #endif /* DUNGEON_H */