Wikia

Wikihack

Source:Dungeon.h

2,032pages on
this wiki
Talk0

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

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

Around Wikia's network

Random Wiki