Source:NetHack 3.1.0/rm.h
(Redirected from NetHack 3.1.0/rm.h)
Jump to navigation
Jump to search
Below is the full text to rm.h from the source code of NetHack 3.1.0. To link to a particular line, write [[NetHack 3.1.0/rm.h#line123]], for example.
Warning! This is the source code from an old release. For the latest release, see Source code
The NetHack General Public License applies to screenshots, source code and other content from NetHack.
This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.
1. /* SCCS Id: @(#)rm.h 3.1 92/09/01 */ 2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. /* NetHack may be freely redistributed. See license for details. */ 4. 5. #ifndef RM_H 6. #define RM_H 7. 8. /* 9. * The dungeon presentation graphics code and data structures were rewritten 10. * and generalized for NetHack's release 2 by Eric S. Raymond (eric@snark) 11. * building on Don G. Kneller's MS-DOS implementation. See drawing.c for 12. * the code that permits the user to set the contents of the symbol structure. 13. * 14. * The door representation was changed by Ari Huttunen(ahuttune@niksula.hut.fi) 15. */ 16. 17. /* 18. * TLCORNER TDWALL TRCORNER 19. * +- -+- -+ 20. * | | | 21. * 22. * TRWALL CROSSWALL TLWALL HWALL 23. * | | | 24. * +- -+- -+ --- 25. * | | | 26. * 27. * BLCORNER TUWALL BRCORNER VWALL 28. * | | | | 29. * +- -+- -+ | 30. */ 31. 32. /* Level location types */ 33. #define STONE 0 34. #define VWALL 1 35. #define HWALL 2 36. #define TLCORNER 3 37. #define TRCORNER 4 38. #define BLCORNER 5 39. #define BRCORNER 6 40. #define CROSSWALL 7 /* For pretty mazes and special levels */ 41. #define TUWALL 8 42. #define TDWALL 9 43. #define TLWALL 10 44. #define TRWALL 11 45. #define DBWALL 12 46. #define SDOOR 13 47. #define SCORR 14 48. #define POOL 15 49. #define MOAT 16 /* pool that doesn't boil, adjust messages */ 50. #define WATER 17 51. #define DRAWBRIDGE_UP 18 52. #define LAVAPOOL 19 53. #define DOOR 20 54. #define CORR 21 55. #define ROOM 22 56. #define STAIRS 23 57. #define LADDER 24 58. #define FOUNTAIN 25 59. #define THRONE 26 60. #define SINK 27 61. #define ALTAR 28 62. #define ICE 29 63. #define DRAWBRIDGE_DOWN 30 64. #define AIR 31 65. #define CLOUD 32 66. 67. #define INVALID_TYPE 127 68. 69. /* 70. * Avoid using the level types in inequalities: 71. * these types are subject to change. 72. * Instead, use one of the macros below. 73. */ 74. #define IS_WALL(typ) ((typ) && (typ) <= DBWALL) 75. #define IS_STWALL(typ) ((typ) <= DBWALL) /* STONE <= (typ) <= DBWALL */ 76. #define IS_ROCK(typ) ((typ) < POOL) /* absolutely nonaccessible */ 77. #define IS_DOOR(typ) ((typ) == DOOR) 78. #define ACCESSIBLE(typ) ((typ) >= DOOR) /* good position */ 79. #define IS_ROOM(typ) ((typ) >= ROOM) /* ROOM, STAIRS, furniture.. */ 80. #define ZAP_POS(typ) ((typ) >= POOL) 81. #define SPACE_POS(typ) ((typ) > DOOR) 82. #define IS_POOL(typ) ((typ) >= POOL && (typ) <= DRAWBRIDGE_UP) 83. #define IS_THRONE(typ) ((typ) == THRONE) 84. #define IS_FOUNTAIN(typ) ((typ) == FOUNTAIN) 85. #define IS_SINK(typ) ((typ) == SINK) 86. #define IS_ALTAR(typ) ((typ) == ALTAR) 87. #define IS_DRAWBRIDGE(typ) ((typ) == DRAWBRIDGE_UP || (typ) == DRAWBRIDGE_DOWN) 88. #define IS_FURNITURE(typ) ((typ) >= STAIRS && (typ) <= ALTAR) 89. #define IS_AIR(typ) ((typ) == AIR || (typ) == CLOUD) 90. #define IS_SOFT(typ) ((typ) == AIR || (typ) == CLOUD || IS_POOL(typ)) 91. 92. /* 93. * The screen symbols may be the default or defined at game startup time. 94. * See drawing.c for defaults. 95. * Note: {ibm|dec}_graphics[] arrays (also in drawing.c) must be kept in synch. 96. */ 97. #define S_stone 0 98. #define S_vwall 1 99. #define S_hwall 2 100. #define S_tlcorn 3 101. #define S_trcorn 4 102. #define S_blcorn 5 103. #define S_brcorn 6 104. #define S_crwall 7 105. #define S_tuwall 8 106. #define S_tdwall 9 107. #define S_tlwall 10 108. #define S_trwall 11 109. #define S_ndoor 12 110. #define S_vodoor 13 111. #define S_hodoor 14 112. #define S_vcdoor 15 /* closed door, vertical wall */ 113. #define S_hcdoor 16 /* closed door, horizontal wall */ 114. #define S_room 17 115. #define S_corr 18 116. #define S_litcorr 19 117. #define S_upstair 20 118. #define S_dnstair 21 119. #define S_upladder 22 120. #define S_dnladder 23 121. #define S_trap 24 122. #define S_web 25 123. #define S_altar 26 124. #define S_throne 27 125. #define S_sink 28 126. #define S_fountain 29 127. #define S_pool 30 128. #define S_ice 31 129. #define S_lava 32 130. #define S_vodbridge 33 131. #define S_hodbridge 34 132. #define S_vcdbridge 35 /* closed drawbridge, vertical wall */ 133. #define S_hcdbridge 36 /* closed drawbridge, horizontal wall */ 134. #define S_air 37 135. #define S_cloud 38 136. #define S_water 39 137. #define S_vbeam 40 /* The 4 zap beam symbols. Do NOT separate. */ 138. #define S_hbeam 41 /* To change order or add, see function */ 139. #define S_lslant 42 /* zapdir_to_glyph() in display.c. */ 140. #define S_rslant 43 141. #define S_digbeam 44 /* dig beam symbol */ 142. #define S_flashbeam 45 /* camera flash symbol */ 143. #define S_boomleft 46 /* thrown boomerang, open left, e.g ')' */ 144. #define S_boomright 47 /* thrown boomerand, open right, e.g. '(' */ 145. #define S_ss1 48 /* 4 magic shield glyphs */ 146. #define S_ss2 49 147. #define S_ss3 50 148. #define S_ss4 51 149. 150. /* The 8 swallow symbols. Do NOT separate. To change order or add, see */ 151. /* the function swallow_to_glyph() in display.c. */ 152. #define S_sw_tl 52 /* swallow top left [1] */ 153. #define S_sw_tc 53 /* swallow top center [2] Order: */ 154. #define S_sw_tr 54 /* swallow top right [3] */ 155. #define S_sw_ml 55 /* swallow middle left [4] 1 2 3 */ 156. #define S_sw_mr 56 /* swallow middle right [6] 4 5 6 */ 157. #define S_sw_bl 57 /* swallow bottom left [7] 7 8 9 */ 158. #define S_sw_bc 58 /* swallow bottom center [8] */ 159. #define S_sw_br 59 /* swallow bottom right [9] */ 160. 161. #define S_explode1 60 /* explosion top left */ 162. #define S_explode2 61 /* explosion top center */ 163. #define S_explode3 62 /* explosion top right Ex. */ 164. #define S_explode4 63 /* explosion middle left */ 165. #define S_explode5 64 /* explosion middle center /-\ */ 166. #define S_explode6 65 /* explosion middle right |@| */ 167. #define S_explode7 66 /* explosion bottom left \-/ */ 168. #define S_explode8 67 /* explosion bottom center */ 169. #define S_explode9 68 /* explosion bottom right */ 170. 171. #define MAXPCHARS 69 /* maximum number of mapped characters */ 172. 173. struct symdef { 174. uchar sym; 175. const char *explanation; 176. #ifdef TEXTCOLOR 177. uchar color; 178. #endif 179. }; 180. 181. extern const struct symdef defsyms[MAXPCHARS]; /* defaults */ 182. extern uchar showsyms[MAXPCHARS]; 183. 184. /* 185. * Graphics sets for display symbols 186. */ 187. #define ASCII_GRAPHICS 0 /* regular characters: '-', '+', &c */ 188. #define IBM_GRAPHICS 1 /* PC graphic characters */ 189. #define DEC_GRAPHICS 2 /* VT100 line drawing characters */ 190. #define MAC_GRAPHICS 3 /* Macintosh drawing characters */ 191. 192. /* 193. * The 5 possible states of doors 194. */ 195. 196. #define D_NODOOR 0 197. #define D_BROKEN 1 198. #define D_ISOPEN 2 199. #define D_CLOSED 4 200. #define D_LOCKED 8 201. #define D_TRAPPED 16 202. 203. /* 204. * The 3 possible alignments for altars 205. */ 206. #ifndef ALIGN_H 207. #include "align.h" /* defines the "AM_" values */ 208. #endif 209. 210. /* 211. * Some altars are considered as shrines, so we need a flag. 212. */ 213. #define AM_SHRINE 8 214. 215. /* 216. * Thrones should only be looted once. 217. */ 218. #define T_LOOTED 1 219. 220. /* 221. * Fountains have limits, and special warnings. 222. */ 223. #define F_LOOTED 1 224. #define F_WARNED 2 225. 226. /* 227. * Sinks have 3 different types of loot that shouldn't be abused 228. */ 229. #define S_LPUDDING 1 230. #define S_LDWASHER 2 231. #define S_LRING 4 232. 233. /* 234. * The four directions for a DrawBridge. 235. */ 236. #define DB_NORTH 0 237. #define DB_SOUTH 1 238. #define DB_EAST 2 239. #define DB_WEST 3 240. #define DB_DIR 3 /* mask for direction */ 241. 242. /* 243. * What's under a drawbridge. 244. */ 245. #define DB_MOAT 0 246. #define DB_LAVA 4 247. #define DB_ICE 8 248. #define DB_FLOOR 16 249. #define DB_UNDER 28 /* mask for underneath */ 250. 251. /* 252. * Some walls may be non diggable. 253. */ 254. #define W_DIGGABLE 0 255. #define W_NONDIGGABLE 1 256. #define W_REPAIRED 2 257. 258. /* 259. * Ladders (in Vlad's tower) may be up or down. 260. */ 261. #define LA_UP 1 262. #define LA_DOWN 2 263. 264. /* 265. * Room areas may be iced pools 266. */ 267. #define ICED_POOL 8 268. #define ICED_MOAT 16 269. 270. /* 271. * The structure describing a coordinate position. 272. * Before adding fields, remember that this will significantly affect 273. * the size of temporary files and save files. 274. */ 275. struct rm { 276. int glyph; /* what the hero thinks is there */ 277. schar typ; /* what is really there */ 278. Bitfield(seen,1); /* speed hack for room walls on corridors */ 279. Bitfield(lit,1); /* speed hack for lit rooms */ 280. Bitfield(flags,5); /* extra information for typ */ 281. Bitfield(horizontal,1); /* wall/door/etc is horiz. (more typ info) */ 282. Bitfield(waslit,1); /* remember if a location was lit */ 283. Bitfield(roomno,6); /* room # for special rooms */ 284. Bitfield(edge,1); /* marks boundaries for special rooms*/ 285. }; 286. 287. #define doormask flags 288. #define altarmask flags 289. #define diggable flags 290. #define ladder flags 291. #define drawbridgemask flags 292. #define looted flags 293. #define icedpool flags 294. 295. #define blessedftn horizontal /* a fountain that grants attribs */ 296. 297. struct damage { 298. struct damage *next; 299. long when, cost; 300. coord place; 301. schar typ; 302. }; 303. 304. struct levelflags { 305. uchar nfountains; /* Number of fountains on level */ 306. uchar nsinks; /* Number of sinks on the level */ 307. /* Several flags that give hints about what's on the level */ 308. Bitfield(has_shop, 1); 309. Bitfield(has_vault, 1); 310. Bitfield(has_zoo, 1); 311. Bitfield(has_court, 1); 312. Bitfield(has_morgue, 1); 313. Bitfield(has_beehive, 1); 314. #ifdef ARMY 315. Bitfield(has_barracks, 1); 316. #endif 317. Bitfield(has_temple, 1); 318. Bitfield(has_swamp, 1); 319. Bitfield(noteleport,1); 320. Bitfield(hardfloor,1); 321. Bitfield(nommap,1); 322. Bitfield(hero_memory,1); /* hero has memory */ 323. Bitfield(shortsighted,1); /* monsters are shortsighted */ 324. Bitfield(is_maze_lev,1); 325. Bitfield(is_cavernous_lev,1); 326. }; 327. 328. typedef struct 329. { 330. struct rm locations[COLNO][ROWNO]; 331. #ifndef MICROPORT_BUG 332. struct obj *objects[COLNO][ROWNO]; 333. struct monst *monsters[COLNO][ROWNO]; 334. #else 335. struct obj *objects[1][ROWNO]; 336. char *yuk1[COLNO-1][ROWNO]; 337. struct monst *monsters[1][ROWNO]; 338. char *yuk2[COLNO-1][ROWNO]; 339. #endif 340. struct obj *objlist; 341. struct monst *monlist; 342. struct damage *damagelist; 343. struct levelflags flags; 344. } 345. dlevel_t; 346. 347. extern dlevel_t level; /* structure describing the current level */ 348. 349. /* 350. * Macros for compatibility with old code. Someday these will go away. 351. */ 352. #define levl level.locations 353. #define fobj level.objlist 354. #define fmon level.monlist 355. 356. #define OBJ_AT(x,y) (level.objects[x][y] != (struct obj *)0) 357. /* 358. * Macros for encapsulation of level.monsters references. 359. */ 360. #define MON_AT(x,y) (level.monsters[x][y] != (struct monst *)0) 361. #define place_monster(m,x,y) ((m)->mx=(x),(m)->my=(y),\ 362. level.monsters[(m)->mx][(m)->my]=(m)) 363. #define place_worm_seg(m,x,y) level.monsters[x][y] = m 364. #define remove_monster(x,y) level.monsters[x][y] = (struct monst *)0 365. #define m_at(x,y) level.monsters[x][y] 366. 367. #endif /* RM_H */