OSDN Git Service

Initial Import
[nethackexpress/trunk.git] / include / sp_lev.h
1 /*      SCCS Id: @(#)sp_lev.h   3.4     1996/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 */