abstract
| - Below is the full text to dungeon.h from the source code of NetHack 3.2.0. To link to a particular line, write [[NetHack 3.2.0/dungeon.h#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* SCCS Id: @(#)dungeon.h 3.2 95/12/08 */ 2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. /* NetHack may be freely redistributed. See license for details. */ 4. 5. #ifndef DUNGEON_H 6. #define DUNGEON_H 7. 8. typedef struct d_flags { /* dungeon/level type flags */ 9. Bitfield(town, 1); /* is this a town? (levels only) */ 10. Bitfield(hellish, 1); /* is this part of hell? */ 11. Bitfield(maze_like, 1); /* is this a maze? */ 12. Bitfield(rogue_like, 1); /* is this an old-fashioned presentation? */ 13. Bitfield(align, 3); /* dungeon alignment. */ 14. Bitfield(unused, 1); /* etc... */ 15. } d_flags; 16. 17. #ifndef ALIGN_H 18. #include "align.h" 19. #endif 20. 21. typedef struct d_level { /* basic dungeon level element */ 22. xchar dnum; /* dungeon number */ 23. xchar dlevel; /* level number */ 24. } d_level; 25. 26. typedef struct s_level { /* special dungeon level element */ 27. struct s_level *next; 28. d_level dlevel; /* dungeon & level numbers */ 29. char proto[15]; /* name of prototype file (eg. "tower") */ 30. char boneid; /* character to id level in bones files */ 31. uchar rndlevs; /* no. of randomly available similar levels */ 32. d_flags flags; /* type flags */ 33. } s_level; 34. 35. typedef struct stairway { /* basic stairway identifier */ 36. xchar sx, sy; /* x / y location of the stair */ 37. d_level tolev; /* where does it go */ 38. char up; /* what type of stairway (up/down) */ 39. } stairway; 40. 41. /* level region types */ 42. #define LR_DOWNSTAIR 0 43. #define LR_UPSTAIR 1 44. #define LR_PORTAL 2 45. #define LR_BRANCH 3 46. #define LR_TELE 4 47. #define LR_UPTELE 5 48. #define LR_DOWNTELE 6 49. 50. typedef struct dest_area { /* non-stairway level change indentifier */ 51. xchar lx, ly; /* "lower" left corner (near [0,0]) */ 52. xchar hx, hy; /* "upper" right corner (near [COLNO,ROWNO]) */ 53. xchar nlx, nly; /* outline of invalid area */ 54. xchar nhx, nhy; /* opposite corner of invalid area */ 55. } dest_area; 56. 57. typedef struct dungeon { /* basic dungeon identifier */ 58. char dname[24]; /* name of the dungeon (eg. "Hell") */ 59. char proto[15]; /* name of prototype file (eg. "tower") */ 60. char boneid; /* character to id dungeon in bones files */ 61. d_flags flags; /* dungeon flags */ 62. xchar entry_lev; /* entry level */ 63. xchar num_dunlevs; /* number of levels in this dungeon */ 64. xchar dunlev_ureached; /* how deep you have been in this dungeon */ 65. int ledger_start, /* the starting depth in "real" terms */ 66. depth_start; /* the starting depth in "logical" terms */ 67. } dungeon; 68. 69. /* 70. * A branch structure defines the connection between two dungeons. They 71. * will be ordered by the dungeon number/level number of 'end1'. Ties 72. * are resolved by 'end2'. 'Type' uses 'end1' arbitrarily as the primary 73. * point. 74. */ 75. typedef struct branch { 76. struct branch *next; /* next in the branch chain */ 77. int id; /* branch identifier */ 78. int type; /* type of branch */ 79. d_level end1; /* "primary" end point */ 80. d_level end2; /* other end point */ 81. boolean end1_up; /* does end1 go up? */ 82. } branch; 83. 84. /* branch types */ 85. #define BR_STAIR 0 /* "Regular" connection, 2 staircases. */ 86. #define BR_NO_END1 1 /* "Regular" connection. However, no stair from */ 87. /* end1 to end2. There is a stair from end2 */ 88. /* to end1. */ 89. #define BR_NO_END2 2 /* "Regular" connection. However, no stair from */ 90. /* end2 to end1. There is a stair from end1 */ 91. /* to end2. */ 92. #define BR_PORTAL 3 /* Connection by magic portals (traps) */ 93. 94. 95. /* A particular dungeon contains num_dunlevs d_levels with dlevel 1.. 96. * num_dunlevs. Ledger_start and depth_start are bases that are added 97. * to the dlevel of a particular d_level to get the effective ledger_no 98. * and depth for that d_level. 99. * 100. * Ledger_no is a bookkeeping number that gives a unique identifier for a 101. * particular d_level (for level.?? files, e.g.). 102. * 103. * Depth corresponds to the number of floors below the surface. 104. */ 105. #define Is_astralevel(x) (on_level(x, &astral_level)) 106. #define Is_earthlevel(x) (on_level(x, &earth_level)) 107. #define Is_waterlevel(x) (on_level(x, &water_level)) 108. #define Is_firelevel(x) (on_level(x, &fire_level)) 109. #define Is_airlevel(x) (on_level(x, &air_level)) 110. #define Is_medusa_level(x) (on_level(x, &medusa_level)) 111. #define Is_oracle_level(x) (on_level(x, &oracle_level)) 112. #define Is_valley(x) (on_level(x, &valley_level)) 113. #define Is_asmo_level(x) (on_level(x, &asmodeus_level)) 114. #define Is_baal_level(x) (on_level(x, &baalzebub_level)) 115. #define Is_wiz1_level(x) (on_level(x, &wiz1_level)) 116. #define Is_wiz2_level(x) (on_level(x, &wiz2_level)) 117. #define Is_wiz3_level(x) (on_level(x, &wiz3_level)) 118. #define Is_sanctum(x) (on_level(x, &sanctum_level)) 119. #define Is_portal_level(x) (on_level(x, &portal_level)) 120. #define Is_rogue_level(x) (on_level(x, &rogue_level)) 121. #define Is_stronghold(x) (on_level(x, &stronghold_level)) 122. #define Is_bigroom(x) (on_level(x, &bigroom_level)) 123. #define Is_qstart(x) (on_level(x, &qstart_level)) 124. #define Is_qlocate(x) (on_level(x, &qlocate_level)) 125. #define Is_nemesis(x) (on_level(x, &nemesis_level)) 126. #define Is_knox(x) (on_level(x, &knox_level)) 127. 128. #define Inhell In_hell(&u.uz) /* now gehennom */ 129. #define In_endgame(x) ((x)->dnum == astral_level.dnum) 130. #define within_bounded_area(X,Y,LX,LY,HX,HY) \ 131. ((X) >= (LX) && (X) <= (HX) && (Y) >= (LY) && (Y) <= (HY)) 132. 133. /* monster and object migration codes */ 134. 135. #define MIGR_NOWHERE (-1) /* failure flag for down_gate() */ 136. #define MIGR_RANDOM 0 137. #define MIGR_APPROX_XY 1 /* approximate coordinates */ 138. #define MIGR_EXACT_XY 2 /* specific coordinates */ 139. #define MIGR_STAIRS_UP 3 140. #define MIGR_STAIRS_DOWN 4 141. #define MIGR_LADDER_UP 5 142. #define MIGR_LADDER_DOWN 6 143. #define MIGR_SSTAIRS 7 /* dungeon branch */ 144. #define MIGR_PORTAL 8 /* magic portal */ 145. #define MIGR_NEAR_PLAYER 9 /* mon: followers; obj: trap door */ 146. 147. /* level information (saved via ledger number) */ 148. 149. struct linfo { 150. unsigned char flags; 151. #define VISITED 0x01 /* hero has visited this level */ 152. #define FORGOTTEN 0x02 /* hero will forget this level when reached */ 153. #define LFILE_EXISTS 0x04 /* a level file exists for this level */ 154. /* 155. * Note: VISITED and LFILE_EXISTS are currently almost always set at the 156. * same time. However they _mean_ different things. 157. */ 158. 159. #ifdef MFLOPPY 160. # define FROMPERM 1 /* for ramdisk use */ 161. # define TOPERM 2 /* for ramdisk use */ 162. # define ACTIVE 1 163. # define SWAPPED 2 164. int where; 165. long time; 166. long size; 167. #endif /* MFLOPPY */ 168. }; 169. 170. #endif /* DUNGEON_H */
|