init.c revision 1.6 1 1.6 lukem /* $NetBSD: init.c,v 1.6 1997/10/10 11:59:42 lukem 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.6 lukem __RCSID("$NetBSD: init.c,v 1.6 1997/10/10 11:59:42 lukem Exp $");
47 1.2 cgd #endif
48 1.1 jtc #endif /* not lint */
49 1.1 jtc
50 1.1 jtc /* 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.5 christos #include <unistd.h>
57 1.1 jtc #include "hdr.h"
58 1.5 christos #include "extern.h"
59 1.1 jtc
60 1.1 jtc int blklin = TRUE;
61 1.1 jtc
62 1.1 jtc int setbit[16] = {1,2,4,010,020,040,0100,0200,0400,01000,02000,04000,
63 1.1 jtc 010000,020000,040000,0100000};
64 1.1 jtc
65 1.1 jtc
66 1.5 christos void
67 1.1 jtc init(command) /* everything for 1st time run */
68 1.1 jtc char *command; /* command we were called with */
69 1.1 jtc {
70 1.1 jtc rdata(); /* read data from orig. file */
71 1.1 jtc linkdata();
72 1.1 jtc poof();
73 1.1 jtc }
74 1.1 jtc
75 1.1 jtc char *decr(a,b,c,d,e)
76 1.1 jtc char a,b,c,d,e;
77 1.1 jtc {
78 1.1 jtc static char buf[6];
79 1.1 jtc
80 1.1 jtc buf[0] = a-'+';
81 1.1 jtc buf[1] = b-'-';
82 1.1 jtc buf[2] = c-'#';
83 1.1 jtc buf[3] = d-'&';
84 1.1 jtc buf[4] = e-'%';
85 1.1 jtc buf[5] = 0;
86 1.1 jtc return buf;
87 1.1 jtc }
88 1.1 jtc
89 1.5 christos void
90 1.1 jtc linkdata() /* secondary data manipulation */
91 1.6 lukem { int i,j;
92 1.1 jtc
93 1.1 jtc /* array linkages */
94 1.1 jtc for (i=1; i<=LOCSIZ; i++)
95 1.1 jtc if (ltext[i].seekadr!=0 && travel[i] != 0)
96 1.1 jtc if ((travel[i]->tverb)==1) cond[i]=2;
97 1.1 jtc for (j=100; j>0; j--)
98 1.1 jtc if (fixd[j]>0)
99 1.1 jtc { drop(j+100,fixd[j]);
100 1.1 jtc drop(j,plac[j]);
101 1.1 jtc }
102 1.1 jtc for (j=100; j>0; j--)
103 1.1 jtc { fixed[j]=fixd[j];
104 1.1 jtc if (plac[j]!=0 && fixd[j]<=0) drop(j,plac[j]);
105 1.1 jtc }
106 1.1 jtc
107 1.1 jtc maxtrs=79;
108 1.1 jtc tally=0;
109 1.1 jtc tally2=0;
110 1.1 jtc
111 1.1 jtc for (i=50; i<=maxtrs; i++)
112 1.1 jtc { if (ptext[i].seekadr!=0) prop[i] = -1;
113 1.1 jtc tally -= prop[i];
114 1.1 jtc }
115 1.1 jtc
116 1.1 jtc /* define mnemonics */
117 1.5 christos keys = vocab(DECR('k','e','y','s','\0'), 1, 0);
118 1.5 christos lamp = vocab(DECR('l','a','m','p','\0'), 1, 0);
119 1.5 christos grate = vocab(DECR('g','r','a','t','e'), 1, 0);
120 1.5 christos cage = vocab(DECR('c','a','g','e','\0'),1, 0);
121 1.5 christos rod = vocab(DECR('r','o','d','\0','\0'),1, 0);
122 1.1 jtc rod2=rod+1;
123 1.5 christos steps=vocab(DECR('s','t','e','p','s'),1, 0);
124 1.5 christos bird = vocab(DECR('b','i','r','d','\0'),1, 0);
125 1.5 christos door = vocab(DECR('d','o','o','r','\0'),1, 0);
126 1.5 christos pillow= vocab(DECR('p','i','l','l','o'), 1, 0);
127 1.5 christos snake = vocab(DECR('s','n','a','k','e'), 1, 0);
128 1.5 christos fissur= vocab(DECR('f','i','s','s','u'), 1, 0);
129 1.5 christos tablet= vocab(DECR('t','a','b','l','e'), 1, 0);
130 1.5 christos clam = vocab(DECR('c','l','a','m','\0'),1, 0);
131 1.5 christos oyster= vocab(DECR('o','y','s','t','e'), 1, 0);
132 1.5 christos magzin= vocab(DECR('m','a','g','a','z'), 1, 0);
133 1.5 christos dwarf = vocab(DECR('d','w','a','r','f'), 1, 0);
134 1.5 christos knife = vocab(DECR('k','n','i','f','e'), 1, 0);
135 1.5 christos food = vocab(DECR('f','o','o','d','\0'),1, 0);
136 1.5 christos bottle= vocab(DECR('b','o','t','t','l'), 1, 0);
137 1.5 christos water = vocab(DECR('w','a','t','e','r'), 1, 0);
138 1.5 christos oil = vocab(DECR('o','i','l','\0','\0'),1, 0);
139 1.5 christos plant = vocab(DECR('p','l','a','n','t'), 1, 0);
140 1.1 jtc plant2=plant+1;
141 1.5 christos axe = vocab(DECR('a','x','e','\0','\0'),1, 0);
142 1.5 christos mirror= vocab(DECR('m','i','r','r','o'), 1, 0);
143 1.5 christos dragon= vocab(DECR('d','r','a','g','o'), 1, 0);
144 1.5 christos chasm = vocab(DECR('c','h','a','s','m'), 1, 0);
145 1.5 christos troll = vocab(DECR('t','r','o','l','l'), 1, 0);
146 1.1 jtc troll2=troll+1;
147 1.5 christos bear = vocab(DECR('b','e','a','r','\0'),1, 0);
148 1.5 christos messag= vocab(DECR('m','e','s','s','a'), 1, 0);
149 1.5 christos vend = vocab(DECR('v','e','n','d','i'), 1, 0);
150 1.5 christos batter= vocab(DECR('b','a','t','t','e'), 1, 0);
151 1.5 christos
152 1.5 christos nugget= vocab(DECR('g','o','l','d','\0'),1, 0);
153 1.5 christos coins = vocab(DECR('c','o','i','n','s'), 1, 0);
154 1.5 christos chest = vocab(DECR('c','h','e','s','t'), 1, 0);
155 1.5 christos eggs = vocab(DECR('e','g','g','s','\0'),1, 0);
156 1.5 christos tridnt= vocab(DECR('t','r','i','d','e'), 1, 0);
157 1.5 christos vase = vocab(DECR('v','a','s','e','\0'),1, 0);
158 1.5 christos emrald= vocab(DECR('e','m','e','r','a'), 1, 0);
159 1.5 christos pyram = vocab(DECR('p','y','r','a','m'), 1, 0);
160 1.5 christos pearl = vocab(DECR('p','e','a','r','l'), 1, 0);
161 1.5 christos rug = vocab(DECR('r','u','g','\0','\0'),1, 0);
162 1.5 christos chain = vocab(DECR('c','h','a','i','n'), 1, 0);
163 1.5 christos
164 1.5 christos back = vocab(DECR('b','a','c','k','\0'),0, 0);
165 1.5 christos look = vocab(DECR('l','o','o','k','\0'),0, 0);
166 1.5 christos cave = vocab(DECR('c','a','v','e','\0'),0, 0);
167 1.5 christos null = vocab(DECR('n','u','l','l','\0'),0, 0);
168 1.5 christos entrnc= vocab(DECR('e','n','t','r','a'), 0, 0);
169 1.5 christos dprssn= vocab(DECR('d','e','p','r','e'), 0, 0);
170 1.5 christos enter = vocab(DECR('e','n','t','e','r'), 0, 0);
171 1.5 christos
172 1.5 christos pour = vocab(DECR('p','o','u','r','\0'), 2, 0);
173 1.5 christos say = vocab(DECR('s','a','y','\0','\0'),2, 0);
174 1.5 christos lock = vocab(DECR('l','o','c','k','\0'),2, 0);
175 1.5 christos throw = vocab(DECR('t','h','r','o','w'), 2, 0);
176 1.5 christos find = vocab(DECR('f','i','n','d','\0'),2, 0);
177 1.5 christos invent= vocab(DECR('i','n','v','e','n'), 2, 0);
178 1.1 jtc
179 1.1 jtc /* initialize dwarves */
180 1.1 jtc chloc=114;
181 1.1 jtc chloc2=140;
182 1.1 jtc for (i=1; i<=6; i++)
183 1.1 jtc dseen[i]=FALSE;
184 1.1 jtc dflag=0;
185 1.1 jtc dloc[1]=19;
186 1.1 jtc dloc[2]=27;
187 1.1 jtc dloc[3]=33;
188 1.1 jtc dloc[4]=44;
189 1.1 jtc dloc[5]=64;
190 1.1 jtc dloc[6]=chloc;
191 1.1 jtc daltlc=18;
192 1.1 jtc
193 1.1 jtc /* random flags & ctrs */
194 1.1 jtc turns=0;
195 1.1 jtc lmwarn=FALSE;
196 1.1 jtc iwest=0;
197 1.1 jtc knfloc=0;
198 1.1 jtc detail=0;
199 1.1 jtc abbnum=5;
200 1.1 jtc for (i=0; i<=4; i++)
201 1.1 jtc if (rtext[2*i+81].seekadr!=0) maxdie=i+1;
202 1.1 jtc numdie=holdng=dkill=foobar=bonus=0;
203 1.1 jtc clock1=30;
204 1.1 jtc clock2=50;
205 1.1 jtc saved=0;
206 1.1 jtc closng=panic=closed=scorng=FALSE;
207 1.1 jtc }
208 1.1 jtc
209 1.1 jtc
210 1.1 jtc
211 1.5 christos void
212 1.5 christos trapdel(n) /* come here if he hits a del */
213 1.5 christos int n;
214 1.1 jtc { delhit++; /* main checks, treats as QUIT */
215 1.3 mrg signal(SIGINT,trapdel); /* catch subsequent DELs */
216 1.1 jtc }
217 1.1 jtc
218 1.1 jtc
219 1.5 christos void
220 1.1 jtc startup()
221 1.1 jtc {
222 1.1 jtc demo=Start(0);
223 1.1 jtc srand((int)(time((time_t *)NULL))); /* random seed */
224 1.5 christos #if 0
225 1.5 christos srand(371); /* non-random seed */
226 1.5 christos #endif
227 1.1 jtc hinted[3]=yes(65,1,0);
228 1.1 jtc newloc=1;
229 1.1 jtc delhit = 0;
230 1.1 jtc limit=330;
231 1.1 jtc if (hinted[3]) limit=1000; /* better batteries if instrucs */
232 1.1 jtc }
233