# 2.11BSD#431 - /usr/src/new/PORT/dungeon/sobjs.F

       1: C SOBJS-	SIMPLE OBJECTS PROCESSOR
       2: C	OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
       3: C	MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
       4: C
       5: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
       6: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
       7: C WRITTEN BY R. M. SUPNIK
       8: C
       9: C DECLARATIONS
      10: C
      11:         LOGICAL FUNCTION SOBJS(RI,ARG)
      12:         IMPLICIT INTEGER (A-Z)
      13:         LOGICAL QOPEN
      14:         LOGICAL MOVETO,OPNCLS,LIT
      15:         LOGICAL QHERE,F
      16: #include "parser.h"
      17: #include "gamestate.h"
      18: #include "state.h"
      19: #include "rooms.h"
      20: #include "rflag.h"
      21: #include "rindex.h"
      22: #include "objects.h"
      23: #include "oflags.h"
      24: #include "oindex.h"
      25: #include "clock.h"
      26:
      27: #include "villians.h"
      28: #include "advers.h"
      29: #include "verbs.h"
      30: #include "flags.h"
      31: C
      32: C FUNCTIONS AND DATA
      33: C
      34:         QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
      35: C SOBJS, PAGE 2
      36: C
      37:         IF(PRSO.GT.220) GO TO 5
      38:         IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
      39: 5       IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
      40:         AV=AVEHIC(WINNER)
      41:         SOBJS=.TRUE.
      42: C
      43:         GO TO (1000,3000,4000,6000,7000,8000,9000,
      44: &        13000,14000,16000,17000,
      45: &        21000,23000,24000,27000,28000,29000,30000,
      46: &        31000,33000,34000,36000,37000,38000,
      47: &        41000,42000,43000,44000,46000,
      48: &        53000,56000)
      49: &               RI
      50:         CALL BUG(6,RI)
      51: C
      52: C RETURN HERE TO DECLARE FALSE RESULT
      53: C
      54: 10      SOBJS=.FALSE.
      55:         RETURN
      56: C SOBJS, PAGE 3
      57: C
      58: C O1--	GUNK FUNCTION
      59: C
      60: 1000    IF(OCAN(GUNK).EQ.0) GO TO 10
      61: C						!NOT INSIDE? F
      62:         CALL NEWSTA(GUNK,122,0,0,0)
      63: C						!FALLS APART.
      64:         RETURN
      65: C
      66: C O2--	TROPHY CASE
      67: C
      68: 3000    IF(PRSA.NE.TAKEW) GO TO 10
      69: C						!TAKE?
      70:         CALL RSPEAK(128)
      71: C						!CANT.
      72:         RETURN
      73: C
      74: C O3--	BOTTLE FUNCTION
      75: C
      76: 4000    IF(PRSA.NE.THROWW) GO TO 4100
      77: C						!THROW?
      78:         CALL NEWSTA(PRSO,129,0,0,0)
      79: C						!BREAKS.
      80:         RETURN
      81: C
      82: 4100    IF(PRSA.NE.MUNGW) GO TO 10
      83: C						!MUNG?
      84:         CALL NEWSTA(PRSO,131,0,0,0)
      85: C						!BREAKS.
      86:         RETURN
      87: C SOBJS, PAGE 4
      88: C
      89: C O4--	ROPE FUNCTION
      90: C
      91: 6000    IF(HERE.EQ.DOME) GO TO 6100
      92: C						!IN DOME?
      93:         DOMEF=.FALSE.
      94: C						!NO,
      95:         IF(PRSA.NE.UNTIEW) GO TO 6050
      96: C						!UNTIE?
      97:         CALL RSPEAK(134)
      98: C						!CANT
      99:         RETURN
     100: C
     101: 6050    IF(PRSA.NE.TIEW) GO TO 10
     102: C						!TIE?
     103:         CALL RSPEAK(135)
     104: C						!CANT TIE
     105:         RETURN
     106: C
     107: 6100    IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
     108:         IF(DOMEF) GO TO 6150
     109: C						!ALREADY TIED?
     110:         DOMEF=.TRUE.
     111: C						!NO, TIE IT.
     112:         OFLAG1(ROPE)=or(OFLAG1(ROPE),NDSCBT)
     113:         OFLAG2(ROPE)=or(OFLAG2(ROPE),CLMBBT)
     114:         CALL NEWSTA(ROPE,137,DOME,0,0)
     115:         RETURN
     116: C
     117: 6150    CALL RSPEAK(136)
     118: C						!DUMMY.
     119:         RETURN
     120: C
     121: 6200    IF(PRSA.NE.UNTIEW) GO TO 6300
     122: C						!UNTIE?
     123:         IF(DOMEF) GO TO 6250
     124: C						!TIED?
     125:         CALL RSPEAK(134)
     126: C						!NO, DUMMY.
     127:         RETURN
     128: C
     129: 6250    DOMEF=.FALSE.
     130: C						!YES, UNTIE IT.
     131:         OFLAG1(ROPE)=and(OFLAG1(ROPE), not(NDSCBT))
     132:         OFLAG2(ROPE)=and(OFLAG2(ROPE), not(CLMBBT))
     133:         CALL RSPEAK(139)
     134:         RETURN
     135: C
     136: 6300    IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400
     137: C						!DROP & UNTIED?
     138:         CALL NEWSTA(ROPE,140,MTORC,0,0)
     139: C						!YES, DROP.
     140:         RETURN
     141: C
     142: 6400    IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
     143:         CALL RSPEAK(141)
     144: C						!TAKE & TIED.
     145:         RETURN
     146: C
     147: C O5--	SWORD FUNCTION
     148: C
     149: 7000    IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
     150: &               SWDACT=.TRUE.
     151:         GO TO 10
     152: C
     153: C O6--	LANTERN
     154: C
     155: 8000    IF(PRSA.NE.THROWW) GO TO 8100
     156: C						!THROW?
     157:         CALL NEWSTA(LAMP,0,0,0,0)
     158: C						!KILL LAMP,
     159:         CALL NEWSTA(BLAMP,142,HERE,0,0)
     160: C						!REPLACE WITH BROKEN.
     161:         RETURN
     162: C
     163: 8100    IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
     164:         IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
     165:         GO TO 10
     166: C
     167: C O7--	RUG FUNCTION
     168: C
     169: 9000    IF(PRSA.NE.RAISEW) GO TO 9100
     170: C						!RAISE?
     171:         CALL RSPEAK(143)
     172: C						!CANT
     173:         RETURN
     174: C
     175: 9100    IF(PRSA.NE.TAKEW) GO TO 9200
     176: C						!TAKE?
     177:         CALL RSPEAK(144)
     178: C						!CANT
     179:         RETURN
     180: C
     181: 9200    IF(PRSA.NE.MOVEW) GO TO 9300
     182: C						!MOVE?
     183:         CALL RSPEAK(145+ORRUG)
     184:         ORRUG=1
     185:         OFLAG1(DOOR)=or(OFLAG1(DOOR),VISIBT)
     186:         RETURN
     187: C
     188: 9300    IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
     189: &               QOPEN(DOOR)) GO TO 10
     190:         CALL RSPEAK(345)
     191:         RETURN
     192: C SOBJS, PAGE 5
     193: C
     194: C O8--	SKELETON
     195: C
     196: 13000   I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
     197:         IF(I.NE.0) CALL RSPEAK(162)
     198: C						!IF ROBBED, SAY SO.
     199:         RETURN
     200: C
     201: C O9--	MIRROR
     202: C
     203: 14000   IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
     204:         MROOM=xor(HERE,1)
     205:         DO 14100 I=1,OLNT
     206: C						!INTERCHANGE OBJS.
     207:           IF(OROOM(I).EQ.HERE) OROOM(I)=-1
     208:           IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
     209:           IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
     210: 14100   CONTINUE
     211:         F=MOVETO(MROOM,WINNER)
     212:         CALL RSPEAK(163)
     213: C						!SHAKE WORLD.
     214:         RETURN
     215: C
     216: 14500   IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
     217: &               (PRSA.NE.EXAMIW)) GO TO 14600
     218:         I=164
     219: C						!MIRROR OK.
     220:         IF(MIRRMF) I=165
     221: C						!MIRROR DEAD.
     222:         CALL RSPEAK(I)
     223:         RETURN
     224: C
     225: 14600   IF(PRSA.NE.TAKEW) GO TO 14700
     226: C						!TAKE?
     227:         CALL RSPEAK(166)
     228: C						!JOKE.
     229:         RETURN
     230: C
     231: 14700   IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
     232:         I=167
     233: C						!MIRROR BREAKS.
     234:         IF(MIRRMF) I=168
     235: C						!MIRROR ALREADY BROKEN.
     236:         MIRRMF=.TRUE.
     237:         BADLKF=.TRUE.
     238:         CALL RSPEAK(I)
     239:         RETURN
     240: C SOBJS, PAGE 6
     241: C
     242: C O10--	DUMBWAITER
     243: C
     244: 16000   IF(PRSA.NE.RAISEW) GO TO 16100
     245: C						!RAISE?
     246:         IF(CAGETF) GO TO 16400
     247: C						!ALREADY AT TOP?
     248:         CALL NEWSTA(TBASK,175,TSHAF,0,0)
     249: C						!NO, RAISE BASKET.
     250:         CALL NEWSTA(FBASK,0,BSHAF,0,0)
     251:         CAGETF=.TRUE.
     252: C						!AT TOP.
     253:         RETURN
     254: C
     255: 16100   IF(PRSA.NE.LOWERW) GO TO 16200
     256: C						!LOWER?
     257:         IF(.NOT.CAGETF) GO TO 16400
     258: C						!ALREADY AT BOTTOM?
     259:         CALL NEWSTA(TBASK,176,BSHAF,0,0)
     260: C						!NO, LOWER BASKET.
     261:         CALL NEWSTA(FBASK,0,TSHAF,0,0)
     262:         CAGETF=.FALSE.
     263:         IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
     264: C						!IF DARK, DIE.
     265:         RETURN
     266: C
     267: 16200   IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
     268:         CALL RSPEAK(130)
     269: C						!WRONG BASKET.
     270:         RETURN
     271: C
     272: 16300   IF(PRSA.NE.TAKEW) GO TO 10
     273: C						!TAKE?
     274:         CALL RSPEAK(177)
     275: C						!JOKE.
     276:         RETURN
     277: C
     278: 16400   CALL RSPEAK(125+RND(3))
     279: C						!DUMMY.
     280:         RETURN
     281: C
     282: C O11--	GHOST FUNCTION
     283: C
     284: 17000   I=178
     285: C						!ASSUME DIRECT.
     286:         IF(PRSO.NE.GHOST) I=179
     287: C						!IF NOT, INDIRECT.
     288:         CALL RSPEAK(I)
     289:         RETURN
     290: C						!SPEAK AND EXIT.
     291: C SOBJS, PAGE 7
     292: C
     293: C O12--	TUBE
     294: C
     295: 21000   IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
     296:         CALL RSPEAK(186)
     297: C						!CANT PUT BACK IN.
     298:         RETURN
     299: C
     300: C O13--	CHALICE
     301: C
     302: 23000   IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
     303: &               (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
     304: &               (and(OFLAG2(THIEF),FITEBT).EQ.0).OR.
     305: &               .NOT. THFACT) GO TO 10
     306:         CALL RSPEAK(204)
     307: C						!CANT TAKE.
     308:         RETURN
     309: C
     310: C O14--	PAINTING
     311: C
     312: 24000   IF(PRSA.NE.MUNGW) GO TO 10
     313: C						!MUNG?
     314:         CALL RSPEAK(205)
     315: C						!DESTROY PAINTING.
     316:         OFVAL(PRSO)=0
     317:         OTVAL(PRSO)=0
     318:         ODESC1(PRSO)=207
     319:         ODESC2(PRSO)=206
     320:         RETURN
     321: C SOBJS, PAGE 8
     322: C
     323: C O15--	BOLT
     324: C
     325: 27000   IF(PRSA.NE.TURNW) GO TO 10
     326: C						!TURN BOLT?
     327:         IF(PRSI.NE.WRENC) GO TO 27500
     328: C						!WITH WRENCH?
     329:         IF(GATEF) GO TO 27100
     330: C						!PROPER BUTTON PUSHED?
     331:         CALL RSPEAK(210)
     332: C						!NO, LOSE.
     333:         RETURN
     334: C
     335: 27100   IF(LWTIDF) GO TO 27200
     336: C						!LOW TIDE NOW?
     337:         LWTIDF=.TRUE.
     338: C						!NO, EMPTY DAM.
     339:         CALL RSPEAK(211)
     340:         OFLAG2(COFFI)=and(OFLAG2(COFFI), not(SCRDBT))
     341:         OFLAG1(TRUNK)=or(OFLAG1(TRUNK),VISIBT)
     342:         RFLAG(RESER)=and(or(RFLAG(RESER),RLAND)
     343: &               ,not(RWATER+RSEEN))
     344:         RETURN
     345: C
     346: 27200   LWTIDF=.FALSE.
     347: C						!YES, FILL DAM.
     348:         CALL RSPEAK(212)
     349:         IF(QHERE(TRUNK,RESER))
     350: &               OFLAG1(TRUNK)=and(OFLAG1(TRUNK), not(VISIBT))
     351:         RFLAG(RESER)=and(or(RFLAG(RESER),RWATER) ,not(RLAND))
     352:         RETURN
     353: C
     354: 27500   CALL RSPSUB(299,ODI2)
     355: C						!NOT WITH THAT.
     356:         RETURN
     357: C
     358: C O16--	GRATING
     359: C
     360: 28000   IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
     361:         IF(GRUNLF) GO TO 28200
     362: C						!UNLOCKED?
     363:         CALL RSPEAK(214)
     364: C						!NO, LOCKED.
     365:         RETURN
     366: C
     367: 28200   I=215
     368: C						!UNLOCKED, VIEW FRM CLR.
     369:         IF(HERE.NE.CLEAR) I=216
     370: C						!VIEW FROM BELOW.
     371:         SOBJS=OPNCLS(GRATE,I,885)
     372: C						!OPEN/CLOSE.
     373:         RFLAG(MGRAT)=and(RFLAG(MGRAT), not(RLIGHT))
     374:         IF(QOPEN(GRATE)) RFLAG(MGRAT)=or(RFLAG(MGRAT),RLIGHT)
     375:         IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
     376: C						!IF DARK, DIE.
     377:         RETURN
     378: C
     379: C O17--	TRAP DOOR
     380: C
     381: 29000   IF(HERE.NE.LROOM) GO TO 29100
     382: C						!FROM LIVING ROOM?
     383:         SOBJS=OPNCLS(DOOR,218,219)
     384: C						!OPEN/CLOSE.
     385:         RETURN
     386: C
     387: 29100   IF(HERE.NE.CELLA) GO TO 10
     388: C						!FROM CELLAR?
     389:         IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
     390:         CALL RSPEAK(220)
     391: C						!CANT OPEN CLOSED DOOR.
     392:         RETURN
     393: C
     394: 29200   SOBJS=OPNCLS(DOOR,0,22)
     395: C						!NORMAL OPEN/CLOSE.
     396:         RETURN
     397: C
     398: C O18--	DURABLE DOOR
     399: C
     400: 30000   I=0
     401: C						!ASSUME NO APPL.
     402:         IF(PRSA.EQ.OPENW) I=221
     403: C						!OPEN?
     404:         IF(PRSA.EQ.BURNW) I=222
     405: C						!BURN?
     406:         IF(PRSA.EQ.MUNGW) I=223+RND(3)
     407: C						!MUNG?
     408:         IF(I.EQ.0) GO TO 10
     409:         CALL RSPEAK(I)
     410:         RETURN
     411: C
     412: C O19--	MASTER SWITCH
     413: C
     414: 31000   IF(PRSA.NE.TURNW) GO TO 10
     415: C						!TURN?
     416:         IF(PRSI.NE.SCREW) GO TO 31500
     417: C						!WITH SCREWDRIVER?
     418:         IF(QOPEN(MACHI)) GO TO 31600
     419: C						!LID UP?
     420:         CALL RSPEAK(226)
     421: C						!NO, ACTIVATE.
     422:         IF(OCAN(COAL).NE.MACHI) GO TO 31400
     423: C						!COAL INSIDE?
     424:         CALL NEWSTA(COAL,0,0,0,0)
     425: C						!KILL COAL,
     426:         CALL NEWSTA(DIAMO,0,0,MACHI,0)
     427: C						!REPLACE WITH DIAMOND.
     428:         RETURN
     429: C
     430: 31400   DO 31450 I=1,OLNT
     431: C						!KILL NONCOAL OBJECTS.
     432:           IF(OCAN(I).NE.MACHI) GO TO 31450
     433: C						!INSIDE MACHINE?
     434:           CALL NEWSTA(I,0,0,0,0)
     435: C						!KILL OBJECT AND CONTENTS.
     436:           CALL NEWSTA(GUNK,0,0,MACHI,0)
     437: C						!REDUCE TO GUNK.
     438: 31450   CONTINUE
     439:         RETURN
     440: C
     441: 31500   CALL RSPSUB(300,ODI2)
     442: C						!CANT TURN WITH THAT.
     443:         RETURN
     444: C
     445: 31600   CALL RSPEAK(227)
     446: C						!LID IS UP.
     447:         RETURN
     448: C SOBJS, PAGE 9
     449: C
     450: C O20--	LEAK
     451: C
     452: 33000   IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
     453: &               GO TO 10
     454:         IF(PRSI.NE.PUTTY) GO TO 33100
     455: C						!WITH PUTTY?
     456:         RVMNT=-1
     457: C						!DISABLE LEAK.
     458:         CTICK(CEVMNT)=0
     459:         CALL RSPEAK(577)
     460:         RETURN
     461: C
     462: 33100   CALL RSPSUB(301,ODI2)
     463: C						!CANT WITH THAT.
     464:         RETURN
     465: C
     466: C O21--	DROWNING BUTTONS
     467: C
     468: 34000   IF(PRSA.NE.PUSHW) GO TO 10
     469: C						!PUSH?
     470:         GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
     471:         GO TO 10
     472: C						!NOT A BUTTON.
     473: C
     474: 34100   RFLAG(HERE)=xor(RFLAG(HERE),RLIGHT)
     475:         I=230
     476:         IF(and(RFLAG(HERE),RLIGHT).NE.0) I=231
     477:         CALL RSPEAK(I)
     478:         RETURN
     479: C
     480: 34200   GATEF=.TRUE.
     481: C						!RELEASE GATE.
     482:         CALL RSPEAK(232)
     483:         RETURN
     484: C
     485: 34300   GATEF=.FALSE.
     486: C						!INTERLOCK GATE.
     487:         CALL RSPEAK(232)
     488:         RETURN
     489: C
     490: 34400   IF(RVMNT.NE.0) GO TO 34500
     491: C						!LEAK ALREADY STARTED?
     492:         CALL RSPEAK(233)
     493: C						!NO, START LEAK.
     494:         RVMNT=1
     495:         CTICK(CEVMNT)=-1
     496:         RETURN
     497: C
     498: 34500   CALL RSPEAK(234)
     499: C						!BUTTON JAMMED.
     500:         RETURN
     501: C
     502: C O22--	INFLATABLE BOAT
     503: C
     504: 36000   IF(PRSA.NE.INFLAW) GO TO 10
     505: C						!INFLATE?
     506:         IF(OROOM(IBOAT).NE.0) GO TO 36100
     507: C						!IN ROOM?
     508:         CALL RSPEAK(235)
     509: C						!NO, JOKE.
     510:         RETURN
     511: C
     512: 36100   IF(PRSI.NE.PUMP) GO TO 36200
     513: C						!WITH PUMP?
     514:         CALL NEWSTA(IBOAT,0,0,0,0)
     515: C						!KILL DEFL BOAT,
     516:         CALL NEWSTA(RBOAT,236,HERE,0,0)
     517: C						!REPL WITH INF.
     518:         DEFLAF=.FALSE.
     519:         RETURN
     520: C
     521: 36200   I=237
     522: C						!JOKES.
     523:         IF(PRSI.NE.LUNGS) I=303
     524:         CALL RSPSUB(I,ODI2)
     525:         RETURN
     526: C
     527: C O23--	DEFLATED BOAT
     528: C
     529: 37000   IF(PRSA.NE.INFLAW) GO TO 37100
     530: C						!INFLATE?
     531:         CALL RSPEAK(238)
     532: C						!JOKE.
     533:         RETURN
     534: C
     535: 37100   IF(PRSA.NE.PLUGW) GO TO 10
     536: C						!PLUG?
     537:         IF(PRSI.NE.PUTTY) GO TO 33100
     538: C						!WITH PUTTY?
     539:         CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
     540:         CALL NEWSTA(DBOAT,0,0,0,0)
     541: C						!KILL DEFL BOAT, REPL.
     542:         RETURN
     543: C SOBJS, PAGE 10
     544: C
     545: C O24--	RUBBER BOAT
     546: C
     547: 38000   IF(ARG.NE.0) GO TO 10
     548: C						!DISMISS READIN, OUT.
     549:         IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
     550:         CALL NEWSTA(RBOAT,0,0,0,0)
     551: C						!KILL INFL BOAT,
     552:         CALL NEWSTA(DBOAT,240,HERE,0,0)
     553: C						!REPL WITH DEAD.
     554:         DEFLAF=.TRUE.
     555:         RETURN
     556: C
     557: 38100   IF(PRSA.NE.INFLAW) GO TO 38200
     558: C						!INFLATE?
     559:         CALL RSPEAK(367)
     560: C						!YES, JOKE.
     561:         RETURN
     562: C
     563: 38200   IF(PRSA.NE.DEFLAW) GO TO 10
     564: C						!DEFLATE?
     565:         IF(AV.EQ.RBOAT) GO TO 38300
     566: C						!IN BOAT?
     567:         IF(OROOM(RBOAT).EQ.0) GO TO 38400
     568: C						!ON GROUND?
     569:         CALL NEWSTA(RBOAT,0,0,0,0)
     570: C						!KILL INFL BOAT,
     571:         CALL NEWSTA(IBOAT,241,HERE,0,0)
     572: C						!REPL WITH DEFL.
     573:         DEFLAF=.TRUE.
     574:         RETURN
     575: C
     576: 38300   CALL RSPEAK(242)
     577: C						!IN BOAT.
     578:         RETURN
     579: C
     580: 38400   CALL RSPEAK(243)
     581: C						!NOT ON GROUND.
     582:         RETURN
     583: C
     584: C O25--	BRAIDED ROPE
     585: C
     586: 41000   IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
     587: &               ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
     588: &               GO TO 41500
     589:         BTIEF=PRSI
     590: C						!RECORD LOCATION.
     591:         CFLAG(CEVBAL)=.FALSE.
     592: C						!STALL ASCENT.
     593:         CALL RSPEAK(248)
     594:         RETURN
     595: C
     596: 41500   IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
     597:         IF(BTIEF.NE.0) GO TO 41600
     598: C						!TIED UP?
     599:         CALL RSPEAK(249)
     600: C						!NO, JOKE.
     601:         RETURN
     602: C
     603: 41600   CALL RSPEAK(250)
     604:         BTIEF=0
     605: C						!UNTIE.
     606:         CTICK(CEVBAL)=3
     607: C						!RESTART CLOCK.
     608:         CFLAG(CEVBAL)=.TRUE.
     609:         RETURN
     610: C
     611: C O26--	SAFE
     612: C
     613: 42000   I=0
     614: C						!ASSUME UNPROCESSED.
     615:         IF(PRSA.EQ.TAKEW) I=251
     616: C						!TAKE?
     617:         IF((PRSA.EQ.OPENW).AND.SAFEF) I=253
     618: C						!OPEN AFTER BLAST?
     619:         IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254
     620: C						!OPEN BEFORE BLAST?
     621:         IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253
     622: C						!CLOSE AFTER?
     623:         IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
     624:         IF(I.EQ.0) GO TO 10
     625:         CALL RSPEAK(I)
     626:         RETURN
     627: C
     628: C O27--	FUSE
     629: C
     630: 43000   IF(PRSA.NE.BURNW) GO TO 10
     631: C						!BURN?
     632:         CALL RSPEAK(256)
     633:         CTICK(CEVFUS)=2
     634: C						!START COUNTDOWN.
     635:         RETURN
     636: C
     637: C O28--	GNOME
     638: C
     639: 44000   IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
     640:         IF(OTVAL(PRSO).EQ.0) GO TO 44100
     641: C						!TREASURE?
     642:         CALL RSPSUB(257,ODO2)
     643: C						!YES, GET DOOR.
     644:         CALL NEWSTA(PRSO,0,0,0,0)
     645:         CALL NEWSTA(GNOME,0,0,0,0)
     646: C						!VANISH GNOME.
     647:         GNODRF=.TRUE.
     648:         RETURN
     649: C
     650: 44100   CALL RSPSUB(258,ODO2)
     651: C						!NO, LOSE OBJECT.
     652:         CALL NEWSTA(PRSO,0,0,0,0)
     653:         RETURN
     654: C
     655: 44500   CALL RSPEAK(259)
     656: C						!NERVOUS GNOME.
     657:         IF(.NOT.GNOMEF) CTICK(CEVGNO)=5
     658: C						!SCHEDULE BYEBYE.
     659:         GNOMEF=.TRUE.
     660:         RETURN
     661: C
     662: C O29--	COKE BOTTLES
     663: C
     664: 46000   IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
     665:         CALL NEWSTA(PRSO,262,0,0,0)
     666: C						!MUNG BOTTLES.
     667:         RETURN
     668: C SOBJS, PAGE 11
     669: C
     670: C
     671: C O30--	ROBOT
     672: C
     673: 53000   IF(PRSA.NE.GIVEW) GO TO 53200
     674: C						!GIVE?
     675:         CALL NEWSTA(PRSO,0,0,0,AROBOT)
     676: C						!PUT ON ROBOT.
     677:         CALL RSPSUB(302,ODO2)
     678:         RETURN
     679: C
     680: 53200   IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
     681:         CALL NEWSTA(ROBOT,285,0,0,0)
     682: C						!KILL ROBOT.
     683:         RETURN
     684: C
     685: C O31--	GRUE
     686: C
     687: 56000   IF(PRSA.NE.EXAMIW) GO TO 56100
     688: C						!EXAMINE?
     689:         CALL RSPEAK(288)
     690:         RETURN
     691: C
     692: 56100   IF(PRSA.NE.FINDW) GO TO 10
     693: C						!FIND?
     694:         CALL RSPEAK(289)
     695:         RETURN
     696: C
     697:         END

Last modified: 1988-10-21 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 648 |