Wikihack
Advertisement

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

1.    /*	SCCS Id: @(#)mkroom.h	3.4	1992/11/14	*/
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 MKROOM_H
6.    #define MKROOM_H
7.    
8.    /* mkroom.h - types and structures for room and shop initialization */
9.    
10.   struct mkroom {
11.   	schar lx,hx,ly,hy;	/* usually xchar, but hx may be -1 */
12.   	schar rtype;		/* type of room (zoo, throne, etc...) */
13.   	schar rlit;		/* is the room lit ? */
14.   	schar doorct;		/* door count */
15.   	schar fdoor;		/* index for the first door of the room */
16.   	schar nsubrooms;	/* number of subrooms */
17.   	boolean irregular;	/* true if room is non-rectangular */
18.   	struct mkroom *sbrooms[MAX_SUBROOMS];  /* Subrooms pointers */
19.   	struct monst *resident; /* priest/shopkeeper/guard for this room */
20.   };
21.   
22.   struct shclass {
23.   	const char *name;	/* name of the shop type */
24.   	char	symb;		/* this identifies the shop type */
25.   	int	prob;		/* the shop type probability in % */
26.   	schar	shdist;		/* object placement type */
27.   #define D_SCATTER	0	/* normal placement */
28.   #define D_SHOP		1	/* shop-like placement */
29.   #define D_TEMPLE	2	/* temple-like placement */
30.   	struct itp {
31.   	    int iprob;		/* probability of an item type */
32.   	    int itype;	/* item type: if >=0 a class, if < 0 a specific item */
33.   	} iprobs[5];
34.   	const char * const *shknms;	/* list of shopkeeper names for this type */
35.   };
36.   
37.   extern NEARDATA struct mkroom rooms[(MAXNROFROOMS+1)*2];
38.   extern NEARDATA struct mkroom* subrooms;
39.   /* the normal rooms on the current level are described in rooms[0..n] for
40.    * some n<MAXNROFROOMS
41.    * the vault, if any, is described by rooms[n+1]
42.    * the next rooms entry has hx -1 as a flag
43.    * there is at most one non-vault special room on a level
44.    */
45.   
46.   extern struct mkroom *dnstairs_room, *upstairs_room, *sstairs_room;
47.   
48.   extern NEARDATA coord doors[DOORMAX];
49.   
50.   /* values for rtype in the room definition structure */
51.   #define OROOM		 0	/* ordinary room */
52.   #define COURT		 2	/* contains a throne */
53.   #define SWAMP		 3	/* contains pools */
54.   #define VAULT		 4	/* contains piles of gold */
55.   #define BEEHIVE		 5	/* contains killer bees and royal jelly */
56.   #define MORGUE		 6	/* contains corpses, undead and ghosts */
57.   #define BARRACKS	 7	/* contains soldiers and their gear */
58.   #define ZOO		 8	/* floor covered with treasure and monsters */
59.   #define DELPHI		 9	/* contains Oracle and peripherals */
60.   #define TEMPLE		10	/* contains a shrine */
61.   #define LEPREHALL	11	/* leprechaun hall (Tom Proudfoot) */
62.   #define COCKNEST	12	/* cockatrice nest (Tom Proudfoot) */
63.   #define ANTHOLE		13	/* ants (Tom Proudfoot) */
64.   #define SHOPBASE	14	/* everything above this is a shop */
65.   #define ARMORSHOP	15	/* specific shop defines for level compiler */
66.   #define SCROLLSHOP	16
67.   #define POTIONSHOP	17
68.   #define WEAPONSHOP	18
69.   #define FOODSHOP	19
70.   #define RINGSHOP	20
71.   #define WANDSHOP	21
72.   #define TOOLSHOP	22
73.   #define BOOKSHOP	23
74.   #define UNIQUESHOP	24	/* shops here & above not randomly gen'd. */
75.   #define CANDLESHOP	24
76.   #define MAXRTYPE	24	/* maximum valid room type */
77.   
78.   /* Special type for search_special() */
79.   #define ANY_TYPE	(-1)
80.   #define ANY_SHOP	(-2)
81.   
82.   #define NO_ROOM		0	/* indicates lack of room-occupancy */
83.   #define SHARED		1	/* indicates normal shared boundary */
84.   #define SHARED_PLUS	2	/* indicates shared boundary - extra adjacent-
85.   				 * square searching required */
86.   
87.   #define ROOMOFFSET	3	/*
88.   				 * (levl[x][y].roomno - ROOMOFFSET) gives
89.   				 * rooms[] index, for inside-squares and
90.   				 * non-shared boundaries.
91.   				 */
92.   
93.   #define IS_ROOM_PTR(x)		((x) >= rooms && (x) < rooms + MAXNROFROOMS)
94.   #define IS_ROOM_INDEX(x)	((x) >= 0 && (x) < MAXNROFROOMS)
95.   #define IS_SUBROOM_PTR(x)	((x) >= subrooms && \
96.   				 (x) < subrooms + MAXNROFROOMS)
97.   #define IS_SUBROOM_INDEX(x)	((x) > MAXNROFROOMS && (x) < (MAXNROFROOMS*2))
98.   #define ROOM_INDEX(x)		((x) - rooms)
99.   #define SUBROOM_INDEX(x)	((x) - subrooms)
100.  #define IS_LAST_ROOM_PTR(x)	(ROOM_INDEX(x) == nroom)
101.  #define IS_LAST_SUBROOM_PTR(x)	(!nsubroom || SUBROOM_INDEX(x) == nsubroom)
102.  
103.  #endif /* MKROOM_H */
Advertisement