xref: /dragonfly/games/adventure/hdr.h (revision 1de703da)
1 /*-
2  * Copyright (c) 1991, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * The game adventure was originally written in Fortran by Will Crowther
6  * and Don Woods.  It was later translated to C and enhanced by Jim
7  * Gillogly.  This code is derived from software contributed to Berkeley
8  * by Jim Gillogly at The Rand Corporation.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. All advertising materials mentioning features or use of this software
19  *    must display the following acknowledgement:
20  *	This product includes software developed by the University of
21  *	California, Berkeley and its contributors.
22  * 4. Neither the name of the University nor the names of its contributors
23  *    may be used to endorse or promote products derived from this software
24  *    without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36  * SUCH DAMAGE.
37  *
38  *	@(#)hdr.h	8.1 (Berkeley) 5/31/93
39  */
40 
41 /*   ADVENTURE -- Jim Gillogly, Jul 1977
42  * This program is a re-write of ADVENT, written in FORTRAN mostly by
43  * Don Woods of SAIL.  In most places it is as nearly identical to the
44  * original as possible given the language and word-size differences.
45  * A few places, such as the message arrays and travel arrays were changed
46  * to reflect the smaller core size and word size.  The labels of the
47  * original are reflected in this version, so that the comments of the
48  * fortran are still applicable here.
49  *
50  * The data file distributed with the fortran source is assumed to be called
51  * "glorkz" in the directory where the program is first run.
52  *
53  * $FreeBSD: src/games/adventure/hdr.h,v 1.5.2.1 2001/03/05 11:43:11 kris Exp $
54  * $DragonFly: src/games/adventure/hdr.h,v 1.2 2003/06/17 04:25:22 dillon Exp $
55  */
56 
57 /* hdr.h: included by c advent files */
58 #include <sys/types.h>
59 #include <signal.h>
60 
61 int datfd;                              /* message file descriptor      */
62 volatile sig_atomic_t delhit;
63 int yea;
64 extern char data_file[];                /* Virtual data file            */
65 
66 #define TAB     011
67 #define LF      012
68 #define FLUSHLINE do { int flushline_ch; while ((flushline_ch = getchar()) != EOF && flushline_ch != '\n'); } while (0)
69 #define FLUSHLF   while (next()!=LF)
70 
71 int loc,newloc,oldloc,oldlc2,wzdark,gaveup,kq,k,k2;
72 char *wd1,*wd2;                         /* the complete words           */
73 int verb,obj,spk;
74 extern int blklin;
75 int saved,savet,mxscor,latncy;
76 
77 #define SHORT 50                        /* How short is a demo game?    */
78 
79 #define MAXSTR  20                      /* max length of user's words   */
80 
81 #define HTSIZE  512                     /* max number of vocab words    */
82 struct hashtab                          /* hash table for vocabulary    */
83 {       int val;                        /* word type &index (ktab)      */
84 	char *atab;                     /* pointer to actual string     */
85 } voc[HTSIZE];
86 
87 #define SEED 1815622                    /* "Encryption" seed            */
88 
89 struct text
90 #ifdef OLDSTUFF
91 {       int seekadr;                    /* DATFILE must be < 2**16      */
92 #endif /* !OLDSTUFF */
93 {       char *seekadr;                  /* Msg start in virtual disk    */
94 	int txtlen;                     /* length of msg starting here  */
95 };
96 
97 #define RTXSIZ  205
98 struct text rtext[RTXSIZ];              /* random text messages         */
99 
100 #define MAGSIZ  35
101 struct text mtext[MAGSIZ];              /* magic messages               */
102 
103 int clsses;
104 #define CLSMAX  12
105 struct text ctext[CLSMAX];              /* classes of adventurer        */
106 int cval[CLSMAX];
107 
108 struct text ptext[101];                 /* object descriptions          */
109 
110 #define LOCSIZ  141                     /* number of locations          */
111 struct text ltext[LOCSIZ];              /* long loc description         */
112 struct text stext[LOCSIZ];              /* short loc descriptions       */
113 
114 struct travlist                         /* direcs & conditions of travel*/
115 {       struct travlist *next;          /* ptr to next list entry       */
116 	int conditions;                 /* m in writeup (newloc / 1000) */
117 	int tloc;                       /* n in writeup (newloc % 1000) */
118 	int tverb;                      /* the verb that takes you there*/
119 } *travel[LOCSIZ],*tkk;                 /* travel is closer to keys(...)*/
120 
121 int atloc[LOCSIZ];
122 
123 int  plac[101];                         /* initial object placement     */
124 int  fixd[101],fixed[101];              /* location fixed?              */
125 
126 int actspk[35];                         /* rtext msg for verb <n>       */
127 
128 int cond[LOCSIZ];                       /* various condition bits       */
129 
130 extern int setbit[16];                  /* bit defn masks 1,2,4,...     */
131 
132 int hntmax;
133 int hints[20][5];                       /* info on hints                */
134 int hinted[20],hintlc[20];
135 
136 int place[101], prop[101],linkx[201];
137 int abb[LOCSIZ];
138 
139 int maxtrs,tally,tally2;                /* treasure values              */
140 
141 #define FALSE   0
142 #define TRUE    1
143 
144 int keys,lamp,grate,cage,rod,rod2,steps,/* mnemonics                    */
145 	bird,door,pillow,snake,fissur,tablet,clam,oyster,magzin,
146 	dwarf,knife,food,bottle,water,oil,plant,plant2,axe,mirror,dragon,
147 	chasm,troll,troll2,bear,messag,vend,batter,
148 	nugget,coins,chest,eggs,tridnt,vase,emrald,pyram,pearl,rug,chain,
149 	spices,
150 	back,look,cave,null,entrnc,dprssn,
151 	enter, stream, pour,
152 	say,lock,throw,find,invent;
153 
154 int chloc,chloc2,dseen[7],dloc[7],      /* dwarf stuff                  */
155 	odloc[7],dflag,daltlc;
156 
157 int tk[21],stick,dtotal,attack;
158 int turns,lmwarn,iwest,knfloc,detail,   /* various flags & counters     */
159 	abbnum,maxdie,numdie,holdng,dkill,foobar,bonus,clock1,clock2,
160 	closng,panic,closed,scorng;
161 
162 int demo,limit;
163 
164 int at (int objj);
165 int bug (int n);
166 void carry (int, int);
167 void caveclose (void);
168 void checkhints (void);
169 void ciao (void);
170 void closing (void);
171 u_long crc (const char *ptr, int nr);
172 void crc_start (void);
173 int dark (void);
174 void datime (int *d, int *t);
175 char *decr (int, int, int, int, int);
176 void die (int entry);
177 void done (int entry);
178 void drop (int object,int where);
179 void dstroy (int);
180 int fdwarf (void);
181 int forced (int locc);
182 void getin (char **wrd1, char **wrd2);
183 int here (int objj);
184 void init (void);
185 void juggle (int);
186 int liq (void);
187 int liqloc (int locc);
188 int march (void);
189 void move (int, int);
190 void mspeak (int);
191 int pct (int n);
192 void poof (void);
193 void pspeak (int m, int skip);
194 int put (int, int, int);
195 int ran (int range);
196 void rdata (void);
197 int restore (const char *infile);
198 void rspeak (int);
199 int save (const char *);
200 int score (void);
201 void speak (const struct text *);
202 int Start (void);
203 void startup (void);
204 int toting (int objj);
205 void trapdel (int sig);
206 int trdrop (void);
207 int trfeed (void);
208 int trfill (void);
209 int trkill (void);
210 int tropen (void);
211 int trsay (void);
212 int trtake (void);
213 int trtoss (void);
214 int vocab (const char *,int,int);
215 int yes (int x, int y, int z);
216 int yesm (int x, int y, int z);
217 
218 /* We need to get a little tricky to avoid strings */
219 #define DECR(a,b,c,d,e) decr('a'+'+','b'+'-','c'+'#','d'+'&','e'+'%')
220 
221 gid_t	egid;
222