home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / dungeon / part28 < prev    next >
Encoding:
Internet Message Format  |  1992-02-23  |  47.3 KB

  1. Path: uunet!haven.umd.edu!darwin.sura.net!gatech!nntp.msstate.edu!emory!dragon.com!cts
  2. From: cts@dragon.com
  3. Newsgroups: vmsnet.sources.games
  4. Subject: Dungeon Part 28/30
  5. Message-ID: <1992Feb24.014014.821@dragon.com>
  6. Date: 24 Feb 92 06:40:13 GMT
  7. Organization: Computer Projects Unlimited
  8. Lines: 1466
  9.  
  10. $PART28:
  11. $ CALL UNPACK [.SRC]OFLAGS.LIB;1 1448158622
  12. $ create 'f'
  13. XC
  14. X      COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
  15. X      COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
  16. X      COMMON /OINDEX/`09LEAVE,TROLL,AXE
  17. X      COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
  18. X      COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
  19. X      COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
  20. X      COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
  21. X      COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
  22. X      COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
  23. X      COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
  24. X      COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
  25. X      COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
  26. X      COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
  27. X      COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
  28. X      COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
  29. X      COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
  30. X      COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
  31. X      COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
  32. X      COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
  33. X      COMMON /OINDEX/ WARNI,CSLIT,GCARD,STLDR
  34. X      COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
  35. X      COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
  36. $ CALL UNPACK [.SRC]OINDEX.LIB;1 658703041
  37. $ create 'f'
  38. XC
  39. XC PARSER OUTPUT
  40. XC
  41. X      LOGICAL PRSWON
  42. X      COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
  43. XC
  44. XC PARSER STATE
  45. XC
  46. X      COMMON /ORPHS/ OFLAG,OACT,OSLOT,OPREP,ONAME
  47. X      INTEGER ORP(5)
  48. X      EQUIVALENCE (OFLAG, ORP)
  49. XC
  50. X      COMMON /LAST/ LASTIT
  51. XC
  52. X      COMMON /PV/ ACT,O1,O2,P1,P2
  53. X      INTEGER OBJVEC(2),PRPVEC(2),PVEC(5)
  54. X      EQUIVALENCE (OBJVEC(1),O1),(PRPVEC(1),P1),(PVEC(1),ACT)
  55. XC
  56. X      COMMON /SYNTAX/ VFLAG,DOBJ,DFL1,DFL2,DFW1,DFW2,
  57. X     &`09`09IOBJ,IFL1,IFL2,IFW1,IFW2
  58. X      INTEGER SYN(11)
  59. X      EQUIVALENCE (VFLAG, SYN)
  60. XC
  61. X      COMMON /SYNFLG/ SDIR,SIND,SSTD,SFLIP,SDRIV,SVMASK
  62. XC
  63. X      COMMON /OBJFLG/ VABIT,VRBIT,VTBIT,VCBIT,VEBIT,VFBIT,VPMASK
  64. $ CALL UNPACK [.SRC]PARSER.LIB;1 1514015862
  65. $ create 'f'
  66. XC
  67. XC PUZZLE ROOM STATE
  68. XC
  69. X      COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64)
  70. $ CALL UNPACK [.SRC]PUZZLE.LIB;1 426144814
  71. $ create 'f'
  72. X      common /random/ seed
  73. $ CALL UNPACK [.SRC]RANDOM.LIB;1 1212286677
  74. $ create 'f'
  75. XC
  76. X      COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
  77. X     &`09`09RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
  78. $ CALL UNPACK [.SRC]RFLAG.LIB;1 359941088
  79. $ create 'f'
  80. XC
  81. X      COMMON /RINDEX/ WHOUS,LROOM,CELLA
  82. X      COMMON /RINDEX/ MTROL,MAZE1
  83. X      COMMON /RINDEX/ MGRAT,MAZ15
  84. X      COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
  85. X      COMMON /RINDEX/ STREA,EGYPT,ECHOR
  86. X      COMMON /RINDEX/ TSHAF
  87. X      COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
  88. X      COMMON /RINDEX/ CAROU
  89. X      COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
  90. X      COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
  91. X      COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
  92. X      COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
  93. X      COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
  94. X      COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
  95. X      COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
  96. X      COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
  97. X      COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
  98. X      COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
  99. X      COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
  100. X      COMMON /RINDEX/ CPANT,CPOUT,CPUZZ
  101. $ CALL UNPACK [.SRC]RINDEX.LIB;1 1902711731
  102. $ create 'f'
  103. XC RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1
  104. XC
  105. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  106. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  107. XC WRITTEN BY R. M. SUPNIK
  108. XC
  109. XC DECLARATIONS
  110. XC
  111. X      LOGICAL FUNCTION RAPPL1(RI)
  112. X      IMPLICIT INTEGER (A-Z)
  113. X      LOGICAL QOPEN,QON,QHERE,PROB,F
  114. X      LOGICAL MOVETO,LIT
  115. X
  116. X      INCLUDE 'PARSER.LIB'
  117. X      INCLUDE 'GAMESTATE.LIB'
  118. X      INCLUDE 'STATE.LIB'
  119. XC
  120. XC SCREEN OF LIGHT
  121. XC
  122. X      COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
  123. X      COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
  124. XC
  125. XC MISCELLANEOUS VARIABLES
  126. XC
  127. X      COMMON /BATS/ BATDRP(9)
  128. X
  129. X      INCLUDE 'ROOMS.LIB'
  130. X      INCLUDE 'RFLAG.LIB'
  131. X      INCLUDE 'RINDEX.LIB'
  132. X      INCLUDE 'OBJECTS.LIB'
  133. X      INCLUDE 'OFLAGS.LIB'
  134. X      INCLUDE 'OINDEX.LIB'
  135. X      INCLUDE 'CLOCK.LIB'
  136. X      INCLUDE 'VILLIANS.LIB'
  137. X      INCLUDE 'ADVERS.LIB'
  138. X      INCLUDE 'VERBS.LIB'
  139. X      INCLUDE 'FLAGS.LIB'
  140. XC
  141. XC FUNCTIONS AND DATA
  142. XC
  143. X      QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  144. X      QON(R)=and(OFLAG1(R),ONBT).NE.0
  145. X`0C
  146. XC RAPPL1, PAGE 2
  147. XC
  148. X      RAPPL1=.TRUE.
  149. XC                                               !USUALLY IGNORED.
  150. X      IF(RI.EQ.0) RETURN
  151. XC                                               !RETURN IF NAUGHT.
  152. XC
  153. XC                                               !SET TO FALSE FOR
  154. XC
  155. XC                                               !NEW DESC NEEDED.
  156. X      GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
  157. X     &   11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
  158. X     &   21000,22000,23000,24000,25000,26000,27000,28000,29000,30000,
  159. X     &   31000,32000,33000,34000,35000,36000,37000),RI
  160. X      CALL BUG(1,RI)
  161. XC
  162. XC R1--  EAST OF HOUSE.  DESCRIPTION DEPENDS ON STATE OF WINDOW
  163. XC
  164. X1000  IF(PRSA.NE.LOOKW) RETURN
  165. XC                                               !LOOK?
  166. X      I=13
  167. XC                                               !ASSUME CLOSED.
  168. X      IF(QOPEN(WINDO)) I=12
  169. XC                                               !IF OPEN, AJAR.
  170. X      CALL RSPSUB(11,I)
  171. XC                                               !DESCRIBE.
  172. X      RETURN
  173. XC
  174. XC R2--  KITCHEN.  SAME VIEW FROM INSIDE.
  175. XC
  176. X2000  IF(PRSA.NE.LOOKW) RETURN
  177. XC                                               !LOOK?
  178. X      I=13
  179. XC                                               !ASSUME CLOSED.
  180. X      IF(QOPEN(WINDO)) I=12
  181. XC                                               !IF OPEN, AJAR.
  182. X      CALL RSPSUB(14,I)
  183. XC                                               !DESCRIBE.
  184. X      RETURN
  185. XC
  186. XC R3--  LIVING ROOM.  DESCRIPTION DEPENDS ON MAGICF (STATE OF
  187. XC       DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED)
  188. XC
  189. X3000  IF(PRSA.NE.LOOKW) GO TO 3500
  190. XC                                               !LOOK?
  191. X      I=15
  192. XC                                               !ASSUME NO HOLE.
  193. X      IF(MAGICF) I=16
  194. XC                                               !IF MAGICF, CYCLOPS HOLE.
  195. X      CALL RSPEAK(I)
  196. XC                                               !DESCRIBE.
  197. X      I=17+ORRUG
  198. XC                                               !ASSUME INITIAL STATE.
  199. X      IF(QOPEN(DOOR)) I=I+2
  200. XC                                               !DOOR OPEN?
  201. X      CALL RSPEAK(I)
  202. XC                                               !DESCRIBE.
  203. X      RETURN
  204. XC
  205. XC       NOT A LOOK WORD.  REEVALUATE TROPHY CASE.
  206. XC
  207. X3500  IF((PRSA.NE.TAKEW).AND.((PRSA.NE.PUTW).OR.(PRSI.NE.TCASE)))
  208. X     &          RETURN
  209. X      ASCORE(WINNER)=RWSCOR
  210. XC                                               !SCORE TROPHY CASE.
  211. X      DO 3600 I=1,OLNT
  212. XC                                               !RETAIN RAW SCORE AS WELL.
  213. X        J=I
  214. XC                                               !FIND OUT IF IN CASE.
  215. X3550    J=OCAN(J)
  216. XC                                               !TRACE OWNERSHIP.
  217. X        IF(J.EQ.0) GO TO 3600
  218. X        IF(J.NE.TCASE) GO TO 3550
  219. XC                                               !DO ALL LEVELS.
  220. X        ASCORE(WINNER)=ASCORE(WINNER)+OTVAL(I)
  221. X3600  CONTINUE
  222. X      CALL SCRUPD(0)
  223. XC                                               !SEE IF ENDGAME TRIG.
  224. X      RETURN
  225. X`0C
  226. XC RAPPL1, PAGE 3
  227. XC
  228. XC R4--  CELLAR.  SHUT DOOR AND BAR IT IF HE JUST WALKED IN.
  229. XC
  230. X4000  IF(PRSA.NE.LOOKW) GO TO 4500
  231. XC                                               !LOOK?
  232. X      CALL RSPEAK(21)
  233. XC                                               !DESCRIBE CELLAR.
  234. X      RETURN
  235. XC
  236. X4500  IF(PRSA.NE.WALKIW) RETURN
  237. XC                                               !WALKIN?
  238. X      IF(and(OFLAG2(DOOR),(OPENBT+TCHBT)).NE.OPENBT) RETURN
  239. X      OFLAG2(DOOR)=and( or(OFLAG2(DOOR),TCHBT), not(OPENBT))
  240. X      CALL RSPEAK(22)
  241. XC                                               !SLAM AND BOLT DOOR.
  242. X      RETURN
  243. XC
  244. XC R5--  MAZE11.  DESCRIBE STATE OF GRATING.
  245. XC
  246. X5000  IF(PRSA.NE.LOOKW) RETURN
  247. XC                                               !LOOK?
  248. X      CALL RSPEAK(23)
  249. XC                                               !DESCRIBE.
  250. X      I=24
  251. XC                                               !ASSUME LOCKED.
  252. X      IF(GRUNLF) I=26
  253. XC                                               !UNLOCKED?
  254. X      IF(QOPEN(GRATE)) I=25
  255. XC                                               !OPEN?
  256. X      CALL RSPEAK(I)
  257. XC                                               !DESCRIBE GRATE.
  258. X      RETURN
  259. XC
  260. XC R6--  CLEARING.  DESCRIBE CLEARING, MOVE LEAVES.
  261. XC
  262. X6000  IF(PRSA.NE.LOOKW) GO TO 6500
  263. XC                                               !LOOK?
  264. X      CALL RSPEAK(27)
  265. XC                                               !DESCRIBE.
  266. X      IF(RVCLR.EQ.0) RETURN
  267. XC                                               !LEAVES MOVED?
  268. X      I=28
  269. XC                                               !YES, ASSUME GRATE CLOSED.
  270. X      IF(QOPEN(GRATE)) I=29
  271. XC                                               !OPEN?
  272. X      CALL RSPEAK(I)
  273. XC                                               !DESCRIBE GRATE.
  274. X      RETURN
  275. XC
  276. X6500  IF((RVCLR.NE.0).OR.(QHERE(LEAVE,CLEAR).AND.
  277. X     &   ((PRSA.NE.MOVEW).OR.(PRSO.NE.LEAVE)))) RETURN
  278. X      CALL RSPEAK(30)
  279. XC                                               !MOVE LEAVES, REVEAL GRATE.
  280. X      RVCLR=1
  281. XC                                               !INDICATE LEAVES MOVED.
  282. X      RETURN
  283. X`0C
  284. XC RAPPL1, PAGE 4
  285. XC
  286. XC R7--  RESERVOIR SOUTH.  DESCRIPTION DEPENDS ON LOW TIDE FLAG.
  287. XC
  288. X7000  IF(PRSA.NE.LOOKW) RETURN
  289. XC                                               !LOOK?
  290. X      I=31
  291. XC                                               !ASSUME FULL.
  292. X      IF(LWTIDF) I=32
  293. XC                                               !IF LOW TIDE, EMPTY.
  294. X      CALL RSPEAK(I)
  295. XC                                               !DESCRIBE.
  296. X      CALL RSPEAK(33)
  297. XC                                               !DESCRIBE EXITS.
  298. X      RETURN
  299. XC
  300. XC R8--  RESERVOIR.  STATE DEPENDS ON LOW TIDE FLAG.
  301. XC
  302. X8000  IF(PRSA.NE.LOOKW) RETURN
  303. XC                                               !LOOK?
  304. X      I=34
  305. XC                                               !ASSUME FULL.
  306. X      IF(LWTIDF) I=35
  307. XC                                               !IF LOW TIDE, EMTPY.
  308. X      CALL RSPEAK(I)
  309. XC                                               !DESCRIBE.
  310. X      RETURN
  311. XC
  312. XC R9--  RESERVOIR NORTH.  ALSO DEPENDS ON LOW TIDE FLAG.
  313. XC
  314. X9000  IF(PRSA.NE.LOOKW) RETURN
  315. XC                                               !LOOK?
  316. X      I=36
  317. XC                                               !YOU GET THE IDEA.
  318. X      IF(LWTIDF) I=37
  319. X      CALL RSPEAK(I)
  320. X      CALL RSPEAK(38)
  321. X      RETURN
  322. XC
  323. XC R10-- GLACIER ROOM.  STATE DEPENDS ON MELTED, VANISHED FLAGS.
  324. XC
  325. X10000 IF(PRSA.NE.LOOKW) RETURN
  326. XC                                               !LOOK?
  327. X      CALL RSPEAK(39)
  328. XC                                               !BASIC DESCRIPTION.
  329. X      I=0
  330. XC                                               !ASSUME NO CHANGES.
  331. X      IF(GLACMF) I=40
  332. XC                                               !PARTIAL MELT?
  333. X      IF(GLACRF) I=41
  334. XC                                               !COMPLETE MELT?
  335. X      CALL RSPEAK(I)
  336. XC                                               !DESCRIBE.
  337. X      RETURN
  338. XC
  339. XC R11-- FOREST ROOM
  340. XC
  341. X11000 IF(PRSA.EQ.WALKIW) CFLAG(CEVFOR)=.TRUE.
  342. XC                                               !IF WALK IN, BIRDIE.
  343. X      RETURN
  344. XC
  345. XC R12-- MIRROR ROOM.  STATE DEPENDS ON MIRROR INTACT.
  346. XC
  347. X12000 IF(PRSA.NE.LOOKW) RETURN
  348. XC                                               !LOOK?
  349. X      CALL RSPEAK(42)
  350. XC                                               !DESCRIBE.
  351. X      IF(MIRRMF) CALL RSPEAK(43)
  352. XC                                               !IF BROKEN, NASTY REMARK.
  353. X      RETURN
  354. X`0C
  355. XC RAPPL1, PAGE 5
  356. XC
  357. XC R13-- CAVE2 ROOM.  BLOW OUT CANDLES WITH 50% PROBABILITY.
  358. XC
  359. X13000 IF(PRSA.NE.WALKIW) RETURN
  360. XC                                               !WALKIN?
  361. X      IF(PROB(50,50).OR.(OADV(CANDL).NE.WINNER).OR.
  362. X     &          .NOT.QON(CANDL)) RETURN
  363. X      OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT))
  364. X      CALL RSPEAK(47)
  365. XC                                               !TELL OF WINDS.
  366. X      CFLAG(CEVCND)=.FALSE.
  367. XC                                               !HALT CANDLE COUNTDOWN.
  368. X      RETURN
  369. XC
  370. XC R14-- BOOM ROOM.  BLOW HIM UP IF CARRYING FLAMING OBJECT.
  371. XC
  372. X14000 J=ODESC2(CANDL)
  373. XC                                               !ASSUME CANDLE.
  374. X      IF((OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 14100
  375. X      J=ODESC2(TORCH)
  376. XC                                               !ASSUME TORCH.
  377. X      IF((OADV(TORCH).EQ.WINNER).AND.QON(TORCH)) GO TO 14100
  378. X      J=ODESC2(MATCH)
  379. X      IF((OADV(MATCH).EQ.WINNER).AND.QON(MATCH)) GO TO 14100
  380. X      RETURN
  381. XC                                               !SAFE
  382. XC
  383. X14100 IF(PRSA.NE.TRNONW) GO TO 14200
  384. XC                                               !TURN ON?
  385. X      CALL RSPSUB(294,J)
  386. XC                                               !BOOM
  387. XC                                               !
  388. X      CALL JIGSUP(44)
  389. X      RETURN
  390. XC
  391. X14200 IF(PRSA.NE.WALKIW) RETURN
  392. XC                                               !WALKIN?
  393. X      CALL RSPSUB(295,J)
  394. XC                                               !BOOM
  395. XC                                               !
  396. X      CALL JIGSUP(44)
  397. X      RETURN
  398. XC
  399. XC R15-- NO-OBJS.  SEE IF EMPTY HANDED, SCORE LIGHT SHAFT.
  400. XC
  401. X15000 EMPTHF=.TRUE.
  402. XC                                               !ASSUME TRUE.
  403. X      DO 15100 I=1,OLNT
  404. XC                                               !SEE IF CARRYING.
  405. X        IF(OADV(I).EQ.WINNER) EMPTHF=.FALSE.
  406. X15100 CONTINUE
  407. XC
  408. X      IF((HERE.NE.BSHAF).OR.(.NOT.LIT(HERE))) RETURN
  409. X      CALL SCRUPD(LTSHFT)
  410. XC                                               !SCORE LIGHT SHAFT.
  411. X      LTSHFT=0
  412. XC                                               !NEVER AGAIN.
  413. X      RETURN
  414. X`0C
  415. XC RAPPL1, PAGE 6
  416. XC
  417. XC R16-- MACHINE ROOM.  DESCRIBE MACHINE.
  418. XC
  419. X16000 IF(PRSA.NE.LOOKW) RETURN
  420. XC                                               !LOOK?
  421. X      I=46
  422. XC                                               !ASSUME LID CLOSED.
  423. X      IF(QOPEN(MACHI)) I=12
  424. XC                                               !IF OPEN, OPEN.
  425. X      CALL RSPSUB(45,I)
  426. XC                                               !DESCRIBE.
  427. X      RETURN
  428. XC
  429. XC R17-- BAT ROOM.  UNLESS CARRYING GARLIC, FLY AWAY WITH ME...
  430. XC
  431. X17000 IF(PRSA.NE.LOOKW) GO TO 17500
  432. XC                                               !LOOK?
  433. X      CALL RSPEAK(48)
  434. XC                                               !DESCRIBE ROOM.
  435. X      IF(OADV(GARLI).EQ.WINNER) CALL RSPEAK(49)
  436. XC                                               !BAT HOLDS NOSE.
  437. X      RETURN
  438. XC
  439. X17500 IF((PRSA.NE.WALKIW).OR.(OADV(GARLI).EQ.WINNER)) RETURN
  440. X      CALL RSPEAK(50)
  441. XC                                               !TIME TO FLY, JACK.
  442. X      F=MOVETO(BATDRP(RND(9)+1),WINNER)
  443. XC                                               !SELECT RANDOM DEST.
  444. X      RAPPL1=.FALSE.
  445. XC                                               !INDICATE NEW DESC NEEDED.
  446. X      RETURN
  447. XC
  448. XC R18-- DOME ROOM.  STATE DEPENDS ON WHETHER ROPE TIED TO RAILING.
  449. XC
  450. X18000 IF(PRSA.NE.LOOKW) GO TO 18500
  451. XC                                               !LOOK?
  452. X      CALL RSPEAK(51)
  453. XC                                               !DESCRIBE.
  454. X      IF(DOMEF) CALL RSPEAK(52)
  455. XC                                               !IF ROPE, DESCRIBE.
  456. X      RETURN
  457. XC
  458. X18500 IF(PRSA.EQ.LEAPW) CALL JIGSUP(53)
  459. XC                                               !DID HE JUMP???
  460. X      RETURN
  461. XC
  462. XC R19-- TORCH ROOM.  ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING.
  463. XC
  464. X19000 IF(PRSA.NE.LOOKW) RETURN
  465. XC                                               !LOOK?
  466. X      CALL RSPEAK(54)
  467. XC                                               !DESCRIBE.
  468. X      IF(DOMEF) CALL RSPEAK(55)
  469. XC                                               !IF ROPE, DESCRIBE.
  470. X      RETURN
  471. XC
  472. XC R20-- CAROUSEL ROOM.  SPIN HIM OR KILL HIM.
  473. XC
  474. X20000 IF(PRSA.NE.LOOKW) GO TO 20500
  475. XC                                               !LOOK?
  476. X      CALL RSPEAK(56)
  477. XC                                               !DESCRIBE.
  478. X      IF(.NOT.CAROFF) CALL RSPEAK(57)
  479. XC                                               !IF NOT FLIPPED, SPIN.
  480. X      RETURN
  481. XC
  482. X20500 IF((PRSA.EQ.WALKIW).AND.CAROZF) CALL JIGSUP(58)
  483. XC                                               !WALKED IN.
  484. X      RETURN
  485. X`0C
  486. XC RAPPL1, PAGE 7
  487. XC
  488. XC R21-- LLD ROOM.  HANDLE EXORCISE, DESCRIPTIONS.
  489. XC
  490. X21000 IF(PRSA.NE.LOOKW) GO TO 21500
  491. XC                                               !LOOK?
  492. X      CALL RSPEAK(59)
  493. XC                                               !DESCRIBE.
  494. X      IF(.NOT.LLDF) CALL RSPEAK(60)
  495. XC                                               !IF NOT VANISHED, GHOSTS.
  496. X      RETURN
  497. XC
  498. X21500 IF(PRSA.NE.EXORCW) RETURN
  499. XC                                               !EXORCISE?
  500. X      IF((OADV(BELL).EQ.WINNER).AND.(OADV(BOOK).EQ.WINNER).AND.
  501. X     &          (OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 21600
  502. X      CALL RSPEAK(62)
  503. XC                                               !NOT EQUIPPED.
  504. X      RETURN
  505. XC
  506. X21600 IF(QHERE(GHOST,HERE)) GO TO 21700
  507. XC                                               !GHOST HERE?
  508. X      CALL JIGSUP(61)
  509. XC                                               !NOPE, EXORCISE YOU.
  510. X      RETURN
  511. XC
  512. X21700 CALL NEWSTA(GHOST,63,0,0,0)
  513. XC                                               !VANISH GHOST.
  514. X      LLDF=.TRUE.
  515. XC                                               !OPEN GATE.
  516. X      RETURN
  517. XC
  518. XC R22-- LLD2-ROOM.  IS HIS HEAD ON A POLE?
  519. XC
  520. X22000 IF(PRSA.NE.LOOKW) RETURN
  521. XC                                               !LOOK?
  522. X      CALL RSPEAK(64)
  523. XC                                               !DESCRIBE.
  524. X      IF(ONPOLF) CALL RSPEAK(65)
  525. XC                                               !ON POLE?
  526. X      RETURN
  527. XC
  528. XC R23-- DAM ROOM.  DESCRIBE RESERVOIR, PANEL.
  529. XC
  530. X23000 IF(PRSA.NE.LOOKW) RETURN
  531. XC                                               !LOOK?
  532. X      CALL RSPEAK(66)
  533. XC                                               !DESCRIBE.
  534. X      I=67
  535. X      IF(LWTIDF) I=68
  536. X      CALL RSPEAK(I)
  537. XC                                               !DESCRIBE RESERVOIR.
  538. X      CALL RSPEAK(69)
  539. XC                                               !DESCRIBE PANEL.
  540. X      IF(GATEF) CALL RSPEAK(70)
  541. XC                                               !BUBBLE IS GLOWING.
  542. X      RETURN
  543. XC
  544. XC R24-- TREE ROOM
  545. XC
  546. X24000 IF(PRSA.NE.LOOKW) RETURN
  547. XC                                               !LOOK?
  548. X      CALL RSPEAK(660)
  549. XC                                               !DESCRIBE.
  550. X      I=661
  551. XC                                               !SET FLAG FOR BELOW.
  552. X      DO 24200 J=1,OLNT
  553. XC                                               !DESCRIBE OBJ IN FORE3.
  554. X        IF(.NOT.QHERE(J,FORE3).OR.(J.EQ.FTREE)) GO TO 24200
  555. X        CALL RSPEAK(I)
  556. XC                                               !SET STAGE,
  557. X        I=0
  558. X        CALL RSPSUB(502,ODESC2(J))
  559. XC                                               !DESCRIBE.
  560. X24200 CONTINUE
  561. X      RETURN
  562. X`0C
  563. XC RAPPL1, PAGE 8
  564. XC
  565. XC R25-- CYCLOPS-ROOM.  DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
  566. XC
  567. X25000 IF(PRSA.NE.LOOKW) RETURN
  568. XC                                               !LOOK?
  569. X      CALL RSPEAK(606)
  570. XC                                               !DESCRIBE.
  571. X      I=607
  572. XC                                               !ASSUME BASIC STATE.
  573. X      IF(RVCYC.GT.0) I=608
  574. XC                                               !>0?  HUNGRY.
  575. X      IF(RVCYC.LT.0) I=609
  576. XC                                               !<0?  THIRSTY.
  577. X      IF(CYCLOF) I=610
  578. XC                                               !ASLEEP?
  579. X      IF(MAGICF) I=611
  580. XC                                               !GONE?
  581. X      CALL RSPEAK(I)
  582. XC                                               !DESCRIBE.
  583. X      IF(.NOT.CYCLOF .AND.(RVCYC.NE.0))
  584. X     &          CALL RSPEAK(193+IABS(RVCYC))
  585. X      RETURN
  586. XC
  587. XC R26-- BANK BOX ROOM.
  588. XC
  589. X26000 IF(PRSA.NE.WALKIW) RETURN
  590. XC                                               !SURPRISE HIM.
  591. X      DO 26100 I=1,8,2
  592. XC                                               !SCOLRM DEPENDS ON
  593. X        IF(FROMDR.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
  594. X26100 CONTINUE
  595. XC                                               !ENTRY DIRECTION.
  596. X      RETURN
  597. XC
  598. XC R27-- TREASURE ROOM.
  599. XC
  600. X27000 IF((PRSA.NE.WALKIW).OR. .NOT.THFACT)
  601. X     &  RETURN
  602. X      IF(OROOM(THIEF).NE.HERE)
  603. X     &  CALL NEWSTA(THIEF,82,HERE,0,0)
  604. X      THFPOS=HERE
  605. XC                                               !RESET SEARCH PATTERN.
  606. X      OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT)
  607. X      IF(OROOM(CHALI).EQ.HERE)
  608. X     &  OFLAG1(CHALI)=and(OFLAG1(CHALI),not(TAKEBT))
  609. XC
  610. XC       VANISH EVERYTHING IN ROOM
  611. XC
  612. X      J=0
  613. XC                                               !ASSUME NOTHING TO VANISH.
  614. X      DO 27200 I=1,OLNT
  615. X        IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE))
  616. X     &    GO TO 27200
  617. X        J=83
  618. XC                                               !FLAG BYEBYE.
  619. X        OFLAG1(I)=and(OFLAG1(I),not(VISIBT))
  620. X27200 CONTINUE
  621. X      CALL RSPEAK(J)
  622. XC                                               !DESCRIBE.
  623. X      RETURN
  624. XC
  625. XC R28-- CLIFF FUNCTION.  SEE IF CARRYING INFLATED BOAT.
  626. XC
  627. X28000 DEFLAF=OADV(RBOAT).NE.WINNER
  628. XC                                               !TRUE IF NOT CARRYING.
  629. X      RETURN
  630. X`0C
  631. XC RAPPL1, PAGE 9
  632. XC
  633. XC R29-- RIVR4 ROOM.  PLAY WITH BUOY.
  634. XC
  635. X29000 IF(.NOT.BUOYF.OR.(OADV(BUOY).NE.WINNER)) RETURN
  636. X      CALL RSPEAK(84)
  637. XC                                               !GIVE HINT,
  638. X      BUOYF=.FALSE.
  639. XC                                               !THEN DISABLE.
  640. X      RETURN
  641. XC
  642. XC R30-- OVERFALLS.  DOOM.
  643. XC
  644. X30000 IF(PRSA.NE.LOOKW) CALL JIGSUP(85)
  645. XC                                               !OVER YOU GO.
  646. X      RETURN
  647. XC
  648. XC R31-- BEACH ROOM.  DIG A HOLE.
  649. XC
  650. X31000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
  651. X      RVSND=RVSND+1
  652. XC                                               !INCREMENT DIG STATE.
  653. X      GO TO (31100,31100,31100,31400,31500),RVSND
  654. XC                                               !PROCESS STATE.
  655. X      CALL BUG(2,RVSND)
  656. XC
  657. X31100 CALL RSPEAK(85+RVSND)
  658. XC                                               !1-3... DISCOURAGE HIM.
  659. X      RETURN
  660. XC
  661. X31400 I=89
  662. XC                                               !ASSUME DISCOVERY.
  663. X      IF(and(OFLAG1(STATU),VISIBT).NE.0) I=88
  664. X      CALL RSPEAK(I)
  665. X      OFLAG1(STATU)=or(OFLAG1(STATU),VISIBT)
  666. X      RETURN
  667. XC
  668. X31500 RVSND=0
  669. XC                                               !5... SAND COLLAPSES
  670. X      CALL JIGSUP(90)
  671. XC                                               !AND SO DOES HE.
  672. X      RETURN
  673. XC
  674. XC R32-- TCAVE ROOM.  DIG A HOLE IN GUANO.
  675. XC
  676. X32000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
  677. X      I=91
  678. XC                                               !ASSUME NO GUANO.
  679. X      IF(.NOT. QHERE(GUANO,HERE)) GO TO 32100
  680. XC                                               !IS IT HERE?
  681. X      RVGUA=MIN0(4,RVGUA+1)
  682. XC                                               !YES, SET NEW STATE.
  683. X      I=91+RVGUA
  684. XC                                               !GET NASTY REMARK.
  685. X32100 CALL RSPEAK(I)
  686. XC                                               !DESCRIBE.
  687. X      RETURN
  688. XC
  689. XC R33-- FALLS ROOM
  690. XC
  691. X33000 IF(PRSA.NE.LOOKW) RETURN
  692. XC                                               !LOOK?
  693. X      CALL RSPEAK(96)
  694. XC                                               !DESCRIBE.
  695. X      I=97
  696. XC                                               !ASSUME NO RAINBOW.
  697. X      IF(RAINBF) I=98
  698. XC                                               !GOT ONE?
  699. X      CALL RSPEAK(I)
  700. XC                                               !DESCRIBE.
  701. X      RETURN
  702. X`0C
  703. XC RAPPL1, PAGE 10
  704. XC
  705. XC R34-- LEDGE FUNCTION.  LEDGE CAN COLLAPSE.
  706. XC
  707. X34000 IF(PRSA.NE.LOOKW) RETURN
  708. XC                                               !LOOK?
  709. X      CALL RSPEAK(100)
  710. XC                                               !DESCRIBE.
  711. X      I=102
  712. XC                                               !ASSUME SAFE ROOM OK.
  713. X      IF(and(RFLAG(MSAFE),RMUNG).NE.0) I=101
  714. X      CALL RSPEAK(I)
  715. XC                                               !DESCRIBE.
  716. X      RETURN
  717. XC
  718. XC R35-- SAFE ROOM.  STATE DEPENDS ON WHETHER SAFE BLOWN.
  719. XC
  720. X35000 IF(PRSA.NE.LOOKW) RETURN
  721. XC                                               !LOOK?
  722. X      CALL RSPEAK(104)
  723. XC                                               !DESCRIBE.
  724. X      I=105
  725. XC                                               !ASSUME OK.
  726. X      IF(SAFEF) I=106
  727. XC                                               !BLOWN?
  728. X      CALL RSPEAK(I)
  729. XC                                               !DESCRIBE.
  730. X      RETURN
  731. XC
  732. XC R36-- MAGNET ROOM.  DESCRIBE, CHECK FOR SPINDIZZY DOOM.
  733. XC
  734. X36000 IF(PRSA.NE.LOOKW) GO TO 36500
  735. XC                                               !LOOK?
  736. X      CALL RSPEAK(107)
  737. XC                                               !DESCRIBE.
  738. X      RETURN
  739. XC
  740. X36500 IF((PRSA.NE.WALKIW).OR. .NOT.CAROFF) RETURN
  741. XC                                               !WALKIN ON FLIPPED?
  742. X      IF(CAROZF) GO TO 36600
  743. XC                                               !ZOOM?
  744. X      CALL RSPEAK(108)
  745. XC                                               !NO, SPIN HIS COMPASS.
  746. X      RETURN
  747. XC
  748. X36600 I=58
  749. XC                                               !SPIN HIS INSIDES.
  750. X      IF(WINNER.NE.PLAYER) I=99
  751. XC                                               !SPIN ROBOT.
  752. X      CALL JIGSUP(I)
  753. XC                                               !DEAD.
  754. X      RETURN
  755. XC
  756. XC R37-- CAGE ROOM.  IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM.
  757. XC
  758. X37000 IF(CAGESF) F=MOVETO(CAGER,WINNER)
  759. XC                                               !IF SOLVED, MOVE.
  760. X      RETURN
  761. XC
  762. X      END
  763. $ CALL UNPACK [.SRC]ROOMS.FOR;1 105224191
  764. $ create 'f'
  765. XC
  766. XC ROOMS
  767. XC
  768. X      COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200),
  769. X     &`09`09RACTIO(200),RVAL(200),RFLAG(200)
  770. X      INTEGER RRAND(200)
  771. X      EQUIVALENCE (RVAL,RRAND)
  772. X      INTEGER EQR(200,5)
  773. X      EQUIVALENCE (RDESC1, EQR)
  774. $ CALL UNPACK [.SRC]ROOMS.LIB;1 319174142
  775. $ create 'f'
  776. XC
  777. XC SCREEN OF LIGHT
  778. XC
  779. X      COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
  780. X      COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
  781. $ CALL UNPACK [.SRC]SCREEN.LIB;1 168628393
  782. $ create 'f'
  783. XC SOBJS-        SIMPLE OBJECTS PROCESSOR
  784. XC       OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
  785. XC       MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
  786. XC
  787. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  788. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  789. XC WRITTEN BY R. M. SUPNIK
  790. XC
  791. XC DECLARATIONS
  792. XC
  793. X      LOGICAL FUNCTION SOBJS(RI,ARG)
  794. X      IMPLICIT INTEGER (A-Z)
  795. X      LOGICAL QOPEN
  796. X      LOGICAL MOVETO,OPNCLS,LIT
  797. X      LOGICAL QHERE,F
  798. X
  799. X      INCLUDE 'PARSER.LIB'
  800. X      INCLUDE 'GAMESTATE.LIB'
  801. X      INCLUDE 'STATE.LIB'
  802. X      INCLUDE 'ROOMS.LIB'
  803. X      INCLUDE 'RFLAG.LIB'
  804. X      INCLUDE 'RINDEX.LIB'
  805. X      INCLUDE 'OBJECTS.LIB'
  806. X      INCLUDE 'OFLAGS.LIB'
  807. X      INCLUDE 'OINDEX.LIB'
  808. X      INCLUDE 'CLOCK.LIB'
  809. X
  810. X      INCLUDE 'VILLIANS.LIB'
  811. X      INCLUDE 'ADVERS.LIB'
  812. X      INCLUDE 'VERBS.LIB'
  813. X      INCLUDE 'FLAGS.LIB'
  814. XC
  815. XC FUNCTIONS AND DATA
  816. XC
  817. X      QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  818. X`0C
  819. XC SOBJS, PAGE 2
  820. XC
  821. X      IF(PRSO.GT.220) GO TO 5
  822. X      IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  823. X5     IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  824. X      AV=AVEHIC(WINNER)
  825. X      SOBJS=.TRUE.
  826. XC
  827. X      GO TO ( 1000, 3000, 4000, 6000, 7000, 8000, 9000,
  828. X     &       13000,14000,16000,17000,
  829. X     &       21000,23000,24000,27000,28000,29000,30000,
  830. X     &       31000,33000,34000,36000,37000,38000,
  831. X     &       41000,42000,43000,44000,46000,
  832. X     &       53000,56000)
  833. X     &          RI
  834. X      CALL BUG(6,RI)
  835. XC
  836. XC RETURN HERE TO DECLARE FALSE RESULT
  837. XC
  838. X10    SOBJS=.FALSE.
  839. X      RETURN
  840. X`0C
  841. XC SOBJS, PAGE 3
  842. XC
  843. XC O1--  GUNK FUNCTION
  844. XC
  845. X1000  IF(OCAN(GUNK).EQ.0) GO TO 10
  846. XC                                               !NOT INSIDE? F
  847. X      CALL NEWSTA(GUNK,122,0,0,0)
  848. XC                                               !FALLS APART.
  849. X      RETURN
  850. XC
  851. XC O2--  TROPHY CASE
  852. XC
  853. X3000  IF(PRSA.NE.TAKEW) GO TO 10
  854. XC                                               !TAKE?
  855. X      CALL RSPEAK(128)
  856. XC                                               !CANT.
  857. X      RETURN
  858. XC
  859. XC O3--  BOTTLE FUNCTION
  860. XC
  861. X4000  IF(PRSA.NE.THROWW) GO TO 4100
  862. XC                                               !THROW?
  863. X      CALL NEWSTA(PRSO,129,0,0,0)
  864. XC                                               !BREAKS.
  865. X      RETURN
  866. XC
  867. X4100  IF(PRSA.NE.MUNGW) GO TO 10
  868. XC                                               !MUNG?
  869. X      CALL NEWSTA(PRSO,131,0,0,0)
  870. XC                                               !BREAKS.
  871. X      RETURN
  872. X`0C
  873. XC SOBJS, PAGE 4
  874. XC
  875. XC O4--  ROPE FUNCTION
  876. XC
  877. X6000  IF(HERE.EQ.DOME) GO TO 6100
  878. XC                                               !IN DOME?
  879. X      DOMEF=.FALSE.
  880. XC                                               !NO,
  881. X      IF(PRSA.NE.UNTIEW) GO TO 6050
  882. XC                                               !UNTIE?
  883. X      CALL RSPEAK(134)
  884. XC                                               !CANT
  885. X      RETURN
  886. XC
  887. X6050  IF(PRSA.NE.TIEW) GO TO 10
  888. XC                                               !TIE?
  889. X      CALL RSPEAK(135)
  890. XC                                               !CANT TIE
  891. X      RETURN
  892. XC
  893. X6100  IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
  894. X      IF(DOMEF) GO TO 6150
  895. XC                                               !ALREADY TIED?
  896. X      DOMEF=.TRUE.
  897. XC                                               !NO, TIE IT.
  898. X      OFLAG1(ROPE)=or(OFLAG1(ROPE),NDSCBT)
  899. X      OFLAG2(ROPE)=or(OFLAG2(ROPE),CLMBBT)
  900. X      CALL NEWSTA(ROPE,137,DOME,0,0)
  901. X      RETURN
  902. XC
  903. X6150  CALL RSPEAK(136)
  904. XC                                               !DUMMY.
  905. X      RETURN
  906. XC
  907. X6200  IF(PRSA.NE.UNTIEW) GO TO 6300
  908. XC                                               !UNTIE?
  909. X      IF(DOMEF) GO TO 6250
  910. XC                                               !TIED?
  911. X      CALL RSPEAK(134)
  912. XC                                               !NO, DUMMY.
  913. X      RETURN
  914. XC
  915. X6250  DOMEF=.FALSE.
  916. XC                                               !YES, UNTIE IT.
  917. X      OFLAG1(ROPE)=and(OFLAG1(ROPE), not(NDSCBT))
  918. X      OFLAG2(ROPE)=and(OFLAG2(ROPE), not(CLMBBT))
  919. X      CALL RSPEAK(139)
  920. X      RETURN
  921. XC
  922. X6300  IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400
  923. XC                                               !DROP & UNTIED?
  924. X      CALL NEWSTA(ROPE,140,MTORC,0,0)
  925. XC                                               !YES, DROP.
  926. X      RETURN
  927. XC
  928. X6400  IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
  929. X      CALL RSPEAK(141)
  930. XC                                               !TAKE & TIED.
  931. X      RETURN
  932. XC
  933. XC O5--  SWORD FUNCTION
  934. XC
  935. X7000  IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
  936. X     &  SWDACT=.TRUE.
  937. X      GO TO 10
  938. XC
  939. XC O6--  LANTERN
  940. XC
  941. X8000  IF(PRSA.NE.THROWW) GO TO 8100
  942. XC                                               !THROW?
  943. X      CALL NEWSTA(LAMP,0,0,0,0)
  944. XC                                               !KILL LAMP,
  945. X      CALL NEWSTA(BLAMP,142,HERE,0,0)
  946. XC                                               !REPLACE WITH BROKEN.
  947. X      RETURN
  948. XC
  949. X8100  IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
  950. X      IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
  951. X      GO TO 10
  952. XC
  953. XC O7--  RUG FUNCTION
  954. XC
  955. X9000  IF(PRSA.NE.RAISEW) GO TO 9100
  956. XC                                               !RAISE?
  957. X      CALL RSPEAK(143)
  958. XC                                               !CANT
  959. X      RETURN
  960. XC
  961. X9100  IF(PRSA.NE.TAKEW) GO TO 9200
  962. XC                                               !TAKE?
  963. X      CALL RSPEAK(144)
  964. XC                                               !CANT
  965. X      RETURN
  966. XC
  967. X9200  IF(PRSA.NE.MOVEW) GO TO 9300
  968. XC                                               !MOVE?
  969. X      CALL RSPEAK(145+ORRUG)
  970. X      ORRUG=1
  971. X      OFLAG1(DOOR)=or(OFLAG1(DOOR),VISIBT)
  972. X      RETURN
  973. XC
  974. X9300  IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
  975. X     &          QOPEN(DOOR)) GO TO 10
  976. X      CALL RSPEAK(345)
  977. X      RETURN
  978. X`0C
  979. XC SOBJS, PAGE 5
  980. XC
  981. XC O8--  SKELETON
  982. XC
  983. X13000 I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
  984. X      IF(I.NE.0) CALL RSPEAK(162)
  985. XC                                               !IF ROBBED, SAY SO.
  986. X      RETURN
  987. XC
  988. XC O9--  MIRROR
  989. XC
  990. X14000 IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
  991. X      MROOM=xor(HERE,1)
  992. X      DO 14100 I=1,OLNT
  993. XC                                               !INTERCHANGE OBJS.
  994. X        IF(OROOM(I).EQ.HERE) OROOM(I)=-1
  995. X        IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
  996. X        IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
  997. X14100 CONTINUE
  998. X      F=MOVETO(MROOM,WINNER)
  999. X      CALL RSPEAK(163)
  1000. XC                                               !SHAKE WORLD.
  1001. X      RETURN
  1002. XC
  1003. X14500 IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
  1004. X     &   (PRSA.NE.EXAMIW)) GO TO 14600
  1005. X      I=164
  1006. XC                                               !MIRROR OK.
  1007. X      IF(MIRRMF) I=165
  1008. XC                                               !MIRROR DEAD.
  1009. X      CALL RSPEAK(I)
  1010. X      RETURN
  1011. XC
  1012. X14600 IF(PRSA.NE.TAKEW) GO TO 14700
  1013. XC                                               !TAKE?
  1014. X      CALL RSPEAK(166)
  1015. XC                                               !JOKE.
  1016. X      RETURN
  1017. XC
  1018. X14700 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  1019. X      I=167
  1020. XC                                               !MIRROR BREAKS.
  1021. X      IF(MIRRMF) I=168
  1022. XC                                               !MIRROR ALREADY BROKEN.
  1023. X      MIRRMF=.TRUE.
  1024. X      BADLKF=.TRUE.
  1025. X      CALL RSPEAK(I)
  1026. X      RETURN
  1027. X`0C
  1028. XC SOBJS, PAGE 6
  1029. XC
  1030. XC O10-- DUMBWAITER
  1031. XC
  1032. X16000 IF(PRSA.NE.RAISEW) GO TO 16100
  1033. XC                                               !RAISE?
  1034. X      IF(CAGETF) GO TO 16400
  1035. XC                                               !ALREADY AT TOP?
  1036. X      CALL NEWSTA(TBASK,175,TSHAF,0,0)
  1037. XC                                               !NO, RAISE BASKET.
  1038. X      CALL NEWSTA(FBASK,0,BSHAF,0,0)
  1039. X      CAGETF=.TRUE.
  1040. XC                                               !AT TOP.
  1041. X      RETURN
  1042. XC
  1043. X16100 IF(PRSA.NE.LOWERW) GO TO 16200
  1044. XC                                               !LOWER?
  1045. X      IF(.NOT.CAGETF) GO TO 16400
  1046. XC                                               !ALREADY AT BOTTOM?
  1047. X      CALL NEWSTA(TBASK,176,BSHAF,0,0)
  1048. XC                                               !NO, LOWER BASKET.
  1049. X      CALL NEWSTA(FBASK,0,TSHAF,0,0)
  1050. X      CAGETF=.FALSE.
  1051. X      IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  1052. XC                                               !IF DARK, DIE.
  1053. X      RETURN
  1054. XC
  1055. X16200 IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
  1056. X      CALL RSPEAK(130)
  1057. XC                                               !WRONG BASKET.
  1058. X      RETURN
  1059. XC
  1060. X16300 IF(PRSA.NE.TAKEW) GO TO 10
  1061. XC                                               !TAKE?
  1062. X      CALL RSPEAK(177)
  1063. XC                                               !JOKE.
  1064. X      RETURN
  1065. XC
  1066. X16400 CALL RSPEAK(125+RND(3))
  1067. XC                                               !DUMMY.
  1068. X      RETURN
  1069. XC
  1070. XC O11-- GHOST FUNCTION
  1071. XC
  1072. X17000 I=178
  1073. XC                                               !ASSUME DIRECT.
  1074. X      IF(PRSO.NE.GHOST) I=179
  1075. XC                                               !IF NOT, INDIRECT.
  1076. X      CALL RSPEAK(I)
  1077. X      RETURN
  1078. XC                                               !SPEAK AND EXIT.
  1079. X`0C
  1080. XC SOBJS, PAGE 7
  1081. XC
  1082. XC O12-- TUBE
  1083. XC
  1084. X21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
  1085. X      CALL RSPEAK(186)
  1086. XC                                               !CANT PUT BACK IN.
  1087. X      RETURN
  1088. XC
  1089. XC O13-- CHALICE
  1090. XC
  1091. X23000 IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
  1092. X     &   (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
  1093. X     &   (and(OFLAG2(THIEF),FITEBT).EQ.0).OR.
  1094. X     &   .NOT. THFACT) GO TO 10
  1095. X      CALL RSPEAK(204)
  1096. XC                                               !CANT TAKE.
  1097. X      RETURN
  1098. XC
  1099. XC O14-- PAINTING
  1100. XC
  1101. X24000 IF(PRSA.NE.MUNGW) GO TO 10
  1102. XC                                               !MUNG?
  1103. X      CALL RSPEAK(205)
  1104. XC                                               !DESTROY PAINTING.
  1105. X      OFVAL(PRSO)=0
  1106. X      OTVAL(PRSO)=0
  1107. X      ODESC1(PRSO)=207
  1108. X      ODESC2(PRSO)=206
  1109. X      RETURN
  1110. X`0C
  1111. XC SOBJS, PAGE 8
  1112. XC
  1113. XC O15-- BOLT
  1114. XC
  1115. X27000 IF(PRSA.NE.TURNW) GO TO 10
  1116. XC                                               !TURN BOLT?
  1117. X      IF(PRSI.NE.WRENC) GO TO 27500
  1118. XC                                               !WITH WRENCH?
  1119. X      IF(GATEF) GO TO 27100
  1120. XC                                               !PROPER BUTTON PUSHED?
  1121. X      CALL RSPEAK(210)
  1122. XC                                               !NO, LOSE.
  1123. X      RETURN
  1124. XC
  1125. X27100 IF(LWTIDF) GO TO 27200
  1126. XC                                               !LOW TIDE NOW?
  1127. X      LWTIDF=.TRUE.
  1128. XC                                               !NO, EMPTY DAM.
  1129. X      CALL RSPEAK(211)
  1130. X      OFLAG2(COFFI)=and(OFLAG2(COFFI), not(SCRDBT))
  1131. X      OFLAG1(TRUNK)=or(OFLAG1(TRUNK),VISIBT)
  1132. X      RFLAG(RESER)=and(or(RFLAG(RESER),RLAND)
  1133. X     &                 ,not(RWATER+RSEEN))
  1134. X      RETURN
  1135. XC
  1136. X27200 LWTIDF=.FALSE.
  1137. XC                                               !YES, FILL DAM.
  1138. X      CALL RSPEAK(212)
  1139. X      IF(QHERE(TRUNK,RESER))
  1140. X     &   OFLAG1(TRUNK)=and(OFLAG1(TRUNK), not(VISIBT))
  1141. X      RFLAG(RESER)=and(or(RFLAG(RESER),RWATER) ,not(RLAND))
  1142. X      RETURN
  1143. XC
  1144. X27500 CALL RSPSUB(299,ODI2)
  1145. XC                                               !NOT WITH THAT.
  1146. X      RETURN
  1147. XC
  1148. XC O16-- GRATING
  1149. XC
  1150. X28000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
  1151. X      IF(GRUNLF) GO TO 28200
  1152. XC                                               !UNLOCKED?
  1153. X      CALL RSPEAK(214)
  1154. XC                                               !NO, LOCKED.
  1155. X      RETURN
  1156. XC
  1157. X28200 I=215
  1158. XC                                               !UNLOCKED, VIEW FRM CLR.
  1159. X      IF(HERE.NE.CLEAR) I=216
  1160. XC                                               !VIEW FROM BELOW.
  1161. X      SOBJS=OPNCLS(GRATE,I,885)
  1162. XC                                               !OPEN/CLOSE.
  1163. X      RFLAG(MGRAT)=and(RFLAG(MGRAT), not(RLIGHT))
  1164. X      IF(QOPEN(GRATE)) RFLAG(MGRAT)=or(RFLAG(MGRAT),RLIGHT)
  1165. X      IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  1166. XC                                               !IF DARK, DIE.
  1167. X      RETURN
  1168. XC
  1169. XC O17-- TRAP DOOR
  1170. XC
  1171. X29000 IF(HERE.NE.LROOM) GO TO 29100
  1172. XC                                               !FROM LIVING ROOM?
  1173. X      SOBJS=OPNCLS(DOOR,218,219)
  1174. XC                                               !OPEN/CLOSE.
  1175. X      RETURN
  1176. XC
  1177. X29100 IF(HERE.NE.CELLA) GO TO 10
  1178. XC                                               !FROM CELLAR?
  1179. X      IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
  1180. X      CALL RSPEAK(220)
  1181. XC                                               !CANT OPEN CLOSED DOOR.
  1182. X      RETURN
  1183. XC
  1184. X29200 SOBJS=OPNCLS(DOOR,0,22)
  1185. XC                                               !NORMAL OPEN/CLOSE.
  1186. X      RETURN
  1187. XC
  1188. XC O18-- DURABLE DOOR
  1189. XC
  1190. X30000 I=0
  1191. XC                                               !ASSUME NO APPL.
  1192. X      IF(PRSA.EQ.OPENW) I=221
  1193. XC                                               !OPEN?
  1194. X      IF(PRSA.EQ.BURNW) I=222
  1195. XC                                               !BURN?
  1196. X      IF(PRSA.EQ.MUNGW) I=223+RND(3)
  1197. XC                                               !MUNG?
  1198. X      IF(I.EQ.0) GO TO 10
  1199. X      CALL RSPEAK(I)
  1200. X      RETURN
  1201. XC
  1202. XC O19-- MASTER SWITCH
  1203. XC
  1204. X31000 IF(PRSA.NE.TURNW) GO TO 10
  1205. XC                                               !TURN?
  1206. X      IF(PRSI.NE.SCREW) GO TO 31500
  1207. XC                                               !WITH SCREWDRIVER?
  1208. X      IF(QOPEN(MACHI)) GO TO 31600
  1209. XC                                               !LID UP?
  1210. X      CALL RSPEAK(226)
  1211. XC                                               !NO, ACTIVATE.
  1212. X      IF(OCAN(COAL).NE.MACHI) GO TO 31400
  1213. XC                                               !COAL INSIDE?
  1214. X      CALL NEWSTA(COAL,0,0,0,0)
  1215. XC                                               !KILL COAL,
  1216. X      CALL NEWSTA(DIAMO,0,0,MACHI,0)
  1217. XC                                               !REPLACE WITH DIAMOND.
  1218. X      RETURN
  1219. XC
  1220. X31400 DO 31450 I=1,OLNT
  1221. XC                                               !KILL NONCOAL OBJECTS.
  1222. X        IF(OCAN(I).NE.MACHI) GO TO 31450
  1223. XC                                               !INSIDE MACHINE?
  1224. X        CALL NEWSTA(I,0,0,0,0)
  1225. XC                                               !KILL OBJECT AND CONTENTS.
  1226. X        CALL NEWSTA(GUNK,0,0,MACHI,0)
  1227. XC                                               !REDUCE TO GUNK.
  1228. X31450 CONTINUE
  1229. X      RETURN
  1230. XC
  1231. X31500 CALL RSPSUB(300,ODI2)
  1232. XC                                               !CANT TURN WITH THAT.
  1233. X      RETURN
  1234. XC
  1235. X31600 CALL RSPEAK(227)
  1236. XC                                               !LID IS UP.
  1237. X      RETURN
  1238. X`0C
  1239. XC SOBJS, PAGE 9
  1240. XC
  1241. XC O20-- LEAK
  1242. XC
  1243. X33000 IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
  1244. X     &  GO TO 10
  1245. X      IF(PRSI.NE.PUTTY) GO TO 33100
  1246. XC                                               !WITH PUTTY?
  1247. X      RVMNT=-1
  1248. XC                                               !DISABLE LEAK.
  1249. X      CTICK(CEVMNT)=0
  1250. X      CALL RSPEAK(577)
  1251. X      RETURN
  1252. XC
  1253. X33100 CALL RSPSUB(301,ODI2)
  1254. XC                                               !CANT WITH THAT.
  1255. X      RETURN
  1256. XC
  1257. XC O21-- DROWNING BUTTONS
  1258. XC
  1259. X34000 IF(PRSA.NE.PUSHW) GO TO 10
  1260. XC                                               !PUSH?
  1261. X      GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
  1262. X      GO TO 10
  1263. XC                                               !NOT A BUTTON.
  1264. XC
  1265. X34100 RFLAG(HERE)=xor(RFLAG(HERE),RLIGHT)
  1266. X      I=230
  1267. X      IF(and(RFLAG(HERE),RLIGHT).NE.0) I=231
  1268. X      CALL RSPEAK(I)
  1269. X      RETURN
  1270. XC
  1271. X34200 GATEF=.TRUE.
  1272. XC                                               !RELEASE GATE.
  1273. X      CALL RSPEAK(232)
  1274. X      RETURN
  1275. XC
  1276. X34300 GATEF=.FALSE.
  1277. XC                                               !INTERLOCK GATE.
  1278. X      CALL RSPEAK(232)
  1279. X      RETURN
  1280. XC
  1281. X34400 IF(RVMNT.NE.0) GO TO 34500
  1282. XC                                               !LEAK ALREADY STARTED?
  1283. X      CALL RSPEAK(233)
  1284. XC                                               !NO, START LEAK.
  1285. X      RVMNT=1
  1286. X      CTICK(CEVMNT)=-1
  1287. X      RETURN
  1288. XC
  1289. X34500 CALL RSPEAK(234)
  1290. XC                                               !BUTTON JAMMED.
  1291. X      RETURN
  1292. XC
  1293. XC O22-- INFLATABLE BOAT
  1294. XC
  1295. X36000 IF(PRSA.NE.INFLAW) GO TO 10
  1296. XC                                               !INFLATE?
  1297. X      IF(OROOM(IBOAT).NE.0) GO TO 36100
  1298. XC                                               !IN ROOM?
  1299. X      CALL RSPEAK(235)
  1300. XC                                               !NO, JOKE.
  1301. X      RETURN
  1302. XC
  1303. X36100 IF(PRSI.NE.PUMP) GO TO 36200
  1304. XC                                               !WITH PUMP?
  1305. X      CALL NEWSTA(IBOAT,0,0,0,0)
  1306. XC                                               !KILL DEFL BOAT,
  1307. X      CALL NEWSTA(RBOAT,236,HERE,0,0)
  1308. XC                                               !REPL WITH INF.
  1309. X      DEFLAF=.FALSE.
  1310. X      RETURN
  1311. XC
  1312. X36200 I=237
  1313. XC                                               !JOKES.
  1314. X      IF(PRSI.NE.LUNGS) I=303
  1315. X      CALL RSPSUB(I,ODI2)
  1316. X      RETURN
  1317. XC
  1318. XC O23-- DEFLATED BOAT
  1319. XC
  1320. X37000 IF(PRSA.NE.INFLAW) GO TO 37100
  1321. XC                                               !INFLATE?
  1322. X      CALL RSPEAK(238)
  1323. XC                                               !JOKE.
  1324. X      RETURN
  1325. XC
  1326. X37100 IF(PRSA.NE.PLUGW) GO TO 10
  1327. XC                                               !PLUG?
  1328. X      IF(PRSI.NE.PUTTY) GO TO 33100
  1329. XC                                               !WITH PUTTY?
  1330. X      CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
  1331. X      CALL NEWSTA(DBOAT,0,0,0,0)
  1332. XC                                               !KILL DEFL BOAT, REPL.
  1333. X      RETURN
  1334. X`0C
  1335. XC SOBJS, PAGE 10
  1336. XC
  1337. XC O24-- RUBBER BOAT
  1338. XC
  1339. X38000 IF(ARG.NE.0) GO TO 10
  1340. XC                                               !DISMISS READIN, OUT.
  1341. X      IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
  1342. X      CALL NEWSTA(RBOAT,0,0,0,0)
  1343. XC                                               !KILL INFL BOAT,
  1344. X      CALL NEWSTA(DBOAT,240,HERE,0,0)
  1345. XC                                               !REPL WITH DEAD.
  1346. X      DEFLAF=.TRUE.
  1347. X      RETURN
  1348. XC
  1349. X38100 IF(PRSA.NE.INFLAW) GO TO 38200
  1350. XC                                               !INFLATE?
  1351. X      CALL RSPEAK(367)
  1352. XC                                               !YES, JOKE.
  1353. X      RETURN
  1354. XC
  1355. X38200 IF(PRSA.NE.DEFLAW) GO TO 10
  1356. XC                                               !DEFLATE?
  1357. X      IF(AV.EQ.RBOAT) GO TO 38300
  1358. XC                                               !IN BOAT?
  1359. X      IF(OROOM(RBOAT).EQ.0) GO TO 38400
  1360. XC                                               !ON GROUND?
  1361. X      CALL NEWSTA(RBOAT,0,0,0,0)
  1362. XC                                               !KILL INFL BOAT,
  1363. X      CALL NEWSTA(IBOAT,241,HERE,0,0)
  1364. XC                                               !REPL WITH DEFL.
  1365. X      DEFLAF=.TRUE.
  1366. X      RETURN
  1367. XC
  1368. X38300 CALL RSPEAK(242)
  1369. XC                                               !IN BOAT.
  1370. X      RETURN
  1371. XC
  1372. X38400 CALL RSPEAK(243)
  1373. XC                                               !NOT ON GROUND.
  1374. X      RETURN
  1375. XC
  1376. XC O25-- BRAIDED ROPE
  1377. XC
  1378. X41000 IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
  1379. X     &   ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
  1380. X     &  GO TO 41500
  1381. X      BTIEF=PRSI
  1382. XC                                               !RECORD LOCATION.
  1383. X      CFLAG(CEVBAL)=.FALSE.
  1384. XC                                               !STALL ASCENT.
  1385. X      CALL RSPEAK(248)
  1386. X      RETURN
  1387. XC
  1388. X41500 IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
  1389. X      IF(BTIEF.NE.0) GO TO 41600
  1390. XC                                               !TIED UP?
  1391. X      CALL RSPEAK(249)
  1392. XC                                               !NO, JOKE.
  1393. X      RETURN
  1394. XC
  1395. X41600 CALL RSPEAK(250)
  1396. X      BTIEF=0
  1397. XC                                               !UNTIE.
  1398. X      CTICK(CEVBAL)=3
  1399. XC                                               !RESTART CLOCK.
  1400. X      CFLAG(CEVBAL)=.TRUE.
  1401. X      RETURN
  1402. XC
  1403. XC O26-- SAFE
  1404. XC
  1405. X42000 I=0
  1406. XC                                               !ASSUME UNPROCESSED.
  1407. X      IF(PRSA.EQ.TAKEW) I=251
  1408. XC                                               !TAKE?
  1409. X      IF((PRSA.EQ.OPENW).AND.SAFEF) I=253
  1410. XC                                               !OPEN AFTER BLAST?
  1411. X      IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254
  1412. XC                                               !OPEN BEFORE BLAST?
  1413. X      IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253
  1414. XC                                               !CLOSE AFTER?
  1415. X      IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
  1416. X      IF(I.EQ.0) GO TO 10
  1417. X      CALL RSPEAK(I)
  1418. X      RETURN
  1419. XC
  1420. XC O27-- FUSE
  1421. XC
  1422. X43000 IF(PRSA.NE.BURNW) GO TO 10
  1423. XC                                               !BURN?
  1424. X      CALL RSPEAK(256)
  1425. X      CTICK(CEVFUS)=2
  1426. XC                                               !START COUNTDOWN.
  1427. X      RETURN
  1428. XC
  1429. XC O28-- GNOME
  1430. XC
  1431. X44000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
  1432. X      IF(OTVAL(PRSO).EQ.0) GO TO 44100
  1433. XC                                               !TREASURE?
  1434. X      CALL RSPSUB(257,ODO2)
  1435. XC                                               !YES, GET DOOR.
  1436. X      CALL NEWSTA(PRSO,0,0,0,0)
  1437. X      CALL NEWSTA(GNOME,0,0,0,0)
  1438. XC                                               !VANISH GNOME.
  1439. X      GNODRF=.TRUE.
  1440. X      RETURN
  1441. XC
  1442. X44100 CALL RSPSUB(258,ODO2)
  1443. XC                                               !NO, LOSE OBJECT.
  1444. X      CALL NEWSTA(PRSO,0,0,0,0)
  1445. X      RETURN
  1446. XC
  1447. X44500 CALL RSPEAK(259)
  1448. XC                                               !NERVOUS GNOME.
  1449. X      IF(.NOT.GNOMEF) CTICK(CEVGNO)=5
  1450. XC                                               !SCHEDULE BYEBYE.
  1451. X      GNOMEF=.TRUE.
  1452. X      RETURN
  1453. XC
  1454. XC O29-- COKE BOTTLES
  1455. XC
  1456. X46000 IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
  1457. X      CALL NEWSTA(PRSO,262,0,0,0)
  1458. XC                                               !MUNG BOTTLES.
  1459. X      RETURN
  1460. X`0C
  1461. XC SOBJS, PAGE 11
  1462. XC
  1463. XC
  1464. XC O30-- ROBOT
  1465. XC
  1466. X53000 IF(PRSA.NE.GIVEW) GO TO 53200
  1467. XC                                               !GIVE?
  1468. X      CALL NEWSTA(PRSO,0,0,0,AROBOT)
  1469. XC                                               !PUT ON ROBOT.
  1470. X      CALL RSPSUB(302,ODO2)
  1471. X      RETURN
  1472. XC
  1473. X53200 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  1474. X      CALL NEWSTA(ROBOT,285,0,0,0)
  1475. +-+-+-+-+-+-+-+-  END  OF PART 28 +-+-+-+-+-+-+-+-
  1476.