1 C Object processors for DUNGEON
   2 C
   3 C COPYRIGHT 1980, 1990, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA.
   4 C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
   5 C WRITTEN BY R. M. SUPNIK
   6 C
   7 C 29-Sep-94         RMS       Fixed bugs in KILL MASTER, palantir, dial button,
   8 C                             well, slide, bat, global brochure, granite wall,
   9 C                             bottle, leaves, broken lamp, beam, robot, thief,
  10 C                             troll, me, subscripting, object substitution.
  11 C                             Added features to heads, coke bottles, balloon,
  12 C                             bucket, stove.
  13 C 30-Jan-94         RMS       Fixed bugs from MS-DOS port.
  14 C 25-Jan-94         RMS       Added ground = sand at sandy beach.
  15 C 30-Jun-92         RMS       Changed file names to lower case.
  16 C
  17 C OAPPLI- Object action routines
  18 C
  19 C Declarations
  20 C
  21           LOGICAL FUNCTION OAPPLI(RI,ARG)
  22           IMPLICIT INTEGER (A-Z)
  23           %include dparam
  24           LOGICAL SOBJS,NOBJS
  25           LOGICAL QOPEN,QON,LIT,WASLIT
  26           LOGICAL MOVETO,RMDESC,CLOCKD
  27           LOGICAL THIEFP,CYCLOP,TROLLP,BALLOP
  28           LOGICAL QEMPTY,F,OPNCLS
  29           PARAMETER (MXSMP=99)
  30 C
  31 C Functions and data
  32 C
  33 C old     QOPEN(R)=(OFLAG2(R).AND.OPENBT).NE.0
  34           QOPEN(R)=AND(OFLAG2(R),OPENBT).NE.0
  35 C old     QON(R)=(OFLAG1(R).AND.ONBT).NE.0
  36           QON(R)=AND(OFLAG1(R),ONBT).NE.0
  37 C
  38           IF(RI.EQ.0) GO TO 10                              ! zero is false app.
  39           IF(RI.LE.MXSMP) GO TO 100               ! simple object?
  40           ODO2=0
  41           ODI2=0
  42           IF((PRSO.NE.0).AND.(PRSO.LE.OMAX)) ODO2=ODESC2(PRSO)
  43           IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  44           AV=AVEHIC(WINNER)
  45           FLOBTS=FLAMBT+LITEBT+ONBT
  46           OAPPLI=.TRUE.
  47           WASLIT=LIT(HERE)
  48 C
  49           GO TO (2000,5000,10000,11000,12000,15000,18000,
  50           & 19000,20000,22000,25000,26000,32000,35000,39000,40000,
  51           & 45000,47000,48000,49000,50000,51000,52000,54000,55000,
  52           & 56000,57000,58000,59000,60000,61000,62000),
  53           &         (RI-MXSMP)
  54           CALL BUG(6,RI)
  55 C
  56 C Return here to declare false result.
  57 C
  58 10        OAPPLI=.FALSE.
  59           RETURN
  60 C
  61 C Return here to test for light source change.
  62 C
  63 50        IF(WASLIT.AND..NOT.LIT(HERE)) CALL RSPEAK(406)
  64           RETURN
  65 C
  66 C Simple objects, processed externally.
  67 C
  68 100       IF(RI.LT.32) OAPPLI=SOBJS(RI,ARG)
  69           IF(RI.GE.32) OAPPLI=NOBJS(RI,ARG)
  70           RETURN
  71 C page
  72 C OAPPLI, PAGE 3
  73 C
  74 C O100--  Machine
  75 C
  76 2000      IF(HERE.NE.MMACH) GO TO 10              ! not here? f
  77           OAPPLI=OPNCLS(MACHI,123,124)            ! handle opn/cls.
  78           RETURN
  79 C
  80 C O101--  Water
  81 C
  82 5000      IF(PRSA.NE.GTHROW) GO TO 5025           ! go through?
  83           CALL RSPEAK(331+RND(3))                           ! joke.
  84           RETURN
  85 C
  86 5025      IF((PRSO.EQ.WATER).OR.(PRSO.EQ.GWATE)) GO TO 5100
  87           CALL RSPEAK(561)                        ! water is ind obj,
  88           RETURN                                            ! punt.
  89 C
  90 5100      IF(PRSA.NE.TAKEW) GO TO 5400            ! take water?
  91           IF(PRSI.NE.0) GO TO 5200                ! from x?
  92           IF((OADV(BOTTL).EQ.WINNER).AND.(OCAN(PRSO).NE.BOTTL))
  93           &         GO TO 5500                              ! take, have bottle -> put.
  94           IF(OCAN(PRSO).NE.BOTTL) GO TO 5150      ! water in bottle?
  95           IF(OADV(BOTTL).NE.WINNER) GO TO 5125    ! already have bottle?
  96           CALL RSPEAK(103)                        ! yes, already have water.
  97           RETURN
  98 C
  99 5125      PRSO=BOTTL                                        ! take bottle.
 100           GO TO 10                                ! do normal take.
 101 C
 102 5150      IF(OCAN(PRSO).EQ.0) GO TO 5300                    ! if not inside, take.
 103           PRSI=OCAN(PRSO)                                   ! make into take from.
 104           GO TO 5250                                        ! check for open.
 105 C
 106 5200      IF(OCAN(PRSO).NE.PRSI) GO TO 5250       ! is it inside?
 107           CALL RSPEAK(1038)                       ! not in that.
 108           RETURN
 109 C
 110 5250      IF(QOPEN(PRSI)) GO TO 5300              ! is it open?
 111           CALL RSPSUB(525,ODI2)                             ! no, not open.
 112           RETURN
 113 C
 114 5300      IF(AV.NE.0) GO TO 5800                            ! if in vehicle, put there.
 115           I=615                                             ! assume player.
 116           IF(WINNER.NE.PLAYER) I=1081
 117           CALL RSPEAK(I)                                    ! slips thru fingers.
 118           RETURN
 119 C
 120 5400      IF(PRSA.NE.PUTW) GO TO 5700             ! put water in x?
 121           IF(PRSI.EQ.BOTTL) GO TO 5500            ! in bottle?
 122 C old     IF(((OFLAG2(PRSI).AND.VEHBT).NE.0).OR.
 123 C old     &  ((AV.NE.0).AND.(PRSI.EQ.AV))) GO TO 5450       ! in veh?
 124           IF(((AND(OFLAG2(PRSI),VEHBT)).NE.0).OR.
 125           &  ((AV.NE.0).AND.(PRSI.EQ.AV))) GO TO 5450       ! in veh?
 126           CALL RSPSUB(297,ODI2)                             ! wont go elsewhere.
 127           CALL NEWSTA(PRSO,0,0,0,0)               ! vanish water.
 128           RETURN
 129 C
 130 5450      CALL NEWSTA(WATER,0,0,PRSI,0)           ! water into vehicle.
 131           CALL RSPSUB(296,ODESC2(PRSI))           ! describe.
 132           RETURN
 133 C
 134 5500      IF(QOPEN(BOTTL)) GO TO 5550             ! bottle open?
 135           CALL RSPEAK(612)                        ! no, lose.
 136           RETURN
 137 C
 138 5550      IF(QEMPTY(BOTTL)) GO TO 5600            ! open, empty?
 139           CALL RSPEAK(613)                        ! no, already full.
 140           RETURN
 141 C
 142 5600      CALL NEWSTA(WATER,614,0,BOTTL,0)        ! take water to bottle.
 143           RETURN
 144 C
 145 5700      IF((PRSA.NE.DROPW).AND.(PRSA.NE.POURW))
 146           &         GO TO 5900                              ! drop, pour?
 147           IF(AV.NE.0) GO TO 5800                            ! into vehicle?
 148           CALL NEWSTA(PRSO,133,0,0,0)             ! no, vanishes.
 149           RETURN
 150 C
 151 5800      CALL NEWSTA(WATER,0,0,AV,0)             ! water into his vehicle.
 152           CALL RSPSUB(296,ODESC2(AV))             ! describe.
 153           RETURN
 154 C
 155 5900      IF(PRSA.NE.THROWW) GO TO 10             ! last chance, throw?
 156           CALL NEWSTA(PRSO,132,0,0,0)             ! vanishes.
 157           RETURN
 158 C page
 159 C OAPPLI, PAGE 4
 160 C
 161 C O102--  Leaf pile
 162 C
 163 10000     IF(PRSA.NE.BURNW) GO TO 10500           ! burn?
 164           IF(QOPEN(GRATE).OR.(RVCLR.NE.0)) GO TO 10050
 165           RVCLR=1                                           ! leaves moved.
 166           CALL NEWSTA(GRATE,30,HERE,0,0)                    ! grating appears.
 167 10050     IF(OADV(PRSO).EQ.PLAYER) GO TO 10100    ! was he carrying?
 168           CALL NEWSTA(LEAVE,158,0,0,0)            ! no, burn leaves.
 169           RETURN
 170 C
 171 10100     CALL NEWSTA(LEAVE,0,HERE,0,0)           ! drop leaves.
 172           IF(HERE.EQ.MTREE) CALL NEWSTA(LEAVE,0,FORE3,0,0)
 173           CALL JIGSUP(159)                        ! burn him.
 174           RETURN
 175 C
 176 10500     IF(PRSA.NE.MOVEW) GO TO 10600           ! move?
 177           CALL RSPEAK(2)                                    ! done.
 178 10550     IF(QOPEN(GRATE).OR.(RVCLR.NE.0)) RETURN ! done before?
 179           RVCLR=1                                           ! leaves moved.
 180           CALL NEWSTA(GRATE,30,HERE,0,0)                    ! grating appears.
 181           RETURN
 182 C
 183 10600     IF(PRSA.NE.TAKEW) GO TO 10700           ! take?
 184           OAPPLI=.FALSE.                                    ! don't handle here.
 185           GO TO 10550                                       ! make grate visible.
 186 C
 187 10700     IF((PRSA.NE.LOOKUW).OR.QOPEN(GRATE).OR.(RVCLR.NE.0)) GO TO 10
 188           CALL RSPEAK(344)                        ! look under?
 189           RETURN
 190 C
 191 C O103--  Troll, done externally.
 192 C
 193 11000     OAPPLI=TROLLP(ARG)                      ! troll processor.
 194           GO TO 50                                ! go see if now dark.
 195 C
 196 C O104--  Rusty knife.
 197 C
 198 12000     IF(PRSA.NE.TAKEW) GO TO 12100           ! take?
 199           IF(OADV(SWORD).EQ.WINNER) CALL RSPEAK(160) ! pulse sword.
 200           GO TO 10
 201 C
 202 12100     IF((((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW)).OR.
 203           &         (PRSI.NE.RKNIF)).AND.
 204           &  (((PRSA.NE.SWINGW).AND.(PRSA.NE.THROWW)).OR.
 205           &         (PRSO.NE.RKNIF))) GO TO 10
 206           CALL NEWSTA(RKNIF,0,0,0,0)              ! kill knife.
 207           CALL JIGSUP(161)                        ! kill him.
 208           RETURN
 209 C page
 210 C OAPPLI, PAGE 5
 211 C
 212 C O105--  Glacier
 213 C
 214 15000     IF(PRSA.NE.THROWW) GO TO 15500                    ! throw?
 215           IF(PRSO.NE.TORCH) GO TO 15400           ! torch?
 216           CALL NEWSTA(ICE,169,0,0,0)              ! melt ice.
 217           ODESC1(TORCH)=174                       ! mung torch.
 218           ODESC2(TORCH)=173
 219 C old     OFLAG1(TORCH)=OFLAG1(TORCH).AND. .NOT.FLOBTS
 220           OFLAG1(TORCH)=AND (OFLAG1(TORCH), COMPL(FLOBTS))
 221           CALL NEWSTA(TORCH,0,STREA,0,0)                    ! move torch.
 222           GLACRF=.TRUE.                                     ! glacier gone.
 223           IF(.NOT.LIT(HERE)) CALL RSPEAK(170)     ! in dark?
 224           RETURN
 225 C
 226 15400     CALL RSPEAK(171)                        ! joke if not torch.
 227           GO TO 10                                ! don't handle.
 228 C
 229 15500     IF((PRSA.NE.MELTW).OR.(PRSO.NE.ICE)) GO TO 10
 230 C old     IF((OFLAG1(PRSI).AND.FLOBTS).EQ.FLOBTS) GO TO 15600
 231           IF((AND(OFLAG1(PRSI),FLOBTS)).EQ.FLOBTS) GO TO 15600
 232           CALL RSPSUB(298,ODI2)                             ! cant melt with that.
 233           RETURN
 234 C
 235 15600     GLACMF=.TRUE.                                     ! partial melt.
 236           IF(PRSI.NE.TORCH) GO TO 15700           ! melt with torch?
 237           ODESC1(TORCH)=174                       ! mung torch.
 238           ODESC2(TORCH)=173
 239 C old     OFLAG1(TORCH)=OFLAG1(TORCH).AND. .NOT.FLOBTS
 240           OFLAG1(TORCH)=AND(OFLAG1(TORCH), COMPL(FLOBTS))
 241 15700     CALL JIGSUP(172)                        ! drown.
 242           RETURN
 243 C
 244 C O106--  Black book
 245 C
 246 18000     IF(PRSA.NE.OPENW) GO TO 18100           ! open?
 247           CALL RSPEAK(180)                        ! joke.
 248           RETURN
 249 C
 250 18100     IF(PRSA.NE.CLOSEW) GO TO 18200                    ! close?
 251           CALL RSPEAK(181)
 252           RETURN
 253 C
 254 18200     IF(PRSA.NE.BURNW) GO TO 10              ! burn?
 255           CALL NEWSTA(BOOK,0,0,0,0)               ! vanish book.
 256           CALL JIGSUP(182)                        ! fatal joke.
 257           RETURN
 258 C page
 259 C OAPPLI, PAGE 6
 260 C
 261 C O107--  Candles
 262 C
 263 19000     IF(ORCAND.NE.0) GO TO 19100             ! first ref?
 264           ORCAND=1                                ! yes, candles are
 265           CFLAG(CEVCND)=.TRUE.
 266           CTICK(CEVCND)=50                        ! burning when seen.
 267 C
 268 19100     IF(PRSI.EQ.CANDL) GO TO 10              ! ignore ind refs.
 269           IF(PRSA.NE.TRNOFW) GO TO 19200                    ! turn off?
 270           I=513                                             ! assume off.
 271           IF(QON(CANDL)) I=514                              ! if on, different.
 272           CFLAG(CEVCND)=.FALSE.                             ! disable countdown.
 273 C old     OFLAG1(CANDL)=OFLAG1(CANDL).AND. .NOT.ONBT
 274           OFLAG1(CANDL)=AND(OFLAG1(CANDL), COMPL(ONBT))
 275           CALL RSPEAK(I)
 276           GO TO 50                                ! go see if now dark.
 277 C
 278 19200     IF((PRSA.NE.BURNW).AND.(PRSA.NE.TRNONW)) GO TO 10
 279 C old     IF((OFLAG1(CANDL).AND.LITEBT).NE.0) GO TO 19300
 280           IF((AND(OFLAG1(CANDL),LITEBT)).NE.0) GO TO 19300
 281           CALL RSPEAK(515)                        ! candles too short.
 282           RETURN
 283 C
 284 19300     IF(PRSI.NE.0) GO TO 19400               ! any flame?
 285           CALL RSPEAK(516)                        ! no, lose.
 286           CALL ORPHAN(-1,ACT,PREP1,CANDL,2,' ',0,0) ! orphan "light candle with"
 287           PRSWON=.FALSE.
 288           PRSCON=0
 289           RETURN
 290 C
 291 19400     IF((PRSI.NE.MATCH).OR. .NOT.QON(MATCH)) GO TO 19500
 292           I=517                                             ! assume off.
 293           IF(QON(CANDL)) I=518                              ! if on, joke.
 294 C old     OFLAG1(CANDL)=OFLAG1(CANDL).OR.ONBT     ! lite candles.
 295           OFLAG1(CANDL)=OR(OFLAG1(CANDL),ONBT)    ! lite candles.
 296           CFLAG(CEVCND)=.TRUE.                              ! resume countdown.
 297           CALL RSPEAK(I)
 298           RETURN
 299 C
 300 19500     IF((PRSI.NE.TORCH).OR. .NOT.QON(TORCH)) GO TO 19600
 301           IF(QON(CANDL)) GO TO 19700              ! already on?
 302           CALL NEWSTA(CANDL,521,0,0,0)            ! no, vaporize.
 303           RETURN
 304 C
 305 19600     CALL RSPEAK(519)                        ! cant light with that.
 306           RETURN
 307 C
 308 19700     CALL RSPEAK(520)                        ! already on.
 309           RETURN
 310 C
 311 C O108--  Matches
 312 C
 313 20000     IF((PRSA.NE.TRNONW).OR.(PRSO.NE.MATCH)) GO TO 20500
 314           IF(ORMTCH.NE.0) GO TO 20100             ! any matches left?
 315           CALL RSPEAK(183)                        ! no, lose.
 316           RETURN
 317 C
 318 20100     ORMTCH=ORMTCH-1                                   ! decrement no matches.
 319 C old     OFLAG1(MATCH)=OFLAG1(MATCH).OR.FLOBTS
 320           OFLAG1(MATCH)=OR(OFLAG1(MATCH),FLOBTS)
 321           CFLAG(CEVMAT)=.TRUE.
 322           CTICK(CEVMAT)=2                                   ! countdown.
 323           CALL RSPEAK(184)
 324           RETURN
 325 C
 326 C old 20500         IF((PRSA.NE.TRNOFW).OR.((OFLAG1(MATCH).AND.ONBT).EQ.0))
 327 C old     &         GO TO 10                      ! extinguish?
 328 20500     IF((PRSA.NE.TRNOFW).OR.((AND(OFLAG1(MATCH),ONBT)).EQ.0))
 329           &         GO TO 10                      ! extinguish?
 330 C         OFLAG1(MATCH)=OFLAG1(MATCH).AND. .NOT.FLOBTS
 331           OFLAG1(MATCH)=AND(OFLAG1(MATCH), COMPL(FLOBTS))
 332           CTICK(CEVMAT)=0
 333           CALL RSPEAK(185)
 334           GO TO 50                                ! go see if now dark.
 335 C
 336 C O109--  Cyclops, processed externally.
 337 C
 338 22000     OAPPLI=CYCLOP(ARG)                      ! cyclops
 339           GO TO 50                                ! go see if now dark.
 340 C
 341 C O110--  Thief, processed externally.
 342 C
 343 25000     OAPPLI=THIEFP(ARG)
 344           GO TO 50                                ! go see if now dark.
 345 C
 346 C O111--  Window
 347 C
 348 26000     OAPPLI=OPNCLS(WINDO,208,209)            ! open/cls window.
 349           RETURN
 350 C
 351 C O112--  Pile of bodies
 352 C
 353 32000     IF(PRSA.NE.TAKEW) GO TO 32500           ! take?
 354           CALL RSPEAK(228)                        ! cant.
 355           RETURN
 356 C
 357 32500     IF((PRSA.NE.BURNW).AND.(PRSA.NE.MUNGW)) GO TO 10
 358           IF(ONPOLF) RETURN                       ! burn or mung?
 359           ONPOLF=.TRUE.                                     ! set head on pole.
 360           CALL NEWSTA(HPOLE,0,LLD2,0,0)
 361           CALL JIGSUP(229)                        ! beheaded.
 362           RETURN
 363 C
 364 C O113--  Vampire bat
 365 C
 366 35000     CALL RSPEAK(50)                                   ! time to fly, jack.
 367           F=MOVETO(BATDRP(RND(9)+1),WINNER)       ! select random dest.
 368           F=RMDESC(0)
 369           PRSCON=0                                ! disable parser.
 370           RETURN
 371 C page
 372 C OAPPLI, PAGE 7
 373 C
 374 C O114--  Stick
 375 C
 376 39000     IF(PRSA.NE.WAVEW) GO TO 10              ! wave?
 377           IF(HERE.EQ.MRAIN) GO TO 39500           ! on rainbow?
 378           IF((HERE.EQ.POG).OR.(HERE.EQ.FALLS)) GO TO 39200
 379           CALL RSPEAK(244)                        ! nothing happens.
 380           RETURN
 381 C
 382 C old 39200         OFLAG1(POT)=OFLAG1(POT).OR.VISIBT       ! make gold visible.
 383 39200     OFLAG1(POT)=OR(OFLAG1(POT),VISIBT)      ! make gold visible.
 384           RAINBF=.NOT. RAINBF                     ! complement rainbow.
 385           I=245                                             ! assume off.
 386           IF(RAINBF) I=246                        ! if on, solid.
 387           CALL RSPEAK(I)                                    ! describe.
 388           RETURN
 389 C
 390 39500     RAINBF=.FALSE.                                    ! on rainbow,
 391           CALL JIGSUP(247)                        ! take a fall.
 392           RETURN
 393 C
 394 C O115--  Balloon, handled externally.
 395 C
 396 40000     OAPPLI=BALLOP(ARG)
 397           RETURN
 398 C
 399 C O116--  Heads
 400 C
 401 45000     IF(PRSA.NE.HELLOW) GO TO 45100                    ! hello heads?
 402           CALL RSPEAK(633)                        ! truly bizarre.
 403           RETURN
 404 C
 405 45100     IF((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW).AND.
 406           &  (PRSA.NE.RUBW).AND.(PRSA.NE.OPENW).AND.
 407           &  (PRSA.NE.TAKEW).AND.(PRSA.NE.BURNW).AND.(PRSA.NE.SPINW).AND.
 408           &  (PRSA.NE.ATTACW).AND.(PRSA.NE.KICKW)) GO TO 10
 409           CALL RSPEAK(260)                        ! bad news for player
 410           I=ROBADV(WINNER,0,LCASE,0)+ROBRM(HERE,100,0,LCASE,0)
 411           IF(I.NE.0) CALL NEWSTA(LCASE,0,LROOM,0,0) ! if robbed, make large case.
 412           CALL JIGSUP(261)                        ! kill him.
 413           RETURN
 414 C page
 415 C OAPPLI, PAGE 8
 416 C
 417 C O117--  Sphere
 418 C
 419 47000     IF(CAGESF.OR.(PRSA.NE.TAKEW)) GO TO 47600 ! take?
 420           IF(WINNER.NE.PLAYER) GO TO 47500        ! robot take?
 421           CALL RSPEAK(263)                        ! no, drop cage.
 422           IF(OROOM(ROBOT).NE.HERE) GO TO 47200    ! robot here?
 423           F=MOVETO(CAGED,WINNER)                            ! yes, move into cage.
 424           CALL NEWSTA(ROBOT,0,CAGED,0,0)                    ! move robot.
 425           AROOM(AROBOT)=CAGED
 426 C old     OFLAG1(ROBOT)=OFLAG1(ROBOT).OR.NDSCBT   ! don't describe robot.
 427           OFLAG1(ROBOT)=OR(OFLAG1(ROBOT),NDSCBT)  ! don't describe robot.
 428           CFLAG(CEVSPH)=.TRUE.
 429           CTICK(CEVSPH)=10                        ! get out in 10 or else.
 430           RETURN
 431 C
 432 47200     CALL NEWSTA(SPHER,0,0,0,0)              ! you're dead.
 433 C old     RFLAG(CAGER)=RFLAG(CAGER).OR.RMUNG      ! mung cage room.
 434           RFLAG(CAGER)=OR(RFLAG(CAGER),RMUNG)     ! mung cage room.
 435           RDESC1(CAGER)=147
 436           CALL JIGSUP(148)                        ! mung player.
 437           RETURN
 438 C
 439 47500     CALL NEWSTA(SPHER,0,0,0,0)              ! robot tried,
 440           CALL NEWSTA(ROBOT,264,0,0,0)            ! kill him.
 441           CALL NEWSTA(CAGE,0,HERE,0,0)            ! insert mangled cage.
 442           GO TO 50                                ! go see if now dark.
 443 C
 444 47600     IF(PRSA.NE.LOOKIW) GO TO 10             ! look in?
 445           OAPPLI=NOBJS(OACTIO(PALAN),ARG)                   ! do palantir function.
 446           RETURN
 447 C
 448 C O118--  Geometrical buttons
 449 C
 450 48000     IF(PRSA.NE.PUSHW) GO TO 10              ! push?
 451           I=PRSO-SQBUT+1                                    ! get button index.
 452           IF((I.LE.0).OR.(I.GE.4)) GO TO 10       ! a button?
 453           IF(WINNER.NE.PLAYER) GO TO (48100,48200,48300),I
 454           CALL JIGSUP(265)                        ! you pushed, you die.
 455           RETURN
 456 C
 457 48100     I=267                                             ! square, speed up.
 458           IF(CAROZF) I=266
 459           CAROZF=.TRUE.
 460           CALL RSPEAK(I)
 461           RETURN
 462 C
 463 48200     I=266                                             ! round, slow down.
 464           IF(CAROZF) I=268
 465           CAROZF=.FALSE.
 466           CALL RSPEAK(I)
 467           RETURN
 468 C
 469 48300     CAROFF=.NOT.CAROFF                      ! triangle, flip carousel.
 470           IF(OROOM(IRBOX).NE.CAROU) GO TO 48400   ! iron box in carousel?
 471           CALL RSPEAK(269)                        ! yes, thump.
 472 C old     OFLAG1(IRBOX)=OFLAG1(IRBOX).XOR.VISIBT  ! complement visibility.
 473           OFLAG1(IRBOX)=XOR(OFLAG1(IRBOX),VISIBT) ! complement visibility.
 474 C old     IF(CAROFF) RFLAG(CAROU)=RFLAG(CAROU).AND. .NOT.RSEEN
 475           IF(CAROFF) RFLAG(CAROU)=AND(RFLAG(CAROU), COMPL(RSEEN))
 476           RETURN
 477 C
 478 48400     CALL RSPEAK(232)                        ! click.
 479           RETURN
 480 C
 481 C O119--  Flask function
 482 C
 483 49000     IF(PRSA.EQ.OPENW) GO TO 49100           ! open?
 484           IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
 485           CALL NEWSTA(FLASK,270,0,0,0)            ! kill flask.
 486 C old 49100         RFLAG(HERE)=RFLAG(HERE).OR.RMUNG        ! mung room.
 487 49100     RFLAG(HERE)=OR (RFLAG(HERE),RMUNG)      ! mung room.
 488           RDESC1(HERE)=271
 489           CALL JIGSUP(272)                        ! poisoned.
 490           RETURN
 491 C
 492 C O120--  Bucket function
 493 C
 494 50000     IF(ARG.EQ.1) GO TO 10                             ! read in?
 495           IF(ARG.EQ.2) GO TO 50400                ! read out?
 496           IF(PRSA.NE.BURNW) GO TO 50100           ! burn?
 497           CALL RSPEAK(928)                        ! can't.
 498           RETURN
 499 C
 500 50100     IF(PRSA.NE.KICKW) GO TO 10              ! kick?
 501           CALL JIGSUP(1067)                       ! dead.
 502           RETURN
 503 C
 504 50400     IF((OCAN(WATER).NE.BUCKE).OR.BUCKTF) GO TO 50500
 505           BUCKTF=.TRUE.                                     ! bucket at top.
 506           CFLAG(CEVBUC)=.TRUE.
 507           CTICK(CEVBUC)=100                       ! start countdown.
 508           CALL NEWSTA(BUCKE,290,TWELL,0,0)        ! reposition bucket.
 509           GO TO 50900                                       ! finish up.
 510 C
 511 50500     IF((OCAN(WATER).EQ.BUCKE).OR..NOT.BUCKTF) GO TO 10
 512           BUCKTF=.FALSE.
 513           CALL NEWSTA(BUCKE,291,BWELL,0,0)        ! bucket at bottom.
 514 50900     IF(AV.NE.BUCKE) RETURN                            ! not in bucket?
 515           F=MOVETO(OROOM(BUCKE),WINNER)           ! move adventurer.
 516           F=RMDESC(0)                                       ! describe room.
 517           RETURN
 518 C page
 519 C OAPPLI, PAGE 9
 520 C
 521 C O121--  Eatme cake
 522 C
 523 51000     IF((PRSA.NE.EATW).OR.(PRSO.NE.ECAKE).OR.
 524           &         (HERE.NE.ALICE)) GO TO 10     ! eat cake in aliceroom?
 525           CALL NEWSTA(ECAKE,273,0,0,0)            ! vanish cake.
 526 C old     OFLAG1(ROBOT)=OFLAG1(ROBOT).AND. .NOT.VISIBT      ! vanish robot.
 527           OFLAG1(ROBOT)=AND(OFLAG1(ROBOT), COMPL(VISIBT))   ! vanish robot.
 528           DO 51100 I=1,OLNT                       ! make objects big.
 529             IF((OROOM(I).NE.ALICE).OR.(OSIZE(I).EQ.10000))
 530           &         GO TO 51100
 531             OSIZE(I)=OSIZE(I)*64
 532             OROOM(I)=ALISM
 533 51100     CONTINUE
 534           OAPPLI=MOVETO(ALISM,WINNER)             ! move to alice small.
 535           RETURN
 536 C
 537 C O122--  Icings
 538 C
 539 52000     IF(PRSA.NE.READW) GO TO 52200           ! read?
 540           I=274                                             ! cant read.
 541           IF(PRSI.NE.0) I=275                     ! through something?
 542           IF(PRSI.EQ.BOTTL) I=276                           ! through bottle?
 543           IF(PRSI.EQ.FLASK) I=277+(PRSO-ORICE)    ! through flask?
 544           CALL RSPEAK(I)                                    ! read flask.
 545           RETURN
 546 C
 547 52200     IF((PRSA.NE.THROWW).OR.(PRSO.NE.RDICE).OR.(PRSI.NE.POOL))
 548           &         GO TO 52300                             ! throw rdice at pool?
 549           CALL NEWSTA(POOL,280,0,0,0)             ! vanish pool.
 550 C old     OFLAG1(SAFFR)=OFLAG1(SAFFR).OR.VISIBT   ! materialize spices.
 551           OFLAG1(SAFFR)=OR(OFLAG1(SAFFR),VISIBT)  ! materialize spices.
 552           RETURN
 553 C
 554 52300     IF((HERE.NE.ALICE).AND.(HERE.NE.ALISM).AND.(HERE.NE.ALITR))
 555           &         GO TO 10                      ! in wonderland?
 556           IF(((PRSA.NE.EATW).AND.(PRSA.NE.THROWW)).OR.
 557           &         (PRSO.NE.ORICE)) GO TO 52400  ! throw orange ice?
 558           CALL NEWSTA(ORICE,0,0,0,0)              ! vanish orange ice.
 559 C old     RFLAG(HERE)=RFLAG(HERE).OR.RMUNG        ! vanish room.
 560           RFLAG(HERE)=OR(RFLAG(HERE),RMUNG)       ! vanish room.
 561           RDESC1(HERE)=281
 562           CALL JIGSUP(282)                        ! vanish adventurer.
 563           RETURN
 564 C
 565 52400     IF((PRSA.NE.EATW).OR.(PRSO.NE.BLICE))
 566           &         GO TO 10                      ! eat blue ice?
 567           CALL NEWSTA(BLICE,283,0,0,0)            ! vanish blue ice.
 568           IF(HERE.NE.ALISM) GO TO 52500           ! in reduced room?
 569 C old     OFLAG1(ROBOT)=OFLAG1(ROBOT).OR.VISIBT   ! materialize robot.
 570           OFLAG1(ROBOT)=OR(OFLAG1(ROBOT),VISIBT)  ! materialize robot.
 571           DO 52450 I=1,OLNT                       ! enlarge world.
 572             IF((OROOM(I).NE.HERE).OR.(OSIZE(I).EQ.10000))
 573           &         GO TO 52450
 574             OROOM(I)=ALICE
 575             OSIZE(I)=OSIZE(I)/64
 576 52450     CONTINUE
 577           OAPPLI=MOVETO(ALICE,WINNER)             ! return
 578           RETURN
 579 C
 580 52500     CALL JIGSUP(284)                        ! enlarged in wrong room.
 581           RETURN
 582 C
 583 C O123--  Brick
 584 C
 585 54000     IF(PRSA.NE.BURNW) GO TO 10              ! burn?
 586           CALL NEWSTA(BRICK,0,0,0,0)              ! vanish brick.
 587           CALL JIGSUP(150)                        ! boom!
 588           RETURN
 589 C
 590 C O124--  Myself
 591 C
 592 C old 55000         IF((PRSA.NE.GIVEW).OR.
 593 C old     & ((OFLAG2(PRSO).AND.NOCHBT).NE.0)) GO TO 55100   ! give?
 594 55000     IF((PRSA.NE.GIVEW).OR.
 595           & ((AND(OFLAG2(PRSO),NOCHBT)).NE.0)) GO TO 55100  ! give?
 596           IF(PRSO.NE.WATER) GO TO 55050           ! water?
 597           CALL NEWSTA(WATER,615,0,0,0)            ! slips through fingers.
 598           RETURN
 599 C
 600 55050     CALL NEWSTA(PRSO,2,0,0,PLAYER)                    ! done.
 601           RETURN
 602 C
 603 55100     IF(PRSA.NE.TAKEW) GO TO 55200           ! take?
 604           CALL RSPEAK(286)                        ! joke.
 605           RETURN
 606 C
 607 55200     IF(((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW))
 608           &         .OR.(PRSO.NE.OPLAY)) GO TO 10
 609           WINNER=PLAYER                                     ! can't kill someone else.
 610           CALL JIGSUP(287)                        ! kill, no joke.
 611           RETURN
 612 C page
 613 C OAPPLI, PAGE 10
 614 C
 615 C O125--  Panels inside mirror
 616 C
 617 56000     IF(PRSA.NE.PUSHW) GO TO 10              ! push?
 618           IF(POLEUF.NE.0) GO TO 56100             ! short pole up?
 619           I=731                                             ! no, wont budge.
 620           IF(MOD(MDIR,180).EQ.0) I=732            ! diff msg if n-s.
 621           CALL RSPEAK(I)                                    ! tell wont move.
 622           RETURN
 623 C
 624 56100     IF(MLOC.NE.MRG) GO TO 56200             ! in gdn room?
 625           CALL RSPEAK(733)                        ! you lose.
 626           CALL JIGSUP(685)
 627           RETURN
 628 C
 629 56200     I=831                                             ! rotate l or r.
 630           IF((PRSO.EQ.RDWAL).OR.(PRSO.EQ.YLWAL)) I=830
 631           CALL RSPEAK(I)                                    ! tell direction.
 632           MDIR=MOD(MDIR+45+(270*(I-830)),360)     ! calculate new dir.
 633           CALL RSPSUB(734,695+(MDIR/45))                    ! tell new dir.
 634           IF(WDOPNF) CALL RSPEAK(730)             ! if panel open, close.
 635           WDOPNF=.FALSE.
 636           RETURN                                            ! done.
 637 C
 638 C O126--  Ends inside mirror
 639 C
 640 57000     IF(PRSA.NE.PUSHW) GO TO 10              ! push?
 641           IF(MOD(MDIR,180).EQ.0) GO TO 57100      ! mirror n-s?
 642           CALL RSPEAK(735)                        ! no, wont budge.
 643           RETURN
 644 C
 645 57100     IF(PRSO.NE.PINDR) GO TO 57300           ! push pine wall?
 646           IF(((MLOC.EQ.MRC).AND.(MDIR.EQ.180)).OR.
 647           &  ((MLOC.EQ.MRD).AND.(MDIR.EQ.0)).OR.
 648           &   (MLOC.EQ.MRG)) GO TO 57200                    ! in view of gdn?
 649           CALL RSPEAK(736)                        ! no, opens.
 650           WDOPNF=.TRUE.                                     ! indicate open.
 651           CFLAG(CEVPIN)=.TRUE.                              ! time opening.
 652           CTICK(CEVPIN)=5
 653           RETURN
 654 C
 655 57200     CALL RSPEAK(737)                        ! gdn sees you, die.
 656           CALL JIGSUP(685)
 657           RETURN
 658 C
 659 57300     NLOC=MLOC-1                                       ! new loc if south.
 660           IF(MDIR.EQ.0) NLOC=MLOC+1               ! new loc if north.
 661           IF((NLOC.GE.MRA).AND.(NLOC.LE.MRD)) GO TO 57400
 662           CALL RSPEAK(738)                        ! have reached end.
 663           RETURN
 664 C
 665 57400     I=699                                             ! assume south.
 666           IF(MDIR.EQ.0) I=695                     ! north.
 667           J=739                                             ! assume smooth.
 668           IF(POLEUF.NE.0) J=740                             ! pole up, wobbles.
 669           CALL RSPSUB(J,I)                        ! describe.
 670           MLOC=NLOC
 671           IF(MLOC.NE.MRG) RETURN                            ! now in gdn room?
 672 C
 673           IF(POLEUF.NE.0) GO TO 57500             ! pole up, gdn sees.
 674           IF(MROPNF.OR.WDOPNF) GO TO 57600        ! door open, gdn sees.
 675           IF(MR1F.AND.MR2F) RETURN                ! mirrors intact, ok.
 676           CALL RSPEAK(742)                        ! mirrors broken, die.
 677           CALL JIGSUP(743)
 678           RETURN
 679 C
 680 57500     CALL RSPEAK(741)                        ! pole up, die.
 681           CALL JIGSUP(743)
 682           RETURN
 683 C
 684 57600     CALL RSPEAK(744)                        ! door open, die.
 685           CALL JIGSUP(743)
 686           RETURN
 687 C page
 688 C OAPPLI, PAGE 11
 689 C
 690 C O127--  Global guardians
 691 C
 692 58000     IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
 693           &  (PRSA.NE.MUNGW)) GO TO 58100                   ! aggressive?
 694           CALL JIGSUP(745)                        ! lose.
 695           RETURN
 696 C
 697 58100     IF(PRSA.NE.HELLOW) GO TO 10             ! hello?
 698           CALL RSPEAK(746)                        ! no reply.
 699           RETURN
 700 C
 701 C O128--  Global master
 702 C
 703 59000     IF(((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW))
 704           &         .OR.(PRSO.NE.MASTER).OR.(PRSI.EQ.MASTER))
 705           &         GO TO 59100                             ! kill master?
 706           WINNER=PLAYER                                     ! rebounds on player.
 707           CALL JIGSUP(747)                        ! bad idea.
 708           RETURN
 709 C
 710 59100     IF(PRSA.NE.TAKEW) GO TO 10              ! take?
 711           CALL RSPEAK(748)                        ! joke.
 712           RETURN
 713 C
 714 C O129--  Numeral five
 715 C
 716 60000     IF(PRSA.NE.TAKEW) GO TO 10              ! take five?
 717           CALL RSPEAK(419)                        ! time passes.
 718           DO 60100 I=1,3                                    ! wait a while.
 719             IF(CLOCKD(X)) RETURN
 720 60100     CONTINUE
 721           RETURN
 722 C
 723 C O130--  Crypt function
 724 C
 725 61000     IF(.NOT.ENDGMF) GO TO 45000             ! if not eg, die.
 726           IF(PRSA.NE.OPENW) GO TO 61100           ! open?
 727           I=793
 728           IF(QOPEN(TOMB)) I=794
 729           CALL RSPEAK(I)
 730 C old     OFLAG2(TOMB)=OFLAG2(TOMB).OR.OPENBT     ! now tomb with view.
 731           OFLAG2(TOMB)=OR(OFLAG2(TOMB),OPENBT)    ! now tomb with view.
 732           RETURN
 733 C
 734 61100     IF(PRSA.NE.CLOSEW) GO TO 45000                    ! close?
 735           I=795
 736           IF(QOPEN(TOMB)) I=796
 737           CALL RSPEAK(I)
 738 C old     OFLAG2(TOMB)=OFLAG2(TOMB).AND..NOT.OPENBT
 739           OFLAG2(TOMB)=AND(OFLAG2(TOMB),COMPL(OPENBT))
 740           IF(HERE.NE.CRYPT) RETURN
 741           CFLAG(CEVSTE)=.TRUE.
 742           CTICK(CEVSTE)=3                                   ! if in crypt, start eg.
 743           RETURN
 744 C page
 745 C OAPPLI, PAGE 12
 746 C
 747 C O131--  Global ladder
 748 C
 749 62000     IF((CPVEC(CPHERE+1).EQ.-2).OR.(CPVEC(CPHERE-1).EQ.-3))
 750           &         GO TO 62100                             ! ladder here?
 751           CALL RSPEAK(865)                        ! no, lose.
 752           RETURN
 753 C
 754 62100     IF((PRSA.EQ.CLMBW).OR.(PRSA.EQ.CLMBUW)) GO TO 62200
 755           CALL RSPEAK(866)                        ! climb it?
 756           RETURN
 757 C
 758 62200     IF((CPHERE.EQ.10).AND.(CPVEC(CPHERE+1).EQ.-2))
 759           &         GO TO 62300                             ! at exit?
 760           CALL RSPEAK(867)                        ! no, hit your head.
 761           RETURN
 762 C
 763 62300     F=MOVETO(CPANT,WINNER)                            ! to anteroom.
 764           F=RMDESC(3)                                       ! describe.
 765           RETURN
 766 C
 767           END
 768 C page
 769 C SOBJS-  Simple objects processor
 770 C
 771 C Declarations
 772 C
 773           LOGICAL FUNCTION SOBJS(RI,ARG)
 774           IMPLICIT INTEGER (A-Z)
 775           %include dparam
 776           LOGICAL MOVETO,OPNCLS,LIT,WASLIT
 777           LOGICAL F,QOPEN
 778 C
 779 C Functions and data
 780 C
 781 C old     QOPEN(R)=(OFLAG2(R).AND.OPENBT).NE.0
 782           QOPEN(R)=(AND(OFLAG2(R),OPENBT)).NE.0
 783 C
 784           ODO2=0
 785           ODI2=0
 786           IF((PRSO.NE.0).AND.(PRSO.LE.OMAX)) ODO2=ODESC2(PRSO)
 787           IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
 788           AV=AVEHIC(WINNER)
 789           SOBJS=.TRUE.
 790           WASLIT=LIT(HERE)
 791 C
 792           GO TO (1000,3000,4000,6000,7000,8000,9000,
 793           & 13000,14000,16000,17000,
 794           & 21000,23000,24000,27000,28000,29000,30000,
 795           & 31000,33000,34000,36000,37000,38000,
 796           & 41000,42000,43000,44000,46000,
 797           & 53000,56000)
 798           &         RI
 799           CALL BUG(6,RI)
 800 C
 801 C Return here to declare false result.
 802 C
 803 10        SOBJS=.FALSE.
 804           RETURN
 805 C
 806 C Return here to test for light source change.
 807 C
 808 50        IF(WASLIT.AND..NOT.LIT(HERE)) CALL RSPEAK(406)
 809           RETURN
 810 C page
 811 C SOBJS, PAGE 3
 812 C
 813 C O1--    Gunk
 814 C
 815 1000      IF(OCAN(GUNK).EQ.0) GO TO 10            ! not inside? f
 816           CALL NEWSTA(GUNK,122,0,0,0)             ! falls apart.
 817           RETURN
 818 C
 819 C O2--    Trophy case
 820 C
 821 3000      IF(PRSA.NE.TAKEW) GO TO 10              ! take?
 822           CALL RSPEAK(128)                        ! cant.
 823           RETURN
 824 C
 825 C O3--    Bottle
 826 C
 827 4000      IF((PRSA.NE.THROWW).OR.(PRSO.NE.BOTTL)) GO TO 4100          ! throw?
 828           CALL NEWSTA(BOTTL,129,0,0,0)            ! breaks.
 829           RETURN
 830 C
 831 4100      IF(PRSA.NE.MUNGW) GO TO 10              ! mung?
 832           CALL NEWSTA(BOTTL,131,0,0,0)            ! breaks.
 833           RETURN
 834 C page
 835 C SOBJS, PAGE 4
 836 C
 837 C O4--    Rope
 838 C
 839 6000      IF((HERE.EQ.DOME).OR.(HERE.EQ.SLIDE).OR.(PRSI.EQ.0).OR.
 840           &  (PRSI.EQ.TIMBE).OR.(PRSI.EQ.COFFI)) GO TO 6100
 841           IF(PRSA.EQ.TIEW) CALL RSPEAK(135)       ! tie, cant do it.
 842 6050      DOMEF=.FALSE.                                     ! not tied in dome.
 843           TTIE=0                                            ! not tied to timber.
 844 C old     OFLAG1(TIMBE)=OFLAG1(TIMBE).AND..NOT.NDSCBT
 845           OFLAG1(TIMBE)=AND(OFLAG1(TIMBE),COMPL(NDSCBT))
 846 C old     OFLAG1(COFFI)=OFLAG1(COFFI).AND..NOT.NDSCBT
 847           OFLAG1(COFFI)=AND(OFLAG1(COFFI),COMPL(NDSCBT))
 848           ODESC1(TIMBE)=1032                      ! restore timber, coffin
 849           ODESC1(COFFI)=1033
 850 C old     OFLAG1(ROPE)=OFLAG1(ROPE).AND..NOT.NDSCBT
 851           OFLAG1(ROPE)=AND(OFLAG1(ROPE),COMPL(NDSCBT))
 852 C old     OFLAG2(ROPE)=OFLAG2(ROPE).AND..NOT.CLMBBT
 853           OFLAG2(ROPE)=AND(OFLAG2(ROPE),COMPL(CLMBBT))
 854           RETURN                                            ! rope not climbable
 855 C
 856 6100      IF((PRSA.NE.CLMBDW).OR.(HERE.NE.CPANT)) GO TO 6200
 857           IF(TTIE.EQ.0) GO TO 6150                ! climb down, tied?
 858           IF(OROOM(TTIE).NE.HERE) GO TO 6150      ! tied here?
 859           CALL RSPSUB(1028,ODESC2(TTIE))                    ! yes, tumbles after you.
 860           CALL NEWSTA(ROPE,0,CPUZZ,0,0)           ! now in puzzle room.
 861           CALL NEWSTA(TTIE,0,CPUZZ,0,0)
 862           GO TO 10                                ! not handled here.
 863 C
 864 6150      CALL RSPEAK(1029)                       ! not tied.
 865           GO TO 10                                ! not handled here.
 866 C
 867 6200      IF(PRSA.NE.TIEW) GO TO 6400             ! tie rope?
 868           IF(PRSI.NE.RAILI) GO TO 6300            ! to railing?
 869           IF(DOMEF.OR.(TTIE.NE.0)) GO TO 6250     ! already tied?
 870           DOMEF=.TRUE.                                      ! no, now tied.
 871           CALL NEWSTA(ROPE,137,DOME,0,0)                    ! put in dome room.
 872 C old 6225          OFLAG1(ROPE)=OFLAG1(ROPE).OR.NDSCBT
 873 6225      OFLAG1(ROPE)=OR(OFLAG1(ROPE),NDSCBT)
 874 C old     OFLAG2(ROPE)=OFLAG2(ROPE).OR.CLMBBT     ! now climbable
 875           OFLAG2(ROPE)=OR(OFLAG2(ROPE),CLMBBT)    ! now climbable
 876           RETURN
 877 C
 878 6250      CALL RSPEAK(136)                        ! already tied.
 879           RETURN
 880 C
 881 6300      IF((PRSI.NE.TIMBE).AND.(PRSI.NE.COFFI)) GO TO 10
 882           IF(DOMEF.OR.(TTIE.NE.0)) GO TO 6250     ! already done?
 883           IF(OROOM(PRSI).NE.0) GO TO 6350                   ! target on ground?
 884           CALL RSPEAK(1025)                       ! too clumsy.
 885           RETURN
 886 C
 887 6350      CALL RSPSUB(961,ODI2)                             ! now tied to object.
 888           TTIE=PRSI
 889           IF(PRSI.EQ.TIMBE) ODESC1(TIMBE)=1030    ! change description
 890           IF(PRSI.EQ.COFFI) ODESC1(COFFI)=1031    ! of target.
 891           IF(HERE.EQ.CPANT) CALL RSPEAK(1056)     ! room-specific words.
 892           IF(HERE.EQ.SLIDE) CALL RSPEAK(339)
 893 C old     IF(HERE.EQ.SLIDE) OFLAG1(PRSI)=OFLAG1(PRSI).OR.NDSCBT
 894           IF(HERE.EQ.SLIDE) OFLAG1(PRSI)=OR(OFLAG1(PRSI),NDSCBT)
 895           CALL NEWSTA(ROPE,0,HERE,0,0)            ! put rope in room.
 896           GO TO 6225                                        ! rope now climbable.
 897 C
 898 6400      IF(PRSA.NE.UNTIEW) GO TO 6600           ! untie rope?
 899           IF(.NOT.DOMEF.AND.(TTIE.EQ.0)) GO TO 6500 ! tied to obj or railing?
 900           CALL RSPEAK(139)                        ! report and then
 901           GO TO 6050                                        ! clean up all status.
 902 C
 903 6500      CALL RSPEAK(134)                        ! not tied to anything.
 904           RETURN
 905 C
 906 6600      IF(DOMEF.OR.(PRSA.NE.DROPW).OR.
 907           &         (HERE.NE.DOME)) GO TO 6700    ! drop & untied from dome?
 908           CALL NEWSTA(ROPE,140,MTORC,0,0)                   ! yes, drop.
 909           RETURN
 910 C
 911 6700      IF((PRSA.NE.TAKEW).OR..NOT.DOMEF) GO TO 6800
 912           CALL RSPEAK(141)                        ! take & tied.
 913           RETURN
 914 C
 915 6800      IF((PRSA.NE.TAKEW).OR.(TTIE.EQ.0)) GO TO 10
 916           CALL RSPSUB(926,ODESC2(TTIE))           ! take & tied.
 917           RETURN
 918 C
 919 C O5--    Sword
 920 C
 921 7000      IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
 922           &         SWDACT=.TRUE.                           ! turn on demon.
 923           GO TO 10
 924 C
 925 C O6--    Lantern
 926 C
 927 8000      IF((PRSA.NE.THROWW).OR.(PRSO.NE.LAMP)) GO TO 8100 ! throw?
 928           CALL NEWSTA(LAMP,0,0,0,0)               ! kill lamp,
 929           CALL NEWSTA(BLAMP,142,HERE,0,0)                   ! replace with broken.
 930           IF(HERE.EQ.MTREE) CALL NEWSTA(BLAMP,0,FORE3,0,0)
 931           IF(LASTIT.EQ.LAMP) LASTIT=BLAMP                   ! fix last it reference.
 932           CFLAG(CEVLNT)=.FALSE.                             ! turn off timer.
 933           GO TO 50                                ! go see if now dark.
 934 C
 935 8100      IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
 936           IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
 937           GO TO 10
 938 C
 939 C O7--    Rug
 940 C
 941 9000      IF(PRSA.NE.RAISEW) GO TO 9100           ! raise?
 942           CALL RSPEAK(143)                        ! cant
 943           RETURN
 944 C
 945 9100      IF(PRSA.NE.TAKEW) GO TO 9200            ! take?
 946           CALL RSPEAK(144)                        ! cant
 947           RETURN
 948 C
 949 9200      IF(PRSA.NE.MOVEW) GO TO 9300            ! move?
 950           CALL RSPEAK(145+ORRUG)
 951           ORRUG=1
 952 C old     OFLAG1(DOOR)=OFLAG1(DOOR).OR.VISIBT     ! reveal door.
 953           OFLAG1(DOOR)=OR(OFLAG1(DOOR),VISIBT)    ! reveal door.
 954           RETURN
 955 C
 956 9300      IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
 957           &         QOPEN(DOOR)) GO TO 10                   ! look under rug?
 958           CALL RSPEAK(345)
 959           RETURN
 960 C page
 961 C SOBJS, PAGE 5
 962 C
 963 C O8--    Skeleton
 964 C
 965 13000     I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
 966           CALL RSPEAK(162)                        ! curses.
 967           RETURN
 968 C
 969 C O9--    Mirror
 970 C
 971 14000     IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
 972 C old     MROOM=HERE.XOR.1                        ! calculate new rm.
 973           MROOM=XOR(HERE,1)                       ! calculate new rm.
 974           DO 14100 I=1,OLNT                       ! interchange objs.
 975             IF(OROOM(I).EQ.HERE) OROOM(I)=-1
 976             IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
 977             IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
 978 14100     CONTINUE
 979           F=MOVETO(MROOM,WINNER)
 980           CALL RSPEAK(163)                        ! shake world.
 981           RETURN
 982 C
 983 14500     IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
 984           &         (PRSA.NE.EXAMIW)) GO TO 14600
 985           I=164                                             ! mirror ok.
 986           IF(MIRRMF) I=165                        ! mirror dead.
 987           CALL RSPEAK(I)
 988           RETURN
 989 C
 990 14600     IF(PRSA.NE.TAKEW) GO TO 14700           ! take?
 991           CALL RSPEAK(166)                        ! joke.
 992           RETURN
 993 C
 994 14700     IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
 995           I=167                                             ! mirror breaks.
 996           IF(MIRRMF) I=168                        ! mirror already broken.
 997           MIRRMF=.TRUE.
 998           BADLKF=.TRUE.
 999           CALL RSPEAK(I)
