games-request@tekred.TEK.COM (07/24/87)
Submitted by: "J.D. McDonald " <mcdonald@uxe.cso.uiuc.edu>
Comp.sources.games: Volume 1, Issue 105
Archive-name: world/Part06
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 6 (of 7)."
# Contents: vcnvrt.c verbs1.c vocab.dat
# Wrapped by billr@tekred on Thu Jul 23 17:18:01 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f vcnvrt.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"vcnvrt.c\"
else
echo shar: Extracting \"vcnvrt.c\" \(10819 characters\)
sed "s/^X//" >vcnvrt.c <<'END_OF_vcnvrt.c'
X#include <stdio.h>
X
X/* World C Version 1.00 copyright 1987 J.D.McDonald
X Use as you like for non-commercial purposes, but please
X leave this note, and document any changes you make as yours */
X
Xint three[3], vrbpdo[100], vrbpio[100], vrbobj[100];
Xint pp1[15], pp2[15], pp3[8];
Xint obloc[200], obw3[200];
Xint obw4[200], obpprp[200], obimpr[200];
Xint dispat[300];
Xchar chrbuf[81];
Xchar astr[2], bstr[2], cstr[3], dstr[7];
Xchar outstr[81], estr[8], fstr[7];
Xchar obnoun[1200], obadjv[1400];
Xchar *nounptr, *adjptr;
X
Xint pnum, number, i, q, numx, vocdim, nvrbob, vocsz, m, q1;
Xint loxx, loxxx, ppq1, ppq2, zz1, zz2, ttabsz, locat, qq1, qq2;
Xint objmax, movmax, z, wt, size, value, floc, pprp, imprp;
Xint iloc, cval, qqqq, ib;
X
XFILE *vocab_dat, *vocab_inc, *parame_inc, *verbtb_inc;
XFILE *data_dat, *trvtbl_inc, *locdat_inc, *objdat_inc;
X
X
Xmain()
X{
X
X astr[1] = 0;
X bstr[1] = 0;
X cstr[2] = 0;
X dstr[6] = 0;
X estr[7] = 0;
X fstr[6] = 0;
X obloc[0] = 0;
X obnoun[0] = 0;
X obadjv[0] = 0;
X obw3[0] = 0;
X obw4[0] = 0;
X obpprp[0] = 0;
X obimpr[0] = 0;
X dispat[0] = 0;
X vocab_dat = fopen("vocab.dat", "r");
X vocab_inc = fopen("vocab.inc", "w");
X parame_inc = fopen("parame.inc", "w");
X verbtb_inc = fopen("verbtb.inc", "w");
X fprintf(parame_inc, "#define ACTMAX 1\n");
X number = 0;
X pnum = 0;
Xlab110:
X for (i = 0; i < 81; i++)
X chrbuf[i] = ' ';
X if (fgets(chrbuf, 80, vocab_dat) == NULL)
X goto lab500;
X q = strlen(chrbuf) - 1;
X for (i = q; i < 80; i++)
X chrbuf[i] = ' ';
X if (chrbuf[0] == '*')
X goto lab110;
X if (chrbuf[0] < '0' || chrbuf[0] >= '9')
X goto lab111;
X numx = pnum + 1;
X if (chrbuf[0] == '1') {
X fprintf(parame_inc, "#define BUZMAX %5d\n", pnum);
X fprintf(parame_inc, "#define ADVMIN %5d\n", numx);
X } else if (chrbuf[0] == '2') {
X fprintf(parame_inc, "#define ADVMAX %5d\n", pnum);
X fprintf(parame_inc, "#define VRBMIN %5d\n", numx);
X } else if (chrbuf[0] == '3') {
X fprintf(parame_inc, "#define VRBMAX %5d\n", pnum);
X fprintf(parame_inc, "#define ADJMIN %5d\n", numx);
X } else if (chrbuf[0] == '4') {
X fprintf(parame_inc, "#define ADJMAX %5d\n", pnum);
X fprintf(parame_inc, "#define NUNMIN %5d\n", numx);
X } else if (chrbuf[0] == '5') {
X fprintf(parame_inc, "#define NUNMAX %5d\n", pnum);
X fprintf(parame_inc, "#define PRPMIN %5d\n", numx);
X } else if (chrbuf[0] == '6') {
X fprintf(parame_inc, "#define PRPMAX %5d\n", pnum);
X } else;
X
X if (chrbuf[0] != '6')
X goto lab110;
X goto lab500;
Xlab111:
X number += 1;
X if (chrbuf[0] == '+')
X goto lab110;
X pnum += 1;
X for (i = 0; i < 6; i++)
X outstr[i] = chrbuf[i];
X if (chrbuf[59] >= 'A' && chrbuf[59] <= 'Z') {
X for (i = 0; i < 6; i++)
X outstr[i] = chrbuf[59 + i];
X }
X fprintf(parame_inc, "#define %6s %5d\n", outstr, pnum);
X goto lab110;
Xlab500:
X fprintf(parame_inc, "#define VOCMAX %5d\n", number);
X vocdim = number * 3;
X
X fseek(vocab_dat, 0l, 0);
X
X fprintf(vocab_inc, " short vocab[%5d] = { 0 \n", vocdim + 1);
X nvrbob = 0;
Xlab600:
X fgets(chrbuf, 80, vocab_dat);
X q = strlen(chrbuf) - 1;
X for (i = q; i < 80; i++)
X chrbuf[i] = ' ';
X if (chrbuf[0] == '*')
X goto lab600;
X vocsz = 0;
Xlab820:
X if (fgets(chrbuf, 80, vocab_dat) == NULL)
X goto lab6000;
X q = strlen(chrbuf) - 1;
X for (i = q; i < 80; i++)
X chrbuf[i] = ' ';
X if (chrbuf[0] == '*')
X goto lab820;
X if (chrbuf[0] > '0' && chrbuf[0] < '9')
X goto lab820;
X m = 0;
X if (chrbuf[0] == '+')
X m = 1;
X cvt(&chrbuf[m]);
X if (m == 1)
X three[0] = -three[0];
X vocsz += 3;
X q1 = (q < 9) ? q : 9; /* q1 = min (q,9) */
X fprintf(vocab_inc, " , %6d, %6d, %6d /* %12.13s */\n", three[0],
X three[1], three[2], chrbuf);
X if (chrbuf[15] == ' ')
X goto lab820;
X for (i = 0; i < 15; i++) {
X pp1[i] = chrbuf[i + 14] - '0';
X pp2[i] = chrbuf[i + 31] - '0';
X }
X for (i = 0; i < 8; i++)
X pp3[i] = chrbuf[i + 49] - '0';
X
X nvrbob += 1;
X vrbpdo[nvrbob] = 0;
X vrbpio[nvrbob] = 0;
X vrbobj[nvrbob] = 0;
X for (i = 0; i < 15; i++) {
X vrbpdo[nvrbob] = vrbpdo[nvrbob] * 2 + pp1[i];
X vrbpio[nvrbob] = vrbpio[nvrbob] * 2 + pp2[i];
X }
X for (i = 0; i < 8; i++)
X vrbobj[nvrbob] = vrbobj[nvrbob] * 2 + pp3[i];
X goto lab820;
Xlab6000:
X fprintf(verbtb_inc, " short vrbpdo[ %3d ] = { 0 \n", nvrbob + 1);
X for (i = 1; i <= nvrbob; i++)
X fprintf(verbtb_inc,
X " , %7d \n", vrbpdo[i]);
X fprintf(verbtb_inc, " } ; \n");
X
X fprintf(verbtb_inc, " short vrbpio[ %3d ] = { 0 \n", nvrbob + 1);
X for (i = 1; i <= nvrbob; i++)
X fprintf(verbtb_inc,
X " , %7d \n", vrbpio[i]);
X fprintf(verbtb_inc, " } ; \n");
X
X fprintf(verbtb_inc, " short vrbobj[ %3d ] = { 0 \n", nvrbob + 1);
X for (i = 1; i <= nvrbob; i++)
X fprintf(verbtb_inc,
X " , %7d \n", vrbobj[i]);
X fprintf(verbtb_inc, " } ; \n");
X
X
X fprintf(vocab_inc, " } ; \n");
X fclose(vocab_dat);
X fclose(vocab_inc);
X fclose(verbtb_inc);
X
X data_dat = fopen("data.dat", "r");
X trvtbl_inc = fopen("trvtbl.inc", "w");
X locdat_inc = fopen("locdat.inc", "w");
X objdat_inc = fopen("objdat.inc", "w");
X
X ttabsz = 0;
X fprintf(trvtbl_inc, " short trvtbl[] = { 0 \n");
Xlab1000:
X fgets(chrbuf, 80, data_dat);
X if (chrbuf[0] == '*')
X goto lab1000;
X locat = atoi(&chrbuf[1]);
X qq1 = atoi(&chrbuf[13]);
X qq2 = atoi(&chrbuf[16]);
X astr[0] = chrbuf[0];
X cstr[0] = chrbuf[8];
X cstr[1] = chrbuf[9];
X bstr[0] = chrbuf[11];
X if (locat == 9999)
X goto lab1200;
X ttabsz += 1;
X if (strcmp(cstr, "N ") == 0)
X ppq1 = 1;
X else if (strcmp(cstr, "NE") == 0)
X ppq1 = 2;
X else if (strcmp(cstr, "E ") == 0)
X ppq1 = 3;
X else if (strcmp(cstr, "SE") == 0)
X ppq1 = 4;
X else if (strcmp(cstr, "S ") == 0)
X ppq1 = 5;
X else if (strcmp(cstr, "SW") == 0)
X ppq1 = 6;
X else if (strcmp(cstr, "W ") == 0)
X ppq1 = 7;
X else if (strcmp(cstr, "NW") == 0)
X ppq1 = 8;
X else if (strcmp(cstr, "U ") == 0)
X ppq1 = 9;
X else if (strcmp(cstr, "D ") == 0)
X ppq1 = 10;
X else
X printf(" error in travel table\n");
X if (bstr[0] == 'C')
X ppq1 += 16;
X if (bstr[0] == 'S')
X ppq1 += 32;
X if (bstr[0] == 'Q')
X ppq1 += 64;
X ppq2 = 512 * qq1 + qq2;
X zz2 = ttabsz * 2;
X zz1 = zz2 - 1;
X {
X if (locat != 0) {
X dispat[locat] = zz1;
X loxx = locat;
X }
X }
X
X fprintf(trvtbl_inc, " , %7d , %7d \n", ppq1, ppq2);
X
X goto lab1000;
Xlab1200:
X loxxx = loxx + 1;
X fprintf(trvtbl_inc, " } ;\n");
X fprintf(trvtbl_inc, " short dispat[] = { 0 \n");
X for (i = 1; i < loxxx; i++)
X fprintf(trvtbl_inc, " , %5d \n", dispat[i]);
X fprintf(trvtbl_inc, " , %5d }; \n", zz2 + 1);
X fprintf(parame_inc, "#define LOCNUM %5d \n", loxx);
X fprintf(parame_inc, "#define TTABSZ %5d \n", zz2);
X
X fclose(trvtbl_inc);
X
X fprintf(locdat_inc, " short locdat[] = { 0 \n");
X
X while (1) {
X do
X fgets(chrbuf, 80, data_dat);
X while (chrbuf[0] == '*');
X locat = atoi(&chrbuf[1]);
X if (locat == 9999)
X break;
X ppq1 = atoi(&chrbuf[6]);
X fprintf(locdat_inc, " , %6d \n", ppq1);
X }
X fprintf(locdat_inc, " } ; \n");
X fclose(locdat_inc);
X
X objmax = 0;
X movmax = 0;
X nounptr = obnoun;
X adjptr = obadjv;
X
X while (1) {
X do
X fgets(chrbuf, 80, data_dat);
X while (chrbuf[0] == '*');
X z = atoi(&chrbuf[1]);
X if (z == 9999)
X break;
X for (i = 0; i < 6; i++)
X *nounptr++ = chrbuf[i + 7];
X for (i = 0; i < 7; i++)
X *adjptr++ = chrbuf[i + 16];
X wt = atoi(&chrbuf[24]);
X size = atoi(&chrbuf[30]);
X value = atoi(&chrbuf[36]);
X floc = atoi(&chrbuf[42]);
X pprp = atoi(&chrbuf[48]);
X imprp = atoi(&chrbuf[54]);
X iloc = atoi(&chrbuf[60]);
X cval = atoi(&chrbuf[66]);
X for (i = 0; i < 6; i++)
X fstr[i] = chrbuf[i + 72];
X objmax += 1;
X movmax += 1;
X obw3[z] = wt * 256 + size;
X obw4[z] = value * 4096 + floc;
X obpprp[z] = pprp + 2048 * cval;
X obloc[z] = iloc;
X obimpr[z] = imprp;
X for (i = 0; i < 6; i++)
X if (fstr[i] == '\n')
X fstr[i] = ' ';
X fprintf(parame_inc, "#define %7.6s %5d\n", fstr, z);
X }
X
X while (1) {
X do
X fgets(chrbuf, 80, data_dat);
X while (chrbuf[0] == '*');
X z = atoi(&chrbuf[1]);
X if (z == 9999)
X break;
X for (i = 0; i < 6; i++)
X *nounptr++ = chrbuf[i + 7];
X for (i = 0; i < 7; i++)
X *adjptr++ = chrbuf[i + 16];
X objmax += 1;
X obw3[objmax] = atoi(&chrbuf[30]);
X obw4[objmax] = atoi(&chrbuf[42]);
X pprp = atoi(&chrbuf[48]);
X obimpr[objmax] = atoi(&chrbuf[54]);
X cval = atoi(&chrbuf[66]);
X for (i = 0; i < 6; i++)
X fstr[i] = chrbuf[i + 72];
X for (i = 0; i < 6; i++)
X if (fstr[i] == '\n')
X fstr[i] = ' ';
X obpprp[objmax] = pprp + 2048 * cval;
X
X fprintf(parame_inc, "#define %7.6s %5d\n", fstr, objmax);
X }
X fclose(data_dat);
X
X fprintf(parame_inc, "#define OBJMAX %5d\n", objmax);
X fprintf(parame_inc, "#define MOVMAX %5d\n", movmax);
X fprintf(parame_inc, "#define OBJMX2 %5d\n", objmax + 1);
X fclose(parame_inc);
X
X fprintf(objdat_inc, " short obloc[] = { 0 \n");
X for (i = 1; i <= movmax; i++) {
X qqqq = obloc[i];
X if (qqqq > 6000)
X qqqq += movmax - 4000;
X fprintf(objdat_inc, " , %7d \n", qqqq);
X }
X fprintf(objdat_inc, " } ;\n");
X
X fprintf(objdat_inc, " short obw3[] = { 0 \n");
X for (i = 1; i <= objmax; i++) {
X fprintf(objdat_inc, " , %7d \n", obw3[i]);
X }
X fprintf(objdat_inc, " } ;\n");
X
X fprintf(objdat_inc, " short obw4[] = { 0 \n");
X for (i = 1; i <= objmax; i++) {
X fprintf(objdat_inc, " , %7d \n", obw4[i]);
X }
X fprintf(objdat_inc, " } ;\n");
X
X fprintf(objdat_inc, " short obpprp[] = { 0 \n");
X for (i = 1; i <= objmax; i++) {
X fprintf(objdat_inc, " , %7d \n", obpprp[i]);
X }
X fprintf(objdat_inc, " } ;\n");
X
X fprintf(objdat_inc, " short obimpr[] = { 0 \n");
X for (i = 1; i <= objmax; i++) {
X fprintf(objdat_inc, " , %7d \n", obimpr[i]);
X }
X fprintf(objdat_inc, " } ;\n");
X
X nounptr = obnoun;
X fprintf(objdat_inc, " short obnoun[] = { 0 \n");
X for (i = 1; i <= objmax; i++) {
X for (ib = 0; ib < 6; ib++)
X dstr[ib] = *nounptr++;
X fprintf(objdat_inc, " , %7s \n", dstr);
X }
X fprintf(objdat_inc, " } ;\n");
X
X adjptr = obadjv;
X fprintf(objdat_inc, " short obadjv[] = { 0 \n");
X for (i = 1; i <= objmax; i++) {
X for (ib = 0; ib < 7; ib++)
X estr[ib] = *adjptr++;
X fprintf(objdat_inc, " , %8s \n", estr);
X }
X fprintf(objdat_inc, " } ;\n");
X
X
X fclose(objdat_inc);
X
X}
X
X
Xcvt(strptr)
X char *strptr;
X{
X int ii, ij, k;
X
X for (ii = 0; ii < 3; ii++) {
X three[ii] = 0;
X for (ij = 0; ij < 3; ij++) {
X k = *strptr++;
X if (k == 45)
X k = 91;
X k -= 64;
X if (k < 1 || k > 27)
X k = 0;
X three[ii] = three[ii] * 32 + k;
X }
X }
X}
END_OF_vcnvrt.c
if test 10819 -ne `wc -c <vcnvrt.c`; then
echo shar: \"vcnvrt.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f verbs1.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"verbs1.c\"
else
echo shar: Extracting \"verbs1.c\" \(30154 characters\)
sed "s/^X//" >verbs1.c <<'END_OF_verbs1.c'
X#include "parame.inc"
X#include "variab.h"
X#include "arrays.h"
X
X/* World C Version 1.00 copyright 1987 J.D.McDonald
X Use as you like for non-commercial purposes, but please
X leave this note, and document any changes you make as yours */
X
X
Xvattac()
X{
X int i, spk, cplce, n, plce;
X /*
X * "attach" or "tie" not "attack" a mess since it involves the wire
X */
X
X if (dobjs[0] == CABLE && iobj == ANTENN) {
X if (loc != 69)
X spk = 379;
X else if (obloc[GCABLE] == 2000 + ZANTEN || obloc[DCABLE] == 2000 + ZANTEN)
X spk = 381;
X else {
X n = getobj(dobjs[0], doadjs[0]);
X if (n <= 0)
X spk = 70;
X else {
X itsher(n, &cplce);
X if (cplce != 1 && cplce != 3 && cplce != 4)
X spk = 380;
X else {
X obloc[n] = 2000 + ZANTEN;
X spk = 75;
X }
X }
X }
X } else if (dobjs[0] != WIRE)
X spk = 48;
X else if (iobj == TREE || iobj == LOG || iobj == STOOL)
X spk = 204;
X else if (iobj != KNOB && iobj != TOWER)
X spk = 48;
X else {
X itsher(ZWIRE, &plce);
X if (plce == 0)
X spk = 213;
X else if (iobj == TOWER) {
X if (loc != 48)
X spk = 205;
X else {
X spk = 75;
X obloc[ZWIRE] = loc;
X /* -57=177707 octal */
X
X obimpr[ZWIRE] = (obimpr[ZWIRE] & -57) + 24;
X for (i = 0; i < 6; i++)
X wirelc[i] = 1000;
X }
X } else {
X if (loc != 42)
X spk = 206;
X else if (spcloc == 1) {
X spk = 75;
X obloc[ZWIRE] = loc;
X /* ~56=177707 octal */
X
X obimpr[ZWIRE] = (obimpr[ZWIRE] & ~56) + 32;
X for (i = 0; i < 6; i++)
X wirelc[i] = 1000;
X } else
X spk = 207;
X }
X }
X speak(spk);
X}
X
Xvattak()
X{
X int spk;
X spk = 286;
X if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8) {
X spk = 306;
X if (pct(33))
X spk = 302;
X else if (pct(50))
X spk = 305;
X } else if (dobjs[0] == GUARD) {
X if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
X spk = 562;
X else
X spk = 561;
X } else if (dobjs[0] == MARTIA && loc >= 27 && loc <= 51)
X spk = 307;
X else if (dobjs[0] == ROBOT || dobjs[0] == FERRET)
X spk = 285;
X speak(spk);
X}
X
Xvbreak()
X{
X int j, hplce, xplce;
X if (iobj != 0 && iobj != HAMMER && iobj != BOULDE) {
X speak(48);
X return;
X }
X if (iobj == HAMMER) {
X itsher(ZHAMME, &hplce);
X if (hplce == 0) {
X speak(329);
X return;
X }
X }
X if (iobj == BOULDE) {
X speak(330);
X return;
X }
X if (dobjs[0] == LOUVER && (loc == 98 || loc == 142)) {
X speak(282);
X obimpr[ZLOUVE] = 9;
X if (iobj == HAMMER)
X obloc[ZHAMME] = 1000;
X return;
X }
X if (dobjs[0] == FERRET || dobjs[0] == ROBOT || dobjs[0] ==
X MARTIA || dobjs[0] == CAT || dobjs[0] == FISH) {
X speak(286);
X return;
X }
X if (dobjs[0] == GUARD) {
X if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
X speak(562);
X else
X speak(561);
X return;
X }
X j = getobj(dobjs[0], doadjs[0]);
X if (j == -1) {
X speak(70);
X return;
X } else {
X itsher(j, &xplce);
X if (xplce == 0)
X speak(66);
X else if (j > MOVMAX)
X speak(332);
X else if (dobjs[0] == WIRE || dobjs[0] == KNAPSA || dobjs[0] ==
X SHIRT || dobjs[0] == PANTS || dobjs[0] == BOULDE ||
X dobjs[0] == PUCK || dobjs[0] == LATEX || dobjs[0] ==
X NUGGET || dobjs[0] == KNIFE || dobjs[0] == BEAD) {
X speak(48);
X return;
X } else if ((dobjs[0] == KEY || dobjs[0] == SAPPHI || dobjs[0] ==
X DIAMON || dobjs[0] == SPHERE) && iobj != HAMMER)
X speak(385);
X else if (j == ZSEED) {
X if (loc != 131 && loc != 99 && loc != 100) {
X speak(337);
X obimpr[ZSEED] = 0;
X } else if (loc != 100) {
X speak(338);
X obimpr[ZSEED] = 0;
X } else {
X speak(340);
X obimpr[ZSEED] = 3;
X /* seed function here */
X
X }
X obloc[ZSEED] = 0;
X } else if (j == ZSTATU && loc == 99 && obloc[j] == 99)
X speak(89);
X else if (j == CEGG) {
X speak(480);
X obloc[CEGG] = 0;
X obloc[SCOIN] = loc;
X } else {
X speak(331);
X if (j == GSPHER) {
X speak(333);
X obloc[ZBEAD] = obloc[j];
X }
X if (obloc[j] == 2000 + RSLOT)
X obimpr[RSLOT] = 9;
X obloc[j] = 0;
X }
X }
X}
X
Xvdig()
X{
X int splce, pplce;
X if (dobjs[0] != 0 && dobjs[0] != SHOVEL && dobjs[0] != PITCHF)
X speak(48);
X else if (loc != 73)
X speak(284);
X else {
X itsher(ZSHOVE, &splce);
X itsher(ZPITCH, &pplce);
X if ((dobjs[0] == SHOVEL && splce != 0) ||
X (dobjs[0] == PITCHF && pplce != 0) ||
X (dobjs[0] == 0 && (splce > 0 || pplce > 0))) {
X if (obimpr[RHOLE] != 17)
X speak(283);
X else
X speak(434);
X obimpr[RHOLE] = 17;
X } else if ((dobjs[0] == SHOVEL && splce == 0) || (dobjs[0] ==
X PITCHF && pplce == 0))
X speak(89);
X else
X speak(234);
X }
X}
X
X
Xvdrink()
X{
X int spk;
X /* pervert!!!! */
X
X if (dobjs[0] == NPISS) {
X dirty += 1;
X spk = 183;
X }
X /* water is o.k. */
X
X else if (dobjs[0] == WATER) {
X if ((locdat[loc] & 1024) == 1024)
X spk = 184;
X else
X spk = 74;
X } else
X spk = 48;
X speak(spk);
X}
X
Xvdrop()
X{
X int d, i, ambig, ddflg, empty, plce, plural, kkwr, kk, spk;
X
X /* special code for "drop something into bowl" */
X
X if (prepio != 0 && !(prepio == IN && iobj == BOWL)) {
X speak(28);
X return;
X }
X /* convert dobjs(1) (noun) list into list of objects (pointers) */
X
X ambig = !cnvobj();
X if (allflg)
X getall();
X for (i = 0; i < 30; i++) {
X ddflg = 0;
X empty = 1;
X d = dobjs[i];
X if (d == 0)
X continue;
X /* see if it is here */
X
X itsher(d, &plce);
X if (allflg && ((plce != 1 && plce != 2) || d > MOVMAX))
X continue;
X if (dobjs[1] != 0 || allflg)
X speak(odistb[d]);
X plural = (obpprp[d] & 256) == 256;
X if (d > MOVMAX)
X spk = 48;
X else if (plce == 2) {
X spk = 88;
X if (plural)
X spk = 194;
X } else if (d == ZWIRE && plce != 1) {
X for (kkwr = 0; kkwr < 6; kkwr++)
X if (wirelc[kkwr] == 1000)
X wirelc[kkwr] = loc;
X if (obloc[d] == loc && wirelc[5] == loc) {
X for (kkwr = 0; kkwr < 6; kkwr++)
X wirelc[kkwr] = 0;
X }
X spk = 82;
X } else if (plce == 0 || plce == 4 || plce == 5) {
X spk = 89;
X if (plural)
X spk = 195;
X } else if (d == ZSEED && (wrdnum[0] == DROP || wrdnum[0] == THROW)) {
X if (loc == 100) {
X spk = 340;
X obimpr[ZSEED] = 0;
X } else if (loc == 131 || loc == 99) {
X spk = 338;
X obimpr[ZSEED] = 3;
X } else {
X obimpr[ZSEED] = 0;
X spk = 337;
X }
X obloc[ZSEED] = 0;
X } else if (d == CFISH && obloc[d] ==
X (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5))
X spk = 76;
X /*
X * code for knocking the puck out of the arena loc38 is center of
X * bowl, 23-37 are the rim
X */
X
X else if (iobj == BOWL) {
X if (loc < 32 || loc > 38)
X spk = 156;
X else {
X if (d == RBOULD && loc != 38) {
X itsher(RBOULD, &plce);
X /* marflg[1] tells if martians are there */
X
X if (marflg[1]) {
X speak(157);
X vdead();
X oldloc = 0;
X oldlc2 = 0;
X return;
X } else {
X if (obloc[HPUCK] == 38) {
X /*
X * the next line tells if other rim is low or
X * high
X */
X
X if ((loc & 1) == 1) {
X /* we shoot the puck out */
X
X spk = 158;
X obloc[RBOULD] = 38;
X obloc[HPUCK] = loc + 3;
X if (obloc[HPUCK] > 37)
X obloc[HPUCK] -= 6;
X } else {
X spk = 159;
X obloc[RBOULD] = 38;
X }
X } else {
X /* in this case it settles back in */
X
X if ((loc & 1) == 1) {
X spk = 160;
X obloc[RBOULD] = loc + 3;
X if (obloc[RBOULD] > 37)
X obloc[RBOULD] -= 6;
X } else {
X spk = 161;
X obloc[RBOULD] = 38;
X }
X }
X /* smash the other items in the bowl */
X
X for (kk = 1; kk <= MOVMAX; kk++) {
X if (kk == RBOULD || kk == HPUCK)
X continue;
X if (obloc[kk] == 38) {
X obloc[kk] = 0;
X empty = 0;
X }
X }
X }
X } else {
X spk = 75;
X obloc[d] = 38;
X ddflg = 1;
X }
X }
X } else {
X if (d == ZCAT)
X spk = 334;
X else if (d == RBOULD)
X spk = 335;
X else if (d == ZORCHI && loc == 87)
X spk = 432;
X else if (d == ZFLYTR && loc == 87)
X spk = 433;
X else
X spk = 82;
X obloc[d] = loc;
X ddflg = 1;
X }
X if (d == ZLATEX && ddflg == 1)
X obimpr[d] = 337;
X xindnt += 2;
X speak(spk);
X xindnt -= 2;
X if (empty != 1) {
X xindnt += 4;
X speak(162);
X xindnt -= 4;
X }
X }
X}
X
Xveat()
X{
X int d, l, spk, plce;
X /* don't eat shit */
X
X if (dobjs[0] == NSHIT) {
X dirty += 1;
X spk = 179;
X }
X /* id love for you to do it, but please don't make mama mad */
X
X else if (dobjs[0] == ME) {
X dirty += 1;
X spk = 183;
X } else {
X d = getobj(dobjs[0], doadjs[0]);
X /* see if its here */
X
X if (d <= 0) {
X speak(48);
X return;
X }
X itsher(d, &plce);
X if (plce <= 0) {
X spk = 66;
X if ((obpprp[d] & 256) == 256)
X spk = 185;
X } else {
X /* poison! */
X
X if ((obpprp[d] & 8) == 8) {
X if (d == CFISH && obloc[d] ==
X (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5)) {
X speak(76);
X return;
X }
X speak(181);
X oldloc = 0;
X oldlc2 = 0;
X if (d <= MOVMAX)
X obloc[d] = 0;
X vdead();
X return;
X }
X /* it's edible, and delicious */
X
X else if ((obpprp[d] & 4) == 4) {
X spk = 180;
X if (d <= MOVMAX)
X obloc[d] = 0;
X if (d != BBALL)
X eattim = 0;
X if (d == CEGG) {
X spk = 478;
X obloc[SCOIN] = 1000;
X }
X if (d == LETTUC)
X eattim = 150;
X if (d == BBALL) {
X lpill = 1;
X spk = 522;
X bonus += 5;
X dcombi = (qrand() % 31);
X if (dcombi == 0)
X dcombi = 1;
X l = (qrand() % 31);
X if (l == 0)
X l = 22;
X dcombi = dcombi * 32 + l;
X l = (qrand() % 31);
X if (l == 0)
X l = 3;
X dcombi = dcombi * 32 + l;
X }
X /* inedible */
X
X } else
X spk = 182;
X }
X }
X speak(spk);
X}
X
X
X
Xvfill()
X{
X int result, z, z2, spk, i, empty, plce;
X result = 0;
X z = dobjs[0];
X spk = 48;
X if (dobjs[0] == FUNNEL && iobj == WATER) {
X result = 1;
X dobjs[0] = WATER;
X iobj = FUNNEL;
X ioadj = doadjs[0];
X doadjs[0] = 0;
X prepio = IN;
X return (result);
X }
X if (dobjs[0] == TUBE) {
X speak(494);
X return (result);
X }
X /* fill the bag or bucket with water or latex */
X
X empty = 1;
X if (z == BUCKET) {
X for (i = 1; i <= OBJMAX; i++)
X if (obloc[i] == 2039)
X empty = 0;
X }
X if (z == BUCKET && iobj == LATEX && obloc[ZLATEX] == 66 &&
X prepio == WITH && loc == 66) {
X if (obimpr[ZBUCKE] == 1033)
X spk = 274;
X else if (empty == 0)
X spk = 275;
X else {
X obloc[ZLATEX] = 2000 + ZBUCKE;
X obimpr[ZBUCKE] = 1545;
X obimpr[ZLATEX] = 265;
X spk = 75;
X }
X } else if ((z == BAG && (doadjs[0] == 0 || doadjs[0] == PLASTI)) ||
X (z == BUCKET && doadjs[0] == 0)) {
X if ((prepio == WITH && iobj == WATER) ||
X (((locdat[loc] & 1024) == 1024) && prepio == 0
X && iobj == 0)) {
X z2 = ZBUCKE;
X if (z == BAG)
X z2 = PLBAG;
X itsher(z2, &plce);
X if (plce == 0)
X spk = 73;
X else if ((locdat[loc] & 1024) != 1024 && ((obloc[ZBUCKE]
X != loc && obloc[ZBUCKE] != 1000) || obimpr[ZBUCKE]
X != 1033))
X spk = 74;
X else if (empty == 1) {
X if (z2 == PLBAG)
X obimpr[z2] = 2697;
X else
X obimpr[z2] = 1033;
X spk = 75;
X obloc[z2] = 1000;
X } else
X spk = 275;
X } else if (iobj == 0)
X spk = 278;
X }
X speak(spk);
X return (result);
X}
X
Xvfuck()
X{
X if (dirty < 10)
X speak(495);
X else if (dirty > 20)
X speak(497);
X else
X speak(496);
X}
X
X
Xvget()
X{
X int spk, result;
X result = 0;
X spk = 0;
X if (prepdo == IN && dobjs[0] == CHAIR && (loc == 166 ||
X loc == 175)) {
X spcloc = 2;
X spk = 510;
X }
X /* get up is a joke */
X
X else if (prepdo == UP) {
X if (dobjs[0] == 0 && spcloc == 2) {
X spk = 511;
X spcloc = 0;
X } else
X spk = 208;
X }
X /* get on or off glass plate */
X
X else if (dobjs[0] == GLASS && (doadjs[0]
X == 0 || doadjs[0] == GLASS) && dobjs[1] == 0) {
X if (prepdo == OFF && spcloc == 1) {
X spcloc = 0;
X spk = 75;
X } else if (prepdo == ON && spcloc == 0) {
X spcloc = 1;
X spk = 75;
X }
X }
X /* get something means take it */
X
X else if (prepdo == ON || prepdo == OFF)
X spk = 71;
X else
X result = 1;
X /* this results in calling vtake */
X
X if (spk != 0)
X speak(spk);
X return (result);
X}
X
Xvgive()
X{
X int spk, ij, iplce, dj, dplce;
X spk = 0;
X if (iobj == ME)
X spk = 445;
X else if (iobj == GUARD) {
X if (loc == guardl || loc == 171 || (chaset != 0 &&
X chaset <= 9))
X spk = 562;
X else
X spk = 561;
X } else if (iobj == MARTIA) {
X if (martim == 7 && loc >= 27 && loc <= 51)
X spk = 446;
X else
X spk = 168;
X } else if (iobj == FERRET && !(loc == 131 || loc == 99
X || loc == 100))
X spk = 447;
X else if (iobj != CAT && iobj != BIRD && iobj != BEES &&
X iobj != FROG && iobj != ROBOT)
X spk = 448;
X else {
X ij = getobj(iobj, ioadj);
X if (iobj == BIRD && ij < 0)
X ij = YBIRD;
X itsher(ij, &iplce);
X if (iplce == 0) {
X if (iobj == CAT)
X spk = 449;
X else if (iobj == BEES)
X spk = 450;
X else if (iobj == FROG)
X spk = 451;
X else if (iobj == ROBOT)
X spk = 452;
X else if (iobj == BIRD)
X spk = 453;
X } else {
X if (iobj == FROG)
X spk = 454;
X else if (iobj == BIRD)
X spk = 455;
X }
X }
X if (spk != 0) {
X speak(spk);
X return;
X }
X dj = getobj(dobjs[0], doadjs[0]);
X if (dj < 0)
X spk = 70;
X else if (dj == 0)
X spk = 28;
X else {
X itsher(dj, &dplce);
X if (dplce == 0) {
X if ((obimpr[dj] & 256) != 0)
X spk = 185;
X else
X spk = 89;
X } else if (obloc[dj] == 2000 + ij)
X spk = 456;
X else if (dj > MOVMAX)
X spk = odistb[dj + 1] - 1;
X else if (dplce > 3)
X spk = 458;
X else;
X }
X if (spk != 0) {
X speak(spk);
X return;
X }
X /* at this point you have it, and someone is here to take it. */
X
X if (iobj == CAT) {
X if (dobjs[0] == FISH) {
X spk = 459;
X obloc[dj] = 0;
X } else if ((obpprp[dj] & 12) != 0)
X spk = 460;
X else
X spk = 461;
X } else if (iobj == FERRET) {
X if (dobjs[0] == EGG || dobjs[0] == FISH || dobjs[0] == CAT) {
X spk = 462;
X obloc[dj] = 0;
X } else if ((obpprp[dj] & 12) != 0)
X spk = 464;
X else {
X spk = 463;
X obloc[dj] = 0;
X }
X } else if (iobj == BEES) {
X if (iobj != ORCHID && iobj != FLYTRA)
X spk = 465;
X else if (iobj == ORCHID) {
X spk = 432;
X obloc[dj] = loc;
X } else {
X spk = 433;
X obloc[dj] = loc;
X }
X } else if (iobj == ROBOT) {
X if (obloc[ZCART] != RSLOT + 2000 && obloc[CCART] != RSLOT + 2000)
X spk = 466;
X else if (obw3[dj] / 256 > 1 || (obw3[dj] & 255) > 2)
X spk = 352;
X else {
X spk = 345;
X obloc[dj] = 2000 + ZROBOT;
X }
X }
X speak(spk);
X}
X
Xvhelp()
X{
X speak(105);
X}
X
X
Xvkiss()
X{
X int result, spk, cplce;
X /* if vkiss ends up 1, call vpush */
X
X result = 0;
X if (dobjs[0] == FROG && loc == 67)
X spk = 468;
X else if (dobjs[0] == GUARD) {
X if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
X spk = 562;
X else
X spk = 561;
X } else if (dobjs[0] == FERRET && (loc == 131 || loc == 100 || loc == 99))
X spk = 469;
X else if (dobjs[0] == CAT) {
X itsher(ZCAT, &cplce);
X if (cplce != 0)
X spk = 470;
X else
X spk = 449;
X } else if (dobjs[0] == ME)
X spk = 471;
X else if (dobjs[0] == BIRD || dobjs[0] == BEES || dobjs[0] == ROBOT)
X spk = 472;
X else
X result = 1;
X if (result == 0)
X speak(spk);
X return (result);
X}
X
Xvlocks()
X{
X int n, plce, spk;
X n = getobj(dobjs[0], doadjs[0]);
X if (n < 0)
X spk = 70;
X else if (n == 0)
X spk = 28;
X else if ((obpprp[n] & 512) != 512 && n != ZBOX)
X spk = 233;
X else {
X itsher(n, &plce);
X if (plce <= 0) {
X if (dobjs[0] == DOOR)
X spk = 225;
X else
X spk = 66;
X } else if (n == ZBOX)
X spk = 389;
X else if (n == ODOOR || n == PDOOR)
X spk = 524;
X else if (prepio == WITH && iobj == KEY) {
X if (n == RDOOR || (n == MDOOR && loc == 41))
X spk = 235;
X else if (n == MDOOR || n == GDOOR) {
X if (wrdnum[0] == LOCK)
X obimpr[n] |= 4;
X else
X obimpr[n] = (obimpr[n] & ~4);
X /* ~4=177773 octal */
X
X spk = 75;
X } else
X spk = 48;
X } else
X spk = 234;
X }
X speak(spk);
X}
X
X static char strng3[] = "The left dial is set to and the right to .";
X static char strng4[] = "are for the left and for the right.";
Xvlooks()
X/*
X * look or examine
X */
X
X{
X char cnum[4];
X
X int kk, zplce, spk, kkwr, lwire, n, plce, u, empty;
X
X if ((prepdo == THROUG && dobjs[0] == TELESC && wrdnum[0] ==
X LOOK) || (wrdnum[0] == EXAMIN && dobjs[0] == PLANET &&
X prepio == WITH && iobj == TELESC)) {
X if (loc >= 175 && loc <= 181)
X spk = loc + 326;
X else if (loc == 184 || loc == 187)
X spk = 507;
X else
X spk = 48;
X speak(spk);
X return;
X }
X if ((loc >= 43 && loc <= 45) && (dobjs[0] == HOLE || dobjs[0]
X == DOOR)) {
X if (daytim == 1)
X speak(173);
X else
X speak(174);
X return;
X }
X if (dobjs[0] == HOUSE && (doadjs[0] == 0 || doadjs[0] == DOLL)
X && prepdo == IN) {
X if (loc != 132)
X speak(481);
X else if (obimpr[CEGG] > 4096) {
X speak(479);
X obloc[CEGG] = 132;
X } else
X speak(480);
X return;
X }
X /* you can't examine things at night unless they glow */
X
X if (daytim == 0 && dobjs[0] != SPHERE) {
X speak(120);
X return;
X }
X if (wrdnum[0] == EXAMIN)
X prepdo = AT;
X if (dobjs[0] == TELESC) {
X if ((loc >= 175 && loc <= 181) || loc == 184 || loc == 187)
X speak(534);
X else
X speak(535);
X return;
X }
X /* if you look behind horsetails, there is a cave */
X
X if (prepio == 0 && prepdo == BEHIND && loc == 169 &&
X dobjs[0] == CABINE) {
X speak(523);
X return;
X }
X if (prepio == 0 && prepdo == BEHIND && loc == 24) {
X if (dobjs[0] == HORSET) {
X speak(119);
X horflg = 1;
X return;
X } else if (dobjs[0] == WATERF) {
X speak(493);
X horflg = 1;
X return;
X }
X }
X /*
X * in the (hockey) bowl you can only see if something is there, not what
X * it is
X */
X
X if (prepdo == IN && dobjs[0] == BOWL && (loc >= 32 && loc <= 37)) {
X empty = 1;
X for (kk = 1; kk <= MOVMAX; kk++)
X if (obloc[kk] == 38)
X empty = 0;
X if (empty == 1)
X speak(7);
X else
X speak(163);
X return;
X }
X if ((loc == 28) && (dobjs[0] == STOOLS || dobjs[0] == STOOL ||
X dobjs[0] == BOWL) && (doadjs[0] == 0 || doadjs[0] == CERAMI)) {
X speak(176);
X return;
X }
X /* various martian things */
X
X if (loc == 42 && (dobjs[0] == STOOLS || dobjs[0] == BOWL)) {
X speak(177);
X spcloc = 0;
X return;
X }
X if (loc == 30 && (dobjs[0] == BUILDI || dobjs[0] == WINDOW)
X && prepdo == IN) {
X speak(174);
X return;
X }
X if (dobjs[0] == CACTUS && loc == 82 && wrdnum[0] == EXAMIN) {
X if (pct(25) && (cactsc & 2) == 0) {
X speak(371);
X cactsc += 2;
X if (cactsc == 3)
X speak(439);
X } else if ((cactsc & 1) == 0) {
X speak(370);
X cactsc += 1;
X if (cactsc == 3)
X speak(439);
X } else
X speak(237);
X return;
X }
X if (dobjs[0] == DIAL) {
X itsher(ZBOX, &zplce);
X if (zplce == 0)
X speak(388);
X else {
X numcvt(dial1, cnum);
X strng3[24] = cnum[1];
X strng3[25] = cnum[2];
X strng3[26] = cnum[3];
X numcvt(dial2, cnum);
X strng3[45] = cnum[1];
X strng3[46] = cnum[2];
X strng3[47] = cnum[3];
X linout(strng3, 49);
X }
X return;
X }
X /*
X * special code for anything other than "look at object" or "look in
X * container" gotes above here
X */
X
X n = getobj(dobjs[0], doadjs[0]);
X if (prepio != 0 || (prepdo != AT && prepdo != IN)) {
X speak(94);
X return;
X }
X if (n == 0) {
X speak(95);
X return;
X } else if (n < 0) {
X speak(70);
X return;
X }
X itsher(n, &plce);
X lwire = 0;
X /* special code for wire in several places at once */
X
X if (n == ZWIRE) {
X for (kkwr = 0; kkwr < 6; kkwr++)
X if (wirelc[kkwr] == loc)
X lwire = 1;
X }
X if (plce < 1 && !lwire) {
X if ((obpprp[n] & 256) == 256)
X speak(185);
X else
X speak(66);
X return;
X }
X if (plce < 1 && n == ZWIRE && lwire) {
X speak(215);
X return;
X }
X /* the generic "look at" processor */
X
X if (prepdo == AT) {
X u = (obimpr[n] / 64 % 8);
X if (u == 0) {
X if ((obpprp[n] & 256) == 256)
X speak(193);
X else
X speak(96);
X }
X /* zzzzzzap if not standing on glass while looking at knob */
X
X else if ((n == ZSTOOL || n == ZKNOB) && spcloc == 1)
X speak(237);
X else if (n == ZANTEN) {
X if (obloc[DCABLE] == 2000 + ZANTEN) {
X speak(odistb[n] + 1);
X obimpr[DCABLE] = 137;
X } else if (obloc[GCABLE] == 2000 + ZANTEN)
X speak(odistb[n] + 2);
X else
X speak(odistb[n] + 3);
X } else {
X if ((n == MMAP || n == NNEWS || n == TMACH || n == NNOTE
X ) && loc >= 153 && lpill == 1)
X u += 1;
X speak(odistb[n] + u);
X if (n == NNOTE && lpill == 1)
X nreadx();
X if (n == ZSCREE && obimpr[n] == 145 && loc == 146)
X robdsc();
X if (dobjs[0] == BOX) {
X numcvt(dial1, cnum);
X strng3[24] = cnum[1];
X strng3[25] = cnum[2];
X strng3[26] = cnum[3];
X numcvt(dial2, cnum);
X strng3[45] = cnum[1];
X strng3[46] = cnum[2];
X strng3[47] = cnum[3];
X linout(strng3, 49);
X }
X if (dobjs[0] == FILM && obimpr[ZFILM] == 201) {
X wwflag = 1;
X speak(odistb[fimage]);
X wwflag = 0;
X outst2[0] |= 32;
X outst2[kmax] = '.';
X outst2[kmax+1] = '\0';
X linout(outst2, kmax+1);
X if (fimage == ZBOX) {
X speak(404);
X numcvt(dial1x, cnum);
X strng4[4] = cnum[1];
X strng4[5] = cnum[2];
X strng4[6] = cnum[3];
X numcvt(dial2x, cnum);
X strng4[25] = cnum[1];
X strng4[26] = cnum[2];
X strng4[27] = cnum[3];
X linout(strng4, 49);
X }
X }
X /*
X * special code for flags set by looking at or in object goes
X * below here
X */
X
X if (n == PPHOTO)
X horflg = 1;
X }
X }
X if (obpprp[n] / 2048 != 0)
X xcontn(n);
X else if (prepdo == IN)
X speak(97);
X return;
X}
X
Xvopen()
X{
X int spk, n, plce;
X if (prepdo != 0 && prepio != 0)
X spk = 21;
X /* there is no door on the bar to open or close */
X
X else if ((loc == 30 || loc == 42) && dobjs[0] == DOOR)
X spk = 224;
X /* open doors or containers */
X
X else {
X n = getobj(dobjs[0], doadjs[0]);
X if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
X (loc >= 176 && loc <= 181)))
X n = BDOOR;
X if (n < 0)
X spk = 70;
X else if (n == 0)
X spk = 66;
X /* if they can be opened */
X
X else if ((obpprp[n] % 2) != 1) {
X if (obpprp[n] / 2048 != 0)
X spk = 254;
X else
X spk = 230;
X } else {
X itsher(n, &plce);
X if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
X (loc >= 176 && loc <= 181)))
X plce = 5;
X if (plce <= 0) {
X if (dobjs[0] == DOOR)
X spk = 225;
X else
X spk = 66;
X }
X /* and aren't locked ,but are closed */
X
X else if ((obimpr[n] & 4) == 4) {
X if (n == ZBOX)
X spk = 389;
X else
X spk = 228;
X } else if ((obimpr[n] & 2) == 0)
X spk = 226;
X else if (dobjs[0] == DOOR && (loc <= 180 && loc >= 176))
X spk = 546;
X else if (dobjs[0] == CABINE && adverb != CAREFU && adverb !=
X QUIETL)
X spk = 553;
X else {
X spk = 231;
X obimpr[n] = (obimpr[n] & ~2);
X /* ~2=177775 octal */
X
X if (n == RDOOR || n == MDOOR || n == GDOOR || n ==
X ODOOR || n == BDOOR)
X obimpr[n] += 8;
X if (n == ZDESK && dial1x == -1) {
X /*
X * establish the proper setting of the dials when the box
X * is first seen
X */
X
X dial1x = (qrand() % 999) + 1;
X dial2x = (qrand() % 999) + 1;
X }
X }
X }
X }
X speak(spk);
X if (spk == 553)
X vdead();
X}
X
X
Xvpick()
X{
X int result;
X result = 0;
X /* pick up means take */
X
X if (prepdo == UP) {
X prepdo = 0;
X result = 1;
X }
X /* this results in calling take */
X
X else if (dobjs[0] == NLOCK && loc == 47)
X speak(235);
X else
X speak(95);
X return(result);
X}
X
X
Xvpiss()
X{
X dirty += 1;
X {
X if (loc == 74 && (obimpr[ZVINE] & 56) == 8 && (dobjs[0]
X == 0 || dobjs[0] == VINE)) {
X speak(301);
X obimpr[ZVINE] += 8;
X } else if (dirty >= 5 && dirty < 10)
X speak(40);
X else if (dirty >= 10) {
X if (obloc[LPANT] == 3000 || obloc[RPANT] == 3000)
X speak(41);
X else
X speak(42);
X }
X }
X}
X
X
Xvpour()
X{
X int result, bplce, pplce, n, plce;
X result = 0;
X /* if result set = 1, then call vput */
X
X
X if (wrdnum[0] == QWATER) {
X prepio = ON;
X iobj = dobjs[0];
X ioadj = doadjs[0];
X dobjs[0] = WATER;
X doadjs[0] = 0;
X }
X if (dobjs[0] == DEET && prepio == ON && (iobj == ME
X || (iobj == VINE && loc == 74))) {
X itsher(ZDEET, &plce);
X if (plce == 0)
X speak(66);
X else {
X speak(75);
X obimpr[ZDEET] = 28762;
X obloc[ZDEET] = 0;
X }
X return (result);
X }
X if ((dobjs[0] == DEET || dobjs[0] == METOL || dobjs[0] == HYPO)
X && iobj == FUNNEL) {
X wrdnum[0] = PUT;
X prepio = IN;
X result = 1;
X return (result);
X }
X if (iobj != 0 && iobj != POLE) {
X n = getobj(iobj, ioadj);
X if (n >= 0) {
X itsher(n, &plce);
X }
X if (iobj == FUNNEL && n < 0) {
X speak(70);
X return (result);
X }
X if (n <= 0 || plce == 0) {
X speak(48);
X return (result);
X }
X }
X itsher(ZBUCKE, &bplce);
X itsher(PLBAG, &pplce);
X if (dobjs[0] == WATER) {
X if (bplce != 0 && obimpr[ZBUCKE] == 1033) {
X if (iobj == FUNNEL) {
X if (n == LFUNNE || n == RFUNNE) {
X speak(402);
X if (obimpr[RLIGHT] != 73) {
X speak(400);
X obimpr[RLIGHT] = 73;
X obimpr[GLIGHT] = 73;
X }
X machst |= machst;
X return(result);
X } else {
X if ((machst & 2) == 0)
X speak(397);
X machst |= 2;
X obimpr[ZINDIC] = 145;
X if ((machst & 16) != 0 && (machst & 1) == 0 &&
X obimpr[RLIGHT] == 73) {
X speak(399);
X obimpr[RLIGHT] = 145;
X obimpr[GLIGHT] = 145;
X }
X }
X } else if (loc != 74 || (obimpr[ZVINE] & 56) != 8)
X speak(247);
X else {
X speak(301);
X obimpr[ZVINE] = obimpr[ZVINE] + 8;
X }
X obimpr[ZBUCKE] = 1545;
X } else if (pplce != 0 && obimpr[PLBAG] == 2697)
X speak(248);
X else
X speak(48);
X } else if (dobjs[0] == LATEX && obloc[ZLATEX] == 2000 + ZBUCKE
X && bplce != 0 && (obimpr[ZLATEX] & 56) == 8) {
X if (loc != 76 || iobj != POLE) {
X speak(279);
X obimpr[ZLATEX] = obimpr[ZLATEX] + 72;
X } else {
X speak(75);
X obimpr[ZLATEX] = obimpr[ZLATEX] + 80;
X }
X obloc[ZLATEX] = loc;
X } else
X speak(48);
X return (result);
X}
X
X
Xvpush()
X{
X int result, numbr, ndo, nio, spk, xfilm;
X result = 0;
X /* push is also touch */
X
X if ((loc == 165 || loc == 173) && dobjs[0] > 9999) {
X numbr = dobjs[0] - 10000;
X if ((loc == 165 && numbr > 30) || (loc == 173 && numbr > 99))
X speak(532);
X else if (loc == 165) {
X pbstat = (pbstat & 1023) * 32 + numbr;
X if (pbstat == dcombi) {
X speak(530);
X /* ~4=177773 octal */
X
X obimpr[ODOOR] = (obimpr[ODOOR] & ~4);
X } else
X speak(238);
X } else
X speak(238);
X return (result);
X }
X if (dobjs[0] == CACTUS && loc == 82) {
X if (pct(25) && (cactsc & 2) == 0) {
X speak(371);
X cactsc = cactsc + 2;
X if (cactsc == 3)
X speak(439);
X } else if ((cactsc & 1) == 0) {
X speak(370);
X cactsc = cactsc + 1;
X if (cactsc == 3)
X speak(439);
X } else
X speak(237);
X return (result);
X }
X if (dobjs[0] == GUARD) {
X if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
X speak(562);
X else
X speak(561);
X return (result);
X }
X ndo = 0;
X nio = 0;
X if (dobjs[0] != 0)
X ndo = getobj(dobjs[0], doadjs[0]);
X if (iobj != 0)
X nio = getobj(iobj, ioadj);
X /*
X * unlocking the door to warehouse by touching wire to it if wire is
X * connected to knob in bar
X */
X
X if ((ndo == MDIMPL && nio == ZWIRE && prepio == WITH) ||
X (ndo == ZWIRE && nio == MDIMPL && prepio == TO) &&
X loc == 47) {
X if (obloc[ZWIRE] != loc && wirelc[0] != loc && wirelc[1] !=
X loc && wirelc[2] != loc && wirelc[3] != loc &&
X wirelc[4] != loc && wirelc[5] != 1000 && obloc[ZWIRE]
X != 1000)
X spk = 213;
X /* first test is for connection to knob */
X
X else if (((obimpr[ZWIRE] / 8) % 8) == 4 && (wirelc[5] == 1000
X || wirelc[5] == loc)) {
X spk = 238;
X /* ~4=177773 octal */
X
X obimpr[RDOOR] = (obimpr[RDOOR] & ~4);
X } else
X spk = 237;
X } else if ((ndo == ZKNOB || nio == ZKNOB) && loc == 42 && spcloc != 1)
X spk = 207;
X else if (ndo == ZLOUVE && (loc == 98 || loc == 142) &&
X obimpr[ZLOUVE] == 1) {
X spk = 282;
X obimpr[ZLOUVE] = 9;
X } else if (dobjs[0] == BUTTON) {
X if (ndo == -1)
X spk = 70;
X else if (ndo == SBUTTO && loc == 146) {
X locdat[144] |= 16;
X locdat[145] |= 16;
X locdat[147] |= 16;
X locdat[148] |= 16;
X locdat[150] |= 16;
X spk = 238;
X } else if (ndo == RBUTTO && loc == 146) {
X speak(383);
X result = 1;
X return(result);
X } else if (ndo == HBUTTO && loc == 146) {
X if (easttm == 0)
X easttm = 1;
X spk = 238;
X } else if (ndo == TBUTTO && loc == 146) {
X if (easttm == 51)
X easttm = 52;
X spk = 238;
X } else if (ndo == GBUTTO && loc == 169) {
X if (adverb == TWICE) {
X spk = 525;
X obimpr[HMURAL] = 209;
X bonus = bonus + 5;
X chaset = 1;
X oldlc2 = 0;
X oldloc = 0;
X } else
X spk = 238;
X } else if (ndo == RDBUTT && loc == 143) {
X if ((machst & 51) != 18)
X spk = 237;
X else {
X speak(398);
X xfilm = (filmtm % 1000);
X if (xfilm >= 3 && xfilm <= 6 && filmtm < 2000 && machst == 30) {
X if (filmst == 0)
X obimpr[ZFILM] = obimpr[ZFILM] + 64;
X else
X obimpr[ZFILM] = obimpr[ZFILM] + 128;
X } else if ((machst & 12) != 12)
X obimpr[ZFILM] = obimpr[ZFILM] + 192;
X else;
X obloc[ZFILM] = 2000 + ZHOPPE;
X machst = 33;
X return (result);
X }
X } else if (loc == 134 && (ndo == VBUTTO || ndo == OBUTTO ||
X ndo == WBUTTO || ndo == BBUTTO)) {
X if (obloc[GDISC] == 2000 + ZRECES && rvtim != 2)
X spk = 411;
X else if (obloc[GDISC] == 2000 + ZRECES && rvtim == 2 &&
X obloc[GCABLE] != 2000 + ZANTEN)
X spk = 421;
X else if (obloc[GDISC] == 2000 + ZRECES && rvtim == 2) {
X if (ndo == VBUTTO) {
X spk = 415;
X result = 2;
X } else if (ndo == OBUTTO) {
X spk = 416;
X result = 3;
X } else if (ndo == BBUTTO) {
X spk = 417;
X result = 4;
X } else {
X spk = 418;
X result = 5;
X }
X } else
X spk = 238;
X } else
X spk = 419;
X } else
X spk = 236;
X speak(spk);
X return (result);
X}
END_OF_verbs1.c
if test 30154 -ne `wc -c <verbs1.c`; then
echo shar: \"verbs1.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f vocab.dat -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"vocab.dat\"
else
echo shar: Extracting \"vocab.dat\" \(8317 characters\)
sed "s/^X//" >vocab.dat <<'END_OF_vocab.dat'
X*THIS FILE CONTAINS THE VOCABULARY DATA FOR THE GAME
X*IT IS CONVERTED INTO FORTRAN CODE BY THE PROGRAM 'VCONVRT'
X*A * IN THE FIRST COLUMN IS A COMMENT
X*A + IN THE FIRST COLUMN MEANS THAT THE CURRENT WORD IS A SYNONYM
X* OF THE PREVIOUS WORD.
X*A NUMBER IN THE FIRST COLUMN INDICATES THE START OF A NEW SECTION
X0
X*BUZZWORDS: TOTALLY IGNORED IN PROCESSING,EXCEPT FOR "OF" IN ONE CASE
XA ZZA
XAN ZZAN
XTHE ZZTHE
XOF
X1
X*ADVERBS
XQUICKLY
X+RAPIDLY
XSLOWLY
XCAREFULLY
X+CAUTIOUSLY
XQUIETLY
X+SOFTLY
XTWICE
XWHERE
XWHAT
X2
X*THE VERBS ARE FOLLOWED BY TWO WORDS IN **BINARY** WHICH INDICATE THEIR
X*SYNTAX WITH OBJECTS AND PREPOSITIONS
X*THE FIRST WORD TELLS WHETHER THE VERB TAKE A DIRECT OBJECT WITH A
X*PARTICULAR PREPOSITION (I.E. SIT IN THE CHAIR). THE PREPOSITIONS
X*ARE, IN ORDER (THE RIGHTMOST IS BIT 0) FOR,THROUGH,OVER,BEHIND,UNDER,OFF,
X* FROM,TO,AT,WITH,ON,OUT,IN,DOWN,UP
X*THE SECOND WORD TELLS WHETHER THE VERB TAKES INDIRECT (I.E. SECOND) OBJECTS
X*WITH THE SAME PREPOSITIONS (E.G. DROP THE CARD IN THE SLOT).
X*THIS IS FOLLOWED BY A BYTE IN BINARY WHICH TELLS FROM HIGH TO LOW BIT
X*LEFT TO RIGHT WHETHER:
X*BIT 0: THE D.O. PREPOSITION MAY FOLLOW THE D.O.:: TURN THE LIGHTS OFF.
X*BIT 1: TAKES "DOWN" LIKE AN OBJECT:: SIT DOWN
X*BIT 2: TAKES "UP" LIKE AN OBJECT:: GET UP
X*BIT 3: TAKES I.O. WITH NO PREPOSITION:: GIVE THE FROG A BATH (FROG IS I.O.)
X*BIT 4: TAKES D.O. WITH NO PREPOSITION:: KISS THE FROG (FROG IS D.O.)
X*BIT 5: TAKES MULTIPLE D.O.'S
X*BIT 6: REQUIRES AN I.O.
X*BIT 7: REQUIRES A D.O.
X*
X*
X* THE SAME WORD CAN BE BOTH A NOUN AND A VERB
X* BUT ONE OR THE OTHER SHOULD HAVE A SPECIAL SYMBOL IN
X* COLUMN 60. THE VERB'S SPECIAL SYMBOL CAN'T START IN "V"
X* AND THE NOUN'S SHOULDN'T START IN "Z"
X*VERBS
XRUN 010000110001111 000000000000000 00010110
X+RUSH
XCRAWL 011110110001111 000000000000000 00010110
X+SLITHER
XJUMP 011001010010000 000000000000000 00000000
XCLIMB 011000000011111 000000000000000 00010110
XASCEND 000000000000000 000000000000000 00010000
XDESCEND 000000000000000 000000000000000 00010000
XSWIM 000000010000100 000000000000000 10010110
XCROSS 001000000000000 000000000010000 00010000
XGO 010110110001111 000000000000000 00010110
X+PROCEED
X+WALK
X+TRAVEL
XTAKE 000001000000000 000000100100000 10110001
X+CATCH
XCARRY 000000000000000 000000000000000 10110000
XREMOVE 000000000000000 000000100000000 10010000
X+UNTIE
X+DETACH
XDROP 000000000000000 010111000010100 10110000
XHOLD 000000000000000 000000000000000 10010000
XFREEZE 000000000000000 000000000000000 10010000
XSIT 000110000010100 000000000000000 00000010
X+LIE
XSTAND 000000000010000 000000000000000 00000100
XGET 000001000010001 000000100000000 00110100
XASK 000000000000000 000000000000000 00000000
XTELL 000000000000000 000000000000000 00000000
XOPEN 000000000000000 000000000100000 10010000
XSHUT 000001000000000 000000000000000 10010001
X+CLOSE
XPOUR 000000000000000 000110000010100 10010000
XEAT 000000000000000 000000000000000 10010000
XDRINK 000000000000000 000000000000000 10010000
XWASH 000000000000000 000000000000000 10010000
XTHROW 000000000000000 011000011001100 10011000
X+TOSS
XFEED 000000000000000 000000010000000 11011000
XFILL 000000000000001 000000000100001 10010001
XIGNITE 000000000000000 000000000100000 10010000
X+BURN
XTURN 001001000010000 000000010100000 10010001
X+SET
XREAD 000000000000000 000000010000000 10010000
XBREAK 000000000000000 000000000100000 10010000
X+SMASH
XATTACH 000000000000000 000000010000000 11010000
X+TIE
X+FASTEN
XSCRATCH 000000000000000 000000000100000 10010000
X+CUT
XPICK 000000000000001 000000000100000 10010001
XWEAR 000000000000000 000000000000000 10110000
XPUT 000000000010010 000110000010100 10110001
X+PLACE
X+INSERT
XLOCK 000000000000000 000000000100000 10010000
XUNLOCK 000000000000000 000000000100000 10010000
XLOOK 111110101011100 000000000000000 10010110
XEXAMINE 000000000000000 000000000100000 10010000
XYELL 000000000000000 000000000000000 00000000
X+SCREAM
X+SHOUT
X+SAY
XPUSH 000000000000000 011111010100000 10010000
X+PRESS
X+TOUCH
XPUNCH 000000000000000 000000000100000 10010000
X+HIT
X+KICK
XDIG 000000000100000 000000000000000 00000000
XATTACK 000000000000000 000000000100000 10010000
X+KILL
X+SLAY
X+INJURE
X+FIGHT
X+MURDER
XGIVE 000000000000000 000000010000000 11011000
X+HAND
X+DONATE
XWATER 000000000000000 000000000000000 10010000 QWATER
XIS 000000000000000 000110000011100 10010000
XKISS 000000000000000 000000000000000 10010000
XTRANSLATE 000000000000000 000000000000000 10010000
X*THE NEXT FOUR WORDS COUNT AS BEING DIRTY
XFUCK 000000000000000 000000000000000 00010000
XPISS 000000000010000 000000000000000 00000000
X*ALL THE VERBS BELOW HERE ARE SINGLE WORDS ONLY
XSHIT
XDAMN
XMORE QMORE
XNOMORE
XQUIT
XSUSPEND
X+SAVE
XRESTORE
XBRIEF
XVERBOSE
XSUPERBRIE
XSCORE
XHELP
XRETREAT
X+BACK
X+B
XINVENTORY
X+I
XLOCATE
X+L
XPRAY
XLAND
XACTIVATE
XDEBUG
XSHOOT
XEXHALE
XWAIT
X+NULL
X+X
XAGAIN
X+G
X3
X*ADJECTIVES
XRED
XBLUE
XGREEN
XYELLOW
XORANGE
XVIOLET
X+PURPLE
XBROWN
X+TAN
XBLACK
XWHITE
XPINK
XSILVER
XPLATINUM
XBRASS
XCOPPER
XNICKEL
XHEAVY
XCOLORFUL
XBEAUTIFUL
XRUBBER
XGOOEY
XCANVAS
XBUTTERFLY
XCHROME
XINSTANT
XCRABLIKE
XCHOCOLATE
XPLASTIC
XBROKEN
X+DAMAGED
X+BAD
XGOOD
XDOLL
XPOTTED
XVENUS
XOVEREXPOSED
XFLYING
XFIERY
X+FIRE
XVENTILATION
XFALLEN
XHOCKEY
XROUND
XCERAMIC
XMETAL
XMAGNESIUM
XHUGE
X+GIANT
X+LARGE
X+BIG
XMEDIUM
XDEAD
XFILE FILEC
XSMALL
X+TINY
XGLOWING
XSTONE
XSILICON
XLITHIUM
XTRIANGULA
XHEXAGONAL
XSQUARE
XLEFT
XRIGHT
XMIDDLE
X+CENTER
XLEVEL
XXRAY
XMICROWAVE
XRABBIT
XFIRST
XSECOND
XTHIRD
XFOURTH
XTERRAN
X+ENGLISH
X+GVIIZM
XCYGNAN
X+XBTMZM
XVIDEO
XSULFUROUS
XVENDING
X4
X*NOUNS
X*THE FIRST EIGHT MUST BE DIRECTIONS
XNORTH
X+N
XNORTHEAST
X+NE
XEAST
X+E
XSOUTHEAST
X+SE
XSOUTH
X+S
XSOUTHWEST
X+SW
XWEST
X+W
XNORTHWEST
X+NW
XLAMP
X+LANTERN
XKNAPSACK
X+BACKPACK
X+PACK
X+SACK
XSHIT NSHIT
XPISS NPISS
XME
XSPIRE
XWATER
XLOCK NLOCK
XKEYHOLE
XTOWER
XSTOOLS
XISLAND
XSHORE
XBARRIER
XBOWL
X+BOWLS
XBUILDING
X+BAR
XWINDOW
XGLASS
X+PLATE
XWIRE
XHORSETAIL
XPTERODACT
XWATERFALL
X+FALLS
XTREE
XLOG
X+TRUNK
XCHASM
X* THE WORDS BETWEEN ROBOT AND FERRET REPRESENT SENTIENT BEINGS
XROBOT
XMARTIAN
X+MARTIANS
XCACTUS
XGUARD
XGUARDS
X+REPTILE
XFERRET
X+FERRETS
XALL
X+EVERYTHIN
XSCREWDRIV
XKNIFE
XHAMMER
XORCHID
X+ORCHIDS
XFAUCET
XSINK
XLOUVER
XBUCKET
XPITCHFORK
XSHOVEL
XPLANET
XPOLE
XTOMATO
X+TOMATOS
XLETTUCE
XCABBAGE
X+CABBAGES
XSTRAWBERR
XGRAPE
X+GRAPES
XCATWALK
XDECLINATI
XRA
XHOPPER
XOPENING
XBENCH
XCHAIR
XTUNNEL
XTELESCOPE
XMAP
XNEWSPAPER
X+PAPER
XNOTE
XACID
X+FLOW
XDEET
X+WVVG
XMETOL
X+NVGLO
XHYPO
X+SBKL
XCHEMICALS
X+XSVNRXZOH
XDARKROOM
X+WZIPILLN
XDIRECTOR
X+WRIVXGLI
XCONTROL
X+XLMGILO
XSTORAGE
X+HGLIRTV
X*WORDS BEFORE THIS CANNOT HAVE ADJECTIVES
XSAPPHIRE
XDIAMOND
XKEY
XFISH
XSHIRT
XBOOTS
XSHOES
XPANTS
XNET
XTUBE
XCAMERA
XPHOTOGRAP
X+PHOTO
X+PICTURE
XKNOB
XCOMBINATI
XDIMPLE
XSTOOL
XBAG
XFOSSIL
XMOSS
XPUCK
XBOULDER
X+ROCK
XGRAVEL
X+SCREE
XSPHERE
XCUBE
X+MONUMENT
X+INSCRIPTI
XCAT
XBIRD
X+BIRDS
XFROG
X+FROGS
XVINE
X+VINES
XLATEX
XANTENNA
XCABLE
XCOIN
XEGG
XHOUSE
XHOLE
X+HOLES
XRECESS
XDOOR
XREPELLENT
XFLYTRAP
X+FLYTRAPS
XSEED
XSTATUE
XFAMILY
XBEES
X+BEE
X+BEEHIVE
X+HIVE
XSHRUB
X+SHRUBS
XDISK
XVAPOR
X+VENT
XPIT
XMUD
XSTATUS
XPAINTING
X+DESIGN
X+DESIGNS
X+PAINTINGS
XMUSHROOM
X+MUSHROOMS
XPOOL
XNUGGET
X+GOLD
XMINERAL
X+CRYSTAL
XBUTTON
XSLOT
XCASSETE
X+CASSETTE
XCARTRIDGE
XDISC
X+DISK
XMACHINE
XDESK
XCABINET
XROD
XBOX
XDIAL
X+DIALS
XCARD
XBEAD
X+BEADS
XSCREEN
XINSECT
XFILM
XENLARGER
X+BASE
XRACK
XTRAY
XFUNNEL
XLIGHT
X+LIGHTS
XINDICATOR
XBALL
X+PILL
X+CANDY
XCLIP
XMURAL
X5
X*PREPOSITIONS
X*THE FIRST TWO MUST BE UP AND DOWN
XUP
X+U
XDOWN
X+D
XIN
X+INTO
X+INSIDE
XOUT
X+OUTSIDE
XON
X+ONTO
X+UPON
XWITH
X+USING
XAT
XTO
XFROM
XOFF
XUNDER
XBEHIND
XOVER
X+ACROSS
XTHROUGH
XFOR
XBUT
X+EXCEPT
XAND
X6
X*THIS IS THE END
END_OF_vocab.dat
if test 8317 -ne `wc -c <vocab.dat`; then
echo shar: \"vocab.dat\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 6 \(of 7\).
cp /dev/null ark6isdone
MISSING=""
for I in 1 2 3 4 5 6 7 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 7 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0