184 lines
4.1 KiB
C
184 lines
4.1 KiB
C
#ifndef lint
|
|
static char sccsid[] = "@(#)init.c 1.1 94/10/31 SMI"; /* from UCB 4.1 82/05/11 */
|
|
#endif
|
|
|
|
/* Re-coding of advent in C: data initialization */
|
|
|
|
# include "hdr.h"
|
|
|
|
int blklin = TRUE;
|
|
int setup = 0;
|
|
|
|
int setbit[16] = {1,2,4,010,020,040,0100,0200,0400,01000,02000,04000,
|
|
010000,020000,040000,0100000};
|
|
|
|
|
|
init(command) /* everything for 1st time run */
|
|
char *command; /* command we were called with */
|
|
{ int stat,adfd,pid;
|
|
rdata(); /* read data from orig. file */
|
|
linkdata();
|
|
poof();
|
|
setup=1; /* indicate that data is in */
|
|
if (confirm("got the data. save as \"advent\"? "))
|
|
{ if (save(command,"advent")<0) /* save core image */
|
|
{ printf("Save failed\n");
|
|
exit(0);
|
|
}
|
|
}
|
|
else exit(0);
|
|
printf("Save succeeded. Adding messages.\n");
|
|
adfd=open("advent",1);
|
|
lseek(adfd,0L,2);
|
|
close(datfd);
|
|
if ((pid=fork())==0) /* child process */
|
|
{ close(1);
|
|
dup(adfd); /* output goes to advent file */
|
|
execl("/bin/cat","cat",TMPFILE,0);
|
|
printf("unable to find /bin/cat\n");
|
|
}
|
|
while (wait(&stat)!=pid)
|
|
;
|
|
unlink(TMPFILE);
|
|
printf("Advent is ready.\n");
|
|
exit(0);
|
|
}
|
|
|
|
|
|
linkdata() /* secondary data manipulation */
|
|
{ register int i,j;
|
|
/* array linkages */
|
|
for (i=1; i<=LOCSIZ; i++)
|
|
if (ltext[i].seekadr!=0 && travel[i] != 0)
|
|
if ((travel[i]->tverb)==1) cond[i]=2;
|
|
for (j=100; j>0; j--)
|
|
if (fixd[j]>0)
|
|
{ drop(j+100,fixd[j]);
|
|
drop(j,plac[j]);
|
|
}
|
|
for (j=100; j>0; j--)
|
|
{ fixed[j]=fixd[j];
|
|
if (plac[j]!=0 && fixd[j]<=0) drop(j,plac[j]);
|
|
}
|
|
|
|
maxtrs=79;
|
|
tally=0;
|
|
tally2=0;
|
|
|
|
for (i=50; i<=maxtrs; i++)
|
|
{ if (ptext[i].seekadr!=0) prop[i] = -1;
|
|
tally -= prop[i];
|
|
}
|
|
|
|
/* define mnemonics */
|
|
keys=vocab("keys",1);
|
|
lamp=vocab("lamp",1);
|
|
grate=vocab("grate",1);
|
|
cage=vocab("cage",1);
|
|
rod=vocab("rod",1);
|
|
rod2=rod+1;
|
|
steps=vocab("steps",1);
|
|
bird=vocab("bird",1);
|
|
door=vocab("door",1);
|
|
pillow=vocab("pillow",1);
|
|
snake=vocab("snake",1);
|
|
fissur=vocab("fissu",1);
|
|
tablet=vocab("table",1);
|
|
clam=vocab("clam",1);
|
|
oyster=vocab("oyster",1);
|
|
magzin=vocab("magaz",1);
|
|
dwarf=vocab("dwarf",1);
|
|
knife=vocab("knife",1);
|
|
food=vocab("food",1);
|
|
bottle=vocab("bottl",1);
|
|
water=vocab("water",1);
|
|
oil=vocab("oil",1);
|
|
plant=vocab("plant",1);
|
|
plant2=plant+1;
|
|
axe=vocab("axe",1);
|
|
mirror=vocab("mirro",1);
|
|
dragon=vocab("drago",1);
|
|
chasm=vocab("chasm",1);
|
|
troll=vocab("troll",1);
|
|
troll2=troll+1;
|
|
bear=vocab("bear",1);
|
|
messag=vocab("messa",1);
|
|
vend=vocab("vendi",1);
|
|
batter=vocab("batte",1);
|
|
|
|
nugget=vocab("gold",1);
|
|
coins=vocab("coins",1);
|
|
chest=vocab("chest",1);
|
|
eggs=vocab("eggs",1);
|
|
tridnt=vocab("tride",1);
|
|
vase=vocab("vase",1);
|
|
emrald=vocab("emera",1);
|
|
pyram=vocab("pyram",1);
|
|
pearl=vocab("pearl",1);
|
|
rug=vocab("rug",1);
|
|
chain=vocab("chain",1);
|
|
|
|
back=vocab("back",0);
|
|
look=vocab("look",0);
|
|
cave=vocab("cave",0);
|
|
null=vocab("null",0);
|
|
entrnc=vocab("entra",0);
|
|
dprssn=vocab("depre",0);
|
|
|
|
say=vocab("say",2);
|
|
lock=vocab("lock",2);
|
|
throw=vocab("throw",2);
|
|
find=vocab("find",2);
|
|
invent=vocab("inven",2);
|
|
/* initialize dwarves */
|
|
chloc=114;
|
|
chloc2=140;
|
|
for (i=1; i<=6; i++)
|
|
dseen[i]=FALSE;
|
|
dflag=0;
|
|
dloc[1]=19;
|
|
dloc[2]=27;
|
|
dloc[3]=33;
|
|
dloc[4]=44;
|
|
dloc[5]=64;
|
|
dloc[6]=chloc;
|
|
daltlc=18;
|
|
|
|
/* random flags & ctrs */
|
|
turns=0;
|
|
lmwarn=FALSE;
|
|
iwest=0;
|
|
knfloc=0;
|
|
detail=0;
|
|
abbnum=5;
|
|
for (i=0; i<=4; i++)
|
|
if (rtext[2*i+81].seekadr!=0) maxdie=i+1;
|
|
numdie=holdng=dkill=foobar=bonus=0;
|
|
clock1=30;
|
|
clock2=50;
|
|
saved=0;
|
|
closng=panic=closed=scorng=FALSE;
|
|
}
|
|
|
|
|
|
|
|
trapdel() /* come here if he hits a del */
|
|
{ delhit++; /* main checks, treats as QUIT */
|
|
signal(2,trapdel); /* catch subsequent DELs */
|
|
}
|
|
|
|
|
|
startup()
|
|
{ int tvec[2];
|
|
demo=start(0);
|
|
time(tvec);
|
|
srand(tvec[1]|1); /* random odd seed */
|
|
/* srand(371); */ /* non-random seed */
|
|
hinted[3]=yes(65,1,0);
|
|
newloc=1;
|
|
setup=3;
|
|
limit=330;
|
|
if (hinted[3]) limit=1000; /* better batteries if instrucs */
|
|
}
|
|
|