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