xref: /original-bsd/games/adventure/init.c (revision 3d751ffd)
1 #
2 /*      Re-coding of advent in C: data initialization                   */
3 
4 static char sccsid[] = "	init.c	4.2	89/03/05	";
5 
6 #include <sys/types.h>
7 #include <stdio.h>
8 #include "hdr.h"
9 #include "pathnames.h"
10 
11 int blklin = TRUE;
12 int setup  = 0;
13 
14 int setbit[16] = {1,2,4,010,020,040,0100,0200,0400,01000,02000,04000,
15 		  010000,020000,040000,0100000};
16 
17 
18 init(command)                           /* everything for 1st time run  */
19 char *command;                          /* command we were called with  */
20 {       int stat,adfd;
21 	rdata();                        /* read data from orig. file    */
22 	linkdata();
23 	poof();
24 	setup=1;                        /* indicate that data is in     */
25 	if (save(command, "adventure") < 0) {
26 		fprintf(stderr, "adventure: save failed\n");
27 		exit(1);
28 	}
29 	adfd=open("adventure",1);
30 	lseek(adfd,0L,2);
31 	close(datfd);
32 	if (vfork() == 0) {
33 		dup2(adfd, 1);
34 		execl(_PATH_CAT, "cat", TMPFILE, 0);
35 		fprintf(stderr, "adventure: unable to find %s\n", _PATH_CAT);
36 		exit(1);
37 	}
38 	wait(&stat);
39 	unlink(TMPFILE);
40 	exit(stat);
41 }
42 
43 
44 linkdata()                              /*  secondary data manipulation */
45 {       register int i,j;
46 	/*      array linkages          */
47 	for (i=1; i<=LOCSIZ; i++)
48 		if (ltext[i].seekadr!=0 && travel[i] != 0)
49 			if ((travel[i]->tverb)==1) cond[i]=2;
50 	for (j=100; j>0; j--)
51 		if (fixd[j]>0)
52 		{       drop(j+100,fixd[j]);
53 			drop(j,plac[j]);
54 		}
55 	for (j=100; j>0; j--)
56 	{       fixed[j]=fixd[j];
57 		if (plac[j]!=0 && fixd[j]<=0) drop(j,plac[j]);
58 	}
59 
60 	maxtrs=79;
61 	tally=0;
62 	tally2=0;
63 
64 	for (i=50; i<=maxtrs; i++)
65 	{       if (ptext[i].seekadr!=0) prop[i] = -1;
66 		tally -= prop[i];
67 	}
68 
69 	/* define mnemonics */
70 	keys=vocab("keys",1);
71 	lamp=vocab("lamp",1);
72 	grate=vocab("grate",1);
73 	cage=vocab("cage",1);
74 	rod=vocab("rod",1);
75 	rod2=rod+1;
76 	steps=vocab("steps",1);
77 	bird=vocab("bird",1);
78 	door=vocab("door",1);
79 	pillow=vocab("pillow",1);
80 	snake=vocab("snake",1);
81 	fissur=vocab("fissu",1);
82 	tablet=vocab("table",1);
83 	clam=vocab("clam",1);
84 	oyster=vocab("oyster",1);
85 	magzin=vocab("magaz",1);
86 	dwarf=vocab("dwarf",1);
87 	knife=vocab("knife",1);
88 	food=vocab("food",1);
89 	bottle=vocab("bottl",1);
90 	water=vocab("water",1);
91 	oil=vocab("oil",1);
92 	plant=vocab("plant",1);
93 	plant2=plant+1;
94 	axe=vocab("axe",1);
95 	mirror=vocab("mirro",1);
96 	dragon=vocab("drago",1);
97 	chasm=vocab("chasm",1);
98 	troll=vocab("troll",1);
99 	troll2=troll+1;
100 	bear=vocab("bear",1);
101 	messag=vocab("messa",1);
102 	vend=vocab("vendi",1);
103 	batter=vocab("batte",1);
104 
105 	nugget=vocab("gold",1);
106 	coins=vocab("coins",1);
107 	chest=vocab("chest",1);
108 	eggs=vocab("eggs",1);
109 	tridnt=vocab("tride",1);
110 	vase=vocab("vase",1);
111 	emrald=vocab("emera",1);
112 	pyram=vocab("pyram",1);
113 	pearl=vocab("pearl",1);
114 	rug=vocab("rug",1);
115 	chain=vocab("chain",1);
116 
117 	back=vocab("back",0);
118 	look=vocab("look",0);
119 	cave=vocab("cave",0);
120 	null=vocab("null",0);
121 	entrnc=vocab("entra",0);
122 	dprssn=vocab("depre",0);
123 
124 	say=vocab("say",2);
125 	lock=vocab("lock",2);
126 	throw=vocab("throw",2);
127 	find=vocab("find",2);
128 	invent=vocab("inven",2);
129 	/* initialize dwarves */
130 	chloc=114;
131 	chloc2=140;
132 	for (i=1; i<=6; i++)
133 		dseen[i]=FALSE;
134 	dflag=0;
135 	dloc[1]=19;
136 	dloc[2]=27;
137 	dloc[3]=33;
138 	dloc[4]=44;
139 	dloc[5]=64;
140 	dloc[6]=chloc;
141 	daltlc=18;
142 
143 	/* random flags & ctrs */
144 	turns=0;
145 	lmwarn=FALSE;
146 	iwest=0;
147 	knfloc=0;
148 	detail=0;
149 	abbnum=5;
150 	for (i=0; i<=4; i++)
151 		if (rtext[2*i+81].seekadr!=0) maxdie=i+1;
152 	numdie=holdng=dkill=foobar=bonus=0;
153 	clock1=30;
154 	clock2=50;
155 	saved=0;
156 	closng=panic=closed=scorng=FALSE;
157 }
158 
159 
160 
161 trapdel()                               /* come here if he hits a del   */
162 {	delhit++;			/* main checks, treats as QUIT  */
163 	signal(2,trapdel);		/* catch subsequent DELs        */
164 }
165 
166 
167 startup()
168 {
169 	time_t time();
170 
171 	demo=start(0);
172 	srand((int)(time((time_t *)NULL)));	/* random seed */
173 	/* srand(371);				/* non-random seed */
174 	hinted[3]=yes(65,1,0);
175 	newloc=1;
176 	setup=3;
177 	limit=330;
178 	if (hinted[3]) limit=1000;      /* better batteries if instrucs */
179 }
180 
181