home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / dungeon / part27 < prev    next >
Encoding:
Internet Message Format  |  1992-02-23  |  47.1 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 27/30
  5. Message-ID: <1992Feb24.013853.820@dragon.com>
  6. Date: 24 Feb 92 06:38:52 GMT
  7. Organization: Computer Projects Unlimited
  8. Lines: 1548
  9.  
  10. -+-+-+-+-+-+-+-+ START OF PART 27 -+-+-+-+-+-+-+-+
  11. XC                                               !NO DEFAULT.
  12. X      DFORCE=0
  13. XC                                               !NO FORCED DEFAULT.
  14. X      QPREP=and(OFLAG,OPREP)
  15. X100   J=J+2
  16. XC                                               !FIND START OF SYNTAX.
  17. X      IF((VVOC(J).LE.0).OR.(VVOC(J).GE.R50MIN)) GO TO 100
  18. X      LIMIT=J+VVOC(J)+1
  19. XC                                               !COMPUTE LIMIT.
  20. X      J=J+1
  21. XC                                               !ADVANCE TO NEXT.
  22. XC
  23. X200   CALL UNPACK(J,NEWJ)
  24. XC                                               !UNPACK SYNTAX.
  25. X      IF(DFLAG) PRINT 60,O1,P1,DOBJ,DFL1,DFL2
  26. X60    FORMAT(' SYNMCH INPUTS TO SYNEQL- ',5I7)
  27. X      SPREP=and(DOBJ,VPMASK)
  28. X      IF(.NOT.SYNEQL(P1,O1,DOBJ,DFL1,DFL2)) GO TO 1000
  29. X      IF(DFLAG) PRINT 60,O2,P2,IOBJ,IFL1,IFL2
  30. X      SPREP=and(IOBJ,VPMASK)
  31. X      IF(SYNEQL(P2,O2,IOBJ,IFL1,IFL2)) GO TO 6000
  32. XC
  33. XC SYNTAX MATCH FAILS, TRY NEXT ONE.
  34. XC
  35. X      IF(O2) 3000,500,3000
  36. XC                                               !IF O2=0, SET DFLT.
  37. X1000  IF(O1) 3000,500,3000
  38. XC                                               !IF O1=0, SET DFLT.
  39. X500   IF((QPREP.EQ.0).OR.(QPREP.EQ.SPREP)) DFORCE=J
  40. XC                                               !IF PREP MCH.
  41. X      IF((and(VFLAG,SDRIV)).NE.0) DRIVE=J
  42. X3000  J=NEWJ
  43. X      IF(J.LT.LIMIT) GO TO 200
  44. X`0C
  45. XC                                               !MORE TO DO?
  46. XC SYNMCH, PAGE 2
  47. XC
  48. XC MATCH HAS FAILED.  IF DEFAULT SYNTAX EXISTS, TRY TO SNARF
  49. XC ORPHANS OR GWIMS, OR MAKE NEW ORPHANS.
  50. XC
  51. X      IF(DFLAG) PRINT 20,DRIVE,DFORCE
  52. X20    FORMAT(' SYNMCH, DRIVE=',2I6)
  53. X      IF(DRIVE.EQ.0) DRIVE=DFORCE
  54. XC                                               !NO DRIVER? USE FORCE.
  55. X      IF(DRIVE.EQ.0) GO TO 10000
  56. XC                                               !ANY DRIVER?
  57. X      CALL UNPACK(DRIVE,DFORCE)
  58. XC                                               !UNPACK DFLT SYNTAX.
  59. XC
  60. XC TRY TO FILL DIRECT OBJECT SLOT IF THAT WAS THE PROBLEM.
  61. XC
  62. X      IF((and(VFLAG,SDIR).EQ.0).OR.(O1.NE.0)) GO TO 4000
  63. XC
  64. XC FIRST TRY TO SNARF ORPHAN OBJECT.
  65. XC
  66. X      O1=and(OFLAG,OSLOT)
  67. X      IF(O1.EQ.0) GO TO 3500
  68. XC                                               !ANY ORPHAN?
  69. X      IF(SYNEQL(P1,O1,DOBJ,DFL1,DFL2)) GO TO 4000
  70. XC
  71. XC ORPHAN FAILS, TRY GWIM.
  72. XC
  73. X3500  O1=GWIM(DOBJ,DFW1,DFW2)
  74. XC                                               !GET GWIM.
  75. X      IF(DFLAG) PRINT 30,O1
  76. X30    FORMAT(' SYNMCH- DO GWIM= ',I6)
  77. X      IF(O1.GT.0) GO TO 4000
  78. XC                                               !TEST RESULT.
  79. X      CALL ORPHAN(-1,ACT,0,and(DOBJ,VPMASK),0)
  80. X      CALL RSPEAK(623)
  81. X      RETURN
  82. XC
  83. XC TRY TO FILL INDIRECT OBJECT SLOT IF THAT WAS THE PROBLEM.
  84. XC
  85. X4000  IF((and(VFLAG,SIND).EQ.0).OR.(O2.NE.0)) GO TO 6000
  86. X      O2=GWIM(IOBJ,IFW1,IFW2)
  87. XC                                               !GWIM.
  88. X      IF(DFLAG) PRINT 40,O2
  89. X40    FORMAT(' SYNMCH- IO GWIM= ',I6)
  90. X      IF(O2.GT.0) GO TO 6000
  91. X      IF(O1.EQ.0) O1=and(OFLAG,OSLOT)
  92. X      CALL ORPHAN(-1,ACT,O1,and(DOBJ,VPMASK),0)
  93. X      CALL RSPEAK(624)
  94. X      RETURN
  95. XC
  96. XC TOTAL CHOMP
  97. XC
  98. X10000 CALL RSPEAK(601)
  99. XC                                               !CANT DO ANYTHING.
  100. X      RETURN
  101. X`0C
  102. XC SYNMCH, PAGE 3
  103. XC
  104. XC NOW TRY TO TAKE INDIVIDUAL OBJECTS AND
  105. XC IN GENERAL CLEAN UP THE PARSE VECTOR.
  106. XC
  107. X6000  IF(and(VFLAG,SFLIP).EQ.0) GO TO 5000
  108. X      J=O1
  109. XC                                               !YES.
  110. X      O1=O2
  111. X      O2=J
  112. XC
  113. X5000  PRSA=and(VFLAG,SVMASK)
  114. X      PRSO=O1
  115. XC                                               !GET DIR OBJ.
  116. X      PRSI=O2
  117. XC                                               !GET IND OBJ.
  118. X      IF(.NOT.TAKEIT(PRSO,DOBJ)) RETURN
  119. XC                                               !TRY TAKE.
  120. X      IF(.NOT.TAKEIT(PRSI,IOBJ)) RETURN
  121. XC                                               !TRY TAKE.
  122. X      SYNMCH=.TRUE.
  123. X      IF(DFLAG) PRINT 50,SYNMCH,PRSA,PRSO,PRSI,ACT,O1,O2
  124. X50    FORMAT(' SYNMCH- RESULTS ',L1,6I7)
  125. X      RETURN
  126. XC
  127. X      END
  128. X`0C
  129. XC UNPACK-       UNPACK SYNTAX SPECIFICATION, ADV POINTER
  130. XC
  131. XC DECLARATIONS
  132. XC
  133. X      SUBROUTINE UNPACK(OLDJ,J)
  134. X      IMPLICIT INTEGER(A-Z)
  135. X
  136. X      INCLUDE 'VOCAB.LIB'
  137. X      INCLUDE 'PARSER.LIB'
  138. XC
  139. X      DO 10 I=1,11
  140. XC                                               !CLEAR SYNTAX.
  141. X        SYN(I)=0
  142. X10    CONTINUE
  143. XC
  144. X      VFLAG=VVOC(OLDJ)
  145. X      J=OLDJ+1
  146. X      IF(and(VFLAG,SDIR).EQ.0) RETURN
  147. X      DFL1=-1
  148. XC                                               !ASSUME STD.
  149. X      DFL2=-1
  150. X      IF(and(VFLAG,SSTD).EQ.0) GO TO 100
  151. X      DFW1=-1
  152. XC                                               !YES.
  153. X      DFW2=-1
  154. X      DOBJ=VABIT+VRBIT+VFBIT
  155. X      GO TO 200
  156. XC
  157. X100   DOBJ=VVOC(J)
  158. XC                                               !NOT STD.
  159. X      DFW1=VVOC(J+1)
  160. X      DFW2=VVOC(J+2)
  161. X      J=J+3
  162. X      IF(and(DOBJ,VEBIT).EQ.0) GO TO 200
  163. X      DFL1=DFW1
  164. XC                                               !YES.
  165. X      DFL2=DFW2
  166. XC
  167. X200   IF(and(VFLAG,SIND).EQ.0) RETURN
  168. X      IFL1=-1
  169. XC                                               !ASSUME STD.
  170. X      IFL2=-1
  171. X      IOBJ=VVOC(J)
  172. X      IFW1=VVOC(J+1)
  173. X      IFW2=VVOC(J+2)
  174. X      J=J+3
  175. X      IF(and(IOBJ,VEBIT).EQ.0) RETURN
  176. X      IFL1=IFW1
  177. XC                                               !YES.
  178. X      IFL2=IFW2
  179. X      RETURN
  180. XC
  181. X      END
  182. X`0C
  183. XC SYNEQL-       TEST FOR SYNTAX EQUALITY
  184. XC
  185. XC DECLARATIONS
  186. XC
  187. X      LOGICAL FUNCTION SYNEQL(PREP,OBJ,SPREP,SFL1,SFL2)
  188. X      IMPLICIT INTEGER(A-Z)
  189. X
  190. X      INCLUDE 'OBJECTS.LIB'
  191. X      INCLUDE 'PARSER.LIB'
  192. XC
  193. X      IF(OBJ.EQ.0) GO TO 100
  194. XC                                               !ANY OBJECT?
  195. X      SYNEQL=(PREP.EQ.and(SPREP,VPMASK)).AND.
  196. X     &         (or(and(SFL1,OFLAG1(OBJ)),
  197. X     &          and(SFL2,OFLAG2(OBJ))).NE.0)
  198. X      RETURN
  199. XC
  200. X100   SYNEQL=(PREP.EQ.0).AND.(SFL1.EQ.0).AND.(SFL2.EQ.0)
  201. X      RETURN
  202. XC
  203. X      END
  204. XC TAKEIT-       PARSER BASED TAKE OF OBJECT
  205. XC
  206. XC DECLARATIONS
  207. XC
  208. X      LOGICAL FUNCTION TAKEIT(OBJ,SFLAG)
  209. X      IMPLICIT INTEGER(A-Z)
  210. X      INCLUDE 'PARSER.LIB'
  211. X      COMMON /STAR/ MBASE,STRBIT
  212. X      INCLUDE 'GAMESTATE.LIB'
  213. X      INCLUDE 'STATE.LIB'
  214. X      INCLUDE 'OBJECTS.LIB'
  215. X      INCLUDE 'OFLAGS.LIB'
  216. X      INCLUDE 'ADVERS.LIB'
  217. X`0C
  218. XC TAKEIT, PAGE 2
  219. XC
  220. X      TAKEIT=.FALSE.
  221. XC                                               !ASSUME LOSES.
  222. X      IF((OBJ.EQ.0).OR.(OBJ.GT.STRBIT)) GO TO 4000
  223. XC                                               !NULL/STARS WIN.
  224. X      ODO2=ODESC2(OBJ)
  225. XC                                               !GET DESC.
  226. X      X=OCAN(OBJ)
  227. XC                                               !GET CONTAINER.
  228. X      IF((X.EQ.0).OR.(and(SFLAG,VFBIT).EQ.0)) GO TO 500
  229. X      IF(and(OFLAG2(X),OPENBT).NE.0) GO TO 500
  230. X      CALL RSPSUB(566,ODO2)
  231. XC                                               !CANT REACH.
  232. X      RETURN
  233. XC
  234. X500   IF(and(SFLAG,VRBIT).EQ.0) GO TO 1000
  235. X      IF(and(SFLAG,VTBIT).EQ.0) GO TO 2000
  236. XC
  237. XC SHOULD BE IN ROOM (VRBIT NE 0) AND CAN BE TAKEN (VTBIT NE 0)
  238. XC
  239. X      IF(SCHLST(0,0,HERE,0,0,OBJ).LE.0) GO TO 4000
  240. XC                                               !IF NOT, OK.
  241. XC
  242. XC ITS IN THE ROOM AND CAN BE TAKEN.
  243. XC
  244. X      IF((and(OFLAG1(OBJ),TAKEBT).NE.0).AND.
  245. X     &   (and(OFLAG2(OBJ),TRYBT).EQ.0)) GO TO 3000
  246. XC
  247. XC NOT TAKEABLE.  IF WE CARE, FAIL.
  248. XC
  249. X      IF(and(SFLAG,VCBIT).EQ.0) GO TO 4000
  250. X      CALL RSPSUB(445,ODO2)
  251. X      RETURN
  252. XC
  253. XC 1000--        IT SHOULD NOT BE IN THE ROOM.
  254. XC 2000--        IT CANT BE TAKEN.
  255. XC
  256. X2000  IF(and(SFLAG,VCBIT).EQ.0) GO TO 4000
  257. X1000  IF(SCHLST(0,0,HERE,0,0,OBJ).LE.0) GO TO 4000
  258. X      CALL RSPSUB(665,ODO2)
  259. X      RETURN
  260. X`0C
  261. XC TAKEIT, PAGE 3
  262. XC
  263. XC OBJECT IS IN THE ROOM, CAN BE TAKEN BY THE PARSER,
  264. XC AND IS TAKEABLE IN GENERAL.  IT IS NOT A STAR.
  265. XC TAKING IT SHOULD NOT HAVE SIDE AFFECTS.
  266. XC IF IT IS INSIDE SOMETHING, THE CONTAINER IS OPEN.
  267. XC THE FOLLOWING CODE IS LIFTED FROM SUBROUTINE TAKE.
  268. XC
  269. X3000  IF(OBJ.NE.AVEHIC(WINNER)) GO TO 3500
  270. XC                                               !TAKE VEHICLE?
  271. X      CALL RSPEAK(672)
  272. X      RETURN
  273. XC
  274. X3500  IF(((X.NE.0).AND.(OADV(X).EQ.WINNER)).OR.
  275. X     &   ((WEIGHT(0,OBJ,WINNER)+OSIZE(OBJ)).LE.MXLOAD))
  276. X     &  GO TO 3700
  277. X      CALL RSPEAK(558)
  278. XC                                               !TOO BIG.
  279. X      RETURN
  280. XC
  281. X3700  CALL NEWSTA(OBJ,559,0,0,WINNER)
  282. XC                                               !DO TAKE.
  283. X      OFLAG2(OBJ)=or(OFLAG2(OBJ),TCHBT)
  284. X      CALL SCRUPD(OFVAL(OBJ))
  285. X      OFVAL(OBJ)=0
  286. XC
  287. X4000  TAKEIT=.TRUE.
  288. XC                                               !SUCCESS.
  289. X      RETURN
  290. XC
  291. X      END
  292. X`0C
  293. XC
  294. XC GWIM- GET WHAT I MEAN IN AMBIGOUS SITUATIONS
  295. XC
  296. XC DECLARATIONS
  297. XC
  298. X      INTEGER FUNCTION GWIM(SFLAG,SFW1,SFW2)
  299. X      IMPLICIT INTEGER(A-Z)
  300. X      LOGICAL TAKEIT,NOCARE
  301. X
  302. X      INCLUDE 'PARSER.LIB'
  303. X      COMMON /STAR/ MBASE,STRBIT
  304. X      INCLUDE 'GAMESTATE.LIB'
  305. X      INCLUDE 'OBJECTS.LIB'
  306. X      INCLUDE 'OFLAGS.LIB'
  307. X      INCLUDE 'ADVERS.LIB'
  308. X`0C
  309. XC GWIM, PAGE 2
  310. XC
  311. X      GWIM=-1
  312. XC                                               !ASSUME LOSE.
  313. X      AV=AVEHIC(WINNER)
  314. X      NOBJ=0
  315. X      NOCARE=and(SFLAG,VCBIT).EQ.0
  316. XC
  317. XC FIRST SEARCH ADVENTURER
  318. XC
  319. X      IF(and(SFLAG,VABIT).NE.0)
  320. X     &  NOBJ=FWIM(SFW1,SFW2,0,0,WINNER,NOCARE)
  321. X      IF(and(SFLAG,VRBIT).NE.0) GO TO 100
  322. X50    GWIM=NOBJ
  323. X      RETURN
  324. XC
  325. XC ALSO SEARCH ROOM
  326. XC
  327. X100   ROBJ=FWIM(SFW1,SFW2,HERE,0,0,NOCARE)
  328. X      IF(ROBJ) 500,50,200
  329. XC                                               !TEST RESULT.
  330. XC
  331. XC ROBJ > 0
  332. XC
  333. X200    IF((AV.EQ.0).OR.(ROBJ.EQ.AV).OR.
  334. X     &    (and(OFLAG2(ROBJ),FINDBT).NE.0)) GO TO 300
  335. X      IF(OCAN(ROBJ).NE.AV) GO TO 50
  336. XC                                               !UNREACHABLE? TRY NOBJ
  337. X300   IF(NOBJ.NE.0) RETURN
  338. XC                                               !IF AMBIGUOUS, RETURN.
  339. X      IF(.NOT.TAKEIT(ROBJ,SFLAG)) RETURN
  340. XC                                               !IF UNTAKEABLE, RETURN
  341. X      GWIM=ROBJ
  342. X500   RETURN
  343. XC
  344. X      END
  345. $ CALL UNPACK [.SRC]NP3.FOR;1 2069732429
  346. $ create 'f'
  347. XC RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2
  348. XC
  349. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  350. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  351. XC WRITTEN BY R. M. SUPNIK
  352. XC
  353. XC DECLARATIONS
  354. XC
  355. X      LOGICAL FUNCTION RAPPL2(RI)
  356. X      IMPLICIT INTEGER (A-Z)
  357. X      LOGICAL QOPEN,QHERE
  358. X
  359. X      INCLUDE 'PARSER.LIB'
  360. X      INCLUDE 'GAMESTATE.LIB'
  361. X      INCLUDE 'STATE.LIB'
  362. X      INCLUDE 'IO.LIB'
  363. X      INCLUDE 'ROOMS.LIB'
  364. X      INCLUDE 'RFLAG.LIB'
  365. X      INCLUDE 'RINDEX.LIB'
  366. X      INCLUDE 'OBJECTS.LIB'
  367. X      INCLUDE 'OFLAGS.LIB'
  368. X      INCLUDE 'OINDEX.LIB'
  369. X      INCLUDE 'XSRCH.LIB'
  370. X      INCLUDE 'CLOCK.LIB'
  371. X      INCLUDE 'ADVERS.LIB'
  372. X      INCLUDE 'VERBS.LIB'
  373. X      INCLUDE 'FLAGS.LIB'
  374. XC
  375. XC FUNCTIONS AND DATA
  376. XC
  377. X      QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  378. X      DATA NEWRMS/38/
  379. X`0C
  380. XC RAPPL2, PAGE 2
  381. XC
  382. X      RAPPL2=.TRUE.
  383. X      GO TO (38000,39000,40000,41000,42000,43000,44000,
  384. X     &       45000,46000,47000,48000,49000,50000,
  385. X     &       51000,52000,53000,54000,55000,56000,
  386. X     &       57000,58000,59000,60000),
  387. X     &  (RI-NEWRMS+1)
  388. X      CALL BUG(70,RI)
  389. X      RETURN
  390. XC
  391. XC R38-- MIRROR D ROOM
  392. XC
  393. X38000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(FDOOR,MRG,0,682,681)
  394. X      RETURN
  395. XC
  396. XC R39-- MIRROR G ROOM
  397. XC
  398. X39000 IF(PRSA.EQ.WALKIW) CALL JIGSUP(685)
  399. X      RETURN
  400. XC
  401. XC R40-- MIRROR C ROOM
  402. XC
  403. X40000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRG,MRB,683,0,681)
  404. X      RETURN
  405. XC
  406. XC R41-- MIRROR B ROOM
  407. XC
  408. X41000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRC,MRA,0,0,681)
  409. X      RETURN
  410. XC
  411. XC R42-- MIRROR A ROOM
  412. XC
  413. X42000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRB,0,0,684,681)
  414. X      RETURN
  415. X`0C
  416. XC RAPPL2, PAGE 3
  417. XC
  418. XC R43-- MIRROR C EAST/WEST
  419. XC
  420. X43000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,683)
  421. X      RETURN
  422. XC
  423. XC R44-- MIRROR B EAST/WEST
  424. XC
  425. X44000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,686)
  426. X      RETURN
  427. XC
  428. XC R45-- MIRROR A EAST/WEST
  429. XC
  430. X45000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,687)
  431. X      RETURN
  432. XC
  433. XC R46-- INSIDE MIRROR
  434. XC
  435. X46000 IF(PRSA.NE.LOOKW) RETURN
  436. XC                                               !LOOK?
  437. X      CALL RSPEAK(688)
  438. XC                                               !DESCRIBE
  439. XC
  440. XC NOW DESCRIBE POLE STATE.
  441. XC
  442. XC CASES 1,2--   MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE
  443. XC CASES 3,4--   MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL
  444. XC CASE 5--      POLE IS UP
  445. XC
  446. X      I=689
  447. XC                                               !ASSUME CASE 5.
  448. X      IF((MDIR.EQ.270).AND.(MLOC.EQ.MRB))
  449. X     &  I=690+MIN0(POLEUF,1)
  450. X      IF(MOD(MDIR,180).EQ.0)
  451. X     &  I=692+MIN0(POLEUF,1)
  452. X      CALL RSPEAK(I)
  453. XC                                               !DESCRIBE POLE.
  454. X      CALL RSPSUB(694,695+(MDIR/45))
  455. XC                                               !DESCRIBE ARROW.
  456. X      RETURN
  457. X`0C
  458. XC RAPPL2, PAGE 4
  459. XC
  460. XC R47-- MIRROR EYE ROOM
  461. XC
  462. X47000 IF(PRSA.NE.LOOKW) RETURN
  463. XC                                               !LOOK?
  464. X      I=704
  465. XC                                               !ASSUME BEAM STOP.
  466. X      DO 47100 J=1,OLNT
  467. X        IF(QHERE(J,HERE).AND.(J.NE.RBEAM)) GO TO 47200
  468. X47100 CONTINUE
  469. X      I=703
  470. X47200 CALL RSPSUB(I,ODESC2(J))
  471. XC                                               !DESCRIBE BEAM.
  472. X      CALL LOOKTO(MRA,0,0,0,0)
  473. XC                                               !LOOK NORTH.
  474. X      RETURN
  475. XC
  476. XC R48-- INSIDE CRYPT
  477. XC
  478. X48000 IF(PRSA.NE.LOOKW) RETURN
  479. XC                                               !LOOK?
  480. X      I=46
  481. XC                                               !CRYPT IS OPEN/CLOSED.
  482. X      IF(QOPEN(TOMB)) I=12
  483. X      CALL RSPSUB(705,I)
  484. X      RETURN
  485. XC
  486. XC R49-- SOUTH CORRIDOR
  487. XC
  488. X49000 IF(PRSA.NE.LOOKW) RETURN
  489. XC                                               !LOOK?
  490. X      CALL RSPEAK(706)
  491. XC                                               !DESCRIBE.
  492. X      I=46
  493. XC                                               !ODOOR IS OPEN/CLOSED.
  494. X      IF(QOPEN(ODOOR)) I=12
  495. X      IF(LCELL.EQ.4) CALL RSPSUB(707,I)
  496. XC                                               !DESCRIBE ODOOR IF THERE.
  497. X      RETURN
  498. XC
  499. XC R50-- BEHIND DOOR
  500. XC
  501. X50000 IF(PRSA.NE.WALKIW) GO TO 50100
  502. XC                                               !WALK IN?
  503. X      CFLAG(CEVFOL)=.TRUE.
  504. XC                                               !MASTER FOLLOWS.
  505. X      CTICK(CEVFOL)=-1
  506. X      RETURN
  507. XC
  508. X50100 IF(PRSA.NE.LOOKW) RETURN
  509. XC                                               !LOOK?
  510. X      I=46
  511. XC                                               !QDOOR IS OPEN/CLOSED.
  512. X      IF(QOPEN(QDOOR)) I=12
  513. X      CALL RSPSUB(708,I)
  514. X      RETURN
  515. X`0C
  516. XC RAPPL2, PAGE 5
  517. XC
  518. XC R51-- FRONT DOOR
  519. XC
  520. X51000 IF(PRSA.EQ.WALKIW) CTICK(CEVFOL)=0
  521. XC                                               !IF EXITS, KILL FOLLOW.
  522. X      IF(PRSA.NE.LOOKW) RETURN
  523. XC                                               !LOOK?
  524. X      CALL LOOKTO(0,MRD,709,0,0)
  525. XC                                               !DESCRIBE SOUTH.
  526. X      I=46
  527. XC                                               !PANEL IS OPEN/CLOSED.
  528. X      IF(INQSTF) I=12
  529. XC                                               !OPEN IF INQ STARTED.
  530. X      J=46
  531. XC                                               !QDOOR IS OPEN/CLOSED.
  532. X      IF(QOPEN(QDOOR)) J=12
  533. X      CALL RSPSB2(710,I,J)
  534. X      RETURN
  535. XC
  536. XC R52-- NORTH CORRIDOR
  537. XC
  538. X52000 IF(PRSA.NE.LOOKW) RETURN
  539. XC                                               !LOOK?
  540. X      I=46
  541. X      IF(QOPEN(CDOOR)) I=12
  542. XC                                               !CDOOR IS OPEN/CLOSED.
  543. X      CALL RSPSUB(711,I)
  544. X      RETURN
  545. XC
  546. XC R53-- PARAPET
  547. XC
  548. X53000 IF(PRSA.EQ.LOOKW) CALL RSPSUB(712,712+PNUMB)
  549. X      RETURN
  550. XC
  551. XC R54-- CELL
  552. XC
  553. X54000 IF(PRSA.NE.LOOKW) RETURN
  554. XC                                               !LOOK?
  555. X      I=721
  556. XC                                               !CDOOR IS OPEN/CLOSED.
  557. X      IF(QOPEN(CDOOR)) I=722
  558. X      CALL RSPEAK(I)
  559. X      I=46
  560. XC                                               !ODOOR IS OPEN/CLOSED.
  561. X      IF(QOPEN(ODOOR)) I=12
  562. X      IF(LCELL.EQ.4) CALL RSPSUB(723,I)
  563. XC                                               !DESCRIBE.
  564. X      RETURN
  565. XC
  566. XC R55-- PRISON CELL
  567. XC
  568. X55000 IF(PRSA.EQ.LOOKW) CALL RSPEAK(724)
  569. XC                                               !LOOK?
  570. X      RETURN
  571. XC
  572. XC R56-- NIRVANA CELL
  573. XC
  574. X56000 IF(PRSA.NE.LOOKW) RETURN
  575. XC                                               !LOOK?
  576. X      I=46
  577. XC                                               !ODOOR IS OPEN/CLOSED.
  578. X      IF(QOPEN(ODOOR)) I=12
  579. X      CALL RSPSUB(725,I)
  580. X      RETURN
  581. X`0C
  582. XC RAPPL2, PAGE 6
  583. XC
  584. XC R57-- NIRVANA AND END OF GAME
  585. XC
  586. X57000 IF(PRSA.NE.WALKIW) RETURN
  587. XC                                               !WALKIN?
  588. X      CALL RSPEAK(726)
  589. X      CALL SCORE(.FALSE.)
  590. XC moved to exit routine CLOSE(DBCH)
  591. X      CALL EXIT
  592. XC
  593. XC R58-- TOMB ROOM
  594. XC
  595. X58000 IF(PRSA.NE.LOOKW) RETURN
  596. XC                                               !LOOK?
  597. X      I=46
  598. XC                                               !TOMB IS OPEN/CLOSED.
  599. X      IF(QOPEN(TOMB)) I=12
  600. X      CALL RSPSUB(792,I)
  601. X      RETURN
  602. XC
  603. XC R59-- PUZZLE SIDE ROOM
  604. XC
  605. X59000 IF(PRSA.NE.LOOKW) RETURN
  606. XC                                               !LOOK?
  607. X      I=861
  608. XC                                               !ASSUME DOOR CLOSED.
  609. X      IF(CPOUTF) I=862
  610. XC                                               !OPEN?
  611. X      CALL RSPEAK(I)
  612. XC                                               !DESCRIBE.
  613. X      RETURN
  614. XC
  615. XC R60-- PUZZLE ROOM
  616. XC
  617. X60000 IF(PRSA.NE.LOOKW) RETURN
  618. XC                                               !LOOK?
  619. X      IF(CPUSHF) GO TO 60100
  620. XC                                               !STARTED PUZZLE?
  621. X      CALL RSPEAK(868)
  622. XC                                               !NO, DESCRIBE.
  623. X      IF(and(OFLAG2(WARNI),TCHBT).NE.0) CALL RSPEAK(869)
  624. X      RETURN
  625. XC
  626. X60100 CALL CPINFO(880,CPHERE)
  627. XC                                               !DESCRIBE ROOM.
  628. X      RETURN
  629. XC
  630. X      END
  631. XC LOOKTO--      DESCRIBE VIEW IN MIRROR HALLWAY
  632. XC
  633. XC DECLARATIONS
  634. XC
  635. X      SUBROUTINE LOOKTO(NRM,SRM,NT,ST,HT)
  636. X      IMPLICIT INTEGER(A-Z)
  637. X
  638. X      INCLUDE 'GAMESTATE.LIB'
  639. X      INCLUDE 'FLAGS.LIB'
  640. X`0C
  641. XC LOOKTO, PAGE 2
  642. XC
  643. X      CALL RSPEAK(HT)
  644. XC                                               !DESCRIBE HALL.
  645. X      CALL RSPEAK(NT)
  646. XC                                               !DESCRIBE NORTH VIEW.
  647. X      CALL RSPEAK(ST)
  648. XC                                               !DESCRIBE SOUTH VIEW.
  649. X      DIR=0
  650. XC                                               !ASSUME NO DIRECTION.
  651. X      IF(IABS(MLOC-HERE).NE.1) GO TO 200
  652. XC                                               !MIRROR TO N OR S?
  653. X      IF(MLOC.EQ.NRM) DIR=695
  654. X      IF(MLOC.EQ.SRM) DIR=699
  655. XC                                               !DIR=N/S.
  656. X      IF(MOD(MDIR,180).NE.0) GO TO 100
  657. XC                                               !MIRROR N-S?
  658. X      CALL RSPSUB(847,DIR)
  659. XC                                               !YES, HE SEES PANEL
  660. X      CALL RSPSB2(848,DIR,DIR)
  661. XC                                               !AND NARROW ROOMS.
  662. X      GO TO 200
  663. XC
  664. X100   M1=MRHERE(HERE)
  665. XC                                               !WHICH MIRROR?
  666. X      MRBF=0
  667. XC                                               !ASSUME INTACT.
  668. X      IF(((M1.EQ.1).AND..NOT.MR1F).OR.
  669. X     &   ((M1.EQ.2).AND..NOT.MR2F)) MRBF=1
  670. X      CALL RSPSUB(849+MRBF,DIR)
  671. XC                                               !DESCRIBE.
  672. X      IF((M1.EQ.1).AND.MROPNF) CALL RSPEAK(823+MRBF)
  673. X      IF(MRBF.NE.0) CALL RSPEAK(851)
  674. XC
  675. X200   I=0
  676. XC                                               !ASSUME NO MORE TO DO.
  677. X      IF((NT.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.699))) I=852
  678. X      IF((ST.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.695))) I=853
  679. X      IF((NT+ST+DIR).EQ.0) I=854
  680. X      IF(HT.NE.0) CALL RSPEAK(I)
  681. XC                                               !DESCRIBE HALLS.
  682. X      RETURN
  683. XC
  684. X      END
  685. X`0C
  686. XC EWTELL--      DESCRIBE E/W NARROW ROOMS
  687. XC
  688. XC DECLARATIONS
  689. XC
  690. X      SUBROUTINE EWTELL(RM,ST)
  691. X      IMPLICIT INTEGER(A-Z)
  692. X      LOGICAL M1
  693. XC
  694. XC ROOMS
  695. X
  696. X      INCLUDE 'RINDEX.LIB'
  697. X      INCLUDE 'FLAGS.LIB'
  698. X`0C
  699. XC EWTELL, PAGE 2
  700. XC
  701. XC NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND
  702. XC MIRROR MUST BE N-S.
  703. XC
  704. X      M1=(MDIR+(MOD(RM-MRAE,2)*180)).EQ.180
  705. X      I=819+MOD(RM-MRAE,2)
  706. XC                                               !GET BASIC E/W STRING.
  707. X      IF((M1.AND..NOT.MR1F).OR.(.NOT.M1.AND..NOT.MR2F))
  708. X     &  I=I+2
  709. X      CALL RSPEAK(I)
  710. X      IF(M1.AND.MROPNF) CALL RSPEAK(823+((I-819)/2))
  711. X      CALL RSPEAK(825)
  712. X      CALL RSPEAK(ST)
  713. X      RETURN
  714. XC
  715. X      END
  716. $ CALL UNPACK [.SRC]NROOMS.FOR;1 1985880065
  717. $ create 'f'
  718. XC OAPPLI- OBJECT SPECIAL ACTION ROUTINES
  719. XC
  720. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  721. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  722. XC WRITTEN BY R. M. SUPNIK
  723. XC
  724. XC DECLARATIONS
  725. XC
  726. X      LOGICAL FUNCTION OAPPLI(RI,ARG)
  727. X      IMPLICIT INTEGER (A-Z)
  728. X      LOGICAL SOBJS,NOBJS
  729. X      LOGICAL QOPEN,QON,LIT
  730. X      LOGICAL MOVETO,RMDESC,CLOCKD
  731. X      LOGICAL THIEFP,CYCLOP,TROLLP,BALLOP,LIGHTP
  732. X      LOGICAL QEMPTY,QHERE,F,OPNCLS
  733. X
  734. X      INCLUDE 'PARSER.LIB'
  735. X      INCLUDE 'GAMESTATE.LIB'
  736. X      INCLUDE 'STATE.LIB'
  737. XC
  738. X      COMMON /BATS/ BATDRP(9)
  739. XC
  740. XC PUZZLE ROOM
  741. XC
  742. X      COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64)
  743. X
  744. X      INCLUDE 'ROOMS.LIB'
  745. X      INCLUDE 'RFLAG.LIB'
  746. X      INCLUDE 'RINDEX.LIB'
  747. X      INCLUDE 'OBJECTS.LIB'
  748. X      INCLUDE 'OFLAGS.LIB'
  749. X      INCLUDE 'OINDEX.LIB'
  750. X      INCLUDE 'CLOCK.LIB'
  751. X
  752. X      INCLUDE 'ADVERS.LIB'
  753. X      INCLUDE 'VERBS.LIB'
  754. X      INCLUDE 'FLAGS.LIB'
  755. XC
  756. XC FUNCTIONS AND DATA
  757. XC
  758. X      QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  759. X      QON(R)=and(OFLAG1(R),ONBT).NE.0
  760. X      DATA MXSMP/99/
  761. X`0C
  762. XC OAPPLI, PAGE 2
  763. XC
  764. X      IF(RI.EQ.0) GO TO 10
  765. XC                                               !ZERO IS FALSE APP.
  766. X      IF(RI.LE.MXSMP) GO TO 100
  767. XC                                               !SIMPLE OBJECT?
  768. X      IF(PRSO.GT.220) GO TO 5
  769. X      IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  770. X5     IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  771. X      AV=AVEHIC(WINNER)
  772. X      FLOBTS=FLAMBT+LITEBT+ONBT
  773. X      OAPPLI=.TRUE.
  774. XC
  775. X      GO TO (2000,5000,10000,11000,12000,15000,18000,
  776. X     &   19000,20000,22000,25000,26000,32000,35000,39000,40000,
  777. X     &   45000,47000,48000,49000,50000,51000,52000,54000,55000,
  778. X     &   56000,57000,58000,59000,60000,61000,62000),
  779. X     &  (RI-MXSMP)
  780. X      CALL BUG(6,RI)
  781. XC
  782. XC RETURN HERE TO DECLARE FALSE RESULT
  783. XC
  784. X10    OAPPLI=.FALSE.
  785. X      RETURN
  786. XC
  787. XC SIMPLE OBJECTS, PROCESSED EXTERNALLY.
  788. XC
  789. X100   IF(RI.LT.32) OAPPLI=SOBJS(RI,ARG)
  790. X      IF(RI.GE.32) OAPPLI=NOBJS(RI,ARG)
  791. X      RETURN
  792. X`0C
  793. XC OAPPLI, PAGE 3
  794. XC
  795. XC O100--        MACHINE FUNCTION
  796. XC
  797. X2000  IF(HERE.NE.MMACH) GO TO 10
  798. XC                                               !NOT HERE? F
  799. X      OAPPLI=OPNCLS(MACHI,123,124)
  800. XC                                               !HANDLE OPN/CLS.
  801. X      RETURN
  802. XC
  803. XC O101--        WATER FUNCTION
  804. XC
  805. X5000  IF(PRSA.NE.FILLW) GO TO 5050
  806. XC                                               !FILL X WITH Y IS
  807. X      PRSA=PUTW
  808. XC                                               !MADE INTO
  809. X      I=PRSI
  810. X      PRSI=PRSO
  811. X      PRSO=I
  812. XC                                               !PUT Y IN X.
  813. X      I=ODI2
  814. X      ODI2=ODO2
  815. X      ODO2=I
  816. X5050  IF((PRSO.EQ.WATER).OR.(PRSO.EQ.GWATE)) GO TO 5100
  817. X      CALL RSPEAK(561)
  818. XC                                               !WATER IS IND OBJ,
  819. X      RETURN
  820. XC                                               !PUNT.
  821. XC
  822. X5100  IF(PRSA.NE.TAKEW) GO TO 5400
  823. XC                                               !TAKE WATER?
  824. X      IF((OADV(BOTTL).EQ.WINNER).AND.(OCAN(PRSO).NE.BOTTL))
  825. X     &  GO TO 5500
  826. X      IF(OCAN(PRSO).EQ.0) GO TO 5200
  827. XC                                               !INSIDE ANYTHING?
  828. X      IF(QOPEN(OCAN(PRSO))) GO TO 5200
  829. XC                                               !YES, OPEN?
  830. X      CALL RSPEAK(525,ODESC2(OCAN(PRSO)))
  831. XC                                               !INSIDE, CLOSED, PUNT.
  832. X      RETURN
  833. XC
  834. X5200  CALL RSPEAK(615)
  835. XC                                               !NOT INSIDE OR OPEN,
  836. X      RETURN
  837. XC                                               !SLIPS THRU FINGERS.
  838. XC
  839. X5400  IF(PRSA.NE.PUTW) GO TO 5700
  840. XC                                               !PUT WATER IN X?
  841. X      IF((AV.NE.0).AND.(PRSI.EQ.AV)) GO TO 5800
  842. XC                                               !IN VEH?
  843. X      IF(PRSI.EQ.BOTTL) GO TO 5500
  844. XC                                               !IN BOTTLE?
  845. X      CALL RSPSUB(297,ODI2)
  846. XC                                               !WONT GO ELSEWHERE.
  847. X      CALL NEWSTA(PRSO,0,0,0,0)
  848. XC                                               !VANISH WATER.
  849. X      RETURN
  850. XC
  851. X5500  IF(QOPEN(BOTTL)) GO TO 5550
  852. XC                                               !BOTTLE OPEN?
  853. X      CALL RSPEAK(612)
  854. XC                                               !NO, LOSE.
  855. X      RETURN
  856. XC
  857. X5550  IF(QEMPTY(BOTTL)) GO TO 5600
  858. XC                                               !OPEN, EMPTY?
  859. X      CALL RSPEAK(613)
  860. XC                                               !NO, ALREADY FULL.
  861. X      RETURN
  862. XC
  863. X5600  CALL NEWSTA(WATER,614,0,BOTTL,0)
  864. XC                                               !TAKE WATER TO BOTTLE.
  865. X      RETURN
  866. XC
  867. X5700  IF((PRSA.NE.DROPW).AND.(PRSA.NE.POURW).AND.
  868. X     &   (PRSA.NE.GIVEW)) GO TO 5900
  869. X      IF(AV.NE.0) GO TO 5800
  870. XC                                               !INTO VEHICLE?
  871. X      CALL NEWSTA(PRSO,133,0,0,0)
  872. XC                                               !NO, VANISHES.
  873. X      RETURN
  874. XC
  875. X5800  CALL NEWSTA(WATER,0,0,AV,0)
  876. XC                                               !WATER INTO VEHICLE.
  877. X      CALL RSPSUB(296,ODESC2(AV))
  878. XC                                               !DESCRIBE.
  879. X      RETURN
  880. XC
  881. X5900  IF(PRSA.NE.THROWW) GO TO 10
  882. XC                                               !LAST CHANCE, THROW?
  883. X      CALL NEWSTA(PRSO,132,0,0,0)
  884. XC                                               !VANISHES.
  885. X      RETURN
  886. X`0C
  887. XC OAPPLI, PAGE 4
  888. XC
  889. XC O102--        LEAF PILE
  890. XC
  891. X10000 IF(PRSA.NE.BURNW) GO TO 10500
  892. XC                                               !BURN?
  893. X      IF(OROOM(PRSO).EQ.0) GO TO 10100
  894. XC                                               !WAS HE CARRYING?
  895. X      CALL NEWSTA(PRSO,158,0,0,0)
  896. XC                                               !NO, BURN IT.
  897. X      RETURN
  898. XC
  899. X10100 CALL NEWSTA(PRSO,0,HERE,0,0)
  900. XC                                               !DROP LEAVES.
  901. X      CALL JIGSUP(159)
  902. XC                                               !BURN HIM.
  903. X      RETURN
  904. XC
  905. X10500 IF(PRSA.NE.MOVEW) GO TO 10600
  906. XC                                               !MOVE?
  907. X      CALL RSPEAK(2)
  908. XC                                               !DONE.
  909. X      RETURN
  910. XC
  911. X10600 IF((PRSA.NE.LOOKUW).OR.(RVCLR.NE.0)) GO TO 10
  912. X      CALL RSPEAK(344)
  913. XC                                               !LOOK UNDER?
  914. X      RETURN
  915. XC
  916. XC O103--        TROLL, DONE EXTERNALLY.
  917. XC
  918. X11000 OAPPLI=TROLLP(ARG)
  919. XC                                               !TROLL PROCESSOR.
  920. X      RETURN
  921. XC
  922. XC O104--        RUSTY KNIFE.
  923. XC
  924. X12000 IF(PRSA.NE.TAKEW) GO TO 12100
  925. XC                                               !TAKE?
  926. X      IF(OADV(SWORD).EQ.WINNER) CALL RSPEAK(160)
  927. XC                                               !PULSE SWORD.
  928. X      GO TO 10
  929. XC
  930. X12100 IF((((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW)).OR.
  931. X     &     (PRSI.NE.RKNIF)).AND.
  932. X     &    (((PRSA.NE.SWINGW).AND.(PRSA.NE.THROWW)).OR.
  933. X     &     (PRSO.NE.RKNIF))) GO TO 10
  934. X      CALL NEWSTA(RKNIF,0,0,0,0)
  935. XC                                               !KILL KNIFE.
  936. X      CALL JIGSUP(161)
  937. XC                                               !KILL HIM.
  938. X      RETURN
  939. X`0C
  940. XC OAPPLI, PAGE 5
  941. XC
  942. XC O105--        GLACIER
  943. XC
  944. X15000 IF(PRSA.NE.THROWW) GO TO 15500
  945. XC                                               !THROW?
  946. X      IF(PRSO.NE.TORCH) GO TO 15400
  947. XC                                               !TORCH?
  948. X      CALL NEWSTA(ICE,169,0,0,0)
  949. XC                                               !MELT ICE.
  950. X      ODESC1(TORCH)=174
  951. XC                                               !MUNG TORCH.
  952. X      ODESC2(TORCH)=173
  953. X      OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
  954. X      CALL NEWSTA(TORCH,0,STREA,0,0)
  955. XC                                               !MOVE TORCH.
  956. X      GLACRF=.TRUE.
  957. XC                                               !GLACIER GONE.
  958. X      IF(.NOT.LIT(HERE)) CALL RSPEAK(170)
  959. XC                                               !IN DARK?
  960. X      RETURN
  961. XC
  962. X15400 CALL RSPEAK(171)
  963. XC                                               !JOKE IF NOT TORCH.
  964. X      RETURN
  965. XC
  966. X15500 IF((PRSA.NE.MELTW).OR.(PRSO.NE.ICE)) GO TO 10
  967. X      IF(and(OFLAG1(PRSI),FLOBTS).EQ.FLOBTS) GO TO 15600
  968. X      CALL RSPSUB(298,ODI2)
  969. XC                                               !CANT MELT WITH THAT.
  970. X      RETURN
  971. XC
  972. X15600 GLACMF=.TRUE.
  973. XC                                               !PARTIAL MELT.
  974. X      IF(PRSI.NE.TORCH) GO TO 15700
  975. XC                                               !MELT WITH TORCH?
  976. X      ODESC1(TORCH)=174
  977. XC                                               !MUNG TORCH.
  978. X      ODESC2(TORCH)=173
  979. X      OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
  980. X15700 CALL JIGSUP(172)
  981. XC                                               !DROWN.
  982. X      RETURN
  983. XC
  984. XC O106--        BLACK BOOK
  985. XC
  986. X18000 IF(PRSA.NE.OPENW) GO TO 18100
  987. XC                                               !OPEN?
  988. X      CALL RSPEAK(180)
  989. XC                                               !JOKE.
  990. X      RETURN
  991. XC
  992. X18100 IF(PRSA.NE.CLOSEW) GO TO 18200
  993. XC                                               !CLOSE?
  994. X      CALL RSPEAK(181)
  995. X      RETURN
  996. XC
  997. X18200 IF(PRSA.NE.BURNW) GO TO 10
  998. XC                                               !BURN?
  999. X      CALL NEWSTA(PRSO,0,0,0,0)
  1000. XC                                               !FATAL JOKE.
  1001. X      CALL JIGSUP(182)
  1002. X      RETURN
  1003. X`0C
  1004. XC OAPPLI, PAGE 6
  1005. XC
  1006. XC O107--        CANDLES, PROCESSED EXTERNALLY
  1007. XC
  1008. X19000 OAPPLI=LIGHTP(CANDL)
  1009. X      RETURN
  1010. XC
  1011. XC O108--        MATCHES, PROCESSED EXTERNALLY
  1012. XC
  1013. X20000 OAPPLI=LIGHTP(MATCH)
  1014. X      RETURN
  1015. XC
  1016. XC O109--        CYCLOPS, PROCESSED EXTERNALLY.
  1017. XC
  1018. X22000 OAPPLI=CYCLOP(ARG)
  1019. XC                                               !CYCLOPS
  1020. X      RETURN
  1021. XC
  1022. XC O110--        THIEF, PROCESSED EXTERNALLY
  1023. XC
  1024. X25000 OAPPLI=THIEFP(ARG)
  1025. X      RETURN
  1026. XC
  1027. XC O111--        WINDOW
  1028. XC
  1029. X26000 OAPPLI=OPNCLS(WINDO,208,209)
  1030. XC                                               !OPEN/CLS WINDOW.
  1031. X      RETURN
  1032. XC
  1033. XC O112--        PILE OF BODIES
  1034. XC
  1035. X32000 IF(PRSA.NE.TAKEW) GO TO 32500
  1036. XC                                               !TAKE?
  1037. X      CALL RSPEAK(228)
  1038. XC                                               !CANT.
  1039. X      RETURN
  1040. XC
  1041. X32500 IF((PRSA.NE.BURNW).AND.(PRSA.NE.MUNGW)) GO TO 10
  1042. X      IF(ONPOLF) RETURN
  1043. XC                                               !BURN OR MUNG?
  1044. X      ONPOLF=.TRUE.
  1045. XC                                               !SET HEAD ON POLE.
  1046. X      CALL NEWSTA(HPOLE,0,LLD2,0,0)
  1047. X      CALL JIGSUP(229)
  1048. XC                                               !BEHEADED.
  1049. X      RETURN
  1050. XC
  1051. XC O113--        VAMPIRE BAT
  1052. XC
  1053. X35000 CALL RSPEAK(50)
  1054. XC                                               !TIME TO FLY, JACK.
  1055. X      F=MOVETO(BATDRP(RND(9)+1),WINNER)
  1056. XC                                               !SELECT RANDOM DEST.
  1057. X      F=RMDESC(0)
  1058. X      RETURN
  1059. X`0C
  1060. XC OAPPLI, PAGE 7
  1061. XC
  1062. XC O114--        STICK
  1063. XC
  1064. X39000 IF(PRSA.NE.WAVEW) GO TO 10
  1065. XC                                               !WAVE?
  1066. X      IF(HERE.EQ.MRAIN) GO TO 39500
  1067. XC                                               !ON RAINBOW?
  1068. X      IF((HERE.EQ.POG).OR.(HERE.EQ.FALLS)) GO TO 39200
  1069. X      CALL RSPEAK(244)
  1070. XC                                               !NOTHING HAPPENS.
  1071. X      RETURN
  1072. XC
  1073. X39200 OFLAG1(POT)=or(OFLAG1(POT),VISIBT)
  1074. X      RAINBF=.NOT. RAINBF
  1075. XC                                               !COMPLEMENT RAINBOW.
  1076. X      I=245
  1077. XC                                               !ASSUME OFF.
  1078. X      IF(RAINBF) I=246
  1079. XC                                               !IF ON, SOLID.
  1080. X      CALL RSPEAK(I)
  1081. XC                                               !DESCRIBE.
  1082. X      RETURN
  1083. XC
  1084. X39500 RAINBF=.FALSE.
  1085. XC                                               !ON RAINBOW,
  1086. X      CALL JIGSUP(247)
  1087. XC                                               !TAKE A FALL.
  1088. X      RETURN
  1089. XC
  1090. XC O115--        BALLOON, HANDLED EXTERNALLY
  1091. XC
  1092. X40000 OAPPLI=BALLOP(ARG)
  1093. X      RETURN
  1094. XC
  1095. XC O116--        HEADS
  1096. XC
  1097. X45000 IF(PRSA.NE.HELLOW) GO TO 45100
  1098. XC                                               !HELLO HEADS?
  1099. X      CALL RSPEAK(633)
  1100. XC                                               !TRULY BIZARRE.
  1101. X      RETURN
  1102. XC
  1103. X45100 IF(PRSA.EQ.READW) GO TO 10
  1104. XC                                               !READ IS OK.
  1105. X      CALL NEWSTA(LCASE,260,LROOM,0,0)
  1106. XC                                               !MAKE LARGE CASE.
  1107. X      I=ROBADV(WINNER,0,LCASE,0)+ROBRM(HERE,100,0,LCASE,0)
  1108. X      CALL JIGSUP(261)
  1109. XC                                               !KILL HIM.
  1110. X      RETURN
  1111. X`0C
  1112. XC OAPPLI, PAGE 8
  1113. XC
  1114. XC O117--        SPHERE
  1115. XC
  1116. X47000 IF(CAGESF.OR.(PRSA.NE.TAKEW)) GO TO 10
  1117. XC                                               !TAKE?
  1118. X      IF(WINNER.NE.PLAYER) GO TO 47500
  1119. XC                                               !ROBOT TAKE?
  1120. X      CALL RSPEAK(263)
  1121. XC                                               !NO, DROP CAGE.
  1122. X      IF(OROOM(ROBOT).NE.HERE) GO TO 47200
  1123. XC                                               !ROBOT HERE?
  1124. X      F=MOVETO(CAGED,WINNER)
  1125. XC                                               !YES, MOVE INTO CAGE.
  1126. X      CALL NEWSTA(ROBOT,0,CAGED,0,0)
  1127. XC                                               !MOVE ROBOT.
  1128. X      AROOM(AROBOT)=CAGED
  1129. X      OFLAG1(ROBOT)=or(OFLAG1(ROBOT),NDSCBT)
  1130. X      CTICK(CEVSPH)=10
  1131. XC                                               !GET OUT IN 10 OR ELSE.
  1132. X      RETURN
  1133. XC
  1134. X47200 CALL NEWSTA(SPHER,0,0,0,0)
  1135. XC                                               !YOURE DEAD.
  1136. X      RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
  1137. X      RRAND(CAGER)=147
  1138. X      CALL JIGSUP(148)
  1139. XC                                               !MUNG PLAYER.
  1140. X      RETURN
  1141. XC
  1142. X47500 CALL NEWSTA(SPHER,0,0,0,0)
  1143. XC                                               !ROBOT TRIED,
  1144. X      CALL NEWSTA(ROBOT,264,0,0,0)
  1145. XC                                               !KILL HIM.
  1146. X      CALL NEWSTA(CAGE,0,HERE,0,0)
  1147. XC                                               !INSERT MANGLED CAGE.
  1148. X      RETURN
  1149. XC
  1150. XC O118--        GEOMETRICAL BUTTONS
  1151. XC
  1152. X48000 IF(PRSA.NE.PUSHW) GO TO 10
  1153. XC                                               !PUSH?
  1154. X      I=PRSO-SQBUT+1
  1155. XC                                               !GET BUTTON INDEX.
  1156. X      IF((I.LE.0).OR.(I.GE.4)) GO TO 10
  1157. XC                                               !A BUTTON?
  1158. X      IF(WINNER.NE.PLAYER) GO TO (48100,48200,48300),I
  1159. X      CALL JIGSUP(265)
  1160. XC                                               !YOU PUSHED, YOU DIE.
  1161. X      RETURN
  1162. XC
  1163. X48100 I=267
  1164. X      IF(CAROZF) I=266
  1165. XC                                               !SPEED UP?
  1166. X      CAROZF=.TRUE.
  1167. X      CALL RSPEAK(I)
  1168. X      RETURN
  1169. XC
  1170. X48200 I=266
  1171. XC                                               !ASSUME NO CHANGE.
  1172. X      IF(CAROZF) I=268
  1173. X      CAROZF=.FALSE.
  1174. X      CALL RSPEAK(I)
  1175. X      RETURN
  1176. XC
  1177. X48300 CAROFF=.NOT.CAROFF
  1178. XC                                               !FLIP CAROUSEL.
  1179. X      IF(.NOT.QHERE(IRBOX,CAROU)) RETURN
  1180. XC                                               !IRON BOX IN CAROUSEL?
  1181. X      CALL RSPEAK(269)
  1182. XC                                               !YES, THUMP.
  1183. X      OFLAG1(IRBOX)=xor(OFLAG1(IRBOX),VISIBT)
  1184. X      IF(CAROFF) RFLAG(CAROU)=and(RFLAG(CAROU), not(RSEEN))
  1185. X      RETURN
  1186. XC
  1187. XC O119--        FLASK FUNCTION
  1188. XC
  1189. X49000 IF(PRSA.EQ.OPENW) GO TO 49100
  1190. XC                                               !OPEN?
  1191. X      IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  1192. X      CALL NEWSTA(FLASK,270,0,0,0)
  1193. XC                                               !KILL FLASK.
  1194. X49100 RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  1195. X      RRAND(HERE)=271
  1196. X      CALL JIGSUP(272)
  1197. XC                                               !POISONED.
  1198. X      RETURN
  1199. XC
  1200. XC O120--        BUCKET FUNCTION
  1201. XC
  1202. X50000 IF(ARG.NE.2) GO TO 10
  1203. XC                                               !READOUT?
  1204. X      IF((OCAN(WATER).NE.BUCKE).OR.BUCKTF) GO TO 50500
  1205. X      BUCKTF=.TRUE.
  1206. XC                                               !BUCKET AT TOP.
  1207. X      CTICK(CEVBUC)=100
  1208. XC                                               !START COUNTDOWN.
  1209. X      CALL NEWSTA(BUCKE,290,TWELL,0,0)
  1210. XC                                               !REPOSITION BUCKET.
  1211. X      GO TO 50900
  1212. XC                                               !FINISH UP.
  1213. XC
  1214. X50500 IF((OCAN(WATER).EQ.BUCKE).OR..NOT.BUCKTF) GO TO 10
  1215. X      BUCKTF=.FALSE.
  1216. X      CALL NEWSTA(BUCKE,291,BWELL,0,0)
  1217. XC                                               !BUCKET AT BOTTOM.
  1218. X50900 IF(AV.NE.BUCKE) RETURN
  1219. XC                                               !IN BUCKET?
  1220. X      F=MOVETO(OROOM(BUCKE),WINNER)
  1221. XC                                               !MOVE ADVENTURER.
  1222. X      F=RMDESC(0)
  1223. XC                                               !DESCRIBE ROOM.
  1224. X      RETURN
  1225. X`0C
  1226. XC OAPPLI, PAGE 9
  1227. XC
  1228. XC O121--        EATME CAKE
  1229. XC
  1230. X51000 IF((PRSA.NE.EATW).OR.(PRSO.NE.ECAKE).OR.
  1231. X     &   (HERE.NE.ALICE)) GO TO 10
  1232. X      CALL NEWSTA(ECAKE,273,0,0,0)
  1233. XC                                               !VANISH CAKE.
  1234. X      OFLAG1(ROBOT)=and(OFLAG1(ROBOT), not(VISIBT))
  1235. X      OAPPLI=MOVETO(ALISM,WINNER)
  1236. XC                                               !MOVE TO ALICE SMALL.
  1237. X      IZ=64
  1238. X      IR=ALISM
  1239. X      IO=ALICE
  1240. X      GO TO 52405
  1241. XC
  1242. XC O122--        ICINGS
  1243. XC
  1244. X52000 IF(PRSA.NE.READW) GO TO 52200
  1245. XC                                               !READ?
  1246. X      I=274
  1247. XC                                               !CANT READ.
  1248. X      IF(PRSI.NE.0) I=275
  1249. XC                                               !THROUGH SOMETHING?
  1250. X      IF(PRSI.EQ.BOTTL) I=276
  1251. XC                                               !THROUGH BOTTLE?
  1252. X      IF(PRSI.EQ.FLASK) I=277+(PRSO-ORICE)
  1253. XC                                               !THROUGH FLASK?
  1254. X      CALL RSPEAK(I)
  1255. XC                                               !READ FLASK.
  1256. X      RETURN
  1257. XC
  1258. X52200 IF((PRSA.NE.THROWW).OR.(PRSO.NE.RDICE).OR.(PRSI.NE.POOL))
  1259. X     &  GO TO 52300
  1260. X      CALL NEWSTA(POOL,280,0,0,0)
  1261. XC                                               !VANISH POOL.
  1262. X      OFLAG1(SAFFR)=or(OFLAG1(SAFFR),VISIBT)
  1263. X      RETURN
  1264. XC
  1265. X52300 IF((HERE.NE.ALICE).AND.(HERE.NE.ALISM).AND.(HERE.NE.ALITR))
  1266. X     &  GO TO 10
  1267. X      IF(((PRSA.NE.EATW).AND.(PRSA.NE.THROWW)).OR.
  1268. X     &   (PRSO.NE.ORICE)) GO TO 52400
  1269. X      CALL NEWSTA(ORICE,0,0,0,0)
  1270. XC                                               !VANISH ORANGE ICE.
  1271. X      RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  1272. X      RRAND(HERE)=281
  1273. X      CALL JIGSUP(282)
  1274. XC                                               !VANISH ADVENTURER.
  1275. X      RETURN
  1276. XC
  1277. X52400 IF((PRSA.NE.EATW).OR.(PRSO.NE.BLICE))
  1278. X     &  GO TO 10
  1279. X      CALL NEWSTA(BLICE,283,0,0,0)
  1280. XC                                               !VANISH BLUE ICE.
  1281. X      IF(HERE.NE.ALISM) GO TO 52500
  1282. XC                                               !IN REDUCED ROOM?
  1283. X      OFLAG1(ROBOT)=or(OFLAG1(ROBOT),VISIBT)
  1284. X      IO=HERE
  1285. X      OAPPLI=MOVETO(ALICE,WINNER)
  1286. X      IZ=1/64
  1287. X      IR=ALICE
  1288. XC
  1289. XC  Do a size change, common loop used also by code at 51000
  1290. XC
  1291. X52405 DO 52450 I=1,OLNT
  1292. XC                                               !ENLARGE WORLD.
  1293. X        IF((OROOM(I).NE.IO).OR.(OSIZE(I).EQ.10000))
  1294. X     &          GO TO 52450
  1295. X        OROOM(I)=IR
  1296. X        OSIZE(I)=OSIZE(I)*IZ
  1297. X52450 CONTINUE
  1298. X      RETURN
  1299. XC
  1300. X52500 CALL JIGSUP(284)
  1301. XC                                               !ENLARGED IN WRONG ROOM.
  1302. X      RETURN
  1303. XC
  1304. XC O123--        BRICK
  1305. XC
  1306. X54000 IF(PRSA.NE.BURNW) GO TO 10
  1307. XC                                               !BURN?
  1308. X      CALL JIGSUP(150)
  1309. XC                                               !BOOM
  1310. XC                                               !
  1311. X      RETURN
  1312. XC
  1313. XC O124--        MYSELF
  1314. XC
  1315. X55000 IF(PRSA.NE.GIVEW) GO TO 55100
  1316. XC                                               !GIVE?
  1317. X      CALL NEWSTA(PRSO,2,0,0,PLAYER)
  1318. XC                                               !DONE.
  1319. X      RETURN
  1320. XC
  1321. X55100 IF(PRSA.NE.TAKEW) GO TO 55200
  1322. XC                                               !TAKE?
  1323. X      CALL RSPEAK(286)
  1324. XC                                               !JOKE.
  1325. X      RETURN
  1326. XC
  1327. X55200 IF((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW)) GO TO 10
  1328. X      CALL JIGSUP(287)
  1329. XC                                               !KILL, NO JOKE.
  1330. X      RETURN
  1331. X`0C
  1332. XC OAPPLI, PAGE 10
  1333. XC
  1334. XC O125--        PANELS INSIDE MIRROR
  1335. XC
  1336. X56000 IF(PRSA.NE.PUSHW) GO TO 10
  1337. XC                                               !PUSH?
  1338. X      IF(POLEUF.NE.0) GO TO 56100
  1339. XC                                               !SHORT POLE UP?
  1340. X      I=731
  1341. XC                                               !NO, WONT BUDGE.
  1342. X      IF(MOD(MDIR,180).EQ.0) I=732
  1343. XC                                               !DIFF MSG IF N-S.
  1344. X      CALL RSPEAK(I)
  1345. XC                                               !TELL WONT MOVE.
  1346. X      RETURN
  1347. XC
  1348. X56100 IF(MLOC.NE.MRG) GO TO 56200
  1349. XC                                               !IN GDN ROOM?
  1350. X      CALL RSPEAK(733)
  1351. XC                                               !YOU LOSE.
  1352. X      CALL JIGSUP(685)
  1353. X      RETURN
  1354. XC
  1355. X56200 I=831
  1356. XC                                               !ROTATE L OR R.
  1357. X      IF((PRSO.EQ.RDWAL).OR.(PRSO.EQ.YLWAL)) I=830
  1358. X      CALL RSPEAK(I)
  1359. XC                                               !TELL DIRECTION.
  1360. X      MDIR=MOD(MDIR+45+(270*(I-830)),360)
  1361. XC                                               !CALCULATE NEW DIR.
  1362. X      CALL RSPSUB(734,695+(MDIR/45))
  1363. XC                                               !TELL NEW DIR.
  1364. X      IF(WDOPNF) CALL RSPEAK(730)
  1365. XC                                               !IF PANEL OPEN, CLOSE.
  1366. X      WDOPNF=.FALSE.
  1367. X      RETURN
  1368. XC                                               !DONE.
  1369. XC
  1370. XC O126--        ENDS INSIDE MIRROR
  1371. XC
  1372. X57000 IF(PRSA.NE.PUSHW) GO TO 10
  1373. XC                                               !PUSH?
  1374. X      IF(MOD(MDIR,180).EQ.0) GO TO 57100
  1375. XC                                               !MIRROR N-S?
  1376. X      CALL RSPEAK(735)
  1377. XC                                               !NO, WONT BUDGE.
  1378. X      RETURN
  1379. XC
  1380. X57100 IF(PRSO.NE.PINDR) GO TO 57300
  1381. XC                                               !PUSH PINE WALL?
  1382. X      IF(((MLOC.EQ.MRC).AND.(MDIR.EQ.180)).OR.
  1383. X     &   ((MLOC.EQ.MRD).AND.(MDIR.EQ.0)).OR.
  1384. X     &   (MLOC.EQ.MRG)) GO TO 57200
  1385. X      CALL RSPEAK(736)
  1386. XC                                               !NO, OPENS.
  1387. X      WDOPNF=.TRUE.
  1388. XC                                               !INDICATE OPEN.
  1389. X      CFLAG(CEVPIN)=.TRUE.
  1390. XC                                               !TIME OPENING.
  1391. X      CTICK(CEVPIN)=5
  1392. X      RETURN
  1393. XC
  1394. X57200 CALL RSPEAK(737)
  1395. XC                                               !GDN SEES YOU, DIE.
  1396. X      CALL JIGSUP(685)
  1397. X      RETURN
  1398. XC
  1399. X57300 NLOC=MLOC-1
  1400. XC                                               !NEW LOC IF SOUTH.
  1401. X      IF(MDIR.EQ.0) NLOC=MLOC+1
  1402. XC                                               !NEW LOC IF NORTH.
  1403. X      IF((NLOC.GE.MRA).AND.(NLOC.LE.MRD)) GO TO 57400
  1404. X      CALL RSPEAK(738)
  1405. XC                                               !HAVE REACHED END.
  1406. X      RETURN
  1407. XC
  1408. X57400 I=699
  1409. XC                                               !ASSUME SOUTH.
  1410. X      IF(MDIR.EQ.0) I=695
  1411. XC                                               !NORTH.
  1412. X      J=739
  1413. XC                                               !ASSUME SMOOTH.
  1414. X      IF(POLEUF.NE.0) J=740
  1415. XC                                               !POLE UP, WOBBLES.
  1416. X      CALL RSPSUB(J,I)
  1417. XC                                               !DESCRIBE.
  1418. X      MLOC=NLOC
  1419. X      IF(MLOC.NE.MRG) RETURN
  1420. XC                                               !NOW IN GDN ROOM?
  1421. XC
  1422. X      IF(POLEUF.NE.0) GO TO 57500
  1423. XC                                               !POLE UP, GDN SEES.
  1424. X      IF(MROPNF.OR.WDOPNF) GO TO 57600
  1425. XC                                               !DOOR OPEN, GDN SEES.
  1426. X      IF(MR1F.AND.MR2F) RETURN
  1427. XC                                               !MIRRORS INTACT, OK.
  1428. X      CALL RSPEAK(742)
  1429. XC                                               !MIRRORS BROKEN, DIE.
  1430. X      CALL JIGSUP(743)
  1431. X      RETURN
  1432. XC
  1433. X57500 CALL RSPEAK(741)
  1434. XC                                               !POLE UP, DIE.
  1435. X      CALL JIGSUP(743)
  1436. X      RETURN
  1437. XC
  1438. X57600 CALL RSPEAK(744)
  1439. XC                                               !DOOR OPEN, DIE.
  1440. X      CALL JIGSUP(743)
  1441. X      RETURN
  1442. X`0C
  1443. XC OAPPLI, PAGE 11
  1444. XC
  1445. XC O127--        GLOBAL GUARDIANS
  1446. XC
  1447. X58000 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
  1448. X     &   (PRSA.NE.MUNGW)) GO TO 58100
  1449. X      CALL JIGSUP(745)
  1450. XC                                               !LOSE.
  1451. X      RETURN
  1452. XC
  1453. X58100 IF(PRSA.NE.HELLOW) GO TO 10
  1454. XC                                               !HELLO?
  1455. X      CALL RSPEAK(746)
  1456. XC                                               !NO REPLY.
  1457. X      RETURN
  1458. XC
  1459. XC O128--        GLOBAL MASTER
  1460. XC
  1461. X59000 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
  1462. X     &   (PRSA.NE.MUNGW)) GO TO 59100
  1463. X      CALL JIGSUP(747)
  1464. XC                                               !BAD IDEA.
  1465. X      RETURN
  1466. XC
  1467. X59100 IF(PRSA.NE.TAKEW) GO TO 10
  1468. XC                                               !TAKE?
  1469. X      CALL RSPEAK(748)
  1470. XC                                               !JOKE.
  1471. X      RETURN
  1472. XC
  1473. XC O129--        NUMERAL FIVE (FOR JOKE)
  1474. XC
  1475. X60000 IF(PRSA.NE.TAKEW) GO TO 10
  1476. XC                                               !TAKE FIVE?
  1477. X      CALL RSPEAK(419)
  1478. XC                                               !TIME PASSES.
  1479. X      DO 60100 I=1,3
  1480. XC                                               !WAIT A WHILE.
  1481. X        IF(CLOCKD(X)) RETURN
  1482. X60100 CONTINUE
  1483. X      RETURN
  1484. XC
  1485. XC O130--        CRYPT FUNCTION
  1486. XC
  1487. X61000 IF(.NOT.ENDGMF) GO TO 45000
  1488. XC                                               !IF NOT EG, DIE.
  1489. X      IF(PRSA.NE.OPENW) GO TO 61100
  1490. XC                                               !OPEN?
  1491. X      I=793
  1492. X      IF(QOPEN(TOMB)) I=794
  1493. X      CALL RSPEAK(I)
  1494. X      OFLAG2(TOMB)=or(OFLAG2(TOMB),OPENBT)
  1495. X      RETURN
  1496. XC
  1497. X61100 IF(PRSA.NE.CLOSEW) GO TO 45000
  1498. XC                                               !CLOSE?
  1499. X      I=795
  1500. X      IF(QOPEN(TOMB)) I=796
  1501. X      CALL RSPEAK(I)
  1502. X      OFLAG2(TOMB)=and(OFLAG2(TOMB),not(OPENBT))
  1503. X      IF(HERE.EQ.CRYPT) CTICK(CEVSTE)=3
  1504. XC                                               !IF IN CRYPT, START EG.
  1505. X      RETURN
  1506. X`0C
  1507. XC OAPPLI, PAGE 12
  1508. XC
  1509. XC O131--        GLOBAL LADDER
  1510. XC
  1511. X62000 IF((CPVEC(CPHERE+1).EQ.-2).OR.(CPVEC(CPHERE-1).EQ.-3))
  1512. X     &  GO TO 62100
  1513. X      CALL RSPEAK(865)
  1514. XC                                               !NO, LOSE.
  1515. X      RETURN
  1516. XC
  1517. X62100 IF((PRSA.EQ.CLMBW).OR.(PRSA.EQ.CLMBUW)) GO TO 62200
  1518. X      CALL RSPEAK(866)
  1519. XC                                               !CLIMB IT?
  1520. X      RETURN
  1521. XC
  1522. X62200 IF((CPHERE.EQ.10).AND.(CPVEC(CPHERE+1).EQ.-2))
  1523. X     &          GO TO 62300
  1524. X      CALL RSPEAK(867)
  1525. XC                                               !NO, HIT YOUR HEAD.
  1526. X      RETURN
  1527. XC
  1528. X62300 F=MOVETO(CPANT,WINNER)
  1529. XC                                               !TO ANTEROOM.
  1530. X      F=RMDESC(3)
  1531. XC                                               !DESCRIBE.
  1532. X      RETURN
  1533. XC
  1534. X      END
  1535. $ CALL UNPACK [.SRC]OBJCTS.FOR;1 909843159
  1536. $ create 'f'
  1537. XC
  1538. XC OBJECTS
  1539. XC
  1540. X      COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
  1541. X     &`09`09OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
  1542. X     &`09`09OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
  1543. X     &`09`09OADV(220),OCAN(220),OREAD(220)
  1544. X      INTEGER EQO(220,14)
  1545. X      EQUIVALENCE (ODESC1, EQO)
  1546. XC
  1547. X      COMMON /OROOM2/ R2LNT,OROOM2(20),RROOM2(20)
  1548. $ CALL UNPACK [.SRC]OBJECTS.LIB;1 1829184893
  1549. $ create 'f'
  1550. XC
  1551. X      COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
  1552. X     &`09`09NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
  1553. X     &`09`09TOOLBT,TURNBT,ONBT
  1554. X      COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
  1555. X     &`09`09WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
  1556. X     &`09`09TCHBT,VEHBT,SCHBT
  1557. $ GOTO PART28
  1558.