home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_100
/
159_01
/
advent.h
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-04
|
14KB
|
463 lines
/* ADVENT.H revised header for BDS c vers 1.43 */
/* Revised for Eco-C88 V2.72 by Bob Withers
Defined all variables for driver routines and
altered header to declare them external for
all sub-modules. BW - 09/14/85
*/
#define NUL '\0'
#define MAXDIM(a) (sizeof(a) / sizeof(a[0]))
#define VOID void
#define NEAR near
#define PASCAL pascal
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
typedef short SHORT;
typedef unsigned short USHORT;
typedef long LONG;
typedef unsigned long ULONG;
typedef short BOOL;
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAXLOC 150
#define MAXOBJ 100
#define WORDSIZE 20
#define DWARFMAX 7
#define MAXDIE 3
#define MAXTRS 79
#define READ_BIN "rb"
#define WRITE_BIN "wb"
#define VOCAB_OBJECT 1000
#define VOCAB_VERB 2000
#define VOCAB_MSG 3000
/*
Object definitions
*/
#define KEYS 1
#define LAMP 2
#define GRATE 3
#define CAGE 4
#define ROD 5
#define ROD2 6
#define STEPS 7
#define BIRD 8
#define DOOR 9
#define PILLOW 10
#define SNAKE 11
#define FISSURE 12
#define TABLET 13
#define CLAM 14
#define OYSTER 15
#define MAGAZINE 16
#define DWARF 17
#define KNIFE 18
#define FOOD 19
#define BOTTLE 20
#define WATER 21
#define OIL 22
#define MIRROR 23
#define PLANT 24
#define PLANT2 25
#define STALACTITE 26
#define FIGURE 27
#define AXE 28
#define DRAWING 29
#define PIRATE 30
#define DRAGON 31
#define CHASM 32
#define TROLL 33
#define TROLL2 34
#define BEAR 35
#define MESSAGE 36
#define VOLCANO 37
#define VEND 38
#define BATTERIES 39
#define CARPET 40
#define NUGGET 50
#define DIAMONDS 51
#define SILVER 52
#define JEWELS 53
#define COINS 54
#define CHEST 55
#define EGGS 56
#define TRIDENT 57
#define VASE 58
#define EMERALD 59
#define PYRAMID 60
#define PEARL 61
#define RUG 62
#define SPICES 63
#define CHAIN 64
/*
Verb definitions
*/
#define NULLX 21
#define BACK 8
#define LOOK 57
#define CAVE 67
#define ENTRANCE 64
#define DEPRESSION 63
/*
Action verb definitions
*/
#define TAKE 1
#define DROP 2
#define SAY 3
#define OPEN 4
#define NOTHING 5
#define LOCK 6
#define ON 7
#define OFF 8
#define WAVE 9
#define CALM 10
#define WALK 11
#define KILL 12
#define POUR 13
#define EAT 14
#define DRINK 15
#define RUB 16
#define THROW 17
#define QUIT 18
#define FIND 19
#define INVENTORY 20
#define FEED 21
#define FILL 22
#define BLAST 23
#define SCORE 24
#define FOO 25
#define BRIEF 26
#define READ 27
#define BREAK 28
#define WAKE 29
#define SUSPEND 30
#define HOURS 31
#define LOG 32
#define SAVE 33
#define RESTORE 34
#define VERBOSE 35
/*
Bits of array cond
indicating location status
*/
#define LIGHT 1
#define WATOIL 2
#define LIQUID 4
#define NOPIRAT 8
#define HINTC 16
#define HINTB 32
#define HINTS 64
#define HINTM 128
#define HINT 240
/*
Adventure global variables
*/
struct S_VocabTab
{
char *pWord;
SHORT sWord;
};
typedef struct S_VocabTab VOCABTAB;
struct trav
{
SHORT tdest;
SHORT tverb;
SHORT tcond;
};
typedef struct trav TRAV;
struct travtab
{
TRAV *pTrav; // trav array for location
SHORT sTrav; // # entries for location
};
typedef struct travtab TRAVTAB;
#ifdef DRIVER
#define CLASS
#define INIT(x) = x
#else
#define CLASS extern
#define INIT(x)
#endif
#define NEARDATA NEAR
CLASS SHORT brief_sw;
/*
Database variables
*/
CLASS TRAV * NEARDATA pTravel; /* travel array & count for */
CLASS SHORT NEARDATA sTravCnt; /* the current location */
CLASS SHORT NEARDATA actmsg[32] /* action messages */
#ifdef DRIVER
= {
0, 24, 29, 0, 33, 0, 33, 38, 38, 42, /* 0 - 9 */
14, 43, 110, 29, 110, 73, 75, 29, 13, 59, /* 10 - 19 */
59, 174, 109, 67, 13, 147, 155, 195, 146, 110, /* 20 - 29 */
13, 13 /* 30 - 31 */
};
#else
;
#endif
/*
English variables
*/
CLASS SHORT NEARDATA verb;
CLASS SHORT NEARDATA object;
CLASS SHORT NEARDATA motion;
CLASS char NEARDATA word1[WORDSIZE];
CLASS char NEARDATA word2[WORDSIZE];
/*
Play variables
*/
CLASS SHORT NEARDATA turns INIT(0);
CLASS SHORT NEARDATA loc INIT(1);
CLASS SHORT NEARDATA oldloc INIT(1);
CLASS SHORT NEARDATA oldloc2 INIT(1);
CLASS SHORT NEARDATA newloc INIT(3);
CLASS SHORT NEARDATA cond[MAXLOC] /* location status */
#ifdef DRIVER
= {
0, 5, 1, 5, 5, 1, 1, 5, 17, 1, /* 0 - 9 */
1, 0, 0, 32, 0, 0, 2, 0, 0, 64, /* 10 - 19 */
2, 2, 2, 0, 6, 0, 2, 0, 0, 0, /* 20 - 29 */
0, 2, 2, 0, 0, 0, 0, 0, 4, 0, /* 30 - 39 */
2, 0, 128, 128, 128, 128, 136, 136, 136, 128, /* 40 - 49 */
128, 128, 128, 136, 128, 136, 0, 8, 0, 2, /* 50 - 59 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 60 - 69 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 2, /* 70 - 79 */
128, 128, 136, 0, 0, 8, 136, 128, 0, 2, /* 80 - 89 */
2, 0, 0, 0, 0, 4, 0, 0, 0, 0, /* 90 - 99 */
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 100 - 109 */
0, 0, 0, 4, 0, 1, 1, 0, 0, 0, /* 110 - 119 */
0, 0, 8, 8, 8, 8, 8, 8, 8, 8, /* 120 - 129 */
8, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 130 - 139 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 140 - 149 */
};
#else
;
#endif
CLASS SHORT NEARDATA place[MAXOBJ] /* object location */
#ifdef DRIVER
= {
0, 3, 3, 8, 10, 11, 0, 14, 13, 94, /* 0 - 9 */
96, 19, 17, 101, 103, 0, 106, 0, 0, 3, /* 10 - 19 */
3, 0, 0, 109, 25, 23, 111, 35, 0, 97, /* 20 - 29 */
0, 119, 117, 117, 0, 130, 0, 126, 140, 0, /* 30 - 39 */
96, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 40 - 49 */
18, 27, 28, 29, 30, 0, 92, 95, 97, 100, /* 50 - 59 */
101, 0, 119, 127, 130, 0, 0, 0, 0, 0, /* 60 - 69 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 - 79 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 89 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 99 */
};
#else
;
#endif
CLASS SHORT NEARDATA fixed[MAXOBJ] /* second object loc */
#ifdef DRIVER
= {
0, 0, 0, 9, 0, 0, 0, 15, 0, -1, /* 0 - 9 */
0, -1, 27, -1, 0, 0, 0, -1, 0, 0, /* 10 - 19 */
0, 0, 0, -1, -1, 67, -1, 110, 0, -1, /* 20 - 29 */
-1, 121, 122, 122, 0, -1, -1, -1, -1, 0, /* 30 - 39 */
-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 40 - 49 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 50 - 59 */
0, 0, 121, 0, -1, 0, 0, 0, 0, 0, /* 60 - 69 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 - 79 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 89 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 99 */
};
#else
;
#endif
CLASS SHORT NEARDATA visited[MAXLOC]; /* >0 if has been here*/
CLASS SHORT NEARDATA prop[MAXOBJ] /* status of object */
#ifdef DRIVER
= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 9 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 19 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 20 - 29 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 30 - 39 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 40 - 49 */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 50 - 59 */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 60 - 69 */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 70 - 79 */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 80 - 89 */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 90 - 99 */
};
#else
;
#endif
CLASS SHORT NEARDATA tally INIT(15); /* item counts */
CLASS SHORT NEARDATA tally2 INIT(0);
CLASS SHORT NEARDATA limit INIT(100); /* time limit */
CLASS SHORT NEARDATA lmwarn INIT(0); /* lamp warning flag */
CLASS BOOL NEARDATA wzdark INIT(FALSE);
CLASS BOOL NEARDATA closing INIT(FALSE);
CLASS BOOL NEARDATA closed INIT(FALSE);
CLASS SHORT NEARDATA holding INIT(0); /* count of held items*/
CLASS SHORT NEARDATA detail INIT(0); /* LOOK count */
CLASS SHORT NEARDATA knfloc INIT(0); /* knife location */
CLASS SHORT NEARDATA clock1 INIT(30); /* timing variables */
CLASS SHORT NEARDATA clock2 INIT(50);
CLASS SHORT NEARDATA panic INIT(0);
CLASS SHORT NEARDATA dloc[DWARFMAX] /* dwarf locations */
#ifdef DRIVER
= {
0, 19, 27, 33, 44, 64, 0 /* 0 - 6 */
};
#else
;
#endif
CLASS SHORT NEARDATA dflag INIT(0); /* dwarf flag */
CLASS SHORT NEARDATA dseen[DWARFMAX]; /* dwarf seen flag */
CLASS SHORT NEARDATA odloc[DWARFMAX]; /* dwarf old locs */
CLASS SHORT NEARDATA daltloc INIT(18); /* alt appearance */
CLASS SHORT NEARDATA dkill INIT(0); /* dwarves killed */
CLASS SHORT NEARDATA chloc INIT(114); /* chest locations */
CLASS SHORT NEARDATA chloc2 INIT(140);
CLASS SHORT NEARDATA bonus INIT(0); /* to pass to end */
CLASS SHORT NEARDATA numdie INIT(0); /* number of deaths */
CLASS SHORT NEARDATA object1; /* to help intrans. */
CLASS BOOL NEARDATA gaveup INIT(FALSE);
CLASS SHORT NEARDATA foobar INIT(0); /* fie fie foe foo... */
CLASS BOOL NEARDATA saveflg INIT(FALSE);/* game being saved? */
CLASS SHORT NEARDATA dbgflg; /* game in restart? */
CLASS char NEARDATA lastglob; /* to get space req. */
/* endglobal */
/* function prototypes */
/* advent.c */
int main(int argc, char **argv);
VOID PASCAL restore(VOID);
/* database.c */
VOID PASCAL gettrav(SHORT loc);
SHORT PASCAL yes(SHORT msg1, SHORT msg2, SHORT msg3);
VOID PASCAL rspeak(SHORT msg);
VOID PASCAL pspeak(SHORT item, SHORT state);
VOID PASCAL desclg(SHORT loc);
VOID PASCAL descsh(SHORT loc);
SHORT PASCAL vocab(char *word, SHORT val);
BOOL PASCAL dark(VOID);
BOOL PASCAL here(SHORT item);
BOOL PASCAL toting(SHORT item);
BOOL PASCAL forced(SHORT atloc);
BOOL PASCAL pct(SHORT x);
BOOL PASCAL at(SHORT item);
VOID PASCAL dstroy(SHORT obj);
VOID PASCAL move(SHORT obj, SHORT where);
VOID PASCAL juggle(SHORT loc);
VOID PASCAL carry(SHORT obj, SHORT where);
VOID PASCAL drop(SHORT obj, SHORT where);
SHORT PASCAL put(SHORT obj, SHORT where, SHORT pval);
SHORT PASCAL dcheck(VOID);
SHORT PASCAL liq(VOID);
SHORT PASCAL liqloc(SHORT loc);
SHORT PASCAL liq2(SHORT pbottle);
VOID PASCAL bug(SHORT n);
/* verb.c */
VOID PASCAL trverb(VOID);
VOID PASCAL vtake(VOID);
VOID PASCAL vdrop(VOID);
VOID PASCAL vopen(VOID);
VOID PASCAL vsay(VOID);
VOID PASCAL von(VOID);
VOID PASCAL voff(VOID);
VOID PASCAL vwave(VOID);
VOID PASCAL vkill(VOID);
VOID PASCAL vpour(VOID);
VOID PASCAL veat(VOID);
VOID PASCAL vdrink(VOID);
VOID PASCAL vthrow(VOID);
VOID PASCAL vfind(VOID);
VOID PASCAL vfill(VOID);
VOID PASCAL vfeed(VOID);
VOID PASCAL vread(VOID);
VOID PASCAL vblast(VOID);
VOID PASCAL vbreak(VOID);
VOID PASCAL vwake(VOID);
VOID PASCAL actspk(SHORT verb);
VOID PASCAL needobj(VOID);
/* english.c */
BOOL PASCAL english(VOID);
BOOL PASCAL analyze(char *word, SHORT *type, SHORT *value);
VOID PASCAL getin(VOID);
VOID PASCAL getword(char **buff, char *word);
VOID PASCAL skipspc(char **buff);
/* turn.c */
VOID PASCAL turn(VOID);
VOID PASCAL describe(VOID);
VOID PASCAL descitem(VOID);
VOID PASCAL domove(VOID);
VOID PASCAL goback(VOID);
VOID PASCAL dotrav(VOID);
VOID PASCAL badmove(VOID);
VOID PASCAL spcmove(SHORT rdest);
VOID PASCAL dwarfend(VOID);
VOID PASCAL normend(VOID);
VOID PASCAL score(VOID);
VOID PASCAL death(VOID);
VOID PASCAL doobj(VOID);
VOID PASCAL trobj(VOID);
char * PASCAL probj(SHORT object);
VOID PASCAL dwarves(VOID);
VOID PASCAL dopirate(VOID);
BOOL PASCAL stimer(VOID);
/* itverb.c */
VOID PASCAL itverb(VOID);
VOID PASCAL ivtake(VOID);
VOID PASCAL ivopen(VOID);
VOID PASCAL ivkill(VOID);
VOID PASCAL iveat(VOID);
VOID PASCAL ivdrink(VOID);
VOID PASCAL ivquit(VOID);
VOID PASCAL ivfill(VOID);
VOID PASCAL ivfoo(VOID);
VOID PASCAL ivread(VOID);
VOID PASCAL inventory(VOID);
VOID PASCAL addobj(SHORT obj);
/* saveadv.c */
VOID PASCAL saveadv(VOID);