1 /*	SCCS Id: @(#)sp_lev.h	3.3	96/05/08	*/
2 /* Copyright (c) 1989 by Jean-Christophe Collet			  */
3 /* NetHack may be freely redistributed.  See license for details. */
4 
5 #ifndef SP_LEV_H
6 #define SP_LEV_H
7 
8     /* wall directions */
9 #define W_NORTH		1
10 #define W_SOUTH		2
11 #define W_EAST		4
12 #define W_WEST		8
13 #define W_ANY		(W_NORTH|W_SOUTH|W_EAST|W_WEST)
14 
15     /* MAP limits */
16 #define MAP_X_LIM	76
17 #define MAP_Y_LIM	21
18 
19     /* Per level flags */
20 #define NOTELEPORT	1
21 #define HARDFLOOR	2
22 #define NOMMAP		4
23 #define SHORTSIGHTED	8
24 #define ARBOREAL	16
25 
26     /* special level types */
27 #define SP_LEV_ROOMS	1
28 #define SP_LEV_MAZE	2
29 
30 /*
31  * Structures manipulated by the special levels loader & compiler
32  */
33 
34 typedef union str_or_len {
35 	char *str;
36 	int   len;
37 } Str_or_Len;
38 
39 typedef struct {
40 	boolean init_present, padding;
41 	char	fg, bg;
42 	boolean smoothed, joined;
43 	xchar	lit, walled;
44 } lev_init;
45 
46 typedef struct {
47 	xchar x, y, mask;
48 } door;
49 
50 typedef struct {
51 	xchar wall, pos, secret, mask;
52 } room_door;
53 
54 typedef struct {
55 	xchar x, y, chance, type;
56 } trap;
57 
58 typedef struct {
59 	Str_or_Len name, appear_as;
60 	short id;
61 	aligntyp align;
62 	xchar x, y, chance, class, appear;
63 	schar peaceful, asleep;
64 } monster;
65 
66 typedef struct {
67 	Str_or_Len name;
68 	int   corpsenm;
69 	short id, spe;
70 	xchar x, y, chance, class, containment;
71 	schar curse_state;
72 } object;
73 
74 typedef struct {
75 	xchar		x, y;
76 	aligntyp	align;
77 	xchar		shrine;
78 } altar;
79 
80 typedef struct {
81 	xchar x, y, dir, db_open;
82 } drawbridge;
83 
84 typedef struct {
85 	xchar x, y, dir;
86 } walk;
87 
88 typedef struct {
89 	xchar x1, y1, x2, y2;
90 } digpos;
91 
92 typedef struct {
93 	xchar x, y, up;
94 } lad;
95 
96 typedef struct {
97 	xchar x, y, up;
98 } stair;
99 
100 typedef struct {
101 	xchar x1, y1, x2, y2;
102 	xchar rtype, rlit, rirreg;
103 } region;
104 
105 /* values for rtype are defined in dungeon.h */
106 typedef struct {
107 	struct { xchar x1, y1, x2, y2; } inarea;
108 	struct { xchar x1, y1, x2, y2; } delarea;
109 	boolean in_islev, del_islev;
110 	xchar rtype, padding;
111 	Str_or_Len rname;
112 } lev_region;
113 
114 typedef struct {
115 	xchar x, y;
116 	int   amount;
117 } gold;
118 
119 typedef struct {
120 	xchar x, y;
121 	Str_or_Len engr;
122 	xchar etype;
123 } engraving;
124 
125 typedef struct {
126 	xchar x, y;
127 } fountain;
128 
129 typedef struct {
130 	xchar x, y;
131 } sink;
132 
133 typedef struct {
134 	xchar x, y;
135 } pool;
136 
137 typedef struct {
138 	char halign, valign;
139 	char xsize, ysize;
140 	char **map;
141 	char nrobjects;
142 	char *robjects;
143 	char nloc;
144 	char *rloc_x;
145 	char *rloc_y;
146 	char nrmonst;
147 	char *rmonst;
148 	char nreg;
149 	region **regions;
150 	char nlreg;
151 	lev_region **lregions;
152 	char ndoor;
153 	door **doors;
154 	char ntrap;
155 	trap **traps;
156 	char nmonster;
157 	monster **monsters;
158 	char nobject;
159 	object **objects;
160 	char ndrawbridge;
161 	drawbridge **drawbridges;
162 	char nwalk;
163 	walk **walks;
164 	char ndig;
165 	digpos **digs;
166 	char npass;
167 	digpos **passs;
168 	char nlad;
169 	lad **lads;
170 	char nstair;
171 	stair **stairs;
172 	char naltar;
173 	altar **altars;
174 	char ngold;
175 	gold **golds;
176 	char nengraving;
177 	engraving **engravings;
178 	char nfountain;
179 	fountain **fountains;
180 } mazepart;
181 
182 typedef struct {
183 	long flags;
184 	lev_init init_lev;
185 	schar filling;
186 	char numpart;
187 	mazepart **parts;
188 } specialmaze;
189 
190 typedef struct _room {
191 	char  *name;
192 	char  *parent;
193 	xchar x, y, w, h;
194 	xchar xalign, yalign;
195 	xchar rtype, chance, rlit, filled;
196 	char ndoor;
197 	room_door **doors;
198 	char ntrap;
199 	trap **traps;
200 	char nmonster;
201 	monster **monsters;
202 	char nobject;
203 	object **objects;
204 	char naltar;
205 	altar **altars;
206 	char nstair;
207 	stair **stairs;
208 	char ngold;
209 	gold **golds;
210 	char nengraving;
211 	engraving **engravings;
212 	char nfountain;
213 	fountain **fountains;
214 	char nsink;
215 	sink **sinks;
216 	char npool;
217 	pool **pools;
218 	/* These three fields are only used when loading the level... */
219 	int nsubroom;
220 	struct _room *subrooms[MAX_SUBROOMS];
221 	struct mkroom *mkr;
222 } room;
223 
224 typedef struct {
225 	struct {
226 		xchar room;
227 		xchar wall;
228 		xchar door;
229 	} src, dest;
230 } corridor;
231 
232 /* used only by lev_comp */
233 typedef struct {
234 	long flags;
235 	lev_init init_lev;
236 	char nrobjects;
237 	char *robjects;
238 	char nrmonst;
239 	char *rmonst;
240 	xchar nroom;
241 	room **rooms;
242 	xchar ncorr;
243 	corridor **corrs;
244 } splev;
245 
246 #endif /* SP_LEV_H */
247