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