home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Games / larn12s.arc / LARN.ARC / HEADER.H < prev    next >
C/C++ Source or Header  |  1987-10-28  |  15KB  |  529 lines

  1. /*    header.h        Larn is copyrighted 1986 by Noah Morgan. */
  2.  
  3. #define SCORENAME    "larn.scr"
  4. #define LOGFNAME    "larn.log"
  5. #define HELPNAME    "larn.hlp"
  6. #define LEVELSNAME    "larn.maz"
  7. #define FORTSNAME    "larn.ftn"
  8. #define PLAYERIDS    "larn.pid"
  9. #define HOLIFILE    "holidays"
  10. # ifndef UNIX
  11. #   define LARNOPTS    "larn.opt"
  12. #   define SAVEFILE    "larn.sav"
  13. #   define SWAPFILE    "larn.swp"
  14. #   define CKPFILE    "larn.ckp"
  15. # else
  16. #   define LARNOPTS    ".larnopts"
  17. #   define SAVEFILE    "Larn.sav"
  18. #   define MAIL        /* disable the mail routines for MSDOS */
  19. # endif
  20. #ifdef GEMDOS
  21. #define CMDSHELL    "\bin\msh.prg"
  22. #endif
  23.  
  24. #define MAXLEVEL 11
  25.     /*    max # levels in the dungeon            */
  26. #define MAXVLEVEL 3
  27.     /*    max # of levels in the temple of the luran    */
  28. #define MAXX 67
  29. #define MAXY 17
  30.  
  31. #define SCORESIZE 10
  32.     /*    this is the number of people on a scoreboard max */
  33. #define MAXPLEVEL 100
  34.     /*    maximum player level allowed        */
  35. #define MAXMONST 56
  36.     /*    maximum # monsters in the dungeon    */
  37. #define SPNUM 38
  38.     /*    maximum number of spells in existance    */
  39. #define MAXSCROLL 28
  40.     /*    maximum number of scrolls that are possible    */
  41. #define MAXPOTION 35
  42.     /*    maximum number of potions that are possible    */
  43. #define TIMELIMIT 30000
  44.     /*    the maximum number of moves before the game is called */
  45. #define TAXRATE 1/20
  46.     /*    the tax rate for the LRS */
  47. #define MAXOBJ 93
  48.     /* the maximum number of objects   n < MAXOBJ */
  49.  
  50. /*    this is the structure definition of the monster data    */
  51. struct monst
  52.     {
  53.     char    *name;
  54.     char    level;
  55.     short    armorclass;
  56.     char    damage;
  57.     char    attack;
  58.     char    defense;
  59.     char    genocided;
  60.     char     intelligence; /* monsters intelligence -- used to choose movement */
  61.     short    gold;
  62.     short    hitpoints;
  63.     unsigned long experience;
  64.     };
  65.  
  66. /*    this is the structure definition for the items in the dnd store */
  67. struct _itm
  68.     {
  69.     short    price;
  70.     char    **mem;
  71.     char    obj;
  72.     char    arg;
  73.     char    qty;
  74.     };
  75.  
  76. /*    this is the structure that holds the entire dungeon specifications    */
  77. struct cel
  78.     {
  79.     short    hitp;    /*    monster's hit points    */
  80.     char    mitem;    /*    the monster ID            */
  81.     char    item;    /*    the object's ID            */
  82.     short    iarg;    /*    the object's argument    */
  83.     char    know;    /*    have we been here before*/
  84.     };
  85.  
  86. /* this is the structure for maintaining & moving the spheres of annihilation */
  87. struct sphere
  88.     {
  89.     struct sphere *p;    /* pointer to next structure */
  90.     char x,y,lev;        /* location of the sphere */
  91.     char dir;            /* direction sphere is going in */
  92.     char lifetime;        /* duration of the sphere */
  93.     };
  94.  
  95. # ifndef UNIX
  96. /* Since only 1 level is needed at one time, each level can be swapped
  97.  * to disk if there is not enough memory to allocate it.  Thus, there
  98.  * need only be room for 1 level.  When a level is needed, if it is
  99.  * already in memory, there is nothing to do.  If it isn't, get it from
  100.  * disk after swapping out the oldest level - dgk.
  101.  */
  102. # define FREEBLOCK    -99
  103. typedef struct _ramblock RAMBLOCK;
  104. typedef struct _diskblock DISKBLOCK;
  105. struct _ramblock {
  106.     RAMBLOCK    *next;            /* For a linked list */
  107.     int        level;            /* Level stored or FREEBLOCK */
  108.     long        gtime;            /* The time stored */
  109.     struct    cel    cell[MAXX * MAXY];    /* The storage */
  110. };
  111. struct _diskblock {
  112.     DISKBLOCK    *next;            /* For linked list */
  113.     int        level;            /* Level stored or FREEBLOCK */
  114.     long        gtime;            /* The time stored */
  115.     long        fpos;            /* The disk position */
  116. };
  117. extern RAMBLOCK *ramblks;
  118. extern DISKBLOCK *diskblks;
  119.  
  120. # endif
  121.  
  122. /*    defines for the character attribute array    c[]    */
  123. #define STRENGTH 0    /* characters physical strength not due to objects */
  124. #define INTELLIGENCE 1
  125. #define WISDOM 2
  126. #define CONSTITUTION 3
  127. #define DEXTERITY 4
  128. #define CHARISMA 5
  129. #define HPMAX 6
  130. #define HP 7
  131. #define GOLD 8
  132. #define EXPERIENCE 9
  133. #define LEVEL 10
  134. #define REGEN 11
  135. #define WCLASS 12
  136. #define AC 13
  137. #define BANKACCOUNT 14
  138. #define SPELLMAX 15
  139. #define SPELLS 16
  140. #define ENERGY 17
  141. #define ECOUNTER 18
  142. #define MOREDEFENSES 19
  143. #define WEAR 20
  144. #define PROTECTIONTIME 21
  145. #define WIELD 22
  146. #define AMULET 23
  147. #define REGENCOUNTER 24
  148. #define MOREDAM 25
  149. #define DEXCOUNT 26
  150. #define STRCOUNT 27
  151. #define BLINDCOUNT 28
  152. #define CAVELEVEL 29
  153. #define CONFUSE 30
  154. #define ALTPRO 31
  155. #define HERO 32
  156. #define CHARMCOUNT 33
  157. #define INVISIBILITY 34
  158. #define CANCELLATION 35
  159. #define HASTESELF 36
  160. #define EYEOFLARN 37
  161. #define AGGRAVATE 38
  162. #define GLOBE 39
  163. #define TELEFLAG 40
  164. #define SLAYING 41
  165. #define NEGATESPIRIT 42
  166. #define SCAREMONST 43
  167. #define AWARENESS 44
  168. #define HOLDMONST 45
  169. #define TIMESTOP 46
  170. #define HASTEMONST 47
  171. #define CUBEofUNDEAD 48
  172. #define GIANTSTR 49
  173. #define FIRERESISTANCE 50
  174. #define BESSMANN 51
  175. #define NOTHEFT 52
  176. #define HARDGAME 53
  177. #define CPUTIME 54
  178. #define BYTESIN 55
  179. #define BYTESOUT 56
  180. #define MOVESMADE 57
  181. #define MONSTKILLED 58
  182. #define SPELLSCAST 59
  183. #define LANCEDEATH 60
  184. #define SPIRITPRO 61
  185. #define UNDEADPRO 62
  186. #define SHIELD 63
  187. #define STEALTH 64
  188. #define ITCHING 65
  189. #define LAUGHING 66
  190. #define DRAINSTRENGTH 67
  191. #define CLUMSINESS 68
  192. #define INFEEBLEMENT 69
  193. #define HALFDAM 70
  194. #define SEEINVISIBLE 71
  195. #define FILLROOM 72
  196. #define RANDOMWALK 73
  197. #define SPHCAST 74    /* nz if an active sphere of annihilation */
  198. #define WTW 75        /* walk through walls */
  199. #define STREXTRA 76    /* character strength due to objects or enchantments */
  200. #define TMP 77    /* misc scratch space */
  201. #define LIFEPROT 78 /* life protection counter */
  202.  
  203. /*    defines for the objects in the game        */
  204.  
  205. #define OALTAR 1
  206. #define OTHRONE 2
  207. #define OORB 3
  208. #define OPIT 4
  209. #define OSTAIRSUP 5
  210. #define OELEVATORUP 6
  211. #define OFOUNTAIN 7
  212. #define OSTATUE 8
  213. #define OTELEPORTER 9
  214. #define OSCHOOL 10
  215. #define OMIRROR 11
  216. #define ODNDSTORE 12
  217. #define OSTAIRSDOWN 13
  218. #define OELEVATORDOWN 14
  219. #define OBANK2 15
  220. #define OBANK 16
  221. #define ODEADFOUNTAIN 17
  222. #define OMAXGOLD 70
  223. #define OGOLDPILE 18
  224. #define OOPENDOOR 19
  225. #define OCLOSEDDOOR 20
  226. #define OWALL 21
  227. #define OTRAPARROW 66
  228. #define OTRAPARROWIV 67
  229.  
  230. #define OLARNEYE 22
  231.  
  232. #define OPLATE 23
  233. #define OCHAIN 24
  234. #define OLEATHER 25
  235. #define ORING 60
  236. #define OSTUDLEATHER 61
  237. #define OSPLINT 62
  238. #define OPLATEARMOR 63
  239. #define OSSPLATE 64
  240. #define OSHIELD 68
  241. #define OELVENCHAIN 92
  242.  
  243. #define OSWORDofSLASHING 26
  244. #define OHAMMER 27
  245. #define OSWORD 28
  246. #define O2SWORD 29
  247. #define OSPEAR 30
  248. #define ODAGGER 31
  249. #define OBATTLEAXE 57
  250. #define OLONGSWORD 58
  251. #define OFLAIL 59
  252. #define OLANCE 65
  253. #define OVORPAL 90
  254. #define OSLAYER 91
  255.  
  256. #define ORINGOFEXTRA 32
  257. #define OREGENRING 33
  258. #define OPROTRING 34
  259. #define OENERGYRING 35
  260. #define ODEXRING 36
  261. #define OSTRRING 37
  262. #define OCLEVERRING 38
  263. #define ODAMRING 39
  264.  
  265. #define OBELT 40
  266.  
  267. #define OSCROLL 41
  268. #define OPOTION 42
  269. #define OBOOK 43
  270. #define OCHEST 44             
  271. #define OAMULET 45
  272.  
  273. #define OORBOFDRAGON 46
  274. #define OSPIRITSCARAB 47
  275. #define OCUBEofUNDEAD 48
  276. #define ONOTHEFT 49
  277.  
  278. #define ODIAMOND 50
  279. #define ORUBY 51
  280. #define OEMERALD 52
  281. #define OSAPPHIRE 53
  282.  
  283. #define OENTRANCE 54
  284. #define OVOLDOWN 55
  285. #define OVOLUP 56
  286. #define OHOME 69
  287.  
  288. #define OKGOLD 71
  289. #define ODGOLD 72
  290. #define OIVDARTRAP 73
  291. #define ODARTRAP 74
  292. #define OTRAPDOOR 75
  293. #define OIVTRAPDOOR 76
  294. #define OTRADEPOST 77
  295. #define OIVTELETRAP 78
  296. #define ODEADTHRONE 79
  297. #define OANNIHILATION 80        /* sphere of annihilation */
  298. #define OTHRONE2 81
  299. #define OLRS 82                /* Larn Revenue Service */
  300. #define OCOOKIE 83
  301. #define OURN 84
  302. #define OBRASSLAMP 85
  303. #define OHANDofFEAR 86        /* hand of fear */
  304. #define OSPHTAILSMAN 87        /* tailsman of the sphere */
  305. #define OWWAND 88            /* wand of wonder */
  306. #define OPSTAFF 89            /* staff of power */
  307. /* used up to 92 */
  308.  
  309. /*    defines for the monsters as objects        */
  310.  
  311. #define BAT 1 
  312. #define GNOME 2 
  313. #define HOBGOBLIN 3 
  314. #define JACKAL 4 
  315. #define KOBOLD 5 
  316. #define ORC 6 
  317. #define SNAKE 7
  318. #define CENTIPEDE 8
  319. #define JACULI 9 
  320. #define TROGLODYTE 10 
  321. #define ANT 11 
  322. #define EYE 12 
  323. #define LEPRECHAUN 13
  324. #define NYMPH 14 
  325. #define QUASIT 15 
  326. #define RUSTMONSTER 16 
  327. #define ZOMBIE 17 
  328. #define ASSASSINBUG 18 
  329. #define BUGBEAR 19 
  330. #define HELLHOUND 20 
  331. #define ICELIZARD 21 
  332. #define CENTAUR 22 
  333. #define TROLL 23 
  334. #define YETI 24 
  335. #define WHITEDRAGON 25 
  336. #define ELF 26 
  337. #define CUBE 27 
  338. #define METAMORPH 28 
  339. #define VORTEX 29 
  340. #define ZILLER 30 
  341. #define VIOLETFUNGI 31 
  342. #define WRAITH 32 
  343. #define FORVALAKA 33 
  344. #define LAMANOBE 34 
  345. #define OSEQUIP 35 
  346. #define ROTHE 36 
  347. #define XORN 37 
  348. #define VAMPIRE 38 
  349. #define INVISIBLESTALKER 39 
  350. #define POLTERGEIST 40 
  351. #define DISENCHANTRESS 41 
  352. #define SHAMBLINGMOUND 42 
  353. #define YELLOWMOLD 43
  354. #define UMBERHULK 44
  355. #define GNOMEKING 45
  356. #define MIMIC 46
  357. #define WATERLORD 47
  358. #define BRONZEDRAGON 48
  359. #define GREENDRAGON 49
  360. #define PURPLEWORM 50
  361. #define XVART 51
  362. #define SPIRITNAGA 52
  363. #define SILVERDRAGON 53
  364. #define PLATINUMDRAGON 54
  365. #define GREENURCHIN 55
  366. #define REDDRAGON 56
  367. #define DEMONLORD 57
  368. #define DEMONPRINCE 64
  369.  
  370. # ifdef MSDOS
  371. #  define NULL 0L        /* For large model only */
  372. # else
  373. #  define NULL 0
  374. # endif
  375. #define BUFBIG    4096            /* size of the output buffer */
  376. #define MAXIBUF    4096            /* size of the input buffer */
  377. #define LOGNAMESIZE 40            /* max size of the players name */
  378. #define PSNAMESIZE 40            /* max size of the process name */
  379. #define SAVEFILENAMESIZE 128    /* max size of the savefile path */
  380.  
  381. #ifndef NODEFS
  382. extern char floorc, wallc;
  383. extern char VERSION,SUBVERSION;
  384. extern char aborted[],alpha[],beenhere[],boldon,cheat,ckpfile[],ckpflag;
  385. extern char *class[],course[],diagfile[],fortfile[],helpfile[],holifile[];
  386. extern char ckpfile[];
  387. # ifndef UNIX
  388. extern int    swapfd;
  389. extern char    swapfile[];
  390. extern long    tell(), lseek();
  391. # endif
  392. extern char *inbuffer,is_alpha[],is_digit[];
  393. extern char item[MAXX][MAXY],iven[],know[MAXX][MAXY],larnlevels[],lastmonst[];
  394. extern char level,*levelname[],logfile[],loginname[],logname[],*lpbuf,*lpend;
  395. extern char *lpnt,moved[MAXX][MAXY],mitem[MAXX][MAXY],monstlevel[];
  396. extern char monstnamelist[],nch[],ndgg[],nlpts[],nomove,nosignal,nowelcome;
  397. extern char nplt[],nsw[],*objectname[];
  398. extern char objnamelist[],optsfile[],*potionname[],playerids[],potprob[];
  399. extern char predostuff,psname[],restorflag,savefilename[],scorefile[],scprob[];
  400. extern char screen[MAXX][MAXY],*scrollname[],sex,*spelcode[],*speldescript[];
  401. extern char spelknow[],*spelname[],*spelmes[],spelweird[MAXMONST+8][SPNUM];
  402. extern char splev[],stealth[MAXX][MAXY],to_lower[],to_upper[],wizard;
  403. extern short diroffx[],diroffy[],hitflag,hit2flag,hit3flag,hitp[MAXX][MAXY];
  404. extern short iarg[MAXX][MAXY],ivenarg[],lasthx,lasthy,lastnum,lastpx,lastpy;
  405. extern short nobeep,oldx,oldy,playerx,playery;
  406. extern int dayplay,enable_scroll,srcount,yrepcount,userid,wisid,lfd,fd;
  407. extern long initialtime,outstanding_taxes,skill[],gtime,c[],cbak[];
  408. extern unsigned long randx;
  409. # ifdef UNIX        /* Different storage under MSDOS */
  410. extern struct cel *cell;
  411. # endif
  412. extern struct monst monster[];
  413. extern struct sphere *spheres;
  414. extern struct _itm itm[];
  415.  
  416. char *fortune(),*malloc(),*getenv(),*getlogin(),*lgetw(),*lgetl(),*ctime();
  417. char *tmcapcnv(),*tgetstr(),*tgoto();
  418. long paytaxes(),lgetc(),lrint();
  419. #ifndef GEMDOS
  420. long time();
  421. #endif
  422. unsigned long readnum();
  423.  
  424.     /* macro to create scroll #'s with probability of occurrence */
  425. #define newscroll() (scprob[rund(81)])
  426.     /* macro to return a potion # created with probability of occurrence */
  427. #define newpotion() (potprob[rund(41)])
  428.     /* macro to return the + points on created leather armor */
  429. #define newleather() (nlpts[rund(c[HARDGAME]?13:15)])
  430.     /* macro to return the + points on chain armor */
  431. #define newchain() (nch[rund(10)])
  432.     /* macro to return + points on plate armor */
  433. #define newplate() (nplt[rund(c[HARDGAME]?4:12)])
  434.     /* macro to return + points on new daggers */
  435. #define newdagger() (ndgg[rund(13)])
  436.     /* macro to return + points on new swords */
  437. #define newsword() (nsw[rund(c[HARDGAME]?6:13)])
  438.     /* macro to destroy object at present location */
  439. # ifdef DGK
  440. #define forget() (item[playerx][playery]=0,know[playerx][playery]&=~KNOWHERE)
  441. # else
  442. #define forget() (item[playerx][playery]=know[playerx][playery]=0)
  443. # endif
  444.     /* macro to wipe out a monster at a location */
  445. #define disappear(x,y) (mitem[x][y]=know[x][y]=0)
  446.  
  447. #ifdef VT100
  448.     /* macro to turn on bold display for the terminal */
  449. #define setbold() (lprcat(boldon?"\33[1m":"\33[7m"))
  450.     /* macro to turn off bold display for the terminal */
  451. #define resetbold() (lprcat("\33[m"))
  452.     /* macro to setup the scrolling region for the terminal */
  453. #define setscroll() (lprcat("\33[20;24r"))
  454.     /* macro to clear the scrolling region for the terminal */
  455. #define resetscroll() (lprcat("\33[;24r"))
  456.     /* macro to clear the screen and home the cursor */
  457. #define clear() (lprcat("\33[2J\33[f"), cbak[SPELLS]= -50)
  458. #define cltoeoln() lprcat("\33[K")
  459. #else /* VT100 */
  460.     /* defines below are for use in the termcap mode only */
  461. #define ST_START 1
  462. #define ST_END   2
  463. #define BOLD     3
  464. #define END_BOLD 4
  465. #define CLEAR    5
  466. #define CL_LINE  6
  467. #define CL_DOWN 14
  468. #define CURSOR  15
  469. #define T_INIT    16
  470. #define T_END    17
  471.     /* macro to turn on bold display for the terminal */
  472. #define setbold() (*lpnt++ = ST_START)
  473.     /* macro to turn off bold display for the terminal */
  474. #define resetbold() (*lpnt++ = ST_END)
  475.     /* macro to setup the scrolling region for the terminal */
  476. #define setscroll() enable_scroll=1
  477.     /* macro to clear the scrolling region for the terminal */
  478. #define resetscroll() enable_scroll=0
  479.     /* macro to clear the screen and home the cursor */
  480. #define clear() (*lpnt++ =CLEAR, cbak[SPELLS]= -50)
  481.     /* macro to clear to end of line */
  482. #define cltoeoln() (*lpnt++ = CL_LINE)
  483. #endif /* VT100 */
  484.  
  485.     /* macro to output one byte to the output buffer */
  486. #define lprc(ch) ((lpnt>=lpend)?(*lpnt++ =(ch), lflush()):(*lpnt++ =(ch)))
  487.  
  488.     /* macro to seed the random number generator */
  489. #define srand(x) (randx=x)
  490. #ifdef MACRORND
  491.     /* macros to generate random numbers   1<=rnd(N)<=N   0<=rund(N)<=N-1 */
  492. #define rnd(x)  ((((randx=randx*1103515245+12345)>>7)%(x))+1)
  493. #define rund(x) ((((randx=randx*1103515245+12345)>>7)%(x))  )
  494. #endif /* MACRORND */
  495.     /* macros for miscellaneous data conversion */
  496. #define min(x,y) (((x)>(y))?(y):(x))
  497. #define max(x,y) (((x)>(y))?(x):(y))
  498. #define isalpha(x) (is_alpha[x])
  499. #define isdigit(x) (is_digit[x])
  500. #define tolower(x) (to_lower[x])
  501. #define toupper(x) (to_upper[x])
  502. #define lcc(x) (to_lower[x])
  503. #define ucc(x) (to_upper[x])
  504.  
  505. # ifdef DGK
  506. #  include <errno.h>
  507. #  include <setjmp.h>
  508. #  define HAVESEEN    0x1
  509. #  define KNOWHERE    0x2
  510. #  define KNOWALL    (HAVESEEN | KNOWHERE)
  511. #  define PATHLEN    80
  512. #  define DIRLEN    64
  513. #  ifdef MAIL
  514. #    undef MAIL    /* No mail system, page the output to screen */
  515. #  endif
  516.    extern    char    larndir[];
  517.    extern int        ramlevels;
  518. #  ifdef MSDOS
  519.    extern unsigned char cursorstart, cursorend;
  520.    extern int        rawio, DECRainbow, keypad, cursorset;
  521. #  endif
  522.    extern int        save_mode, errno;
  523.    extern jmp_buf    save_jbuf;
  524. # endif
  525. # ifdef GEMDOS
  526.    extern    char    cmdshell[];
  527. # endif
  528. #endif /* NODEFS */
  529.