home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 1 / GoldFishApril1994_CD1.img / d1xx / d190 / nethack / een.zoo / rm.h < prev    next >
C/C++ Source or Header  |  1988-07-25  |  6KB  |  204 lines

  1. /*    SCCS Id: @(#)rm.h       2.3     88/03/29
  2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  3.  
  4. /*
  5.  * The dungeon presentation graphics code and data structures were rewritten
  6.  * and generalized for NetHack's release 2 by Eric S. Raymond (eric@snark)
  7.  * building on Don G. Kneller's MS-DOS implementation. See options.c for
  8.  * the code that permits the user to set the contents of the symbol structure.
  9.  */
  10.  
  11. /* Level location types */
  12. #define HWALL 1
  13. #define VWALL 2
  14. #define SDOOR 3
  15. #define SCORR 4
  16. #define LDOOR 5
  17. #define POOL    6    /* not yet fully implemented */
  18.             /* this should in fact be a bit like lit */
  19. #define DOOR      7
  20. #define CORR      8
  21. #define ROOM      9
  22. #define STAIRS     10
  23. #define FOUNTAIN 11
  24. #define THRONE     12
  25. #define SINK     13
  26.  
  27. /*
  28.  * Avoid using the level types in inequalities:
  29.  *  these types are subject to change.
  30.  * Instead, use one of the macros below.
  31.  */
  32. #define IS_WALL(typ)    ((typ) <= VWALL)
  33. #define IS_ROCK(typ)    ((typ) < POOL)          /* absolutely nonaccessible */
  34. #define ACCESSIBLE(typ) ((typ) >= DOOR)                 /* good position */
  35. #define IS_ROOM(typ)            ((typ) >= ROOM)         /* ROOM or STAIRS */
  36. #ifdef RPH
  37. /* zappable positions include 1 in 5 doors. */
  38. #define ZAP_POS(typ)    ((typ) >= POOL || (((typ) == DOOR) && !rn2(5)))
  39. #define SPACE_POS(typ)  ((typ) > DOOR)
  40. #else
  41. #define ZAP_POS(typ)            ((typ) > DOOR)
  42. #endif
  43. #define IS_POOL(typ)    ((typ) == POOL)
  44. #define IS_THRONE(typ)    ((typ) == THRONE)
  45. #define IS_FOUNTAIN(typ)        ((typ) == FOUNTAIN)
  46. #define IS_SINK(typ)    ((typ) == SINK)
  47.  
  48. /*
  49.  * The level-map symbols may be compiled in or defined at initialization time
  50.  */
  51. #ifndef GRAPHICS
  52.  
  53. #define STONE_SYM    ' '
  54. #define VWALL_SYM    '|'
  55. #define HWALL_SYM    '-'
  56. #define TLCORN_SYM    '+'
  57. #define TRCORN_SYM    '+'
  58. #define BLCORN_SYM    '+'
  59. #define BRCORN_SYM    '+'
  60. #define DOOR_SYM    '+'
  61. #define ROOM_SYM    '.'
  62. #ifdef QUEST
  63. # define    CORR_SYM    ':'
  64. #else
  65. # define    CORR_SYM    '#'
  66. #endif
  67. #define UP_SYM        '<'
  68. #define DN_SYM        '>'
  69. #define TRAP_SYM    '^'
  70. #define POOL_SYM    '}'
  71. #define FOUNTAIN_SYM    '{'
  72. #define THRONE_SYM    '\\'
  73. #define WEB_SYM     '"'
  74. #define SINK_SYM    '#'
  75. #else /* GRAPHICS */
  76.  
  77. /* screen symbols for using character graphics. */
  78. struct symbols {
  79.     unsigned char stone, vwall, hwall, tlcorn, trcorn, blcorn, brcorn;
  80.     unsigned char door, room, corr, upstair, dnstair, trap;
  81. #ifdef FOUNTAINS
  82.     unsigned char pool, fountain;
  83. #endif
  84. #ifdef NEWCLASS
  85.     unsigned char throne;
  86. #endif
  87. #ifdef SPIDERS
  88.     unsigned char web;
  89. #endif
  90. #ifdef SINKS
  91.     unsigned char sink;
  92. #endif
  93. };
  94. extern struct symbols showsyms, defsyms;
  95.  
  96. #define STONE_SYM    showsyms.stone
  97. #define VWALL_SYM    showsyms.vwall
  98. #define HWALL_SYM    showsyms.hwall
  99. #define TLCORN_SYM    showsyms.tlcorn
  100. #define TRCORN_SYM    showsyms.trcorn
  101. #define BLCORN_SYM    showsyms.blcorn
  102. #define BRCORN_SYM    showsyms.brcorn
  103. #define DOOR_SYM    showsyms.door
  104. #define ROOM_SYM    showsyms.room
  105. #define CORR_SYM    showsyms.corr
  106. #define UP_SYM        showsyms.upstair
  107. #define DN_SYM        showsyms.dnstair
  108. #define TRAP_SYM    showsyms.trap
  109. #define POOL_SYM    showsyms.pool
  110. #define FOUNTAIN_SYM    showsyms.fountain
  111. #define THRONE_SYM    showsyms.throne
  112. #define WEB_SYM     showsyms.web
  113. #define SINK_SYM    showsyms.sink
  114. #endif
  115.  
  116. #define ERRCHAR ']'
  117.  
  118. #define MAXPCHARS    18    /* maximum number of mapped characters */
  119.  
  120. #define IS_CORNER(x)    ((x) == TLCORN_SYM || (x) == TRCORN_SYM \
  121.              || (x) == BLCORN_SYM || (x) == BRCORN_SYM)
  122.  
  123. /*
  124.  * The structure describing a coordinate position.
  125.  * Before adding fields, remember that this will significantly affect
  126.  * the size of temporary files and save files.
  127.  */
  128. /* Save disk space by using unsigned char's instead of unsigned ints
  129.  */
  130. #ifdef BITFIELD_BUG
  131. struct rm {
  132.     uchar scrsym;
  133.     uchar flags;
  134.  /* unsigned short typ:5;
  135.     unsigned short new:1;
  136.     unsigned short seen:1;
  137.     unsigned short lit:1; */
  138. };
  139.  
  140. # define RM_TYPM    0x1F
  141. # define RM_NEWM    0x20
  142. # define RM_SEENM   0x40
  143. # define RM_LITM    0x80
  144.  
  145.      /* The first macro evaluates room twice... */
  146. # define RM_SET_TYP(room, type) ((room).flags = ( (room).flags & ~RM_TYPM ) | (type))
  147. # define RM_TYP(room)           ((room).flags &   RM_TYPM)
  148. # define RM_SET_NEW(room)       ((room).flags |=  RM_NEWM)
  149. # define RM_CLR_NEW(room)       ((room).flags &= ~RM_NEWM)
  150. # define RM_NEW(room)           ((room).flags &   RM_NEWM)
  151. # define RM_SET_SEEN(room)      ((room).flags |=  RM_SEENM)
  152. # define RM_CLR_SEEN(room)      ((room).flags &= ~RM_SEENM)
  153. # define RM_SEEN(room)          ((room).flags &   RM_SEENM)
  154. # define RM_SET_LIT(room)       ((room).flags |=  RM_LITM)
  155. # define RM_CLR_LIT(room)       ((room).flags &= ~RM_LITM)
  156. # define RM_LIT(room)           ((room).flags &   RM_LITM)
  157.  
  158. #else  /* no BITFIELD_BUG */
  159.  
  160. # define RM_SET_TYP(room, type) ((room).typ = type)
  161. # define RM_TYP(room)           ((room).typ)
  162. # define RM_SET_NEW(room)       ((room).new = 1)
  163. # define RM_CLR_NEW(room)       ((room).new = 0)
  164. # define RM_NEW(room)           ((room).new)
  165. # define RM_SET_SEEN(room)      ((room).seen = 1)
  166. # define RM_CLR_SEEN(room)      ((room).seen = 0)
  167. # define RM_SEEN(room)          ((room).seen)
  168. # define RM_SET_LIT(room)       ((room).lit = 1)
  169. # define RM_CLR_LIT(room)       ((room).lit = 0)
  170. # define RM_LIT(room)           ((room).lit)
  171.  
  172. # ifdef MSDOS
  173. struct rm {
  174.     uchar scrsym;
  175.     unsigned typ:5;
  176.     unsigned new:1;
  177.     unsigned seen:1;
  178.     unsigned lit:1;
  179. };
  180. # else
  181. struct rm {
  182.     char scrsym;
  183.     Bitfield(typ,5);
  184.     Bitfield(new,1);
  185.     Bitfield(seen,1);
  186.     Bitfield(lit,1);
  187. };
  188. # endif /* MSDOS /**/
  189. #endif /* BITFIELD_BUG */
  190. extern struct rm levl[COLNO][ROWNO];
  191.  
  192. #ifdef DGK
  193. #define ACTIVE    1
  194. #define SWAPPED 2
  195.  
  196. struct finfo {
  197.     int    where;
  198.     long    time;
  199.     long    size;
  200. };
  201. extern struct finfo fileinfo[];
  202. #define ZFINFO    { 0, 0L, 0L }
  203. #endif
  204.