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: 1927
Valid CSS Valid XHTML 1.0 Strict