1000           RETURN
1001 C page
1002 C SOBJS, PAGE 6
1003 C
1004 C O10--   Dumbwaiter
1005 C
1006 16000     IF(PRSA.NE.RAISEW) GO TO 16100                    ! raise?
1007           IF(CAGETF) GO TO 16400                            ! already at top?
1008           CALL NEWSTA(TBASK,175,TSHAF,0,0)        ! no, raise basket.
1009           CALL NEWSTA(FBASK,0,BSHAF,0,0)
1010           IF(HERE.EQ.TSHAF) LASTIT=TBASK                    ! fix last it reference.
1011           IF(HERE.EQ.BSHAF) LASTIT=FBASK
1012           CAGETF=.TRUE.                                     ! at top.
1013           RETURN
1014 C
1015 16100     IF(PRSA.NE.LOWERW) GO TO 16200                    ! lower?
1016           IF(.NOT.CAGETF) GO TO 16400             ! already at bottom?
1017           CALL NEWSTA(TBASK,176,BSHAF,0,0)        ! no, lower basket.
1018           CALL NEWSTA(FBASK,0,TSHAF,0,0)
1019           IF(HERE.EQ.TSHAF) LASTIT=FBASK                    ! fix last it reference.
1020           IF(HERE.EQ.BSHAF) LASTIT=TBASK
1021           CAGETF=.FALSE.
1022           GO TO 50                                ! go see if now dark.
1023 C
1024 16200     IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
1025           CALL RSPEAK(130)                        ! wrong basket.
1026           RETURN
1027 C
1028 16300     IF(PRSA.NE.TAKEW) GO TO 10              ! take?
1029           CALL RSPEAK(177)                        ! joke.
1030           RETURN
1031 C
1032 16400     CALL RSPEAK(125+RND(3))                           ! dummy.
1033           RETURN
1034 C
1035 C O11--   Ghost
1036 C
1037 17000     IF(PRSO.NE.GHOST) GO TO 17100           ! direct object?
1038           CALL RSPEAK(178)                        ! joke.
1039           RETURN
1040 C
1041 17100     CALL RSPEAK(179)                        ! joke.
1042           GO TO 10                                ! don't handle.
1043 C page
1044 C SOBJS, PAGE 7
1045 C
1046 C O12--   Tube
1047 C
1048 21000     IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 21100
1049           CALL RSPEAK(186)                        ! cant put back in.
1050           RETURN
1051 C
1052 21100     IF(PRSA.NE.SQUEEW) GO TO 10             ! squeeze?
1053           IF(QOPEN(PRSO)) GO TO 21200             ! tube open?
1054           CALL RSPEAK(909)                        ! no, can't do it.
1055           RETURN
1056 C
1057 21200     IF(OCAN(PUTTY).EQ.PRSO) GO TO 21300     ! putty inside?
1058           CALL RSPEAK(910)                        ! no, doesn't work.
1059           RETURN
1060 C
1061 21300     CALL NEWSTA(PUTTY,911,0,0,WINNER)       ! putty now in hand.
1062           RETURN
1063 C
1064 C O13--   Chalice
1065 C
1066 C old 23000         IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
1067 C old     &         (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
1068 C old     &         ((OFLAG2(THIEF).AND.FITEBT).EQ.0).OR.
1069 C old     &         .NOT. THFACT) GO TO 10
1070 23000     IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
1071           &         (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
1072           &         ((AND(OFLAG2(THIEF),FITEBT)).EQ.0).OR.
1073           &         .NOT. THFACT) GO TO 10
1074           CALL RSPEAK(204)                        ! cant take.
1075           RETURN
1076 C
1077 C O14--   Painting
1078 C
1079 24000     IF(PRSA.NE.MUNGW) GO TO 10              ! mung?
1080           CALL RSPEAK(205)                        ! destroy painting.
1081           OFVAL(PRSO)=0
1082           OTVAL(PRSO)=0
1083           ODESC1(PRSO)=207
1084           ODESC2(PRSO)=206
1085           RETURN
1086 C page
1087 C SOBJS, PAGE 8
1088 C
1089 C O15--   Bolt
1090 C
1091 27000     IF(PRSA.NE.TURNW) GO TO 27600           ! turn bolt?
1092           IF(PRSI.NE.WRENC) GO TO 27500           ! with wrench?
1093           IF(GATEF) GO TO 27100                             ! proper button pushed?
1094           CALL RSPEAK(210)                        ! no, lose.
1095           RETURN
1096 C
1097 27100     IF(LWTIDF) GO TO 27200                            ! low tide now?
1098           LWTIDF=.TRUE.                                     ! no, empty dam.
1099           CALL RSPEAK(211)
1100 C old     OFLAG2(COFFI)=OFLAG2(COFFI).AND. .NOT.SCRDBT
1101           OFLAG2(COFFI)=AND(OFLAG2(COFFI), COMPL(SCRDBT))
1102 C old     OFLAG1(TRUNK)=OFLAG1(TRUNK).OR.VISIBT   ! materialize trunk.
1103           OFLAG1(TRUNK)=OR(OFLAG1(TRUNK),VISIBT)  ! materialize trunk.
1104 C old     RFLAG(RESER)=(RFLAG(RESER).OR.RLAND)
1105 C old     &         .AND..NOT.(RWATER+RSEEN)      ! keep thief away.
1106           RFLAG(RESER)=AND(OR(RFLAG(RESER),RLAND),
1107           &         COMPL(RWATER+RSEEN))          ! keep thief away.
1108           RETURN
1109 C
1110 27200     LWTIDF=.FALSE.                                    ! yes, fill dam.
1111           CALL RSPEAK(212)
1112 C old     IF(OROOM(TRUNK).EQ.RESER) OFLAG1(TRUNK)=OFLAG1(TRUNK)
1113 C old     &         .AND. .NOT.VISIBT
1114           IF(OROOM(TRUNK).EQ.RESER) OFLAG1(TRUNK)=AND(OFLAG1(TRUNK),
1115           &         COMPL(VISIBT))
1116 C old     RFLAG(RESER)=(RFLAG(RESER).OR.RWATER) .AND..NOT.RLAND
1117           RFLAG(RESER)=AND(OR(RFLAG(RESER),RWATER),COMPL(RLAND))
1118           RETURN
1119 C
1120 27500     CALL RSPSUB(299,ODI2)                             ! not with that.
1121           RETURN
1122 C
1123 27600     IF(PRSA.NE.OILW) GO TO 10               ! oil?
1124           CALL RSPEAK(906)                        ! trouble.
1125           RETURN
1126 C
1127 C O16--   Grating
1128 C
1129 28000     IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
1130           IF(GRUNLF) GO TO 28100                            ! unlocked?
1131           CALL RSPEAK(214)                        ! no, locked.
1132           RETURN
1133 C
1134 28100     I=215                                             ! unlocked, view frm below.
1135           IF(HERE.EQ.CLEAR) I=216                           ! view from clearing
1136           SOBJS=OPNCLS(GRATE,I,885)               ! open/close.
1137 C old     RFLAG(MGRAT)=RFLAG(MGRAT).AND. .NOT.RLIGHT        ! set light/dark.
1138           RFLAG(MGRAT)=AND(RFLAG(MGRAT), COMPL(RLIGHT))     ! set light/dark.
1139           IF(.NOT.QOPEN(GRATE)) GO TO 50                    ! if not open, done.
1140 C old     RFLAG(MGRAT)=RFLAG(MGRAT).OR.RLIGHT     ! now lit.
1141           RFLAG(MGRAT)=OR(RFLAG(MGRAT),RLIGHT)    ! now lit.
1142           RVCLR=1                                           ! leaves shoved aside.
1143           CALL NEWSTA(GRATE,0,CLEAR,0,0)                    ! grating in clearing.
1144           RETURN
1145 C
1146 C O17--   Trap door
1147 C
1148 29000     IF(HERE.NE.LROOM) GO TO 29100           ! from living room?
1149           SOBJS=OPNCLS(DOOR,218,219)              ! open/close.
1150           RETURN
1151 C
1152 29100     IF(HERE.NE.CELLA) GO TO 10              ! from cellar?
1153           IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
1154           CALL RSPEAK(220)                        ! cant open closed door.
1155           RETURN
1156 C
1157 29200     SOBJS=OPNCLS(DOOR,0,22)                           ! normal open/close.
1158           RETURN
1159 C
1160 C O18--   Durable door
1161 C
1162 30000     I=0                                               ! assume no appl.
1163           IF(PRSA.EQ.OPENW) I=221                           ! open?
1164           IF(PRSA.EQ.BURNW) I=222                           ! burn?
1165           IF(PRSA.EQ.MUNGW) I=223+RND(3)                    ! mung?
1166           IF(I.EQ.0) GO TO 10
1167           CALL RSPEAK(I)
1168           RETURN
1169 C
1170 C O19--   Master switch
1171 C
1172 31000     IF(PRSA.NE.TURNW) GO TO 10              ! turn?
1173           IF(PRSI.NE.SCREW) GO TO 31500           ! with screwdriver?
1174           IF(QOPEN(MACHI)) GO TO 31600            ! lid up?
1175           CALL RSPEAK(226)                        ! no, activate.
1176           IF(OCAN(COAL).NE.MACHI) GO TO 31400     ! coal inside?
1177           CALL NEWSTA(COAL,0,0,0,0)               ! kill coal,
1178           CALL NEWSTA(DIAMO,0,0,MACHI,0)                    ! replace with diamond.
1179           RETURN
1180 C
1181 31400     DO 31450 I=1,OLNT                       ! kill noncoal objects.
1182             IF(OCAN(I).NE.MACHI) GO TO 31450      ! inside machine?
1183             CALL NEWSTA(I,0,0,0,0)                ! kill object and contents.
1184             CALL NEWSTA(GUNK,0,0,MACHI,0)                   ! reduce to gunk.
1185 31450     CONTINUE
1186           RETURN
1187 C
1188 31500     CALL RSPSUB(300,ODI2)                             ! cant turn with that.
1189           RETURN
1190 C
1191 31600     CALL RSPEAK(227)                        ! lid is up.
1192           RETURN
1193 C page
1194 C SOBJS, PAGE 9
1195 C
1196 C O20--   Leak
1197 C
1198 33000     IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
1199           &         GO TO 10                      ! plug active leak?
1200           IF(PRSI.NE.PUTTY) GO TO 33100           ! with putty?
1201           RVMNT=-1                                ! disable leak.
1202           CTICK(CEVMNT)=0
1203           CALL RSPEAK(577)
1204           RETURN
1205 C
1206 33100     CALL RSPSUB(301,ODI2)                             ! cant with that.
1207           RETURN
1208 C
1209 C O21--   Drowning buttons
1210 C
1211 34000     IF(PRSA.NE.PUSHW) GO TO 10              ! push?
1212           GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
1213           GO TO 10                                ! not a button.
1214 C
1215 C old 34100         RFLAG(HERE)=RFLAG(HERE).XOR.RLIGHT      ! red, zap lights.
1216 34100     RFLAG(HERE)=XOR(RFLAG(HERE),RLIGHT)     ! red, zap lights.
1217           I=230
1218 C old     IF((RFLAG(HERE).AND.RLIGHT).NE.0) I=231
1219           IF((AND(RFLAG(HERE),RLIGHT)).NE.0) I=231
1220           CALL RSPEAK(I)
1221           GO TO 50                                ! go see if now dark.
1222 C
1223 34200     GATEF=.TRUE.                                      ! yellow, release gate.
1224           CALL RSPEAK(232)
1225           RETURN
1226 C
1227 34300     GATEF=.FALSE.                                     ! brown, interlock gate.
1228           CALL RSPEAK(232)
1229           RETURN
1230 C
1231 34400     IF(RVMNT.NE.0) GO TO 34500              ! blue, leak already started?
1232           CALL RSPEAK(233)                        ! no, start leak.
1233           RVMNT=1
1234           CFLAG(CEVMNT)=.TRUE.
1235           CTICK(CEVMNT)=-1
1236 C old     RFLAG(HERE)=RFLAG(HERE).OR.RFILL        ! water present.
1237           RFLAG(HERE)=OR(RFLAG(HERE),RFILL)       ! water present.
1238 C old     OFLAG1(LEAK)=OFLAG1(LEAK).OR.VISIBT     ! bring on the leak.
1239           OFLAG1(LEAK)=OR(OFLAG1(LEAK),VISIBT)    ! bring on the leak.
1240           RETURN
1241 C
1242 34500     CALL RSPEAK(234)                        ! button jammed.
1243           RETURN
1244 C
1245 C O22--   Inflatable boat
1246 C
1247 36000     IF(PRSA.NE.INFLAW) GO TO 10             ! inflate?
1248           IF(OROOM(IBOAT).NE.0) GO TO 36100       ! in room?
1249           CALL RSPEAK(235)                        ! no, joke.
1250           RETURN
1251 C
1252 36100     IF(PRSI.NE.PUMP) GO TO 36200            ! with pump?
1253           CALL NEWSTA(IBOAT,0,0,0,0)              ! kill defl boat,
1254           CALL NEWSTA(RBOAT,236,HERE,0,0)                   ! repl with inf.
1255           IF(LASTIT.EQ.IBOAT) LASTIT=RBOAT        ! fix last it reference.
1256           DEFLAF=.FALSE.
1257           RETURN
1258 C
1259 36200     I=237                                             ! jokes.
1260           IF(PRSI.NE.LUNGS) I=303
1261           CALL RSPSUB(I,ODI2)
1262           RETURN
1263 C
1264 C O23--   Deflated boat
1265 C
1266 37000     IF(PRSA.NE.INFLAW) GO TO 37100                    ! inflate?
1267           CALL RSPEAK(238)                        ! joke.
1268           RETURN
1269 C
1270 37100     IF(PRSA.NE.PLUGW) GO TO 10              ! plug?
1271           IF(PRSI.NE.PUTTY) GO TO 33100           ! with putty?
1272           CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
1273           CALL NEWSTA(DBOAT,0,0,0,0)              ! kill defl boat, repl.
1274           IF(LASTIT.EQ.DBOAT) LASTIT=IBOAT        ! fix last it reference.
1275           RETURN
1276 C page
1277 C SOBJS, PAGE 10
1278 C
1279 C O24--   Rubber boat
1280 C
1281 38000     IF(ARG.NE.0) GO TO 10                             ! dismiss readin, out.
1282           IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
1283           CALL NEWSTA(RBOAT,0,0,0,0)              ! kill infl boat,
1284           CALL NEWSTA(DBOAT,240,HERE,0,0)                   ! repl with dead.
1285           IF(LASTIT.EQ.RBOAT) LASTIT=DBOAT        ! fix last it reference.
1286           DEFLAF=.TRUE.
1287           GO TO 50                                ! go see if now dark.
1288 C
1289 38100     IF(PRSA.NE.INFLAW) GO TO 38200                    ! inflate?
1290           CALL RSPEAK(367)                        ! yes, joke.
1291           RETURN
1292 C
1293 38200     IF(PRSA.NE.DEFLAW) GO TO 10             ! deflate?
1294           IF(AV.EQ.RBOAT) GO TO 38300             ! in boat?
1295           IF(OROOM(RBOAT).EQ.0) GO TO 38400       ! on ground?
1296           CALL NEWSTA(RBOAT,0,0,0,0)              ! kill infl boat,
1297           CALL NEWSTA(IBOAT,241,HERE,0,0)                   ! repl with defl.
1298           IF(LASTIT.EQ.RBOAT) LASTIT=IBOAT        ! fix last it reference.
1299           DEFLAF=.TRUE.
1300           GO TO 50                                ! go see if now dark.
1301 C
1302 38300     CALL RSPEAK(242)                        ! in boat.
1303           RETURN
1304 C
1305 38400     CALL RSPEAK(243)                        ! not on ground.
1306           RETURN
1307 C
1308 C O25--   Braided rope (also balloon receptacle, cloth bag)
1309 C
1310 41000     IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
1311           &         ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
1312           &         GO TO 41100                             ! tie to hook?
1313           BTIEF=PRSI                                        ! record location.
1314           ODESC1(BTIEF)=1072                      ! change description.
1315           CFLAG(CEVBAL)=.FALSE.                             ! stall ascent.
1316           CALL RSPEAK(248)
1317           RETURN
1318 C
1319 41100     IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 41300
1320           IF(BTIEF.NE.0) GO TO 41200              ! tied up?
1321           CALL RSPEAK(249)                        ! no, joke.
1322           RETURN
1323 C
1324 41200     CALL RSPEAK(250)
1325           ODESC1(BTIEF)=1073                      ! restore description.
1326           BTIEF=0                                           ! untie.
1327           CFLAG(CEVBAL)=.TRUE.
1328           CTICK(CEVBAL)=3                                   ! restart clock.
1329           RETURN
1330 C
1331 41300     IF((PRSA.NE.FINDW).AND.(PRSA.NE.EXAMIW)) GO TO 41400
1332           CALL RSPSUB(1063,ODO2)                            ! describe.
1333           RETURN
1334 C
1335 41400     IF(PRSA.NE.TAKEW) GO TO 10              ! take?
1336           CALL RSPSUB(1064,ODO2)                            ! can't.
1337           IF(PRSO.EQ.BROPE) CALL RSPEAK(1065)     ! rope can be tied.
1338           RETURN
1339 C
1340 C O26--   Safe
1341 C
1342 42000     I=0                                               ! assume unprocessed.
1343           IF(PRSA.EQ.TAKEW) I=251                           ! take?
1344           IF((PRSA.EQ.OPENW).AND.SAFEF) I=253     ! open after blast?
1345           IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254 ! open before blast?
1346           IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253    ! close after?
1347           IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
1348           IF(I.EQ.0) GO TO 10
1349           CALL RSPEAK(I)
1350           RETURN
1351 C
1352 C O27--   Fuse
1353 C
1354 43000     IF(PRSA.NE.BURNW) GO TO 10              ! burn?
1355           CALL RSPEAK(256)
1356           CFLAG(CEVFUS)=.TRUE.
1357           CTICK(CEVFUS)=2                                   ! start countdown.
1358           RETURN
1359 C
1360 C O28--   Gnome
1361 C
1362 44000     IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
1363           IF(OTVAL(PRSO).EQ.0) GO TO 44100        ! treasure?
1364           CALL RSPSUB(257,ODO2)                             ! yes, get door.
1365           CALL NEWSTA(PRSO,0,0,0,0)
1366           CALL NEWSTA(GNOME,0,0,0,0)              ! vanish gnome.
1367           GNODRF=.TRUE.
1368           GO TO 50                                ! go see if now dark.
1369 C
1370 44100     IF((PRSO.NE.BRICK).OR.(OCAN(FUSE).NE.BRICK).OR.
1371           &         (CTICK(CEVFUS).EQ.0)) GO TO 44200 ! a bomb?
1372           CALL NEWSTA(GNOME,927,0,0,0)            ! gnome leaves.
1373           CALL NEWSTA(BRICK,0,HERE,0,0)           ! brick on floor.
1374           CFLAG(CEVVLG)=.FALSE.                             ! turn off gnome clocks.
1375           CFLAG(CEVGNO)=.FALSE.
1376           RETURN
1377 C
1378 44200     CALL RSPSUB(258,ODO2)                             ! no, lose object.
1379           CALL NEWSTA(PRSO,0,0,0,0)
1380           GO TO 50                                ! go see if now dark.
1381 C
1382 44500     CALL RSPEAK(259)                        ! nervous gnome.
1383           IF(GNOMEF) RETURN
1384           CFLAG(CEVGNO)=.TRUE.
1385           CTICK(CEVGNO)=5                                   ! schedule byebye.
1386           GNOMEF=.TRUE.
1387           RETURN
1388 C
1389 C O29--   Coke bottles
1390 C
1391 46000     IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
1392           CALL NEWSTA(COKES,262,0,0,0)            ! mung bottles.
1393           IF(PRSI.NE.COKES) RETURN                ! with cokes?
1394           CALL RSPSUB(1066,ODO2)                            ! kill direct object, too.
1395           CALL NEWSTA(PRSO,0,0,0,0)
1396           RETURN
1397 C page
1398 C SOBJS, PAGE 11
1399 C
1400 C O30--   Robot
1401 C
1402 53000     IF(PRSA.NE.GIVEW) GO TO 53200           ! give?
1403           IF(PRSO.NE.WATER) GO TO 53100           ! water?
1404           CALL NEWSTA(WATER,1081,0,0,0)           ! slips through fingers.
1405           RETURN
1406 C
1407 53100     CALL NEWSTA(PRSO,0,0,0,AROBOT)                    ! put on robot.
1408           CALL RSPSUB(302,ODO2)
1409           RETURN
1410 C
1411 53200     IF(((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)).OR.
1412           &  ((PRSO.NE.ROBOT).AND.(PRSI.NE.ROBOT))) GO TO 10
1413           CALL NEWSTA(ROBOT,285,0,0,0)            ! kill robot.
1414           GO TO 50                                ! go see if now dark.
1415 C
1416 C O31--   Grue
1417 C
1418 56000     IF(PRSA.NE.EXAMIW) GO TO 56100                    ! examine?
1419           CALL RSPEAK(288)
1420           RETURN
1421 C
1422 56100     IF(PRSA.NE.FINDW) GO TO 10              ! find?
1423           CALL RSPEAK(289)
1424           RETURN
1425 C
1426           END