init.c revision 1.9 1 1.9 hubertf /* $NetBSD: init.c,v 1.9 1998/08/24 22:07:37 hubertf 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.1 jtc * 3. All advertising materials mentioning features or use of this software
21 1.1 jtc * must display the following acknowledgement:
22 1.1 jtc * This product includes software developed by the University of
23 1.1 jtc * California, Berkeley and its contributors.
24 1.1 jtc * 4. Neither the name of the University nor the names of its contributors
25 1.1 jtc * may be used to endorse or promote products derived from this software
26 1.1 jtc * without specific prior written permission.
27 1.1 jtc *
28 1.1 jtc * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29 1.1 jtc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30 1.1 jtc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 1.1 jtc * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32 1.1 jtc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 1.1 jtc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 1.1 jtc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 1.1 jtc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 1.1 jtc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 1.1 jtc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 1.1 jtc * SUCH DAMAGE.
39 1.1 jtc */
40 1.1 jtc
41 1.5 christos #include <sys/cdefs.h>
42 1.1 jtc #ifndef lint
43 1.2 cgd #if 0
44 1.1 jtc static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 6/2/93";
45 1.2 cgd #else
46 1.9 hubertf __RCSID("$NetBSD: init.c,v 1.9 1998/08/24 22:07:37 hubertf Exp $");
47 1.2 cgd #endif
48 1.1 jtc #endif /* not lint */
49 1.1 jtc
50 1.7 lukem /* Re-coding of advent in C: data initialization */
51 1.1 jtc
52 1.1 jtc #include <sys/types.h>
53 1.4 mrg #include <signal.h>
54 1.1 jtc #include <stdio.h>
55 1.5 christos #include <stdlib.h>
56 1.8 perry #include <time.h>
57 1.5 christos #include <unistd.h>
58 1.8 perry
59 1.1 jtc #include "hdr.h"
60 1.5 christos #include "extern.h"
61 1.1 jtc
62 1.7 lukem int blklin = TRUE;
63 1.1 jtc
64 1.7 lukem int setbit[16] = {1, 2, 4, 010, 020, 040, 0100, 0200, 0400, 01000, 02000, 04000,
65 1.7 lukem 010000, 020000, 040000, 0100000};
66 1.1 jtc
67 1.1 jtc
68 1.5 christos void
69 1.9 hubertf init() /* everything for 1st time run */
70 1.1 jtc {
71 1.7 lukem rdata(); /* read data from orig. file */
72 1.1 jtc linkdata();
73 1.1 jtc poof();
74 1.1 jtc }
75 1.1 jtc
76 1.7 lukem char *
77 1.7 lukem decr(a, b, c, d, e)
78 1.7 lukem char a, b, c, d, e;
79 1.1 jtc {
80 1.1 jtc static char buf[6];
81 1.1 jtc
82 1.7 lukem buf[0] = a - '+';
83 1.7 lukem buf[1] = b - '-';
84 1.7 lukem buf[2] = c - '#';
85 1.7 lukem buf[3] = d - '&';
86 1.7 lukem buf[4] = e - '%';
87 1.1 jtc buf[5] = 0;
88 1.1 jtc return buf;
89 1.1 jtc }
90 1.1 jtc
91 1.5 christos void
92 1.7 lukem linkdata()
93 1.7 lukem { /* secondary data manipulation */
94 1.7 lukem int i, j;
95 1.7 lukem
96 1.7 lukem /* array linkages */
97 1.7 lukem for (i = 1; i <= LOCSIZ; i++)
98 1.7 lukem if (ltext[i].seekadr != 0 && travel[i] != 0)
99 1.7 lukem if ((travel[i]->tverb) == 1)
100 1.7 lukem cond[i] = 2;
101 1.7 lukem for (j = 100; j > 0; j--)
102 1.7 lukem if (fixd[j] > 0) {
103 1.7 lukem drop(j + 100, fixd[j]);
104 1.7 lukem drop(j, plac[j]);
105 1.1 jtc }
106 1.7 lukem for (j = 100; j > 0; j--) {
107 1.7 lukem fixed[j] = fixd[j];
108 1.7 lukem if (plac[j] != 0 && fixd[j] <= 0)
109 1.7 lukem drop(j, plac[j]);
110 1.1 jtc }
111 1.1 jtc
112 1.7 lukem maxtrs = 79;
113 1.7 lukem tally = 0;
114 1.7 lukem tally2 = 0;
115 1.7 lukem
116 1.7 lukem for (i = 50; i <= maxtrs; i++) {
117 1.7 lukem if (ptext[i].seekadr != 0)
118 1.7 lukem prop[i] = -1;
119 1.1 jtc tally -= prop[i];
120 1.1 jtc }
121 1.1 jtc
122 1.1 jtc /* define mnemonics */
123 1.7 lukem keys = vocab(DECR('k', 'e', 'y', 's', '\0'), 1, 0);
124 1.7 lukem lamp = vocab(DECR('l', 'a', 'm', 'p', '\0'), 1, 0);
125 1.7 lukem grate = vocab(DECR('g', 'r', 'a', 't', 'e'), 1, 0);
126 1.7 lukem cage = vocab(DECR('c', 'a', 'g', 'e', '\0'), 1, 0);
127 1.7 lukem rod = vocab(DECR('r', 'o', 'd', '\0', '\0'), 1, 0);
128 1.7 lukem rod2 = rod + 1;
129 1.7 lukem steps = vocab(DECR('s', 't', 'e', 'p', 's'), 1, 0);
130 1.7 lukem bird = vocab(DECR('b', 'i', 'r', 'd', '\0'), 1, 0);
131 1.7 lukem door = vocab(DECR('d', 'o', 'o', 'r', '\0'), 1, 0);
132 1.7 lukem pillow = vocab(DECR('p', 'i', 'l', 'l', 'o'), 1, 0);
133 1.7 lukem snake = vocab(DECR('s', 'n', 'a', 'k', 'e'), 1, 0);
134 1.7 lukem fissur = vocab(DECR('f', 'i', 's', 's', 'u'), 1, 0);
135 1.7 lukem tablet = vocab(DECR('t', 'a', 'b', 'l', 'e'), 1, 0);
136 1.7 lukem clam = vocab(DECR('c', 'l', 'a', 'm', '\0'), 1, 0);
137 1.7 lukem oyster = vocab(DECR('o', 'y', 's', 't', 'e'), 1, 0);
138 1.7 lukem magzin = vocab(DECR('m', 'a', 'g', 'a', 'z'), 1, 0);
139 1.7 lukem dwarf = vocab(DECR('d', 'w', 'a', 'r', 'f'), 1, 0);
140 1.7 lukem knife = vocab(DECR('k', 'n', 'i', 'f', 'e'), 1, 0);
141 1.7 lukem food = vocab(DECR('f', 'o', 'o', 'd', '\0'), 1, 0);
142 1.7 lukem bottle = vocab(DECR('b', 'o', 't', 't', 'l'), 1, 0);
143 1.7 lukem water = vocab(DECR('w', 'a', 't', 'e', 'r'), 1, 0);
144 1.7 lukem oil = vocab(DECR('o', 'i', 'l', '\0', '\0'), 1, 0);
145 1.7 lukem plant = vocab(DECR('p', 'l', 'a', 'n', 't'), 1, 0);
146 1.7 lukem plant2 = plant + 1;
147 1.7 lukem axe = vocab(DECR('a', 'x', 'e', '\0', '\0'), 1, 0);
148 1.7 lukem mirror = vocab(DECR('m', 'i', 'r', 'r', 'o'), 1, 0);
149 1.7 lukem dragon = vocab(DECR('d', 'r', 'a', 'g', 'o'), 1, 0);
150 1.7 lukem chasm = vocab(DECR('c', 'h', 'a', 's', 'm'), 1, 0);
151 1.7 lukem troll = vocab(DECR('t', 'r', 'o', 'l', 'l'), 1, 0);
152 1.7 lukem troll2 = troll + 1;
153 1.7 lukem bear = vocab(DECR('b', 'e', 'a', 'r', '\0'), 1, 0);
154 1.7 lukem messag = vocab(DECR('m', 'e', 's', 's', 'a'), 1, 0);
155 1.7 lukem vend = vocab(DECR('v', 'e', 'n', 'd', 'i'), 1, 0);
156 1.7 lukem batter = vocab(DECR('b', 'a', 't', 't', 'e'), 1, 0);
157 1.7 lukem
158 1.7 lukem nugget = vocab(DECR('g', 'o', 'l', 'd', '\0'), 1, 0);
159 1.7 lukem coins = vocab(DECR('c', 'o', 'i', 'n', 's'), 1, 0);
160 1.7 lukem chest = vocab(DECR('c', 'h', 'e', 's', 't'), 1, 0);
161 1.7 lukem eggs = vocab(DECR('e', 'g', 'g', 's', '\0'), 1, 0);
162 1.7 lukem tridnt = vocab(DECR('t', 'r', 'i', 'd', 'e'), 1, 0);
163 1.7 lukem vase = vocab(DECR('v', 'a', 's', 'e', '\0'), 1, 0);
164 1.7 lukem emrald = vocab(DECR('e', 'm', 'e', 'r', 'a'), 1, 0);
165 1.7 lukem pyram = vocab(DECR('p', 'y', 'r', 'a', 'm'), 1, 0);
166 1.7 lukem pearl = vocab(DECR('p', 'e', 'a', 'r', 'l'), 1, 0);
167 1.7 lukem rug = vocab(DECR('r', 'u', 'g', '\0', '\0'), 1, 0);
168 1.7 lukem chain = vocab(DECR('c', 'h', 'a', 'i', 'n'), 1, 0);
169 1.7 lukem
170 1.7 lukem back = vocab(DECR('b', 'a', 'c', 'k', '\0'), 0, 0);
171 1.7 lukem look = vocab(DECR('l', 'o', 'o', 'k', '\0'), 0, 0);
172 1.7 lukem cave = vocab(DECR('c', 'a', 'v', 'e', '\0'), 0, 0);
173 1.7 lukem null = vocab(DECR('n', 'u', 'l', 'l', '\0'), 0, 0);
174 1.7 lukem entrnc = vocab(DECR('e', 'n', 't', 'r', 'a'), 0, 0);
175 1.7 lukem dprssn = vocab(DECR('d', 'e', 'p', 'r', 'e'), 0, 0);
176 1.7 lukem enter = vocab(DECR('e', 'n', 't', 'e', 'r'), 0, 0);
177 1.7 lukem
178 1.7 lukem pour = vocab(DECR('p', 'o', 'u', 'r', '\0'), 2, 0);
179 1.7 lukem say = vocab(DECR('s', 'a', 'y', '\0', '\0'), 2, 0);
180 1.7 lukem lock = vocab(DECR('l', 'o', 'c', 'k', '\0'), 2, 0);
181 1.7 lukem throw = vocab(DECR('t', 'h', 'r', 'o', 'w'), 2, 0);
182 1.7 lukem find = vocab(DECR('f', 'i', 'n', 'd', '\0'), 2, 0);
183 1.7 lukem invent = vocab(DECR('i', 'n', 'v', 'e', 'n'), 2, 0);
184 1.1 jtc
185 1.1 jtc /* initialize dwarves */
186 1.7 lukem chloc = 114;
187 1.7 lukem chloc2 = 140;
188 1.7 lukem for (i = 1; i <= 6; i++)
189 1.7 lukem dseen[i] = FALSE;
190 1.7 lukem dflag = 0;
191 1.7 lukem dloc[1] = 19;
192 1.7 lukem dloc[2] = 27;
193 1.7 lukem dloc[3] = 33;
194 1.7 lukem dloc[4] = 44;
195 1.7 lukem dloc[5] = 64;
196 1.7 lukem dloc[6] = chloc;
197 1.7 lukem daltlc = 18;
198 1.1 jtc
199 1.1 jtc /* random flags & ctrs */
200 1.7 lukem turns = 0;
201 1.7 lukem lmwarn = FALSE;
202 1.7 lukem iwest = 0;
203 1.7 lukem knfloc = 0;
204 1.7 lukem detail = 0;
205 1.7 lukem abbnum = 5;
206 1.7 lukem for (i = 0; i <= 4; i++)
207 1.7 lukem if (rtext[2 * i + 81].seekadr != 0)
208 1.7 lukem maxdie = i + 1;
209 1.7 lukem numdie = holdng = dkill = foobar = bonus = 0;
210 1.7 lukem clock1 = 30;
211 1.7 lukem clock2 = 50;
212 1.7 lukem saved = 0;
213 1.7 lukem closng = panic = closed = scorng = FALSE;
214 1.1 jtc }
215 1.1 jtc
216 1.1 jtc
217 1.1 jtc
218 1.5 christos void
219 1.7 lukem trapdel(n) /* come here if he hits a del */
220 1.7 lukem int n;
221 1.7 lukem {
222 1.7 lukem delhit++; /* main checks, treats as QUIT */
223 1.7 lukem signal(SIGINT, trapdel);/* catch subsequent DELs */
224 1.1 jtc }
225 1.1 jtc
226 1.1 jtc
227 1.5 christos void
228 1.1 jtc startup()
229 1.1 jtc {
230 1.9 hubertf demo = Start();
231 1.7 lukem srand((int) (time((time_t *) NULL))); /* random seed */
232 1.5 christos #if 0
233 1.7 lukem srand(371); /* non-random seed */
234 1.5 christos #endif
235 1.7 lukem hinted[3] = yes(65, 1, 0);
236 1.7 lukem newloc = 1;
237 1.1 jtc delhit = 0;
238 1.7 lukem limit = 330;
239 1.7 lukem if (hinted[3])
240 1.7 lukem limit = 1000; /* better batteries if instrucs */
241 1.1 jtc }
242