init.c revision 1.14 1 1.14 agc /* $NetBSD: init.c,v 1.14 2003/08/07 09:36:50 agc Exp $ */
2 1.2 cgd
3 1.1 jtc /*-
4 1.1 jtc * Copyright (c) 1993
5 1.1 jtc * The Regents of the University of California. All rights reserved.
6 1.1 jtc *
7 1.1 jtc * The game adventure was originally written in Fortran by Will Crowther
8 1.1 jtc * and Don Woods. It was later translated to C and enhanced by Jim
9 1.1 jtc * Gillogly. This code is derived from software contributed to Berkeley
10 1.1 jtc * by Jim Gillogly at The Rand Corporation.
11 1.1 jtc *
12 1.1 jtc * Redistribution and use in source and binary forms, with or without
13 1.1 jtc * modification, are permitted provided that the following conditions
14 1.1 jtc * are met:
15 1.1 jtc * 1. Redistributions of source code must retain the above copyright
16 1.1 jtc * notice, this list of conditions and the following disclaimer.
17 1.1 jtc * 2. Redistributions in binary form must reproduce the above copyright
18 1.1 jtc * notice, this list of conditions and the following disclaimer in the
19 1.1 jtc * documentation and/or other materials provided with the distribution.
20 1.14 agc * 3. Neither the name of the University nor the names of its contributors
21 1.1 jtc * may be used to endorse or promote products derived from this software
22 1.1 jtc * without specific prior written permission.
23 1.1 jtc *
24 1.1 jtc * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 1.1 jtc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 1.1 jtc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 1.1 jtc * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 1.1 jtc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 1.1 jtc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 1.1 jtc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 1.1 jtc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 1.1 jtc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 1.1 jtc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 1.1 jtc * SUCH DAMAGE.
35 1.1 jtc */
36 1.1 jtc
37 1.5 christos #include <sys/cdefs.h>
38 1.1 jtc #ifndef lint
39 1.2 cgd #if 0
40 1.1 jtc static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 6/2/93";
41 1.2 cgd #else
42 1.14 agc __RCSID("$NetBSD: init.c,v 1.14 2003/08/07 09:36:50 agc Exp $");
43 1.2 cgd #endif
44 1.1 jtc #endif /* not lint */
45 1.1 jtc
46 1.7 lukem /* Re-coding of advent in C: data initialization */
47 1.1 jtc
48 1.1 jtc #include <sys/types.h>
49 1.4 mrg #include <signal.h>
50 1.1 jtc #include <stdio.h>
51 1.5 christos #include <stdlib.h>
52 1.8 perry #include <time.h>
53 1.5 christos #include <unistd.h>
54 1.8 perry
55 1.1 jtc #include "hdr.h"
56 1.5 christos #include "extern.h"
57 1.1 jtc
58 1.7 lukem int blklin = TRUE;
59 1.1 jtc
60 1.7 lukem int setbit[16] = {1, 2, 4, 010, 020, 040, 0100, 0200, 0400, 01000, 02000, 04000,
61 1.7 lukem 010000, 020000, 040000, 0100000};
62 1.1 jtc
63 1.12 hubertf int datfd; /* message file descriptor */
64 1.12 hubertf volatile sig_atomic_t delhit;
65 1.12 hubertf int yea;
66 1.12 hubertf
67 1.12 hubertf int loc, newloc, oldloc, oldlc2, wzdark, gaveup, kq, k, k2;
68 1.12 hubertf char *wd1, *wd2; /* the complete words */
69 1.12 hubertf int verb, obj, spk;
70 1.12 hubertf int saveday, savet, mxscor, latncy;
71 1.12 hubertf
72 1.12 hubertf struct hashtab voc[HTSIZE];
73 1.12 hubertf
74 1.12 hubertf struct text rtext[RTXSIZ]; /* random text messages */
75 1.12 hubertf
76 1.12 hubertf struct text mtext[MAGSIZ]; /* magic messages */
77 1.12 hubertf
78 1.12 hubertf int clsses;
79 1.12 hubertf
80 1.12 hubertf struct text ctext[CLSMAX]; /* classes of adventurer */
81 1.12 hubertf int cval[CLSMAX];
82 1.12 hubertf
83 1.12 hubertf struct text ptext[101]; /* object descriptions */
84 1.12 hubertf
85 1.12 hubertf struct text ltext[LOCSIZ]; /* long loc description */
86 1.12 hubertf struct text stext[LOCSIZ]; /* short loc descriptions */
87 1.12 hubertf
88 1.12 hubertf struct travlist *travel[LOCSIZ], *tkk; /* travel is closer to keys(...) */
89 1.12 hubertf
90 1.12 hubertf int atloc[LOCSIZ];
91 1.12 hubertf
92 1.12 hubertf int plac[101]; /* initial object placement */
93 1.12 hubertf int fixd[101], fixed[101]; /* location fixed? */
94 1.12 hubertf
95 1.12 hubertf int actspk[35]; /* rtext msg for verb <n> */
96 1.12 hubertf
97 1.12 hubertf int cond[LOCSIZ]; /* various condition bits */
98 1.12 hubertf
99 1.12 hubertf int hntmax;
100 1.12 hubertf int hints[20][5]; /* info on hints */
101 1.12 hubertf int hinted[20], hintlc[20];
102 1.12 hubertf
103 1.12 hubertf int place[101], prop[101], links[201];
104 1.12 hubertf int abb[LOCSIZ];
105 1.12 hubertf
106 1.12 hubertf int maxtrs, tally, tally2; /* treasure values */
107 1.12 hubertf
108 1.12 hubertf int keys, lamp, grate, cage, rod, rod2, steps, /* mnemonics */
109 1.12 hubertf bird, door, pillow, snake, fissur, tablet, clam, oyster,
110 1.12 hubertf magzin, dwarf, knife, food, bottle, water, oil, plant, plant2,
111 1.12 hubertf axe, mirror, dragon, chasm, troll, troll2, bear, messag,
112 1.12 hubertf vend, batter, nugget, coins, chest, eggs, tridnt, vase,
113 1.12 hubertf emrald, pyram, pearl, rug, chain, spices, back, look, cave,
114 1.12 hubertf null, entrnc, dprssn, enter, stream, pour, say, lock, throw,
115 1.12 hubertf find, invent;
116 1.12 hubertf
117 1.12 hubertf int chloc, chloc2, dseen[7], dloc[7], /* dwarf stuff */
118 1.12 hubertf odloc[7], dflag, daltlc;
119 1.12 hubertf
120 1.12 hubertf int tk[21], stick, dtotal, attack;
121 1.12 hubertf int turns, lmwarn, iwest, knfloc, detail, /* various flags and
122 1.12 hubertf * counters */
123 1.12 hubertf abbnum, maxdie, numdie, holdng, dkill, foobar, bonus, clock1,
124 1.12 hubertf clock2, saved, closng, panic, closed, scorng;
125 1.12 hubertf
126 1.13 christos int demo, limit;
127 1.1 jtc
128 1.5 christos void
129 1.9 hubertf init() /* everything for 1st time run */
130 1.1 jtc {
131 1.7 lukem rdata(); /* read data from orig. file */
132 1.1 jtc linkdata();
133 1.1 jtc poof();
134 1.1 jtc }
135 1.1 jtc
136 1.7 lukem char *
137 1.7 lukem decr(a, b, c, d, e)
138 1.7 lukem char a, b, c, d, e;
139 1.1 jtc {
140 1.1 jtc static char buf[6];
141 1.1 jtc
142 1.7 lukem buf[0] = a - '+';
143 1.7 lukem buf[1] = b - '-';
144 1.7 lukem buf[2] = c - '#';
145 1.7 lukem buf[3] = d - '&';
146 1.7 lukem buf[4] = e - '%';
147 1.1 jtc buf[5] = 0;
148 1.1 jtc return buf;
149 1.1 jtc }
150 1.1 jtc
151 1.5 christos void
152 1.7 lukem linkdata()
153 1.7 lukem { /* secondary data manipulation */
154 1.7 lukem int i, j;
155 1.7 lukem
156 1.7 lukem /* array linkages */
157 1.7 lukem for (i = 1; i <= LOCSIZ; i++)
158 1.7 lukem if (ltext[i].seekadr != 0 && travel[i] != 0)
159 1.7 lukem if ((travel[i]->tverb) == 1)
160 1.7 lukem cond[i] = 2;
161 1.7 lukem for (j = 100; j > 0; j--)
162 1.7 lukem if (fixd[j] > 0) {
163 1.7 lukem drop(j + 100, fixd[j]);
164 1.7 lukem drop(j, plac[j]);
165 1.1 jtc }
166 1.7 lukem for (j = 100; j > 0; j--) {
167 1.7 lukem fixed[j] = fixd[j];
168 1.7 lukem if (plac[j] != 0 && fixd[j] <= 0)
169 1.7 lukem drop(j, plac[j]);
170 1.1 jtc }
171 1.1 jtc
172 1.7 lukem maxtrs = 79;
173 1.7 lukem tally = 0;
174 1.7 lukem tally2 = 0;
175 1.7 lukem
176 1.7 lukem for (i = 50; i <= maxtrs; i++) {
177 1.7 lukem if (ptext[i].seekadr != 0)
178 1.7 lukem prop[i] = -1;
179 1.1 jtc tally -= prop[i];
180 1.1 jtc }
181 1.1 jtc
182 1.1 jtc /* define mnemonics */
183 1.7 lukem keys = vocab(DECR('k', 'e', 'y', 's', '\0'), 1, 0);
184 1.7 lukem lamp = vocab(DECR('l', 'a', 'm', 'p', '\0'), 1, 0);
185 1.7 lukem grate = vocab(DECR('g', 'r', 'a', 't', 'e'), 1, 0);
186 1.7 lukem cage = vocab(DECR('c', 'a', 'g', 'e', '\0'), 1, 0);
187 1.7 lukem rod = vocab(DECR('r', 'o', 'd', '\0', '\0'), 1, 0);
188 1.7 lukem rod2 = rod + 1;
189 1.7 lukem steps = vocab(DECR('s', 't', 'e', 'p', 's'), 1, 0);
190 1.7 lukem bird = vocab(DECR('b', 'i', 'r', 'd', '\0'), 1, 0);
191 1.7 lukem door = vocab(DECR('d', 'o', 'o', 'r', '\0'), 1, 0);
192 1.7 lukem pillow = vocab(DECR('p', 'i', 'l', 'l', 'o'), 1, 0);
193 1.7 lukem snake = vocab(DECR('s', 'n', 'a', 'k', 'e'), 1, 0);
194 1.7 lukem fissur = vocab(DECR('f', 'i', 's', 's', 'u'), 1, 0);
195 1.7 lukem tablet = vocab(DECR('t', 'a', 'b', 'l', 'e'), 1, 0);
196 1.7 lukem clam = vocab(DECR('c', 'l', 'a', 'm', '\0'), 1, 0);
197 1.7 lukem oyster = vocab(DECR('o', 'y', 's', 't', 'e'), 1, 0);
198 1.7 lukem magzin = vocab(DECR('m', 'a', 'g', 'a', 'z'), 1, 0);
199 1.7 lukem dwarf = vocab(DECR('d', 'w', 'a', 'r', 'f'), 1, 0);
200 1.7 lukem knife = vocab(DECR('k', 'n', 'i', 'f', 'e'), 1, 0);
201 1.7 lukem food = vocab(DECR('f', 'o', 'o', 'd', '\0'), 1, 0);
202 1.7 lukem bottle = vocab(DECR('b', 'o', 't', 't', 'l'), 1, 0);
203 1.7 lukem water = vocab(DECR('w', 'a', 't', 'e', 'r'), 1, 0);
204 1.7 lukem oil = vocab(DECR('o', 'i', 'l', '\0', '\0'), 1, 0);
205 1.7 lukem plant = vocab(DECR('p', 'l', 'a', 'n', 't'), 1, 0);
206 1.7 lukem plant2 = plant + 1;
207 1.7 lukem axe = vocab(DECR('a', 'x', 'e', '\0', '\0'), 1, 0);
208 1.7 lukem mirror = vocab(DECR('m', 'i', 'r', 'r', 'o'), 1, 0);
209 1.7 lukem dragon = vocab(DECR('d', 'r', 'a', 'g', 'o'), 1, 0);
210 1.7 lukem chasm = vocab(DECR('c', 'h', 'a', 's', 'm'), 1, 0);
211 1.7 lukem troll = vocab(DECR('t', 'r', 'o', 'l', 'l'), 1, 0);
212 1.7 lukem troll2 = troll + 1;
213 1.7 lukem bear = vocab(DECR('b', 'e', 'a', 'r', '\0'), 1, 0);
214 1.7 lukem messag = vocab(DECR('m', 'e', 's', 's', 'a'), 1, 0);
215 1.7 lukem vend = vocab(DECR('v', 'e', 'n', 'd', 'i'), 1, 0);
216 1.7 lukem batter = vocab(DECR('b', 'a', 't', 't', 'e'), 1, 0);
217 1.7 lukem
218 1.7 lukem nugget = vocab(DECR('g', 'o', 'l', 'd', '\0'), 1, 0);
219 1.7 lukem coins = vocab(DECR('c', 'o', 'i', 'n', 's'), 1, 0);
220 1.7 lukem chest = vocab(DECR('c', 'h', 'e', 's', 't'), 1, 0);
221 1.7 lukem eggs = vocab(DECR('e', 'g', 'g', 's', '\0'), 1, 0);
222 1.7 lukem tridnt = vocab(DECR('t', 'r', 'i', 'd', 'e'), 1, 0);
223 1.7 lukem vase = vocab(DECR('v', 'a', 's', 'e', '\0'), 1, 0);
224 1.7 lukem emrald = vocab(DECR('e', 'm', 'e', 'r', 'a'), 1, 0);
225 1.7 lukem pyram = vocab(DECR('p', 'y', 'r', 'a', 'm'), 1, 0);
226 1.7 lukem pearl = vocab(DECR('p', 'e', 'a', 'r', 'l'), 1, 0);
227 1.7 lukem rug = vocab(DECR('r', 'u', 'g', '\0', '\0'), 1, 0);
228 1.7 lukem chain = vocab(DECR('c', 'h', 'a', 'i', 'n'), 1, 0);
229 1.7 lukem
230 1.7 lukem back = vocab(DECR('b', 'a', 'c', 'k', '\0'), 0, 0);
231 1.7 lukem look = vocab(DECR('l', 'o', 'o', 'k', '\0'), 0, 0);
232 1.7 lukem cave = vocab(DECR('c', 'a', 'v', 'e', '\0'), 0, 0);
233 1.7 lukem null = vocab(DECR('n', 'u', 'l', 'l', '\0'), 0, 0);
234 1.7 lukem entrnc = vocab(DECR('e', 'n', 't', 'r', 'a'), 0, 0);
235 1.7 lukem dprssn = vocab(DECR('d', 'e', 'p', 'r', 'e'), 0, 0);
236 1.7 lukem enter = vocab(DECR('e', 'n', 't', 'e', 'r'), 0, 0);
237 1.7 lukem
238 1.7 lukem pour = vocab(DECR('p', 'o', 'u', 'r', '\0'), 2, 0);
239 1.7 lukem say = vocab(DECR('s', 'a', 'y', '\0', '\0'), 2, 0);
240 1.7 lukem lock = vocab(DECR('l', 'o', 'c', 'k', '\0'), 2, 0);
241 1.7 lukem throw = vocab(DECR('t', 'h', 'r', 'o', 'w'), 2, 0);
242 1.7 lukem find = vocab(DECR('f', 'i', 'n', 'd', '\0'), 2, 0);
243 1.7 lukem invent = vocab(DECR('i', 'n', 'v', 'e', 'n'), 2, 0);
244 1.1 jtc
245 1.1 jtc /* initialize dwarves */
246 1.7 lukem chloc = 114;
247 1.7 lukem chloc2 = 140;
248 1.7 lukem for (i = 1; i <= 6; i++)
249 1.7 lukem dseen[i] = FALSE;
250 1.7 lukem dflag = 0;
251 1.7 lukem dloc[1] = 19;
252 1.7 lukem dloc[2] = 27;
253 1.7 lukem dloc[3] = 33;
254 1.7 lukem dloc[4] = 44;
255 1.7 lukem dloc[5] = 64;
256 1.7 lukem dloc[6] = chloc;
257 1.7 lukem daltlc = 18;
258 1.1 jtc
259 1.1 jtc /* random flags & ctrs */
260 1.7 lukem turns = 0;
261 1.7 lukem lmwarn = FALSE;
262 1.7 lukem iwest = 0;
263 1.7 lukem knfloc = 0;
264 1.7 lukem detail = 0;
265 1.7 lukem abbnum = 5;
266 1.7 lukem for (i = 0; i <= 4; i++)
267 1.7 lukem if (rtext[2 * i + 81].seekadr != 0)
268 1.7 lukem maxdie = i + 1;
269 1.7 lukem numdie = holdng = dkill = foobar = bonus = 0;
270 1.7 lukem clock1 = 30;
271 1.7 lukem clock2 = 50;
272 1.7 lukem saved = 0;
273 1.7 lukem closng = panic = closed = scorng = FALSE;
274 1.1 jtc }
275 1.1 jtc
276 1.1 jtc
277 1.1 jtc
278 1.5 christos void
279 1.7 lukem trapdel(n) /* come here if he hits a del */
280 1.11 hubertf int n __attribute__((__unused__));
281 1.7 lukem {
282 1.10 hubertf delhit = 1; /* main checks, treats as QUIT */
283 1.7 lukem signal(SIGINT, trapdel);/* catch subsequent DELs */
284 1.1 jtc }
285 1.1 jtc
286 1.1 jtc
287 1.5 christos void
288 1.1 jtc startup()
289 1.1 jtc {
290 1.9 hubertf demo = Start();
291 1.7 lukem srand((int) (time((time_t *) NULL))); /* random seed */
292 1.5 christos #if 0
293 1.7 lukem srand(371); /* non-random seed */
294 1.5 christos #endif
295 1.7 lukem hinted[3] = yes(65, 1, 0);
296 1.7 lukem newloc = 1;
297 1.1 jtc delhit = 0;
298 1.7 lukem limit = 330;
299 1.7 lukem if (hinted[3])
300 1.7 lukem limit = 1000; /* better batteries if instrucs */
301 1.1 jtc }
302