00001
00002
00003
00004
00005 #ifndef DUNGEON_H
00006 #define DUNGEON_H
00007
00008 typedef struct d_flags {
00009 Bitfield(town, 1);
00010 Bitfield(hellish, 1);
00011 Bitfield(maze_like, 1);
00012 Bitfield(rogue_like, 1);
00013 Bitfield(align, 3);
00014 Bitfield(unused, 1);
00015 } d_flags;
00016
00017 typedef struct d_level {
00018 xchar dnum;
00019 xchar dlevel;
00020 } d_level;
00021
00022 typedef struct s_level {
00023 struct s_level *next;
00024 d_level dlevel;
00025 char proto[15];
00026 char boneid;
00027 uchar rndlevs;
00028 d_flags flags;
00029 } s_level;
00030
00031 typedef struct stairway {
00032 xchar sx, sy;
00033 d_level tolev;
00034 char up;
00035 } stairway;
00036
00037
00038 #define LR_DOWNSTAIR 0
00039 #define LR_UPSTAIR 1
00040 #define LR_PORTAL 2
00041 #define LR_BRANCH 3
00042 #define LR_TELE 4
00043 #define LR_UPTELE 5
00044 #define LR_DOWNTELE 6
00045
00046 typedef struct dest_area {
00047 xchar lx, ly;
00048 xchar hx, hy;
00049 xchar nlx, nly;
00050 xchar nhx, nhy;
00051 } dest_area;
00052
00053 typedef struct dungeon {
00054 char dname[24];
00055 char proto[15];
00056 char boneid;
00057 d_flags flags;
00058 xchar entry_lev;
00059 xchar num_dunlevs;
00060 xchar dunlev_ureached;
00061 int ledger_start,
00062 depth_start;
00063 } dungeon;
00064
00065
00066
00067
00068
00069
00070
00071 typedef struct branch {
00072 struct branch *next;
00073 int id;
00074 int type;
00075 d_level end1;
00076 d_level end2;
00077 boolean end1_up;
00078 } branch;
00079
00080
00081 #define BR_STAIR 0
00082 #define BR_NO_END1 1
00083
00084
00085 #define BR_NO_END2 2
00086
00087
00088 #define BR_PORTAL 3
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 #define Is_astralevel(x) (on_level(x, &astral_level))
00102 #define Is_earthlevel(x) (on_level(x, &earth_level))
00103 #define Is_waterlevel(x) (on_level(x, &water_level))
00104 #define Is_firelevel(x) (on_level(x, &fire_level))
00105 #define Is_airlevel(x) (on_level(x, &air_level))
00106 #define Is_medusa_level(x) (on_level(x, &medusa_level))
00107 #define Is_oracle_level(x) (on_level(x, &oracle_level))
00108 #define Is_valley(x) (on_level(x, &valley_level))
00109 #define Is_juiblex_level(x) (on_level(x, &juiblex_level))
00110 #define Is_asmo_level(x) (on_level(x, &asmodeus_level))
00111 #define Is_baal_level(x) (on_level(x, &baalzebub_level))
00112 #define Is_wiz1_level(x) (on_level(x, &wiz1_level))
00113 #define Is_wiz2_level(x) (on_level(x, &wiz2_level))
00114 #define Is_wiz3_level(x) (on_level(x, &wiz3_level))
00115 #define Is_sanctum(x) (on_level(x, &sanctum_level))
00116 #define Is_portal_level(x) (on_level(x, &portal_level))
00117 #define Is_rogue_level(x) (on_level(x, &rogue_level))
00118 #define Is_stronghold(x) (on_level(x, &stronghold_level))
00119 #define Is_bigroom(x) (on_level(x, &bigroom_level))
00120 #define Is_qstart(x) (on_level(x, &qstart_level))
00121 #define Is_qlocate(x) (on_level(x, &qlocate_level))
00122 #define Is_nemesis(x) (on_level(x, &nemesis_level))
00123 #define Is_knox(x) (on_level(x, &knox_level))
00124 #ifdef RECORD_ACHIEVE
00125 #define Is_mineend_level(x) (on_level(x, &mineend_level))
00126 #define Is_sokoend_level(x) (on_level(x, &sokoend_level))
00127 #endif
00128 #ifdef BLACKMARKET
00129 #define Is_blackmarket(x) (on_level(x, &blackmarket_level))
00130 #endif
00131 #define Is_minetown_level(x) (on_level(x, &minetown_level))
00132 #define Is_town_level(x) (on_level(x, &town_level))
00133
00134 #define In_sokoban(x) ((x)->dnum == sokoban_dnum)
00135 #define Inhell In_hell(&u.uz)
00136 #define In_endgame(x) ((x)->dnum == astral_level.dnum)
00137
00138 #define within_bounded_area(X,Y,LX,LY,HX,HY) \
00139 ((X) >= (LX) && (X) <= (HX) && (Y) >= (LY) && (Y) <= (HY))
00140
00141
00142
00143 #define MIGR_NOWHERE (-1)
00144 #define MIGR_RANDOM 0
00145 #define MIGR_APPROX_XY 1
00146 #define MIGR_EXACT_XY 2
00147 #define MIGR_STAIRS_UP 3
00148 #define MIGR_STAIRS_DOWN 4
00149 #define MIGR_LADDER_UP 5
00150 #define MIGR_LADDER_DOWN 6
00151 #define MIGR_SSTAIRS 7
00152 #define MIGR_PORTAL 8
00153 #define MIGR_NEAR_PLAYER 9
00154
00155
00156
00157 struct linfo {
00158 unsigned char flags;
00159 #define VISITED 0x01
00160 #define FORGOTTEN 0x02
00161 #define LFILE_EXISTS 0x04
00162
00163
00164
00165
00166
00167 #ifdef MFLOPPY
00168 # define FROMPERM 1
00169 # define TOPERM 2
00170 # define ACTIVE 1
00171 # define SWAPPED 2
00172 int where;
00173 long time;
00174 long size;
00175 #endif
00176 };
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192 #define Amask2msa(x) ((x) == 4 ? 3 : (x) & AM_MASK)
00193 #define Msa2amask(x) ((x) == 3 ? 4 : (x))
00194 #define MSA_NONE 0
00195 #define MSA_LAWFUL 1
00196 #define MSA_NEUTRAL 2
00197 #define MSA_CHAOTIC 3
00198
00199 typedef struct mapseen_feat {
00200
00201 Bitfield(nfount, 2);
00202 Bitfield(nsink, 2);
00203 Bitfield(naltar, 2);
00204 Bitfield(msalign, 2);
00205 Bitfield(nthrone, 2);
00206 Bitfield(ntree, 2);
00207
00208
00209
00210
00211
00212
00213
00214
00215 Bitfield(nshop, 2);
00216 Bitfield(ntemple, 2);
00217 Bitfield(shoptype, 5);
00218
00219 Bitfield(forgot, 1);
00220 } mapseen_feat;
00221
00222
00223 #define MSR_SEEN 1
00224
00225
00226
00227 typedef struct mapseen {
00228 struct mapseen *next;
00229 branch *br;
00230 d_level lev;
00231
00232 mapseen_feat feat;
00233
00234
00235 char *custom;
00236 unsigned custom_lth;
00237
00238
00239 schar rooms[(MAXNROFROOMS+1)*2];
00240 } mapseen;
00241
00242 #endif