rooms.for 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. C RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1
  2. C
  3. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  4. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  5. C WRITTEN BY R. M. SUPNIK
  6. C
  7. C DECLARATIONS
  8. C
  9. LOGICAL FUNCTION RAPPL1(RI)
  10. IMPLICIT INTEGER (A-Z)
  11. LOGICAL QOPEN,QON,QHERE,PROB,F
  12. LOGICAL MOVETO,LIT
  13. include 'parser.h'
  14. include 'gamestat.h'
  15. include 'state.h'
  16. C
  17. C SCREEN OF LIGHT
  18. C
  19. COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
  20. COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
  21. C
  22. C MISCELLANEOUS VARIABLES
  23. C
  24. COMMON /BATS/ BATDRP(9)
  25. include 'rooms.h'
  26. include 'rflag.h'
  27. include 'rindex.h'
  28. include 'objects.h'
  29. include 'oflags.h'
  30. include 'oindex.h'
  31. include 'clock.h'
  32. include 'villians.h'
  33. include 'advers.h'
  34. include 'verbs.h'
  35. include 'flags.h'
  36. C
  37. C FUNCTIONS AND DATA
  38. C
  39. QOPEN(R)=IAND(OFLAG2(R),OPENBT).NE.0
  40. QON(R)=IAND(OFLAG1(R),ONBT).NE.0
  41. C RAPPL1, PAGE 2
  42. C
  43. RAPPL1=.TRUE.
  44. C !USUALLY IGNORED.
  45. IF(RI.EQ.0) RETURN
  46. C !RETURN IF NAUGHT.
  47. C
  48. C !SET TO FALSE FOR
  49. C
  50. C !NEW DESC NEEDED.
  51. GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
  52. & 11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
  53. & 21000,22000,23000,24000,25000,26000,27000,28000,29000,30000,
  54. & 31000,32000,33000,34000,35000,36000,37000),RI
  55. CALL BUG(1,RI)
  56. C
  57. C R1-- EAST OF HOUSE. DESCRIPTION DEPENDS ON STATE OF WINDOW
  58. C
  59. 1000 IF(PRSA.NE.LOOKW) RETURN
  60. C !LOOK?
  61. I=13
  62. C !ASSUME CLOSED.
  63. IF(QOPEN(WINDO)) I=12
  64. C !IF OPEN, AJAR.
  65. CALL RSPSUB(11,I)
  66. C !DESCRIBE.
  67. RETURN
  68. C
  69. C R2-- KITCHEN. SAME VIEW FROM INSIDE.
  70. C
  71. 2000 IF(PRSA.NE.LOOKW) RETURN
  72. C !LOOK?
  73. I=13
  74. C !ASSUME CLOSED.
  75. IF(QOPEN(WINDO)) I=12
  76. C !IF OPEN, AJAR.
  77. CALL RSPSUB(14,I)
  78. C !DESCRIBE.
  79. RETURN
  80. C
  81. C R3-- LIVING ROOM. DESCRIPTION DEPENDS ON MAGICF (STATE OF
  82. C DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED)
  83. C
  84. 3000 IF(PRSA.NE.LOOKW) GO TO 3500
  85. C !LOOK?
  86. I=15
  87. C !ASSUME NO HOLE.
  88. IF(MAGICF) I=16
  89. C !IF MAGICF, CYCLOPS HOLE.
  90. CALL RSPEAK(I)
  91. C !DESCRIBE.
  92. I=17+ORRUG
  93. C !ASSUME INITIAL STATE.
  94. IF(QOPEN(DOOR)) I=I+2
  95. C !DOOR OPEN?
  96. CALL RSPEAK(I)
  97. C !DESCRIBE.
  98. RETURN
  99. C
  100. C NOT A LOOK WORD. REEVALUATE TROPHY CASE.
  101. C
  102. 3500 IF((PRSA.NE.TAKEW).AND.((PRSA.NE.PUTW).OR.(PRSI.NE.TCASE)))
  103. & RETURN
  104. ASCORE(WINNER)=RWSCOR
  105. C !SCORE TROPHY CASE.
  106. DO 3600 I=1,OLNT
  107. C !RETAIN RAW SCORE AS WELL.
  108. J=I
  109. C !FIND OUT IF IN CASE.
  110. 3550 J=OCAN(J)
  111. C !TRACE OWNERSHIP.
  112. IF(J.EQ.0) GO TO 3600
  113. IF(J.NE.TCASE) GO TO 3550
  114. C !DO ALL LEVELS.
  115. ASCORE(WINNER)=ASCORE(WINNER)+OTVAL(I)
  116. 3600 CONTINUE
  117. CALL SCRUPD(0)
  118. C !SEE IF ENDGAME TRIG.
  119. RETURN
  120. C RAPPL1, PAGE 3
  121. C
  122. C R4-- CELLAR. SHUT DOOR AND BAR IT IF HE JUST WALKED IN.
  123. C
  124. 4000 IF(PRSA.NE.LOOKW) GO TO 4500
  125. C !LOOK?
  126. CALL RSPEAK(21)
  127. C !DESCRIBE CELLAR.
  128. RETURN
  129. C
  130. 4500 IF(PRSA.NE.WALKIW) RETURN
  131. C !WALKIN?
  132. IF(IAND(OFLAG2(DOOR),(OPENBT+TCHBT)).NE.OPENBT) RETURN
  133. OFLAG2(DOOR)=IAND(IAND(OFLAG2(DOOR),CHBT), not(OPENBT))
  134. CALL RSPEAK(22)
  135. C !SLAM AND BOLT DOOR.
  136. RETURN
  137. C
  138. C R5-- MAZE11. DESCRIBE STATE OF GRATING.
  139. C
  140. 5000 IF(PRSA.NE.LOOKW) RETURN
  141. C !LOOK?
  142. CALL RSPEAK(23)
  143. C !DESCRIBE.
  144. I=24
  145. C !ASSUME LOCKED.
  146. IF(GRUNLF) I=26
  147. C !UNLOCKED?
  148. IF(QOPEN(GRATE)) I=25
  149. C !OPEN?
  150. CALL RSPEAK(I)
  151. C !DESCRIBE GRATE.
  152. RETURN
  153. C
  154. C R6-- CLEARING. DESCRIBE CLEARING, MOVE LEAVES.
  155. C
  156. 6000 IF(PRSA.NE.LOOKW) GO TO 6500
  157. C !LOOK?
  158. CALL RSPEAK(27)
  159. C !DESCRIBE.
  160. IF(RVCLR.EQ.0) RETURN
  161. C !LEAVES MOVED?
  162. I=28
  163. C !YES, ASSUME GRATE CLOSED.
  164. IF(QOPEN(GRATE)) I=29
  165. C !OPEN?
  166. CALL RSPEAK(I)
  167. C !DESCRIBE GRATE.
  168. RETURN
  169. C
  170. 6500 IF((RVCLR.NE.0).OR.(QHERE(LEAVE,CLEAR).AND.
  171. & ((PRSA.NE.MOVEW).OR.(PRSO.NE.LEAVE)))) RETURN
  172. CALL RSPEAK(30)
  173. C !MOVE LEAVES, REVEAL GRATE.
  174. RVCLR=1
  175. C !INDICATE LEAVES MOVED.
  176. RETURN
  177. C RAPPL1, PAGE 4
  178. C
  179. C R7-- RESERVOIR SOUTH. DESCRIPTION DEPENDS ON LOW TIDE FLAG.
  180. C
  181. 7000 IF(PRSA.NE.LOOKW) RETURN
  182. C !LOOK?
  183. I=31
  184. C !ASSUME FULL.
  185. IF(LWTIDF) I=32
  186. C !IF LOW TIDE, EMPTY.
  187. CALL RSPEAK(I)
  188. C !DESCRIBE.
  189. CALL RSPEAK(33)
  190. C !DESCRIBE EXITS.
  191. RETURN
  192. C
  193. C R8-- RESERVOIR. STATE DEPENDS ON LOW TIDE FLAG.
  194. C
  195. 8000 IF(PRSA.NE.LOOKW) RETURN
  196. C !LOOK?
  197. I=34
  198. C !ASSUME FULL.
  199. IF(LWTIDF) I=35
  200. C !IF LOW TIDE, EMTPY.
  201. CALL RSPEAK(I)
  202. C !DESCRIBE.
  203. RETURN
  204. C
  205. C R9-- RESERVOIR NORTH. ALSO DEPENDS ON LOW TIDE FLAG.
  206. C
  207. 9000 IF(PRSA.NE.LOOKW) RETURN
  208. C !LOOK?
  209. I=36
  210. C !YOU GET THE IDEA.
  211. IF(LWTIDF) I=37
  212. CALL RSPEAK(I)
  213. CALL RSPEAK(38)
  214. RETURN
  215. C
  216. C R10-- GLACIER ROOM. STATE DEPENDS ON MELTED, VANISHED FLAGS.
  217. C
  218. 10000 IF(PRSA.NE.LOOKW) RETURN
  219. C !LOOK?
  220. CALL RSPEAK(39)
  221. C !BASIC DESCRIPTION.
  222. I=0
  223. C !ASSUME NO CHANGES.
  224. IF(GLACMF) I=40
  225. C !PARTIAL MELT?
  226. IF(GLACRF) I=41
  227. C !COMPLETE MELT?
  228. CALL RSPEAK(I)
  229. C !DESCRIBE.
  230. RETURN
  231. C
  232. C R11-- FOREST ROOM
  233. C
  234. 11000 IF(PRSA.EQ.WALKIW) CFLAG(CEVFOR)=.TRUE.
  235. C !IF WALK IN, BIRDIE.
  236. RETURN
  237. C
  238. C R12-- MIRROR ROOM. STATE DEPENDS ON MIRROR INTACT.
  239. C
  240. 12000 IF(PRSA.NE.LOOKW) RETURN
  241. C !LOOK?
  242. CALL RSPEAK(42)
  243. C !DESCRIBE.
  244. IF(MIRRMF) CALL RSPEAK(43)
  245. C !IF BROKEN, NASTY REMARK.
  246. RETURN
  247. C RAPPL1, PAGE 5
  248. C
  249. C R13-- CAVE2 ROOM. BLOW OUT CANDLES WITH 50% PROBABILITY.
  250. C
  251. 13000 IF(PRSA.NE.WALKIW) RETURN
  252. C !WALKIN?
  253. IF(PROB(50,50).OR.(OADV(CANDL).NE.WINNER).OR.
  254. & .NOT.QON(CANDL)) RETURN
  255. OFLAG1(CANDL)=IAND(OFLAG1(CANDL), not(ONBT))
  256. CALL RSPEAK(47)
  257. C !TELL OF WINDS.
  258. CFLAG(CEVCND)=.FALSE.
  259. C !HALT CANDLE COUNTDOWN.
  260. RETURN
  261. C
  262. C R14-- BOOM ROOM. BLOW HIM UP IF CARRYING FLAMING OBJECT.
  263. C
  264. 14000 J=ODESC2(CANDL)
  265. C !ASSUME CANDLE.
  266. IF((OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 14100
  267. J=ODESC2(TORCH)
  268. C !ASSUME TORCH.
  269. IF((OADV(TORCH).EQ.WINNER).AND.QON(TORCH)) GO TO 14100
  270. J=ODESC2(MATCH)
  271. IF((OADV(MATCH).EQ.WINNER).AND.QON(MATCH)) GO TO 14100
  272. RETURN
  273. C !SAFE
  274. C
  275. 14100 IF(PRSA.NE.TRNONW) GO TO 14200
  276. C !TURN ON?
  277. CALL RSPSUB(294,J)
  278. C !BOOM
  279. C !
  280. CALL JIGSUP(44)
  281. RETURN
  282. C
  283. 14200 IF(PRSA.NE.WALKIW) RETURN
  284. C !WALKIN?
  285. CALL RSPSUB(295,J)
  286. C !BOOM
  287. C !
  288. CALL JIGSUP(44)
  289. RETURN
  290. C
  291. C R15-- NO-OBJS. SEE IF EMPTY HANDED, SCORE LIGHT SHAFT.
  292. C
  293. 15000 EMPTHF=.TRUE.
  294. C !ASSUME TRUE.
  295. DO 15100 I=1,OLNT
  296. C !SEE IF CARRYING.
  297. IF(OADV(I).EQ.WINNER) EMPTHF=.FALSE.
  298. 15100 CONTINUE
  299. C
  300. IF((HERE.NE.BSHAF).OR.(.NOT.LIT(HERE))) RETURN
  301. CALL SCRUPD(LTSHFT)
  302. C !SCORE LIGHT SHAFT.
  303. LTSHFT=0
  304. C !NEVER AGAIN.
  305. RETURN
  306. C RAPPL1, PAGE 6
  307. C
  308. C R16-- MACHINE ROOM. DESCRIBE MACHINE.
  309. C
  310. 16000 IF(PRSA.NE.LOOKW) RETURN
  311. C !LOOK?
  312. I=46
  313. C !ASSUME LID CLOSED.
  314. IF(QOPEN(MACHI)) I=12
  315. C !IF OPEN, OPEN.
  316. CALL RSPSUB(45,I)
  317. C !DESCRIBE.
  318. RETURN
  319. C
  320. C R17-- BAT ROOM. UNLESS CARRYING GARLIC, FLY AWAY WITH ME...
  321. C
  322. 17000 IF(PRSA.NE.LOOKW) GO TO 17500
  323. C !LOOK?
  324. CALL RSPEAK(48)
  325. C !DESCRIBE ROOM.
  326. IF(OADV(GARLI).EQ.WINNER) CALL RSPEAK(49)
  327. C !BAT HOLDS NOSE.
  328. RETURN
  329. C
  330. 17500 IF((PRSA.NE.WALKIW).OR.(OADV(GARLI).EQ.WINNER)) RETURN
  331. CALL RSPEAK(50)
  332. C !TIME TO FLY, JACK.
  333. F=MOVETO(BATDRP(RND(9)+1),WINNER)
  334. C !SELECT RANDOM DEST.
  335. RAPPL1=.FALSE.
  336. C !INDICATE NEW DESC NEEDED.
  337. RETURN
  338. C
  339. C R18-- DOME ROOM. STATE DEPENDS ON WHETHER ROPE TIED TO RAILING.
  340. C
  341. 18000 IF(PRSA.NE.LOOKW) GO TO 18500
  342. C !LOOK?
  343. CALL RSPEAK(51)
  344. C !DESCRIBE.
  345. IF(DOMEF) CALL RSPEAK(52)
  346. C !IF ROPE, DESCRIBE.
  347. RETURN
  348. C
  349. 18500 IF(PRSA.EQ.LEAPW) CALL JIGSUP(53)
  350. C !DID HE JUMP???
  351. RETURN
  352. C
  353. C R19-- TORCH ROOM. ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING.
  354. C
  355. 19000 IF(PRSA.NE.LOOKW) RETURN
  356. C !LOOK?
  357. CALL RSPEAK(54)
  358. C !DESCRIBE.
  359. IF(DOMEF) CALL RSPEAK(55)
  360. C !IF ROPE, DESCRIBE.
  361. RETURN
  362. C
  363. C R20-- CAROUSEL ROOM. SPIN HIM OR KILL HIM.
  364. C
  365. 20000 IF(PRSA.NE.LOOKW) GO TO 20500
  366. C !LOOK?
  367. CALL RSPEAK(56)
  368. C !DESCRIBE.
  369. IF(.NOT.CAROFF) CALL RSPEAK(57)
  370. C !IF NOT FLIPPED, SPIN.
  371. RETURN
  372. C
  373. 20500 IF((PRSA.EQ.WALKIW).AND.CAROZF) CALL JIGSUP(58)
  374. C !WALKED IN.
  375. RETURN
  376. C RAPPL1, PAGE 7
  377. C
  378. C R21-- LLD ROOM. HANDLE EXORCISE, DESCRIPTIONS.
  379. C
  380. 21000 IF(PRSA.NE.LOOKW) GO TO 21500
  381. C !LOOK?
  382. CALL RSPEAK(59)
  383. C !DESCRIBE.
  384. IF(.NOT.LLDF) CALL RSPEAK(60)
  385. C !IF NOT VANISHED, GHOSTS.
  386. RETURN
  387. C
  388. 21500 IF(PRSA.NE.EXORCW) RETURN
  389. C !EXORCISE?
  390. IF((OADV(BELL).EQ.WINNER).AND.(OADV(BOOK).EQ.WINNER).AND.
  391. & (OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 21600
  392. CALL RSPEAK(62)
  393. C !NOT EQUIPPED.
  394. RETURN
  395. C
  396. 21600 IF(QHERE(GHOST,HERE)) GO TO 21700
  397. C !GHOST HERE?
  398. CALL JIGSUP(61)
  399. C !NOPE, EXORCISE YOU.
  400. RETURN
  401. C
  402. 21700 CALL NEWSTA(GHOST,63,0,0,0)
  403. C !VANISH GHOST.
  404. LLDF=.TRUE.
  405. C !OPEN GATE.
  406. RETURN
  407. C
  408. C R22-- LLD2-ROOM. IS HIS HEAD ON A POLE?
  409. C
  410. 22000 IF(PRSA.NE.LOOKW) RETURN
  411. C !LOOK?
  412. CALL RSPEAK(64)
  413. C !DESCRIBE.
  414. IF(ONPOLF) CALL RSPEAK(65)
  415. C !ON POLE?
  416. RETURN
  417. C
  418. C R23-- DAM ROOM. DESCRIBE RESERVOIR, PANEL.
  419. C
  420. 23000 IF(PRSA.NE.LOOKW) RETURN
  421. C !LOOK?
  422. CALL RSPEAK(66)
  423. C !DESCRIBE.
  424. I=67
  425. IF(LWTIDF) I=68
  426. CALL RSPEAK(I)
  427. C !DESCRIBE RESERVOIR.
  428. CALL RSPEAK(69)
  429. C !DESCRIBE PANEL.
  430. IF(GATEF) CALL RSPEAK(70)
  431. C !BUBBLE IS GLOWING.
  432. RETURN
  433. C
  434. C R24-- TREE ROOM
  435. C
  436. 24000 IF(PRSA.NE.LOOKW) RETURN
  437. C !LOOK?
  438. CALL RSPEAK(660)
  439. C !DESCRIBE.
  440. I=661
  441. C !SET FLAG FOR BELOW.
  442. DO 24200 J=1,OLNT
  443. C !DESCRIBE OBJ IN FORE3.
  444. IF(.NOT.QHERE(J,FORE3).OR.(J.EQ.FTREE)) GO TO 24200
  445. CALL RSPEAK(I)
  446. C !SET STAGE,
  447. I=0
  448. CALL RSPSUB(502,ODESC2(J))
  449. C !DESCRIBE.
  450. 24200 CONTINUE
  451. RETURN
  452. C RAPPL1, PAGE 8
  453. C
  454. C R25-- CYCLOPS-ROOM. DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
  455. C
  456. 25000 IF(PRSA.NE.LOOKW) RETURN
  457. C !LOOK?
  458. CALL RSPEAK(606)
  459. C !DESCRIBE.
  460. I=607
  461. C !ASSUME BASIC STATE.
  462. IF(RVCYC.GT.0) I=608
  463. C !>0? HUNGRY.
  464. IF(RVCYC.LT.0) I=609
  465. C !<0? THIRSTY.
  466. IF(CYCLOF) I=610
  467. C !ASLEEP?
  468. IF(MAGICF) I=611
  469. C !GONE?
  470. CALL RSPEAK(I)
  471. C !DESCRIBE.
  472. IF(.NOT.CYCLOF .AND.(RVCYC.NE.0))
  473. & CALL RSPEAK(193+IABS(RVCYC))
  474. RETURN
  475. C
  476. C R26-- BANK BOX ROOM.
  477. C
  478. 26000 IF(PRSA.NE.WALKIW) RETURN
  479. C !SURPRISE HIM.
  480. DO 26100 I=1,8,2
  481. C !SCOLRM DEPENDS ON
  482. IF(FROMDR.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
  483. 26100 CONTINUE
  484. C !ENTRY DIRECTION.
  485. RETURN
  486. C
  487. C R27-- TREASURE ROOM.
  488. C
  489. 27000 IF((PRSA.NE.WALKIW).OR. .NOT.THFACT)
  490. & RETURN
  491. IF(OROOM(THIEF).NE.HERE)
  492. & CALL NEWSTA(THIEF,82,HERE,0,0)
  493. THFPOS=HERE
  494. C !RESET SEARCH PATTERN.
  495. OFLAG2(THIEF)=IOR(OFLAG2(THIEF),FITEBT)
  496. IF(OROOM(CHALI).EQ.HERE)
  497. & OFLAG1(CHALI)=IAND(OFLAG1(CHALI),not(TAKEBT))
  498. C
  499. C VANISH EVERYTHING IN ROOM
  500. C
  501. J=0
  502. C !ASSUME NOTHING TO VANISH.
  503. DO 27200 I=1,OLNT
  504. IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE))
  505. & GO TO 27200
  506. J=83
  507. C !FLAG BYEBYE.
  508. OFLAG1(I)=IAND(OFLAG1(I),not(VISIBT))
  509. 27200 CONTINUE
  510. CALL RSPEAK(J)
  511. C !DESCRIBE.
  512. RETURN
  513. C
  514. C R28-- CLIFF FUNCTION. SEE IF CARRYING INFLATED BOAT.
  515. C
  516. 28000 DEFLAF=OADV(RBOAT).NE.WINNER
  517. C !TRUE IF NOT CARRYING.
  518. RETURN
  519. C RAPPL1, PAGE 9
  520. C
  521. C R29-- RIVR4 ROOM. PLAY WITH BUOY.
  522. C
  523. 29000 IF(.NOT.BUOYF.OR.(OADV(BUOY).NE.WINNER)) RETURN
  524. CALL RSPEAK(84)
  525. C !GIVE HINT,
  526. BUOYF=.FALSE.
  527. C !THEN DISABLE.
  528. RETURN
  529. C
  530. C R30-- OVERFALLS. DOOM.
  531. C
  532. 30000 IF(PRSA.NE.LOOKW) CALL JIGSUP(85)
  533. C !OVER YOU GO.
  534. RETURN
  535. C
  536. C R31-- BEACH ROOM. DIG A HOLE.
  537. C
  538. 31000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
  539. RVSND=RVSND+1
  540. C !INCREMENT DIG STATE.
  541. GO TO (31100,31100,31100,31400,31500),RVSND
  542. C !PROCESS STATE.
  543. CALL BUG(2,RVSND)
  544. C
  545. 31100 CALL RSPEAK(85+RVSND)
  546. C !1-3... DISCOURAGE HIM.
  547. RETURN
  548. C
  549. 31400 I=89
  550. C !ASSUME DISCOVERY.
  551. IF(IAND(OFLAG1(STATU),VISIBT).NE.0) I=88
  552. CALL RSPEAK(I)
  553. OFLAG1(STATU)=IOR(OFLAG1(STATU),VISIBT)
  554. RETURN
  555. C
  556. 31500 RVSND=0
  557. C !5... SAND COLLAPSES
  558. CALL JIGSUP(90)
  559. C !AND SO DOES HE.
  560. RETURN
  561. C
  562. C R32-- TCAVE ROOM. DIG A HOLE IN GUANO.
  563. C
  564. 32000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
  565. I=91
  566. C !ASSUME NO GUANO.
  567. IF(.NOT. QHERE(GUANO,HERE)) GO TO 32100
  568. C !IS IT HERE?
  569. RVGUA=MIN0(4,RVGUA+1)
  570. C !YES, SET NEW STATE.
  571. I=91+RVGUA
  572. C !GET NASTY REMARK.
  573. 32100 CALL RSPEAK(I)
  574. C !DESCRIBE.
  575. RETURN
  576. C
  577. C R33-- FALLS ROOM
  578. C
  579. 33000 IF(PRSA.NE.LOOKW) RETURN
  580. C !LOOK?
  581. CALL RSPEAK(96)
  582. C !DESCRIBE.
  583. I=97
  584. C !ASSUME NO RAINBOW.
  585. IF(RAINBF) I=98
  586. C !GOT ONE?
  587. CALL RSPEAK(I)
  588. C !DESCRIBE.
  589. RETURN
  590. C RAPPL1, PAGE 10
  591. C
  592. C R34-- LEDGE FUNCTION. LEDGE CAN COLLAPSE.
  593. C
  594. 34000 IF(PRSA.NE.LOOKW) RETURN
  595. C !LOOK?
  596. CALL RSPEAK(100)
  597. C !DESCRIBE.
  598. I=102
  599. C !ASSUME SAFE ROOM OK.
  600. IF(IAND(RFLAG(MSAFE),RMUNG).NE.0) I=101
  601. CALL RSPEAK(I)
  602. C !DESCRIBE.
  603. RETURN
  604. C
  605. C R35-- SAFE ROOM. STATE DEPENDS ON WHETHER SAFE BLOWN.
  606. C
  607. 35000 IF(PRSA.NE.LOOKW) RETURN
  608. C !LOOK?
  609. CALL RSPEAK(104)
  610. C !DESCRIBE.
  611. I=105
  612. C !ASSUME OK.
  613. IF(SAFEF) I=106
  614. C !BLOWN?
  615. CALL RSPEAK(I)
  616. C !DESCRIBE.
  617. RETURN
  618. C
  619. C R36-- MAGNET ROOM. DESCRIBE, CHECK FOR SPINDIZZY DOOM.
  620. C
  621. 36000 IF(PRSA.NE.LOOKW) GO TO 36500
  622. C !LOOK?
  623. CALL RSPEAK(107)
  624. C !DESCRIBE.
  625. RETURN
  626. C
  627. 36500 IF((PRSA.NE.WALKIW).OR. .NOT.CAROFF) RETURN
  628. C !WALKIN ON FLIPPED?
  629. IF(CAROZF) GO TO 36600
  630. C !ZOOM?
  631. CALL RSPEAK(108)
  632. C !NO, SPIN HIS COMPASS.
  633. RETURN
  634. C
  635. 36600 I=58
  636. C !SPIN HIS INSIDES.
  637. IF(WINNER.NE.PLAYER) I=99
  638. C !SPIN ROBOT.
  639. CALL JIGSUP(I)
  640. C !DEAD.
  641. RETURN
  642. C
  643. C R37-- CAGE ROOM. IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM.
  644. C
  645. 37000 IF(CAGESF) F=MOVETO(CAGER,WINNER)
  646. C !IF SOLVED, MOVE.
  647. RETURN
  648. C
  649. END