[comp.sources.games] v12i074: cdungeon - C language port of DECUS dungeon, Part07/12

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