1 /* NetHack may be freely redistributed.  See license for details. */
2 
3 #ifndef _vulture_tile_h_
4 #define _vulture_tile_h_
5 
6 #include <string>
7 #include <SDL.h>
8 #include "vulture_types.h"
9 extern "C" {
10 #include "hack.h"
11 }
12 
13 
14 extern void vulture_put_tile_shaded(int x, int y, int tile_id, int shadelevel);
15 extern int vulture_load_gametiles(void);
16 extern vulture_tile * vulture_load_tile(int tile_id);
17 extern void vulture_unload_gametiles(void);
18 extern vulture_tile * vulture_get_tile_shaded(int tile_id, int shadelevel);
19 extern void vulture_tilecache_discard(void);
20 extern void vulture_tilecache_age(void);
21 extern void vulture_put_tilehighlight(int x, int y, int tile_id);
22 extern int vulture_monster_to_tile(int mon_id, int x, int y);
23 extern int vulture_object_to_tile(int mon_id, int x, int y, struct obj *in_obj);
24 
25 extern int glassgems[CLR_MAX];
26 
27 #define vulture_put_tile(x, y, tile_id) vulture_put_tile_shaded(x, y, tile_id, 0)
28 #define vulture_get_tile(tile_id) vulture_get_tile_shaded(tile_id, 0)
29 
30 
31 enum tiletypes {
32 	TT_OBJECT,
33 	TT_OBJICON,
34 	TT_MONSTER,
35 	TT_STATUE,
36 	TT_FIGURINE,
37 	TT_EXPL,
38 	TT_CURSOR,
39 	TT_MISC,
40 	TT_EDGE,
41 	TT_FLOOR,
42 	TT_WALL,
43 
44 	NUM_TILETYPES
45 };
46 
47 extern int vulture_typecount[NUM_TILETYPES];
48 
49 
50 #define OBJTILEOFFSET  0
51 #define OBJTILECOUNT  NUM_OBJECTS
52 
53 #define ICOTILEOFFSET  (OBJTILEOFFSET + OBJTILECOUNT)
54 #define ICOTILECOUNT  NUM_OBJECTS
55 
56 #define MONTILEOFFSET  (ICOTILEOFFSET + ICOTILECOUNT)
57 #define MONTILECOUNT  NUMMONS
58 
59 #define STATILEOFFSET  (MONTILEOFFSET + MONTILECOUNT)
60 #define STATILECOUNT  NUMMONS
61 
62 #define FIGTILEOFFSET  (STATILEOFFSET + STATILECOUNT)
63 #define FIGTILECOUNT  NUMMONS
64 
65 #define EXPTILEOFFSET  (FIGTILEOFFSET + FIGTILECOUNT)
66 #define EXPTILECOUNT  EXPL_MAX * 9
67 
68 enum mcursor {
69 	V_CURSOR_NORMAL,
70 	V_CURSOR_SCROLLRIGHT,
71 	V_CURSOR_SCROLLLEFT,
72 	V_CURSOR_SCROLLUP,
73 	V_CURSOR_SCROLLDOWN,
74 	V_CURSOR_SCROLLUPLEFT,
75 	V_CURSOR_SCROLLUPRIGHT,
76 	V_CURSOR_SCROLLDOWNLEFT,
77 	V_CURSOR_SCROLLDOWNRIGHT,
78 	V_CURSOR_TARGET_GREEN,
79 	V_CURSOR_TARGET_RED,
80 	V_CURSOR_TARGET_INVALID,
81 	V_CURSOR_TARGET_HELP,
82 	V_CURSOR_HOURGLASS,
83 	V_CURSOR_OPENDOOR,
84 	V_CURSOR_STAIRS,
85 	V_CURSOR_GOBLET,
86 	V_CURSOR_MAX
87 };
88 
89 #define CURTILEOFFSET  (EXPTILEOFFSET + EXPTILECOUNT)
90 #define CURTILECOUNT  V_CURSOR_MAX
91 
92 #define MISCTILEOFFSET  (CURTILEOFFSET + CURTILECOUNT)
93 enum misctiles {
94 	V_MISC_PLAYER_INVIS = MISCTILEOFFSET,
95 	V_MISC_FLOOR_NOT_VISIBLE,
96 	V_MISC_DOOR_WOOD_BROKEN,
97 	V_MISC_HDOOR_WOOD_CLOSED,
98 	V_MISC_VDOOR_WOOD_CLOSED,
99 	V_MISC_VDOOR_WOOD_OPEN,
100 	V_MISC_HDOOR_WOOD_OPEN,
101 	V_MISC_TRAP_BEAR,
102 	V_MISC_GRAVE,
103 	V_MISC_ALTAR,
104 	V_MISC_FOUNTAIN,
105 	V_MISC_STAIRS_UP,
106 	V_MISC_STAIRS_DOWN,
107 	V_MISC_SINK,
108 	V_MISC_GAS_TRAP,
109 	V_MISC_TRAP_PIT,
110 	V_MISC_TRAP_POLYMORPH,
111 	V_MISC_TREE,
112 	V_MISC_TRAP_MAGIC,
113 	V_MISC_TRAP_DOOR,
114 	V_MISC_TRAP_WATER,
115 	V_MISC_TRAP_TELEPORTER,
116 	V_MISC_UNMAPPED_AREA,
117 	V_MISC_HILITE_PET,
118 	V_MISC_BARS,
119 	V_MISC_THRONE,
120 	V_MISC_TRAP_ANTI_MAGIC,
121 	V_MISC_TRAP_ARROW,
122 	V_MISC_TRAP_FIRE,
123 	V_MISC_ROLLING_BOULDER_TRAP,
124 	V_MISC_TRAP_SLEEPGAS,
125 	V_MISC_ZAP_SLANT_RIGHT,
126 	V_MISC_ZAP_SLANT_LEFT,
127 	V_MISC_ZAP_HORIZONTAL,
128 	V_MISC_ZAP_VERTICAL,
129 	V_MISC_LADDER_UP,
130 	V_MISC_LADDER_DOWN,
131 	V_MISC_RESIST_SPELL_1,
132 	V_MISC_RESIST_SPELL_2,
133 	V_MISC_RESIST_SPELL_3,
134 	V_MISC_RESIST_SPELL_4,
135 	V_MISC_WEB_TRAP,
136 	V_MISC_DART_TRAP,
137 	V_MISC_FALLING_ROCK_TRAP,
138 	V_MISC_SQUEAKY_BOARD,
139 	V_MISC_MAGIC_PORTAL,
140 	V_MISC_SPIKED_PIT,
141 	V_MISC_HOLE,
142 	V_MISC_LEVEL_TELEPORTER,
143 	V_MISC_MAGIC_TRAP,
144 	V_MISC_DIGBEAM,
145 	V_MISC_FLASHBEAM,
146 	V_MISC_BOOMLEFT,
147 	V_MISC_BOOMRIGHT,
148 	V_MISC_HCDBRIDGE,
149 	V_MISC_VCDBRIDGE,
150 	V_MISC_VODBRIDGE,
151 	V_MISC_HODBRIDGE,
152 	V_MISC_CLOUD,
153 	V_MISC_OFF_MAP,
154 	V_MISC_FLOOR_HIGHLIGHT,
155 	V_MISC_LAND_MINE,
156 	V_MISC_LAWFUL_PRIEST,
157 	V_MISC_CHAOTIC_PRIEST,
158 	V_MISC_NEUTRAL_PRIEST,
159 	V_MISC_UNALIGNED_PRIEST,
160 #if defined(REINCARNATION)
161 	V_MISC_ROGUE_LEVEL_A,
162 	V_MISC_ROGUE_LEVEL_B,
163 	V_MISC_ROGUE_LEVEL_C,
164 	V_MISC_ROGUE_LEVEL_D,
165 	V_MISC_ROGUE_LEVEL_E,
166 	V_MISC_ROGUE_LEVEL_F,
167 	V_MISC_ROGUE_LEVEL_G,
168 	V_MISC_ROGUE_LEVEL_H,
169 	V_MISC_ROGUE_LEVEL_I,
170 	V_MISC_ROGUE_LEVEL_J,
171 	V_MISC_ROGUE_LEVEL_K,
172 	V_MISC_ROGUE_LEVEL_L,
173 	V_MISC_ROGUE_LEVEL_M,
174 	V_MISC_ROGUE_LEVEL_N,
175 	V_MISC_ROGUE_LEVEL_O,
176 	V_MISC_ROGUE_LEVEL_P,
177 	V_MISC_ROGUE_LEVEL_Q,
178 	V_MISC_ROGUE_LEVEL_R,
179 	V_MISC_ROGUE_LEVEL_S,
180 	V_MISC_ROGUE_LEVEL_T,
181 	V_MISC_ROGUE_LEVEL_U,
182 	V_MISC_ROGUE_LEVEL_V,
183 	V_MISC_ROGUE_LEVEL_W,
184 	V_MISC_ROGUE_LEVEL_X,
185 	V_MISC_ROGUE_LEVEL_Y,
186 	V_MISC_ROGUE_LEVEL_Z,
187 #endif
188 	V_MISC_ENGULF_FIRE_VORTEX,
189 	V_MISC_ENGULF_FOG_CLOUD,
190 	V_MISC_ENGULF_AIR_ELEMENTAL,
191 	V_MISC_ENGULF_STEAM_VORTEX,
192 	V_MISC_ENGULF_PURPLE_WORM,
193 	V_MISC_ENGULF_JUIBLEX,
194 	V_MISC_ENGULF_OCHRE_JELLY,
195 	V_MISC_ENGULF_LURKER_ABOVE,
196 	V_MISC_ENGULF_TRAPPER,
197 	V_MISC_ENGULF_DUST_VORTEX,
198 	V_MISC_ENGULF_ICE_VORTEX,
199 	V_MISC_ENGULF_ENERGY_VORTEX,
200 	V_MISC_WARNLEV_1,
201 	V_MISC_WARNLEV_2,
202 	V_MISC_WARNLEV_3,
203 	V_MISC_WARNLEV_4,
204 	V_MISC_WARNLEV_5,
205 	V_MISC_WARNLEV_6,
206 	V_MISC_INVISIBLE_MONSTER,
207 	V_MISC_STINKING_CLOUD,
208 #ifdef VULTURE_SLASHEM
209 	V_MISC_TOILET,
210 #endif
211 	V_MISC_MAX
212 };
213 #define MISCTILECOUNT  V_MISC_MAX - MISCTILEOFFSET
214 
215 #define EDGETILEOFFSET  (MISCTILEOFFSET + MISCTILECOUNT)
216 #define EDGETILECOUNT  vulture_typecount[TT_EDGE]
217 
218 #define FLOTILEOFFSET  (EDGETILEOFFSET + EDGETILECOUNT)
219 #define FLOTILECOUNT  vulture_typecount[TT_FLOOR]
220 
221 #define WALTILEOFFSET  (FLOTILEOFFSET + FLOTILECOUNT)
222 #define WALTILECOUNT  vulture_typecount[TT_WALL]
223 
224 #define GAMETILECOUNT  (WALTILEOFFSET + WALTILECOUNT)
225 
226 
227 
228 #define TILE_IS_OBJECT(x)  (((x) >= OBJTILEOFFSET) &&((x) < (OBJTILEOFFSET + OBJTILECOUNT)))
229 #define TILE_IS_OBJICON(x) (((x) >= ICOTILEOFFSET) &&((x) < (ICOTILEOFFSET + ICOTILECOUNT)))
230 #define TILE_IS_FLOOR(x)   (((x) >= FLOTILEOFFSET) &&((x) < (FLOTILEOFFSET + FLOTILECOUNT)))
231 #define TILE_IS_WALL(x)    (((x) >= WALTILEOFFSET) &&((x) < (WALTILEOFFSET + WALTILECOUNT)))
232 
233 
234 
235 
236 #define OBJECT_TO_VTILE(obj_id) ((obj_id) + OBJTILEOFFSET)
237 #define OBJICON_TO_VTILE(obj_id) ((obj_id) + ICOTILEOFFSET)
238 #define MONSTER_TO_VTILE(mon_id) ((mon_id) + MONTILEOFFSET)
239 #define STATUE_TO_VTILE(mon_id) ((mon_id) + STATILEOFFSET)
240 #define FIGURINE_TO_VTILE(mon_id) ((mon_id) + FIGTILEOFFSET)
241 
242 
243 enum special_tiles {
244 /* make sure all these are negative to prevent clashes with normal tile numbers */
245 	V_TILE_NONE = -1000,
246 	V_TILE_WALL_GENERIC,
247 	V_TILE_FLOOR_COBBLESTONE,
248 	V_TILE_FLOOR_ROUGH,
249 	V_TILE_FLOOR_WATER,
250 	V_TILE_FLOOR_ICE,
251 	V_TILE_FLOOR_LAVA,
252 	V_TILE_FLOOR_ROUGH_LIT,
253 	V_TILE_FLOOR_AIR,
254 	V_TILE_FLOOR_DARK
255 };
256 
257 
258 class gametiles {
259 public:
gametiles()260 	gametiles() : filename(""), ptr(0), hs_x(0), hs_y(0) {};
261   std::string filename;
262 	int ptr;
263 	int hs_x;
264 	int hs_y;
265 };
266 
267 struct fstyles {
268 	int x;
269 	int y;
270 	int * array;
271 };
272 
273 struct walls {
274 	int north;
275 	int east;
276 	int south;
277 	int west;
278 };
279 
280 struct fedges {
281 	int dir[12];
282 };
283 
284 
285 enum floorstyles {
286 	V_FLOOR_COBBLESTONE,
287 	V_FLOOR_ROUGH,
288 	V_FLOOR_CERAMIC,
289 	V_FLOOR_LAVA,
290 	V_FLOOR_WATER,
291 	V_FLOOR_ICE,
292 	V_FLOOR_MURAL,
293 	V_FLOOR_MURAL2,
294 	V_FLOOR_CARPET,
295 	V_FLOOR_MOSS_COVERED,
296 	V_FLOOR_MARBLE,
297 	V_FLOOR_ROUGH_LIT,
298 	V_FLOOR_AIR,
299 	V_FLOOR_DARK,
300 	V_FLOOR_STYLE_MAX
301 };
302 
303 enum flooredges {
304 	V_FLOOR_EDGE_COBBLESTONE,
305 	V_FLOOR_EDGE_MAX
306 };
307 
308 enum wallstyles {
309 	V_WALL_BRICK,
310 	V_WALL_BRICK_BANNER,
311 	V_WALL_BRICK_PAINTING,
312 	V_WALL_BRICK_POCKET,
313 	V_WALL_BRICK_PILLAR,
314 	V_WALL_MARBLE,
315 	V_WALL_VINE_COVERED,
316 	V_WALL_STUCCO,
317 	V_WALL_ROUGH,
318 	V_WALL_DARK,
319 	V_WALL_LIGHT,
320 	V_WALL_STYLE_MAX
321 };
322 
323 
324 
325 extern struct walls walls_full[];
326 extern struct walls walls_half[];
327 extern struct fedges flooredges[];
328 extern struct fstyles floorstyles[];
329 
330 
331 #undef min
332 #undef max
333 
334 #endif
335