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. */
8 /* mkroom.h - types and structures for room and shop initialization */
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 */
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 */
31 int iprob; /* probability of an item type */
32 int itype; /* item type: if >=0 a class, if < 0 a specific item */
34 const char * const *shknms; /* list of shopkeeper names for this type */
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
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
46 extern struct mkroom *dnstairs_room, *upstairs_room, *sstairs_room;
48 extern NEARDATA coord doors[DOORMAX];
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 */
74 #define UNIQUESHOP 24 /* shops here & above not randomly gen'd. */
76 #define MAXRTYPE 24 /* maximum valid room type */
78 /* Special type for search_special() */
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 */
87 #define ROOMOFFSET 3 /*
88 * (levl[x][y].roomno - ROOMOFFSET) gives
89 * rooms[] index, for inside-squares and
90 * non-shared boundaries.
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)
103 #endif /* MKROOM_H */