billr@saab.CNA.TEK.COM (Bill Randle) (05/15/91)
Submitted-by: ian@airs.COM Posting-number: Volume 12, Issue 74 Archive-name: cdungeon/Part07 Environment: Unix, MS-DOS #! /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 7 (of 12)." # Contents: dverb1.c nobjs.c sobjs.c # Wrapped by billr@saab on Tue May 14 16:27:40 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'dverb1.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dverb1.c'\" else echo shar: Extracting \"'dverb1.c'\" \(9727 characters\) sed "s/^X//" >'dverb1.c' <<'END_OF_FILE' X/* TAKE-- BASIC TAKE SEQUENCE */ X X/*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/ X/* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */ X/* WRITTEN BY R. M. SUPNIK */ X X#include "funcs.h" X#include "vars.h" X X/* TAKE AN OBJECT (FOR VERBS TAKE, PUT, DROP, READ, ETC.) */ X Xlogical take_(flg) Xlogical flg; X{ X /* System generated locals */ X integer i__1; X logical ret_val; X X /* Local variables */ X integer oa; X integer x; X X ret_val = FALSE_; X/* !ASSUME LOSES. */ X oa = objcts_1.oactio[prsvec_1.prso - 1]; X/* !GET OBJECT ACTION. */ X if (prsvec_1.prso <= star_1.strbit) { X goto L100; X } X/* !STAR? */ X ret_val = objact_(); X/* !YES, LET IT HANDLE. */ X return ret_val; X XL100: X x = objcts_1.ocan[prsvec_1.prso - 1]; X/* !INSIDE? */ X if (prsvec_1.prso != advs_1.avehic[play_1.winner - 1]) { X goto L400; X } X/* !HIS VEHICLE? */ X rspeak_(672); X/* !DUMMY. */ X return ret_val; X XL400: X if ((objcts_1.oflag1[prsvec_1.prso - 1] & TAKEBT) != 0) { X goto L500; X } X if (! oappli_(oa, 0)) { X i__1 = rnd_(5) + 552; X rspeak_(i__1); X } X return ret_val; X X/* OBJECT IS TAKEABLE AND IN POSITION TO BE TAKEN. */ X XL500: X if (x != 0 || qhere_(prsvec_1.prso, play_1.here)) { X goto L600; X } X if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) { X rspeak_(557); X } X/* !ALREADY GOT IT? */ X return ret_val; X XL600: X if (x != 0 && objcts_1.oadv[x - 1] == play_1.winner || weight_(0, X prsvec_1.prso, play_1.winner) + objcts_1.osize[prsvec_1.prso - 1] X <= state_1.mxload) { X goto L700; X } X rspeak_(558); X/* !TOO MUCH WEIGHT. */ X return ret_val; X XL700: X ret_val = TRUE_; X/* !AT LAST. */ X if (oappli_(oa, 0)) { X return ret_val; X } X/* !DID IT HANDLE? */ X newsta_(prsvec_1.prso, 0, 0, 0, play_1.winner); X/* !TAKE OBJECT FOR WINNER. */ X objcts_1.oflag2[prsvec_1.prso - 1] |= TCHBT; X scrupd_(objcts_1.ofval[prsvec_1.prso - 1]); X/* !UPDATE SCORE. */ X objcts_1.ofval[prsvec_1.prso - 1] = 0; X/* !CANT BE SCORED AGAIN. */ X if (flg) { X rspeak_(559); X } X/* !TELL TAKEN. */ X return ret_val; X X} /* take_ */ X X/* DROP- DROP VERB PROCESSOR */ X X/* DECLARATIONS */ X Xlogical drop_(z) Xlogical z; X{ X /* System generated locals */ X logical ret_val; X X /* Local variables */ X logical f; X integer i, x; X X ret_val = TRUE_; X/* !ASSUME WINS. */ X x = objcts_1.ocan[prsvec_1.prso - 1]; X/* !GET CONTAINER. */ X if (x == 0) { X goto L200; X } X/* !IS IT INSIDE? */ X if (objcts_1.oadv[x - 1] != play_1.winner) { X goto L1000; X } X/* !IS HE CARRYING CON? */ X if ((objcts_1.oflag2[x - 1] & OPENBT) != 0) { X goto L300; X } X rspsub_(525, objcts_1.odesc2[x - 1]); X/* !CANT REACH. */ X return ret_val; X XL200: X if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner) { X goto L1000; X } X/* !IS HE CARRYING OBJ? */ XL300: X if (advs_1.avehic[play_1.winner - 1] == 0) { X goto L400; X } X/* !IS HE IN VEHICLE? */ X prsvec_1.prsi = advs_1.avehic[play_1.winner - 1]; X/* !YES, */ X f = put_(1); X/* !DROP INTO VEHICLE. */ X prsvec_1.prsi = 0; X/* !DISARM PARSER. */ X return ret_val; X/* !DONE. */ X XL400: X newsta_(prsvec_1.prso, 0, play_1.here, 0, 0); X/* !DROP INTO ROOM. */ X if (play_1.here == rindex_1.mtree) { X newsta_(prsvec_1.prso, 0, rindex_1.fore3, 0, 0); X } X scrupd_(objcts_1.ofval[prsvec_1.prso - 1]); X/* !SCORE OBJECT. */ X objcts_1.ofval[prsvec_1.prso - 1] = 0; X/* !CANT BE SCORED AGAIN. */ X objcts_1.oflag2[prsvec_1.prso - 1] |= TCHBT; X X if (objact_()) { X return ret_val; X } X/* !DID IT HANDLE? */ X i = 0; X/* !ASSUME NOTHING TO SAY. */ X if (prsvec_1.prsa == vindex_1.dropw) { X i = 528; X } X if (prsvec_1.prsa == vindex_1.throww) { X i = 529; X } X if (i != 0 && play_1.here == rindex_1.mtree) { X i = 659; X } X rspsub_(i, objcts_1.odesc2[prsvec_1.prso - 1]); X return ret_val; X XL1000: X rspeak_(527); X/* !DONT HAVE IT. */ X return ret_val; X X} /* drop_ */ X X/* PUT- PUT VERB PROCESSOR */ X X/* DECLARATIONS */ X Xlogical put_(flg) Xlogical flg; X{ X /* System generated locals */ X logical ret_val; X X /* Local variables */ X integer j; X integer svi, svo; X X ret_val = FALSE_; X if (prsvec_1.prso <= star_1.strbit && prsvec_1.prsi <= star_1.strbit) { X goto L200; X } X if (! objact_()) { X rspeak_(560); X } X/* !STAR */ X ret_val = TRUE_; X return ret_val; X XL200: X if ((objcts_1.oflag2[prsvec_1.prsi - 1] & OPENBT) != 0 || ( X objcts_1.oflag1[prsvec_1.prsi - 1] & DOORBT + X CONTBT) != 0 || (objcts_1.oflag2[prsvec_1.prsi - 1] & X VEHBT) != 0) { X goto L300; X } X rspeak_(561); X/* !CANT PUT IN THAT. */ X return ret_val; X XL300: X if ((objcts_1.oflag2[prsvec_1.prsi - 1] & OPENBT) != 0) { X goto L400; X } X/* !IS IT OPEN? */ X rspeak_(562); X/* !NO, JOKE */ X return ret_val; X XL400: X if (prsvec_1.prso != prsvec_1.prsi) { X goto L500; X } X/* !INTO ITSELF? */ X rspeak_(563); X/* !YES, JOKE. */ X return ret_val; X XL500: X if (objcts_1.ocan[prsvec_1.prso - 1] != prsvec_1.prsi) { X goto L600; X } X/* !ALREADY INSIDE. */ X rspsb2_(564, objcts_1.odesc2[prsvec_1.prso - 1], objcts_1.odesc2[ X prsvec_1.prsi - 1]); X ret_val = TRUE_; X return ret_val; X XL600: X if (weight_(0, prsvec_1.prso, 0) + weight_(0, prsvec_1.prsi, X 0) + objcts_1.osize[prsvec_1.prso - 1] <= objcts_1.ocapac[ X prsvec_1.prsi - 1]) { X goto L700; X } X rspeak_(565); X/* !THEN CANT DO IT. */ X return ret_val; X X/* NOW SEE IF OBJECT (OR ITS CONTAINER) IS IN ROOM */ X XL700: X j = prsvec_1.prso; X/* !START SEARCH. */ XL725: X if (qhere_(j, play_1.here)) { X goto L750; X } X/* !IS IT HERE? */ X j = objcts_1.ocan[j - 1]; X if (j != 0) { X goto L725; X } X/* !MORE TO DO? */ X goto L800; X/* !NO, SCH FAILS. */ X XL750: X svo = prsvec_1.prso; X/* !SAVE PARSER. */ X svi = prsvec_1.prsi; X prsvec_1.prsa = vindex_1.takew; X prsvec_1.prsi = 0; X if (! take_(0)) { X return ret_val; X } X/* !TAKE OBJECT. */ X prsvec_1.prsa = vindex_1.putw; X prsvec_1.prso = svo; X prsvec_1.prsi = svi; X goto L1000; X X/* NOW SEE IF OBJECT IS ON PERSON. */ X XL800: X if (objcts_1.ocan[prsvec_1.prso - 1] == 0) { X goto L1000; X } X/* !INSIDE? */ X if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] & X OPENBT) != 0) { X goto L900; X } X/* !OPEN? */ X rspsub_(566, objcts_1.odesc2[prsvec_1.prso - 1]); X/* !LOSE. */ X return ret_val; X XL900: X scrupd_(objcts_1.ofval[prsvec_1.prso - 1]); X/* !SCORE OBJECT. */ X objcts_1.ofval[prsvec_1.prso - 1] = 0; X objcts_1.oflag2[prsvec_1.prso - 1] |= TCHBT; X newsta_(prsvec_1.prso, 0, 0, 0, play_1.winner); X/* !TEMPORARILY ON WINNER. */ X XL1000: X if (objact_()) { X return ret_val; X } X/* !NO, GIVE OBJECT A SHOT. */ X newsta_(prsvec_1.prso, 2, 0, prsvec_1.prsi, 0); X/* !CONTAINED INSIDE. */ X ret_val = TRUE_; X return ret_val; X X} /* put_ */ X X/* VALUAC- HANDLES VALUABLES/EVERYTHING */ X Xvoid valuac_(v) Xinteger v; X{ X /* System generated locals */ X integer i__1; X X /* Local variables */ X logical f; X integer i; X logical f1; X integer savep, saveh; X X f = TRUE_; X/* !ASSUME NO ACTIONS. */ X i = 579; X/* !ASSUME NOT LIT. */ X if (! lit_(play_1.here)) { X goto L4000; X } X/* !IF NOT LIT, PUNT. */ X i = 677; X/* !ASSUME WRONG VERB. */ X savep = prsvec_1.prso; X/* !SAVE PRSO. */ X saveh = play_1.here; X/* !SAVE HERE. */ X X/* L100: */ X if (prsvec_1.prsa != vindex_1.takew) { X goto L1000; X } X/* !TAKE EVERY/VALUA? */ X i__1 = objcts_1.olnt; X for (prsvec_1.prso = 1; prsvec_1.prso <= i__1; ++prsvec_1.prso) { X/* !LOOP THRU OBJECTS. */ X if (! qhere_(prsvec_1.prso, play_1.here) || (objcts_1.oflag1[ X prsvec_1.prso - 1] & VISIBT) == 0 || ( X objcts_1.oflag2[prsvec_1.prso - 1] & ACTRBT) != 0 || X savep == v && objcts_1.otval[prsvec_1.prso - 1] <= 0) { X goto L500; X } X if ((objcts_1.oflag1[prsvec_1.prso - 1] & TAKEBT) == 0 && ( X objcts_1.oflag2[prsvec_1.prso - 1] & TRYBT) == 0) { X goto L500; X } X f = FALSE_; X rspsub_(580, objcts_1.odesc2[prsvec_1.prso - 1]); X f1 = take_(1); X if (saveh != play_1.here) { X return; X } XL500: X ; X } X goto L3000; X XL1000: X if (prsvec_1.prsa != vindex_1.dropw) { X goto L2000; X } X/* !DROP EVERY/VALUA? */ X i__1 = objcts_1.olnt; X for (prsvec_1.prso = 1; prsvec_1.prso <= i__1; ++prsvec_1.prso) { X if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner || savep == v X && objcts_1.otval[prsvec_1.prso - 1] <= 0) { X goto L1500; X } X f = FALSE_; X rspsub_(580, objcts_1.odesc2[prsvec_1.prso - 1]); X f1 = drop_(1); X if (saveh != play_1.here) { X return; X } XL1500: X ; X } X goto L3000; X XL2000: X if (prsvec_1.prsa != vindex_1.putw) { X goto L3000; X } X/* !PUT EVERY/VALUA? */ X i__1 = objcts_1.olnt; X for (prsvec_1.prso = 1; prsvec_1.prso <= i__1; ++prsvec_1.prso) { X/* !LOOP THRU OBJECTS. */ X if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner || X prsvec_1.prso == prsvec_1.prsi || savep == v && X objcts_1.otval[prsvec_1.prso - 1] <= 0 || (objcts_1.oflag1[ X prsvec_1.prso - 1] & VISIBT) == 0) { X goto L2500; X } X f = FALSE_; X rspsub_(580, objcts_1.odesc2[prsvec_1.prso - 1]); X f1 = put_(1); X if (saveh != play_1.here) { X return; X } XL2500: X ; X } X XL3000: X i = 581; X if (savep == v) { X i = 582; X } X/* !CHOOSE MESSAGE. */ XL4000: X if (f) { X rspeak_(i); X } X/* !IF NOTHING, REPORT. */ X} /* valuac_ */ END_OF_FILE if test 9727 -ne `wc -c <'dverb1.c'`; then echo shar: \"'dverb1.c'\" unpacked with wrong size! fi # end of 'dverb1.c' fi if test -f 'nobjs.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nobjs.c'\" else echo shar: Extracting \"'nobjs.c'\" \(20195 characters\) sed "s/^X//" >'nobjs.c' <<'END_OF_FILE' X/* NOBJS- NEW OBJECTS PROCESSOR */ X/* OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, */ X/* MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES */ X X/*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/ X/* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */ X/* WRITTEN BY R. M. SUPNIK */ X X#include "funcs.h" X#include "vars.h" X Xstatic logical mirpan_ P((integer, logical)); X Xlogical nobjs_(ri, arg) Xinteger ri; Xinteger arg; X{ X /* System generated locals */ X integer i__1, i__2; X logical ret_val; X X /* Local variables */ X logical f; X integer target; X integer i; X integer j; X integer av, wl; X integer nxt, odi2 = 0, odo2 = 0; X X if (prsvec_1.prso != 0) { X odo2 = objcts_1.odesc2[prsvec_1.prso - 1]; X } X if (prsvec_1.prsi != 0) { X odi2 = objcts_1.odesc2[prsvec_1.prsi - 1]; X } X av = advs_1.avehic[play_1.winner - 1]; X ret_val = TRUE_; X X switch (ri - 31) { X case 1: goto L1000; X case 2: goto L2000; X case 3: goto L3000; X case 4: goto L4000; X case 5: goto L5000; X case 6: goto L6000; X case 7: goto L7000; X case 8: goto L8000; X case 9: goto L9000; X case 10: goto L10000; X case 11: goto L11000; X case 12: goto L12000; X case 13: goto L13000; X case 14: goto L14000; X case 15: goto L15000; X case 16: goto L16000; X case 17: goto L17000; X case 18: goto L18000; X case 19: goto L19000; X case 20: goto L20000; X case 21: goto L21000; X } X bug_(6, ri); X X/* RETURN HERE TO DECLARE FALSE RESULT */ X XL10: X ret_val = FALSE_; X return ret_val; X X/* O32-- BILLS */ X XL1000: X if (prsvec_1.prsa != vindex_1.eatw) { X goto L1100; X } X/* !EAT? */ X rspeak_(639); X/* !JOKE. */ X return ret_val; X XL1100: X if (prsvec_1.prsa == vindex_1.burnw) { X rspeak_(640); X } X/* !BURN? JOKE. */ X goto L10; X/* !LET IT BE HANDLED. */ X/* NOBJS, PAGE 3 */ X X/* O33-- SCREEN OF LIGHT */ X XL2000: X target = oindex_1.scol; X/* !TARGET IS SCOL. */ XL2100: X if (prsvec_1.prso != target) { X goto L2400; X } X/* !PRSO EQ TARGET? */ X if (prsvec_1.prsa != vindex_1.pushw && prsvec_1.prsa != vindex_1.movew && X prsvec_1.prsa != vindex_1.takew && prsvec_1.prsa != vindex_1.rubw) X { X goto L2200; X } X rspeak_(673); X/* !HAND PASSES THRU. */ X return ret_val; X XL2200: X if (prsvec_1.prsa != vindex_1.killw && prsvec_1.prsa != vindex_1.attacw && X prsvec_1.prsa != vindex_1.mungw) { X goto L2400; X } X rspsub_(674, odi2); X/* !PASSES THRU. */ X return ret_val; X XL2400: X if (prsvec_1.prsa != vindex_1.throww || prsvec_1.prsi != target) { X goto L10; X } X if (play_1.here == rindex_1.bkbox) { X goto L2600; X } X/* !THRU SCOL? */ X newsta_(prsvec_1.prso, 0, rindex_1.bkbox, 0, 0); X/* !NO, THRU WALL. */ X rspsub_(675, odo2); X/* !ENDS UP IN BOX ROOM. */ X cevent_1.ctick[cindex_1.cevscl - 1] = 0; X/* !CANCEL ALARM. */ X screen_1.scolrm = 0; X/* !RESET SCOL ROOM. */ X return ret_val; X XL2600: X if (screen_1.scolrm == 0) { X goto L2900; X } X/* !TRIED TO GO THRU? */ X newsta_(prsvec_1.prso, 0, screen_1.scolrm, 0, 0); X/* !SUCCESS. */ X rspsub_(676, odo2); X/* !ENDS UP SOMEWHERE. */ X cevent_1.ctick[cindex_1.cevscl - 1] = 0; X/* !CANCEL ALARM. */ X screen_1.scolrm = 0; X/* !RESET SCOL ROOM. */ X return ret_val; X XL2900: X rspeak_(213); X/* !CANT DO IT. */ X return ret_val; X/* NOBJS, PAGE 4 */ X X/* O34-- GNOME OF ZURICH */ X XL3000: X if (prsvec_1.prsa != vindex_1.givew && prsvec_1.prsa != vindex_1.throww) { X X goto L3200; X } X if (objcts_1.otval[prsvec_1.prso - 1] != 0) { X goto L3100; X } X/* !THROW A TREASURE? */ X newsta_(prsvec_1.prso, 641, 0, 0, 0); X/* !NO, GO POP. */ X return ret_val; X XL3100: X newsta_(prsvec_1.prso, 0, 0, 0, 0); X/* !YES, BYE BYE TREASURE. */ X rspsub_(642, odo2); X newsta_(oindex_1.zgnom, 0, 0, 0, 0); X/* !BYE BYE GNOME. */ X cevent_1.ctick[cindex_1.cevzgo - 1] = 0; X/* !CANCEL EXIT. */ X f = moveto_(rindex_1.bkent, play_1.winner); X/* !NOW IN BANK ENTRANCE. */ X return ret_val; X XL3200: X if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw && X prsvec_1.prsa != vindex_1.mungw) { X goto L3300; X } X newsta_(oindex_1.zgnom, 643, 0, 0, 0); X/* !VANISH GNOME. */ X cevent_1.ctick[cindex_1.cevzgo - 1] = 0; X/* !CANCEL EXIT. */ X return ret_val; X XL3300: X rspeak_(644); X/* !GNOME IS IMPATIENT. */ X return ret_val; X X/* O35-- EGG */ X XL4000: X if (prsvec_1.prsa != vindex_1.openw || prsvec_1.prso != oindex_1.egg) { X goto L4500; X } X if (! ((objcts_1.oflag2[oindex_1.egg - 1] & OPENBT) != 0)) { X goto L4100; X } X/* !OPEN ALREADY? */ X rspeak_(649); X/* !YES. */ X return ret_val; X XL4100: X if (prsvec_1.prsi != 0) { X goto L4200; X } X/* !WITH SOMETHING? */ X rspeak_(650); X/* !NO, CANT. */ X return ret_val; X XL4200: X if (prsvec_1.prsi != oindex_1.hands) { X goto L4300; X } X/* !WITH HANDS? */ X rspeak_(651); X/* !NOT RECOMMENDED. */ X return ret_val; X XL4300: X i = 652; X/* !MUNG MESSAGE. */ X if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0 || ( X objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) != 0) { X goto L4600; X } X i = 653; X/* !NOVELTY 1. */ X if ((objcts_1.oflag2[prsvec_1.prso - 1] & FITEBT) != 0) { X i = 654; X } X objcts_1.oflag2[prsvec_1.prso - 1] |= FITEBT; X rspsub_(i, odi2); X return ret_val; X XL4500: X if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.mungw) { X goto L4800; X } X i = 655; X/* !YOU BLEW IT. */ XL4600: X newsta_(oindex_1.begg, i, objcts_1.oroom[oindex_1.egg - 1], X objcts_1.ocan[oindex_1.egg - 1], objcts_1.oadv[oindex_1.egg - 1]) X ; X newsta_(oindex_1.egg, 0, 0, 0, 0); X/* !VANISH EGG. */ X objcts_1.otval[oindex_1.begg - 1] = 2; X/* !BAD EGG HAS VALUE. */ X if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) { X goto L4700; X } X/* !WAS CANARY INSIDE? */ X rspeak_(objcts_1.odesco[oindex_1.bcana - 1]); X/* !YES, DESCRIBE RESULT. */ X objcts_1.otval[oindex_1.bcana - 1] = 1; X return ret_val; X XL4700: X newsta_(oindex_1.bcana, 0, 0, 0, 0); X/* !NO, VANISH IT. */ X return ret_val; X XL4800: X if (prsvec_1.prsa != vindex_1.dropw || play_1.here != rindex_1.mtree) { X goto L10; X } X newsta_(oindex_1.begg, 658, rindex_1.fore3, 0, 0); X/* !DROPPED EGG. */ X newsta_(oindex_1.egg, 0, 0, 0, 0); X objcts_1.otval[oindex_1.begg - 1] = 2; X if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) { X goto L4700; X } X objcts_1.otval[oindex_1.bcana - 1] = 1; X/* !BAD CANARY. */ X return ret_val; X/* NOBJS, PAGE 5 */ X X/* O36-- CANARIES, GOOD AND BAD */ X XL5000: X if (prsvec_1.prsa != vindex_1.windw) { X goto L10; X } X/* !WIND EM UP? */ X if (prsvec_1.prso == oindex_1.canar) { X goto L5100; X } X/* !RIGHT ONE? */ X rspeak_(645); X/* !NO, BAD NEWS. */ X return ret_val; X XL5100: X if (! findex_1.singsf && (play_1.here == rindex_1.mtree || play_1.here >= X rindex_1.fore1 && play_1.here < rindex_1.clear)) { X goto L5200; X } X rspeak_(646); X/* !NO, MEDIOCRE NEWS. */ X return ret_val; X XL5200: X findex_1.singsf = TRUE_; X/* !SANG SONG. */ X i = play_1.here; X if (i == rindex_1.mtree) { X i = rindex_1.fore3; X } X/* !PLACE BAUBLE. */ X newsta_(oindex_1.baubl, 647, i, 0, 0); X return ret_val; X X/* O37-- WHITE CLIFFS */ X XL6000: X if (prsvec_1.prsa != vindex_1.clmbw && prsvec_1.prsa != vindex_1.clmbuw && X prsvec_1.prsa != vindex_1.clmbdw) { X goto L10; X } X rspeak_(648); X/* !OH YEAH? */ X return ret_val; X X/* O38-- WALL */ X XL7000: X if ((i__1 = play_1.here - findex_1.mloc, abs(i__1)) != 1 || mrhere_( X play_1.here) != 0 || prsvec_1.prsa != vindex_1.pushw) { X goto L7100; X } X rspeak_(860); X/* !PUSHED MIRROR WALL. */ X return ret_val; X XL7100: X if ((rooms_1.rflag[play_1.here - 1] & RNWALL) == 0) { X goto L10; X } X rspeak_(662); X/* !NO WALL. */ X return ret_val; X/* NOBJS, PAGE 6 */ X X/* O39-- SONG BIRD GLOBAL */ X XL8000: X if (prsvec_1.prsa != vindex_1.findw) { X goto L8100; X } X/* !FIND? */ X rspeak_(666); X return ret_val; X XL8100: X if (prsvec_1.prsa != vindex_1.examiw) { X goto L10; X } X/* !EXAMINE? */ X rspeak_(667); X return ret_val; X X/* O40-- PUZZLE/SCOL WALLS */ X XL9000: X if (play_1.here != rindex_1.cpuzz) { X goto L9500; X } X/* !PUZZLE WALLS? */ X if (prsvec_1.prsa != vindex_1.pushw) { X goto L10; X } X/* !PUSH? */ X for (i = 1; i <= 8; i += 2) { X/* !LOCATE WALL. */ X if (prsvec_1.prso == puzzle_1.cpwl[i - 1]) { X goto L9200; X } X/* L9100: */ X } X bug_(80, prsvec_1.prso); X/* !WHAT? */ X XL9200: X j = puzzle_1.cpwl[i]; X/* !GET DIRECTIONAL OFFSET. */ X nxt = findex_1.cphere + j; X/* !GET NEXT STATE. */ X wl = puzzle_1.cpvec[nxt - 1]; X/* !GET C(NEXT STATE). */ X switch (wl + 4) { X case 1: goto L9300; X case 2: goto L9300; X case 3: goto L9300; X case 4: goto L9250; X case 5: goto L9350; X } X/* !PROCESS. */ X XL9250: X rspeak_(876); X/* !CLEAR CORRIDOR. */ X return ret_val; X XL9300: X if (puzzle_1.cpvec[nxt + j - 1] == 0) { X goto L9400; X } X/* !MOVABLE, ROOM TO MOVE? */ XL9350: X rspeak_(877); X/* !IMMOVABLE, NO ROOM. */ X return ret_val; X XL9400: X i = 878; X/* !ASSUME FIRST PUSH. */ X if (findex_1.cpushf) { X i = 879; X } X/* !NOT? */ X findex_1.cpushf = TRUE_; X puzzle_1.cpvec[nxt + j - 1] = wl; X/* !MOVE WALL. */ X puzzle_1.cpvec[nxt - 1] = 0; X/* !VACATE NEXT STATE. */ X cpgoto_(nxt); X/* !ONWARD. */ X cpinfo_(i, nxt); X/* !DESCRIBE. */ X princr_(1, play_1.here); X/* !PRINT ROOMS CONTENTS. */ X rooms_1.rflag[play_1.here - 1] |= RSEEN; X return ret_val; X XL9500: X if (play_1.here != screen_1.scolac) { X goto L9700; X } X/* !IN SCOL ACTIVE ROOM? */ X for (i = 1; i <= 12; i += 3) { X target = screen_1.scolwl[i]; X/* !ASSUME TARGET. */ X if (screen_1.scolwl[i - 1] == play_1.here) { X goto L2100; X } X/* !TREAT IF FOUND. */ X/* L9600: */ X } X XL9700: X if (play_1.here != rindex_1.bkbox) { X goto L10; X } X/* !IN BOX ROOM? */ X target = oindex_1.wnort; X goto L2100; X/* NOBJS, PAGE 7 */ X X/* O41-- SHORT POLE */ X XL10000: X if (prsvec_1.prsa != vindex_1.raisew) { X goto L10100; X } X/* !LIFT? */ X i = 749; X/* !ASSUME UP. */ X if (findex_1.poleuf == 2) { X i = 750; X } X/* !ALREADY UP? */ X rspeak_(i); X findex_1.poleuf = 2; X/* !POLE IS RAISED. */ X return ret_val; X XL10100: X if (prsvec_1.prsa != vindex_1.lowerw && prsvec_1.prsa != vindex_1.pushw) { X X goto L10; X } X if (findex_1.poleuf != 0) { X goto L10200; X } X/* !ALREADY LOWERED? */ X rspeak_(751); X/* !CANT DO IT. */ X return ret_val; X XL10200: X if (findex_1.mdir % 180 != 0) { X goto L10300; X } X/* !MIRROR N-S? */ X findex_1.poleuf = 0; X/* !YES, LOWER INTO */ X rspeak_(752); X/* !CHANNEL. */ X return ret_val; X XL10300: X if (findex_1.mdir != 270 || findex_1.mloc != rindex_1.mrb) { X goto L10400; X } X findex_1.poleuf = 0; X/* !LOWER INTO HOLE. */ X rspeak_(753); X return ret_val; X XL10400: X i__1 = findex_1.poleuf + 753; X rspeak_(i__1); X/* !POLEUF = 1 OR 2. */ X findex_1.poleuf = 1; X/* !NOW ON FLOOR. */ X return ret_val; X X/* O42-- MIRROR SWITCH */ X XL11000: X if (prsvec_1.prsa != vindex_1.pushw) { X goto L10; X } X/* !PUSH? */ X if (findex_1.mrpshf) { X goto L11300; X } X/* !ALREADY PUSHED? */ X rspeak_(756); X/* !BUTTON GOES IN. */ X i__1 = objcts_1.olnt; X for (i = 1; i <= i__1; ++i) { X/* !BLOCKED? */ X if (qhere_(i, rindex_1.mreye) && i != oindex_1.rbeam) { X goto L11200; X } X/* L11100: */ X } X rspeak_(757); X/* !NOTHING IN BEAM. */ X return ret_val; X XL11200: X cevent_1.cflag[cindex_1.cevmrs - 1] = TRUE_; X/* !MIRROR OPENS. */ X cevent_1.ctick[cindex_1.cevmrs - 1] = 7; X findex_1.mrpshf = TRUE_; X findex_1.mropnf = TRUE_; X return ret_val; X XL11300: X rspeak_(758); X/* !MIRROR ALREADYOPEN. */ X return ret_val; X/* NOBJS, PAGE 8 */ X X/* O43-- BEAM FUNCTION */ X XL12000: X if (prsvec_1.prsa != vindex_1.takew || prsvec_1.prso != oindex_1.rbeam) { X goto L12100; X } X rspeak_(759); X/* !TAKE BEAM, JOKE. */ X return ret_val; X XL12100: X i = prsvec_1.prso; X/* !ASSUME BLK WITH DIROBJ. */ X if (prsvec_1.prsa == vindex_1.putw && prsvec_1.prsi == oindex_1.rbeam) { X goto L12200; X } X if (prsvec_1.prsa != vindex_1.mungw || prsvec_1.prso != oindex_1.rbeam || X prsvec_1.prsi == 0) { X goto L10; X } X i = prsvec_1.prsi; XL12200: X if (objcts_1.oadv[i - 1] != play_1.winner) { X goto L12300; X } X/* !CARRYING? */ X newsta_(i, 0, play_1.here, 0, 0); X/* !DROP OBJ. */ X rspsub_(760, objcts_1.odesc2[i - 1]); X return ret_val; X XL12300: X j = 761; X/* !ASSUME NOT IN ROOM. */ X if (qhere_(j, play_1.here)) { X i = 762; X } X/* !IN ROOM? */ X rspsub_(j, objcts_1.odesc2[i - 1]); X/* !DESCRIBE. */ X return ret_val; X X/* O44-- BRONZE DOOR */ X XL13000: X if (play_1.here == rindex_1.ncell || findex_1.lcell == 4 && (play_1.here X == rindex_1.cell || play_1.here == rindex_1.scorr)) { X goto L13100; X } X rspeak_(763); X/* !DOOR NOT THERE. */ X return ret_val; X XL13100: X if (! opncls_(oindex_1.odoor, 764, 765)) { X goto L10; X } X/* !OPEN/CLOSE? */ X if (play_1.here == rindex_1.ncell && (objcts_1.oflag2[oindex_1.odoor - 1] X & OPENBT) != 0) { X rspeak_(766); X } X return ret_val; X X/* O45-- QUIZ DOOR */ X XL14000: X if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) { X X goto L14100; X } X rspeak_(767); X/* !DOOR WONT MOVE. */ X return ret_val; X XL14100: X if (prsvec_1.prsa != vindex_1.knockw) { X goto L10; X } X/* !KNOCK? */ X if (findex_1.inqstf) { X goto L14200; X } X/* !TRIED IT ALREADY? */ X findex_1.inqstf = TRUE_; X/* !START INQUISITION. */ X cevent_1.cflag[cindex_1.cevinq - 1] = TRUE_; X cevent_1.ctick[cindex_1.cevinq - 1] = 2; X findex_1.quesno = rnd_(8); X/* !SELECT QUESTION. */ X findex_1.nqatt = 0; X findex_1.corrct = 0; X rspeak_(768); X/* !ANNOUNCE RULES. */ X rspeak_(769); X i__1 = findex_1.quesno + 770; X rspeak_(i__1); X/* !ASK QUESTION. */ X return ret_val; X XL14200: X rspeak_(798); X/* !NO REPLY. */ X return ret_val; X X/* O46-- LOCKED DOOR */ X XL15000: X if (prsvec_1.prsa != vindex_1.openw) { X goto L10; X } X/* !OPEN? */ X rspeak_(778); X/* !CANT. */ X return ret_val; X X/* O47-- CELL DOOR */ X XL16000: X ret_val = opncls_(oindex_1.cdoor, 779, 780); X/* !OPEN/CLOSE? */ X return ret_val; X/* NOBJS, PAGE 9 */ X X/* O48-- DIALBUTTON */ X XL17000: X if (prsvec_1.prsa != vindex_1.pushw) { X goto L10; X } X/* !PUSH? */ X rspeak_(809); X/* !CLICK. */ X if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) { X rspeak_(810); X } X/* !CLOSE CELL DOOR. */ X X i__1 = objcts_1.olnt; X for (i = 1; i <= i__1; ++i) { X/* !RELOCATE OLD TO HYPER. */ X if (objcts_1.oroom[i - 1] == rindex_1.cell && (objcts_1.oflag1[i - 1] X & DOORBT) == 0) { X i__2 = findex_1.lcell * hyper_1.hfactr; X newsta_(i, 0, i__2, 0, 0); X } X if (objcts_1.oroom[i - 1] == findex_1.pnumb * hyper_1.hfactr) { X newsta_(i, 0, rindex_1.cell, 0, 0); X } X/* L17100: */ X } X X objcts_1.oflag2[oindex_1.odoor - 1] &= ~ OPENBT; X objcts_1.oflag2[oindex_1.cdoor - 1] &= ~ OPENBT; X objcts_1.oflag1[oindex_1.odoor - 1] &= ~ VISIBT; X if (findex_1.pnumb == 4) { X objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT; X } X X if (advs_1.aroom[aindex_1.player - 1] != rindex_1.cell) { X goto L17400; X } X/* !PLAYER IN CELL? */ X if (findex_1.lcell != 4) { X goto L17200; X } X/* !IN RIGHT CELL? */ X objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT; X f = moveto_(rindex_1.ncell, aindex_1.player); X/* !YES, MOVETO NCELL. */ X goto L17400; XL17200: X f = moveto_(rindex_1.pcell, aindex_1.player); X/* !NO, MOVETO PCELL. */ X XL17400: X findex_1.lcell = findex_1.pnumb; X return ret_val; X/* NOBJS, PAGE 10 */ X X/* O49-- DIAL INDICATOR */ X XL18000: X if (prsvec_1.prsa != vindex_1.spinw) { X goto L18100; X } X/* !SPIN? */ X findex_1.pnumb = rnd_(8) + 1; X/* !WHEE */ X/* ! */ X i__1 = findex_1.pnumb + 712; X rspsub_(797, i__1); X return ret_val; X XL18100: X if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.putw && X prsvec_1.prsa != vindex_1.trntow) { X goto L10; X } X if (prsvec_1.prsi != 0) { X goto L18200; X } X/* !TURN DIAL TO X? */ X rspeak_(806); X/* !MUST SPECIFY. */ X return ret_val; X XL18200: X if (prsvec_1.prsi >= oindex_1.num1 && prsvec_1.prsi <= oindex_1.num8) { X goto L18300; X } X rspeak_(807); X/* !MUST BE DIGIT. */ X return ret_val; X XL18300: X findex_1.pnumb = prsvec_1.prsi - oindex_1.num1 + 1; X/* !SET UP NEW. */ X i__1 = findex_1.pnumb + 712; X rspsub_(808, i__1); X return ret_val; X X/* O50-- GLOBAL MIRROR */ X XL19000: X ret_val = mirpan_(832, 0); X return ret_val; X X/* O51-- GLOBAL PANEL */ X XL20000: X if (play_1.here != rindex_1.fdoor) { X goto L20100; X } X/* !AT FRONT DOOR? */ X if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) { X X goto L10; X } X rspeak_(843); X/* !PANEL IN DOOR, NOGO. */ X return ret_val; X XL20100: X ret_val = mirpan_(838, 1); X return ret_val; X X/* O52-- PUZZLE ROOM SLIT */ X XL21000: X if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.cslit) { X goto L10; X } X if (prsvec_1.prso != oindex_1.gcard) { X goto L21100; X } X/* !PUT CARD IN SLIT? */ X newsta_(prsvec_1.prso, 863, 0, 0, 0); X/* !KILL CARD. */ X findex_1.cpoutf = TRUE_; X/* !OPEN DOOR. */ X objcts_1.oflag1[oindex_1.stldr - 1] &= ~ VISIBT; X return ret_val; X XL21100: X if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0 && ( X objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) { X goto L21200; X } X i__1 = rnd_(5) + 552; X rspeak_(i__1); X/* !JOKE FOR VILL, VICT. */ X return ret_val; X XL21200: X newsta_(prsvec_1.prso, 0, 0, 0, 0); X/* !KILL OBJECT. */ X rspsub_(864, odo2); X/* !DESCRIBE. */ X return ret_val; X X} /* nobjs_ */ X X/* MIRPAN-- PROCESSOR FOR GLOBAL MIRROR/PANEL */ X X/* DECLARATIONS */ X Xstatic logical mirpan_(st, pnf) Xinteger st; Xlogical pnf; X{ X /* System generated locals */ X integer i__1; X logical ret_val; X X /* Local variables */ X integer num; X integer mrbf; X X ret_val = TRUE_; X num = mrhere_(play_1.here); X/* !GET MIRROR NUM. */ X if (num != 0) { X goto L100; X } X/* !ANY HERE? */ X rspeak_(st); X/* !NO, LOSE. */ X return ret_val; X XL100: X mrbf = 0; X/* !ASSUME MIRROR OK. */ X if (num == 1 && ! findex_1.mr1f || num == 2 && ! findex_1.mr2f) { X mrbf = 1; X } X if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.openw) { X goto L200; X } X i__1 = st + 1; X rspeak_(i__1); X/* !CANT OPEN OR MOVE. */ X return ret_val; X XL200: X if (pnf || prsvec_1.prsa != vindex_1.lookiw && prsvec_1.prsa != X vindex_1.examiw && prsvec_1.prsa != vindex_1.lookw) { X goto L300; X } X i__1 = mrbf + 844; X rspeak_(i__1); X/* !LOOK IN MIRROR. */ X return ret_val; X XL300: X if (prsvec_1.prsa != vindex_1.mungw) { X goto L400; X } X/* !BREAK? */ X i__1 = st + 2 + mrbf; X rspeak_(i__1); X/* !DO IT. */ X if (num == 1 && ! (pnf)) { X findex_1.mr1f = FALSE_; X } X if (num == 2 && ! (pnf)) { X findex_1.mr2f = FALSE_; X } X return ret_val; X XL400: X if (pnf || mrbf == 0) { X goto L500; X } X/* !BROKEN MIRROR? */ X rspeak_(846); X return ret_val; X XL500: X if (prsvec_1.prsa != vindex_1.pushw) { X goto L600; X } X/* !PUSH? */ X i__1 = st + 3 + num; X rspeak_(i__1); X return ret_val; X XL600: X ret_val = FALSE_; X/* !CANT HANDLE IT. */ X return ret_val; X X} /* mirpan_ */ END_OF_FILE if test 20195 -ne `wc -c <'nobjs.c'`; then echo shar: \"'nobjs.c'\" unpacked with wrong size! fi # end of 'nobjs.c' fi if test -f 'sobjs.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sobjs.c'\" else echo shar: Extracting \"'sobjs.c'\" \(21223 characters\) sed "s/^X//" >'sobjs.c' <<'END_OF_FILE' X/* SOBJS- SIMPLE OBJECTS PROCESSOR */ X/* OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, */ X/* MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES */ X X/*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/ X/* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */ X/* WRITTEN BY R. M. SUPNIK */ X X#include "funcs.h" X#include "vars.h" X Xlogical sobjs_(ri, arg) Xinteger ri; Xinteger arg; X{ X /* System generated locals */ X integer i__1; X logical ret_val; X X /* Local variables */ X logical f; X integer i; X integer mroom; X integer av; X integer odi2 = 0, odo2 = 0; X X if (prsvec_1.prso > 220) { X goto L5; X } X if (prsvec_1.prso != 0) { X odo2 = objcts_1.odesc2[prsvec_1.prso - 1]; X } XL5: X if (prsvec_1.prsi != 0) { X odi2 = objcts_1.odesc2[prsvec_1.prsi - 1]; X } X av = advs_1.avehic[play_1.winner - 1]; X ret_val = TRUE_; X X switch (ri) { X case 1: goto L1000; X case 2: goto L3000; X case 3: goto L4000; X case 4: goto L6000; X case 5: goto L7000; X case 6: goto L8000; X case 7: goto L9000; X case 8: goto L13000; X case 9: goto L14000; X case 10: goto L16000; X case 11: goto L17000; X case 12: goto L21000; X case 13: goto L23000; X case 14: goto L24000; X case 15: goto L27000; X case 16: goto L28000; X case 17: goto L29000; X case 18: goto L30000; X case 19: goto L31000; X case 20: goto L33000; X case 21: goto L34000; X case 22: goto L36000; X case 23: goto L37000; X case 24: goto L38000; X case 25: goto L41000; X case 26: goto L42000; X case 27: goto L43000; X case 28: goto L44000; X case 29: goto L46000; X case 30: goto L53000; X case 31: goto L56000; X } X bug_(6, ri); X X/* RETURN HERE TO DECLARE FALSE RESULT */ X XL10: X ret_val = FALSE_; X return ret_val; X/* SOBJS, PAGE 3 */ X X/* O1-- GUNK FUNCTION */ X XL1000: X if (objcts_1.ocan[oindex_1.gunk - 1] == 0) { X goto L10; X } X/* !NOT INSIDE? F */ X newsta_(oindex_1.gunk, 122, 0, 0, 0); X/* !FALLS APART. */ X return ret_val; X X/* O2-- TROPHY CASE */ X XL3000: X if (prsvec_1.prsa != vindex_1.takew) { X goto L10; X } X/* !TAKE? */ X rspeak_(128); X/* !CANT. */ X return ret_val; X X/* O3-- BOTTLE FUNCTION */ X XL4000: X if (prsvec_1.prsa != vindex_1.throww) { X goto L4100; X } X/* !THROW? */ X newsta_(prsvec_1.prso, 129, 0, 0, 0); X/* !BREAKS. */ X return ret_val; X XL4100: X if (prsvec_1.prsa != vindex_1.mungw) { X goto L10; X } X/* !MUNG? */ X newsta_(prsvec_1.prso, 131, 0, 0, 0); X/* !BREAKS. */ X return ret_val; X/* SOBJS, PAGE 4 */ X X/* O4-- ROPE FUNCTION */ X XL6000: X if (play_1.here == rindex_1.dome) { X goto L6100; X } X/* !IN DOME? */ X findex_1.domef = FALSE_; X/* !NO, */ X if (prsvec_1.prsa != vindex_1.untiew) { X goto L6050; X } X/* !UNTIE? */ X rspeak_(134); X/* !CANT */ X return ret_val; X XL6050: X if (prsvec_1.prsa != vindex_1.tiew) { X goto L10; X } X/* !TIE? */ X rspeak_(135); X/* !CANT TIE */ X return ret_val; X XL6100: X if (prsvec_1.prsa != vindex_1.tiew || prsvec_1.prsi != oindex_1.raili) { X goto L6200; X } X if (findex_1.domef) { X goto L6150; X } X/* !ALREADY TIED? */ X findex_1.domef = TRUE_; X/* !NO, TIE IT. */ X objcts_1.oflag1[oindex_1.rope - 1] |= NDSCBT; X objcts_1.oflag2[oindex_1.rope - 1] |= CLMBBT; X newsta_(oindex_1.rope, 137, rindex_1.dome, 0, 0); X return ret_val; X XL6150: X rspeak_(136); X/* !DUMMY. */ X return ret_val; X XL6200: X if (prsvec_1.prsa != vindex_1.untiew) { X goto L6300; X } X/* !UNTIE? */ X if (findex_1.domef) { X goto L6250; X } X/* !TIED? */ X rspeak_(134); X/* !NO, DUMMY. */ X return ret_val; X XL6250: X findex_1.domef = FALSE_; X/* !YES, UNTIE IT. */ X objcts_1.oflag1[oindex_1.rope - 1] &= ~ NDSCBT; X objcts_1.oflag2[oindex_1.rope - 1] &= ~ CLMBBT; X rspeak_(139); X return ret_val; X XL6300: X if (findex_1.domef || prsvec_1.prsa != vindex_1.dropw) { X goto L6400; X } X/* !DROP & UNTIED? */ X newsta_(oindex_1.rope, 140, rindex_1.mtorc, 0, 0); X/* !YES, DROP. */ X return ret_val; X XL6400: X if (prsvec_1.prsa != vindex_1.takew || ! findex_1.domef) { X goto L10; X } X rspeak_(141); X/* !TAKE & TIED. */ X return ret_val; X X/* O5-- SWORD FUNCTION */ X XL7000: X if (prsvec_1.prsa == vindex_1.takew && play_1.winner == aindex_1.player) { X X hack_1.swdact = TRUE_; X } X goto L10; X X/* O6-- LANTERN */ X XL8000: X if (prsvec_1.prsa != vindex_1.throww) { X goto L8100; X } X/* !THROW? */ X newsta_(oindex_1.lamp, 0, 0, 0, 0); X/* !KILL LAMP, */ X newsta_(oindex_1.blamp, 142, play_1.here, 0, 0); X/* !REPLACE WITH BROKEN. */ X return ret_val; X XL8100: X if (prsvec_1.prsa == vindex_1.trnonw) { X cevent_1.cflag[cindex_1.cevlnt - 1] = TRUE_; X } X if (prsvec_1.prsa == vindex_1.trnofw) { X cevent_1.cflag[cindex_1.cevlnt - 1] = FALSE_; X } X goto L10; X X/* O7-- RUG FUNCTION */ X XL9000: X if (prsvec_1.prsa != vindex_1.raisew) { X goto L9100; X } X/* !RAISE? */ X rspeak_(143); X/* !CANT */ X return ret_val; X XL9100: X if (prsvec_1.prsa != vindex_1.takew) { X goto L9200; X } X/* !TAKE? */ X rspeak_(144); X/* !CANT */ X return ret_val; X XL9200: X if (prsvec_1.prsa != vindex_1.movew) { X goto L9300; X } X/* !MOVE? */ X i__1 = findex_1.orrug + 145; X rspeak_(i__1); X findex_1.orrug = 1; X objcts_1.oflag1[oindex_1.door - 1] |= VISIBT; X return ret_val; X XL9300: X if (prsvec_1.prsa != vindex_1.lookuw || findex_1.orrug != 0 || ( X objcts_1.oflag2[oindex_1.door - 1] & OPENBT) != 0) { X goto L10; X } X rspeak_(345); X return ret_val; X/* SOBJS, PAGE 5 */ X X/* O8-- SKELETON */ X XL13000: X i = robrm_(play_1.here, 100, rindex_1.lld2, 0, 0) + robadv_( X play_1.winner, rindex_1.lld2, 0, 0); X if (i != 0) { X rspeak_(162); X } X/* !IF ROBBED, SAY SO. */ X return ret_val; X X/* O9-- MIRROR */ X XL14000: X if (findex_1.mirrmf || prsvec_1.prsa != vindex_1.rubw) { X goto L14500; X } X mroom = play_1.here ^ 1; X i__1 = objcts_1.olnt; X for (i = 1; i <= i__1; ++i) { X/* !INTERCHANGE OBJS. */ X if (objcts_1.oroom[i - 1] == play_1.here) { X objcts_1.oroom[i - 1] = -1; X } X if (objcts_1.oroom[i - 1] == mroom) { X objcts_1.oroom[i - 1] = play_1.here; X } X if (objcts_1.oroom[i - 1] == -1) { X objcts_1.oroom[i - 1] = mroom; X } X/* L14100: */ X } X f = moveto_(mroom, play_1.winner); X rspeak_(163); X/* !SHAKE WORLD. */ X return ret_val; X XL14500: X if (prsvec_1.prsa != vindex_1.lookw && prsvec_1.prsa != vindex_1.lookiw && X prsvec_1.prsa != vindex_1.examiw) { X goto L14600; X } X i = 164; X/* !MIRROR OK. */ X if (findex_1.mirrmf) { X i = 165; X } X/* !MIRROR DEAD. */ X rspeak_(i); X return ret_val; X XL14600: X if (prsvec_1.prsa != vindex_1.takew) { X goto L14700; X } X/* !TAKE? */ X rspeak_(166); X/* !JOKE. */ X return ret_val; X XL14700: X if (prsvec_1.prsa != vindex_1.mungw && prsvec_1.prsa != vindex_1.throww) { X X goto L10; X } X i = 167; X/* !MIRROR BREAKS. */ X if (findex_1.mirrmf) { X i = 168; X } X/* !MIRROR ALREADY BROKEN. */ X findex_1.mirrmf = TRUE_; X findex_1.badlkf = TRUE_; X rspeak_(i); X return ret_val; X/* SOBJS, PAGE 6 */ X X/* O10-- DUMBWAITER */ X XL16000: X if (prsvec_1.prsa != vindex_1.raisew) { X goto L16100; X } X/* !RAISE? */ X if (findex_1.cagetf) { X goto L16400; X } X/* !ALREADY AT TOP? */ X newsta_(oindex_1.tbask, 175, rindex_1.tshaf, 0, 0); X/* !NO, RAISE BASKET. */ X newsta_(oindex_1.fbask, 0, rindex_1.bshaf, 0, 0); X findex_1.cagetf = TRUE_; X/* !AT TOP. */ X return ret_val; X XL16100: X if (prsvec_1.prsa != vindex_1.lowerw) { X goto L16200; X } X/* !LOWER? */ X if (! findex_1.cagetf) { X goto L16400; X } X/* !ALREADY AT BOTTOM? */ X newsta_(oindex_1.tbask, 176, rindex_1.bshaf, 0, 0); X/* !NO, LOWER BASKET. */ X newsta_(oindex_1.fbask, 0, rindex_1.tshaf, 0, 0); X findex_1.cagetf = FALSE_; X if (! lit_(play_1.here)) { X rspeak_(406); X } X/* !IF DARK, DIE. */ X return ret_val; X XL16200: X if (prsvec_1.prso != oindex_1.fbask && prsvec_1.prsi != oindex_1.fbask) { X goto L16300; X } X rspeak_(130); X/* !WRONG BASKET. */ X return ret_val; X XL16300: X if (prsvec_1.prsa != vindex_1.takew) { X goto L10; X } X/* !TAKE? */ X rspeak_(177); X/* !JOKE. */ X return ret_val; X XL16400: X i__1 = rnd_(3) + 125; X rspeak_(i__1); X/* !DUMMY. */ X return ret_val; X X/* O11-- GHOST FUNCTION */ X XL17000: X i = 178; X/* !ASSUME DIRECT. */ X if (prsvec_1.prso != oindex_1.ghost) { X i = 179; X } X/* !IF NOT, INDIRECT. */ X rspeak_(i); X return ret_val; X/* !SPEAK AND EXIT. */ X/* SOBJS, PAGE 7 */ X X/* O12-- TUBE */ X XL21000: X if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.tube) { X goto L10; X } X rspeak_(186); X/* !CANT PUT BACK IN. */ X return ret_val; X X/* O13-- CHALICE */ X XL23000: X if (prsvec_1.prsa != vindex_1.takew || objcts_1.ocan[prsvec_1.prso - 1] != X 0 || objcts_1.oroom[prsvec_1.prso - 1] != rindex_1.treas || X objcts_1.oroom[oindex_1.thief - 1] != rindex_1.treas || ( X objcts_1.oflag2[oindex_1.thief - 1] & FITEBT) == 0 || ! X hack_1.thfact) { X goto L10; X } X rspeak_(204); X/* !CANT TAKE. */ X return ret_val; X X/* O14-- PAINTING */ X XL24000: X if (prsvec_1.prsa != vindex_1.mungw) { X goto L10; X } X/* !MUNG? */ X rspeak_(205); X/* !DESTROY PAINTING. */ X objcts_1.ofval[prsvec_1.prso - 1] = 0; X objcts_1.otval[prsvec_1.prso - 1] = 0; X objcts_1.odesc1[prsvec_1.prso - 1] = 207; X objcts_1.odesc2[prsvec_1.prso - 1] = 206; X return ret_val; X/* SOBJS, PAGE 8 */ X X/* O15-- BOLT */ X XL27000: X if (prsvec_1.prsa != vindex_1.turnw) { X goto L10; X } X/* !TURN BOLT? */ X if (prsvec_1.prsi != oindex_1.wrenc) { X goto L27500; X } X/* !WITH WRENCH? */ X if (findex_1.gatef) { X goto L27100; X } X/* !PROPER BUTTON PUSHED? */ X rspeak_(210); X/* !NO, LOSE. */ X return ret_val; X XL27100: X if (findex_1.lwtidf) { X goto L27200; X } X/* !LOW TIDE NOW? */ X findex_1.lwtidf = TRUE_; X/* !NO, EMPTY DAM. */ X rspeak_(211); X objcts_1.oflag2[oindex_1.coffi - 1] &= ~ SCRDBT; X objcts_1.oflag1[oindex_1.trunk - 1] |= VISIBT; X rooms_1.rflag[rindex_1.reser - 1] = (rooms_1.rflag[rindex_1.reser - 1] | X RLAND) & ~ (RWATER + RSEEN); X return ret_val; X XL27200: X findex_1.lwtidf = FALSE_; X/* !YES, FILL DAM. */ X rspeak_(212); X if (qhere_(oindex_1.trunk, rindex_1.reser)) { X objcts_1.oflag1[oindex_1.trunk - 1] &= ~ VISIBT; X } X rooms_1.rflag[rindex_1.reser - 1] = (rooms_1.rflag[rindex_1.reser - 1] | X RWATER) & ~ RLAND; X return ret_val; X XL27500: X rspsub_(299, odi2); X/* !NOT WITH THAT. */ X return ret_val; X X/* O16-- GRATING */ X XL28000: X if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) { X X goto L10; X } X if (findex_1.grunlf) { X goto L28200; X } X/* !UNLOCKED? */ X rspeak_(214); X/* !NO, LOCKED. */ X return ret_val; X XL28200: X i = 215; X/* !UNLOCKED, VIEW FRM CLR. */ X if (play_1.here != rindex_1.clear) { X i = 216; X } X/* !VIEW FROM BELOW. */ X ret_val = opncls_(oindex_1.grate, i, 885); X/* !OPEN/CLOSE. */ X rooms_1.rflag[rindex_1.mgrat - 1] &= ~ RLIGHT; X if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) { X rooms_1.rflag[rindex_1.mgrat - 1] |= RLIGHT; X } X if (! lit_(play_1.here)) { X rspeak_(406); X } X/* !IF DARK, DIE. */ X return ret_val; X X/* O17-- TRAP DOOR */ X XL29000: X if (play_1.here != rindex_1.lroom) { X goto L29100; X } X/* !FROM LIVING ROOM? */ X ret_val = opncls_(oindex_1.door, 218, 219); X/* !OPEN/CLOSE. */ X return ret_val; X XL29100: X if (play_1.here != rindex_1.cella) { X goto L10; X } X/* !FROM CELLAR? */ X if (prsvec_1.prsa != vindex_1.openw || (objcts_1.oflag2[oindex_1.door - 1] X & OPENBT) != 0) { X goto L29200; X } X rspeak_(220); X/* !CANT OPEN CLOSED DOOR. */ X return ret_val; X XL29200: X ret_val = opncls_(oindex_1.door, 0, 22); X/* !NORMAL OPEN/CLOSE. */ X return ret_val; X X/* O18-- DURABLE DOOR */ X XL30000: X i = 0; X/* !ASSUME NO APPL. */ X if (prsvec_1.prsa == vindex_1.openw) { X i = 221; X } X/* !OPEN? */ X if (prsvec_1.prsa == vindex_1.burnw) { X i = 222; X } X/* !BURN? */ X if (prsvec_1.prsa == vindex_1.mungw) { X i = rnd_(3) + 223; X } X/* !MUNG? */ X if (i == 0) { X goto L10; X } X rspeak_(i); X return ret_val; X X/* O19-- MASTER SWITCH */ X XL31000: X if (prsvec_1.prsa != vindex_1.turnw) { X goto L10; X } X/* !TURN? */ X if (prsvec_1.prsi != oindex_1.screw) { X goto L31500; X } X/* !WITH SCREWDRIVER? */ X if ((objcts_1.oflag2[oindex_1.machi - 1] & OPENBT) != 0) { X goto L31600; X } X/* !LID UP? */ X rspeak_(226); X/* !NO, ACTIVATE. */ X if (objcts_1.ocan[oindex_1.coal - 1] != oindex_1.machi) { X goto L31400; X } X/* !COAL INSIDE? */ X newsta_(oindex_1.coal, 0, 0, 0, 0); X/* !KILL COAL, */ X newsta_(oindex_1.diamo, 0, 0, oindex_1.machi, 0); X/* !REPLACE WITH DIAMOND. */ X return ret_val; X XL31400: X i__1 = objcts_1.olnt; X for (i = 1; i <= i__1; ++i) { X/* !KILL NONCOAL OBJECTS. */ X if (objcts_1.ocan[i - 1] != oindex_1.machi) { X goto L31450; X } X/* !INSIDE MACHINE? */ X newsta_(i, 0, 0, 0, 0); X/* !KILL OBJECT AND CONTENTS. */ X newsta_(oindex_1.gunk, 0, 0, oindex_1.machi, 0); X/* !REDUCE TO GUNK. */ XL31450: X ; X } X return ret_val; X XL31500: X rspsub_(300, odi2); X/* !CANT TURN WITH THAT. */ X return ret_val; X XL31600: X rspeak_(227); X/* !LID IS UP. */ X return ret_val; X/* SOBJS, PAGE 9 */ X X/* O20-- LEAK */ X XL33000: X if (prsvec_1.prso != oindex_1.leak || prsvec_1.prsa != vindex_1.plugw || X findex_1.rvmnt <= 0) { X goto L10; X } X if (prsvec_1.prsi != oindex_1.putty) { X goto L33100; X } X/* !WITH PUTTY? */ X findex_1.rvmnt = -1; X/* !DISABLE LEAK. */ X cevent_1.ctick[cindex_1.cevmnt - 1] = 0; X rspeak_(577); X return ret_val; X XL33100: X rspsub_(301, odi2); X/* !CANT WITH THAT. */ X return ret_val; X X/* O21-- DROWNING BUTTONS */ X XL34000: X if (prsvec_1.prsa != vindex_1.pushw) { X goto L10; X } X/* !PUSH? */ X switch (prsvec_1.prso - oindex_1.rbutt + 1) { X case 1: goto L34100; X case 2: goto L34200; X case 3: goto L34300; X case 4: goto L34400; X } X goto L10; X/* !NOT A BUTTON. */ X XL34100: X rooms_1.rflag[play_1.here - 1] ^= RLIGHT; X i = 230; X if ((rooms_1.rflag[play_1.here - 1] & RLIGHT) != 0) { X i = 231; X } X rspeak_(i); X return ret_val; X XL34200: X findex_1.gatef = TRUE_; X/* !RELEASE GATE. */ X rspeak_(232); X return ret_val; X XL34300: X findex_1.gatef = FALSE_; X/* !INTERLOCK GATE. */ X rspeak_(232); X return ret_val; X XL34400: X if (findex_1.rvmnt != 0) { X goto L34500; X } X/* !LEAK ALREADY STARTED? */ X rspeak_(233); X/* !NO, START LEAK. */ X findex_1.rvmnt = 1; X cevent_1.ctick[cindex_1.cevmnt - 1] = -1; X return ret_val; X XL34500: X rspeak_(234); X/* !BUTTON JAMMED. */ X return ret_val; X X/* O22-- INFLATABLE BOAT */ X XL36000: X if (prsvec_1.prsa != vindex_1.inflaw) { X goto L10; X } X/* !INFLATE? */ X if (objcts_1.oroom[oindex_1.iboat - 1] != 0) { X goto L36100; X } X/* !IN ROOM? */ X rspeak_(235); X/* !NO, JOKE. */ X return ret_val; X XL36100: X if (prsvec_1.prsi != oindex_1.pump) { X goto L36200; X } X/* !WITH PUMP? */ X newsta_(oindex_1.iboat, 0, 0, 0, 0); X/* !KILL DEFL BOAT, */ X newsta_(oindex_1.rboat, 236, play_1.here, 0, 0); X/* !REPL WITH INF. */ X findex_1.deflaf = FALSE_; X return ret_val; X XL36200: X i = 237; X/* !JOKES. */ X if (prsvec_1.prsi != oindex_1.lungs) { X i = 303; X } X rspsub_(i, odi2); X return ret_val; X X/* O23-- DEFLATED BOAT */ X XL37000: X if (prsvec_1.prsa != vindex_1.inflaw) { X goto L37100; X } X/* !INFLATE? */ X rspeak_(238); X/* !JOKE. */ X return ret_val; X XL37100: X if (prsvec_1.prsa != vindex_1.plugw) { X goto L10; X } X/* !PLUG? */ X if (prsvec_1.prsi != oindex_1.putty) { X goto L33100; X } X/* !WITH PUTTY? */ X newsta_(oindex_1.iboat, 239, objcts_1.oroom[oindex_1.dboat - 1], X objcts_1.ocan[oindex_1.dboat - 1], objcts_1.oadv[oindex_1.dboat X - 1]); X newsta_(oindex_1.dboat, 0, 0, 0, 0); X/* !KILL DEFL BOAT, REPL. */ X return ret_val; X/* SOBJS, PAGE 10 */ X X/* O24-- RUBBER BOAT */ X XL38000: X if (arg != 0) { X goto L10; X } X/* !DISMISS READIN, OUT. */ X if (prsvec_1.prsa != vindex_1.boardw || objcts_1.oadv[oindex_1.stick - 1] X != play_1.winner) { X goto L38100; X } X newsta_(oindex_1.rboat, 0, 0, 0, 0); X/* !KILL INFL BOAT, */ X newsta_(oindex_1.dboat, 240, play_1.here, 0, 0); X/* !REPL WITH DEAD. */ X findex_1.deflaf = TRUE_; X return ret_val; X XL38100: X if (prsvec_1.prsa != vindex_1.inflaw) { X goto L38200; X } X/* !INFLATE? */ X rspeak_(367); X/* !YES, JOKE. */ X return ret_val; X XL38200: X if (prsvec_1.prsa != vindex_1.deflaw) { X goto L10; X } X/* !DEFLATE? */ X if (av == oindex_1.rboat) { X goto L38300; X } X/* !IN BOAT? */ X if (objcts_1.oroom[oindex_1.rboat - 1] == 0) { X goto L38400; X } X/* !ON GROUND? */ X newsta_(oindex_1.rboat, 0, 0, 0, 0); X/* !KILL INFL BOAT, */ X newsta_(oindex_1.iboat, 241, play_1.here, 0, 0); X/* !REPL WITH DEFL. */ X findex_1.deflaf = TRUE_; X return ret_val; X XL38300: X rspeak_(242); X/* !IN BOAT. */ X return ret_val; X XL38400: X rspeak_(243); X/* !NOT ON GROUND. */ X return ret_val; X X/* O25-- BRAIDED ROPE */ X XL41000: X if (prsvec_1.prsa != vindex_1.tiew || prsvec_1.prso != oindex_1.brope || X prsvec_1.prsi != oindex_1.hook1 && prsvec_1.prsi != X oindex_1.hook2) { X goto L41500; X } X findex_1.btief = prsvec_1.prsi; X/* !RECORD LOCATION. */ X cevent_1.cflag[cindex_1.cevbal - 1] = FALSE_; X/* !STALL ASCENT. */ X rspeak_(248); X return ret_val; X XL41500: X if (prsvec_1.prsa != vindex_1.untiew || prsvec_1.prso != oindex_1.brope) { X X goto L10; X } X if (findex_1.btief != 0) { X goto L41600; X } X/* !TIED UP? */ X rspeak_(249); X/* !NO, JOKE. */ X return ret_val; X XL41600: X rspeak_(250); X findex_1.btief = 0; X/* !UNTIE. */ X cevent_1.ctick[cindex_1.cevbal - 1] = 3; X/* !RESTART CLOCK. */ X cevent_1.cflag[cindex_1.cevbal - 1] = TRUE_; X return ret_val; X X/* O26-- SAFE */ X XL42000: X i = 0; X/* !ASSUME UNPROCESSED. */ X if (prsvec_1.prsa == vindex_1.takew) { X i = 251; X } X/* !TAKE? */ X if (prsvec_1.prsa == vindex_1.openw && findex_1.safef) { X i = 253; X } X/* !OPEN AFTER BLAST? */ X if (prsvec_1.prsa == vindex_1.openw && ! findex_1.safef) { X i = 254; X } X/* !OPEN BEFORE BLAST? */ X if (prsvec_1.prsa == vindex_1.closew && findex_1.safef) { X i = 253; X } X/* !CLOSE AFTER? */ X if (prsvec_1.prsa == vindex_1.closew && ! findex_1.safef) { X i = 255; X } X if (i == 0) { X goto L10; X } X rspeak_(i); X return ret_val; X X/* O27-- FUSE */ X XL43000: X if (prsvec_1.prsa != vindex_1.burnw) { X goto L10; X } X/* !BURN? */ X rspeak_(256); X cevent_1.ctick[cindex_1.cevfus - 1] = 2; X/* !START COUNTDOWN. */ X return ret_val; X X/* O28-- GNOME */ X XL44000: X if (prsvec_1.prsa != vindex_1.givew && prsvec_1.prsa != vindex_1.throww) { X X goto L44500; X } X if (objcts_1.otval[prsvec_1.prso - 1] == 0) { X goto L44100; X } X/* !TREASURE? */ X rspsub_(257, odo2); X/* !YES, GET DOOR. */ X newsta_(prsvec_1.prso, 0, 0, 0, 0); X newsta_(oindex_1.gnome, 0, 0, 0, 0); X/* !VANISH GNOME. */ X findex_1.gnodrf = TRUE_; X return ret_val; X XL44100: X rspsub_(258, odo2); X/* !NO, LOSE OBJECT. */ X newsta_(prsvec_1.prso, 0, 0, 0, 0); X return ret_val; X XL44500: X rspeak_(259); X/* !NERVOUS GNOME. */ X if (! findex_1.gnomef) { X cevent_1.ctick[cindex_1.cevgno - 1] = 5; X } X/* !SCHEDULE BYEBYE. */ X findex_1.gnomef = TRUE_; X return ret_val; X X/* O29-- COKE BOTTLES */ X XL46000: X if (prsvec_1.prsa != vindex_1.throww && prsvec_1.prsa != vindex_1.mungw) { X X goto L10; X } X newsta_(prsvec_1.prso, 262, 0, 0, 0); X/* !MUNG BOTTLES. */ X return ret_val; X/* SOBJS, PAGE 11 */ X X X/* O30-- ROBOT */ X XL53000: X if (prsvec_1.prsa != vindex_1.givew) { X goto L53200; X } X/* !GIVE? */ X newsta_(prsvec_1.prso, 0, 0, 0, aindex_1.arobot); X/* !PUT ON ROBOT. */ X rspsub_(302, odo2); X return ret_val; X XL53200: X if (prsvec_1.prsa != vindex_1.mungw && prsvec_1.prsa != vindex_1.throww) { X X goto L10; X } X newsta_(oindex_1.robot, 285, 0, 0, 0); X/* !KILL ROBOT. */ X return ret_val; X X/* O31-- GRUE */ X XL56000: X if (prsvec_1.prsa != vindex_1.examiw) { X goto L56100; X } X/* !EXAMINE? */ X rspeak_(288); X return ret_val; X XL56100: X if (prsvec_1.prsa != vindex_1.findw) { X goto L10; X } X/* !FIND? */ X rspeak_(289); X return ret_val; X X} /* sobjs_ */ END_OF_FILE if test 21223 -ne `wc -c <'sobjs.c'`; then echo shar: \"'sobjs.c'\" unpacked with wrong size! fi # end of 'sobjs.c' fi echo shar: End of archive 7 \(of 12\). cp /dev/null ark7isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 12 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0