home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / dungeon / part29 < prev    next >
Encoding:
Internet Message Format  |  1992-02-23  |  47.2 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 29/30
  5. Message-ID: <1992Feb24.014120.822@dragon.com>
  6. Date: 24 Feb 92 06:41:20 GMT
  7. Organization: Computer Projects Unlimited
  8. Lines: 1545
  9.  
  10. -+-+-+-+-+-+-+-+ START OF PART 29 -+-+-+-+-+-+-+-+
  11. XC                                               !KILL ROBOT.
  12. X      RETURN
  13. XC
  14. XC O31-- GRUE
  15. XC
  16. X56000 IF(PRSA.NE.EXAMIW) GO TO 56100
  17. XC                                               !EXAMINE?
  18. X      CALL RSPEAK(288)
  19. X      RETURN
  20. XC
  21. X56100 IF(PRSA.NE.FINDW) GO TO 10
  22. XC                                               !FIND?
  23. X      CALL RSPEAK(289)
  24. X      RETURN
  25. XC
  26. X      END
  27. $ CALL UNPACK [.SRC]SOBJS.FOR;1 1849673233
  28. $ create 'f'
  29. X      COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
  30. X     &`09`09LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
  31. $ CALL UNPACK [.SRC]STATE.LIB;1 1835804824
  32. $ create 'f'
  33. XC SVERBS-       SIMPLE VERBS PROCESSOR
  34. XC       ALL VERBS IN THIS ROUTINE MUST BE INDEPENDANT
  35. XC       OF OBJECT ACTIONS
  36. XC
  37. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  38. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  39. XC WRITTEN BY R. M. SUPNIK
  40. XC
  41. XC DECLARATIONS
  42. XC
  43. X      LOGICAL FUNCTION SVERBS(RI)
  44. X      IMPLICIT INTEGER (A-Z)
  45. X      LOGICAL MOVETO,YESNO
  46. X      LOGICAL RMDESC
  47. X      LOGICAL QOPEN
  48. X      LOGICAL FINDXT,QHERE,F
  49. X      INTEGER JOKES(25)
  50. X      CHARACTER ANSSTR(78)
  51. X      CHARACTER PP1(6),PP2(6),CH(6)
  52. X      INTEGER ANSWER(28)
  53. X
  54. X      INCLUDE 'PARSER.LIB'
  55. X      INCLUDE 'GAMESTATE.LIB'
  56. X      INCLUDE 'STATE.LIB'
  57. X      INCLUDE 'SCREEN.LIB'
  58. XC
  59. XC MISCELLANEOUS VARIABLES
  60. XC
  61. X      CHARACTER VEDIT
  62. X      COMMON /VERS/ VMAJ,VMIN,VEDIT
  63. X
  64. X      INCLUDE 'IO.LIB'
  65. X      INCLUDE 'ROOMS.LIB'
  66. X      INCLUDE 'RFLAG.LIB'
  67. X      INCLUDE 'RINDEX.LIB'
  68. X      INCLUDE 'EXITS.LIB'
  69. X      INCLUDE 'CURXT.LIB'
  70. X      INCLUDE 'XPARS.LIB'
  71. X      INCLUDE 'XSRCH.LIB'
  72. X      INCLUDE 'OBJECTS.LIB'
  73. X      INCLUDE 'OFLAGS.LIB'
  74. X      INCLUDE 'OINDEX.LIB'
  75. X      INCLUDE 'CLOCK.LIB'
  76. X
  77. X      INCLUDE 'ADVERS.LIB'
  78. X      INCLUDE 'VERBS.LIB'
  79. X      INCLUDE 'FLAGS.LIB'
  80. XC
  81. XC FUNCTIONS AND DATA
  82. XC
  83. X      QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  84. X      DATA MXNOP/39/,MXJOKE/64/
  85. X      DATA JOKES/4,5,3,304,305,306,307,308,309,310,311,312,
  86. X     &          313,5314,5319,324,325,883,884,120,120,0,0,0,0/
  87. X      DATA ANSWER/0,6,1,6,2,5,3,5,4,3,4,6,4,6,4,5,
  88. X     &          5,5,5,4,5,6,6,10,7,4,7,6/
  89. X      DATA ANSSTR/'T','E','M','P','L','E',
  90. X     &          'F','O','R','E','S','T',
  91. X     &          '3','0','0','0','3',
  92. X     &          'F','L','A','S','K',
  93. X     &          'R','U','B',
  94. X     &          'F','O','N','D','L','E',
  95. X     &          'C','A','R','R','E','S',
  96. X     &          'T','O','U','C','H',
  97. X     &          'B','O','N','E','S',
  98. X     &          'B','O','D','Y',
  99. X     &          'S','K','E','L','E','T',
  100. X     &          'R','U','S','T','Y','K','N','I','F','E',
  101. X     &          'N','O','N','E',
  102. X     &          'N','O','W','H','E','R','\0'/
  103. X`0C
  104. XC SVERBS, PAGE 2
  105. XC
  106. X      SVERBS=.TRUE.
  107. XC                                               !ASSUME WINS.
  108. X      IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  109. XC                                               !SET UP DESCRIPTORS.
  110. X      IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  111. XC
  112. X      IF(RI.EQ.0) CALL BUG(7,RI)
  113. XC                                               !ZERO IS VERBOTEN.
  114. X      IF(RI.LE.MXNOP) RETURN
  115. XC                                               !NOP?
  116. X      IF(RI.LE.MXJOKE) GO TO 100
  117. XC                                               !JOKE?
  118. X      GO TO (65000,66000,67000,68000,69000,
  119. X     &   1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
  120. X     &   11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
  121. X     &   21000,22000,23000,24000,25000,26000,27000),
  122. X     &  (RI-MXJOKE)
  123. X      CALL BUG(7,RI)
  124. XC
  125. XC ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
  126. XC
  127. X10    SVERBS=.FALSE.
  128. XC                                               !LOSE.
  129. X      RETURN
  130. XC
  131. XC JOKE PROCESSOR.
  132. XC FIND PROPER ENTRY IN JOKES, USE IT TO SELECT STRING TO PRINT.
  133. XC
  134. X100   I=JOKES(RI-MXNOP)
  135. XC                                               !GET TABLE ENTRY.
  136. X      J=I/1000
  137. XC                                               !ISOLATE # STRINGS.
  138. X      IF(J.NE.0) I=MOD(I,1000)+RND(J)
  139. XC                                               !IF RANDOM, CHOOSE.
  140. X      CALL RSPEAK(I)
  141. XC                                               !PRINT JOKE.
  142. X      RETURN
  143. X`0C
  144. XC SVERBS, PAGE 2A
  145. XC
  146. XC V65-- ROOM
  147. XC
  148. X65000 SVERBS=RMDESC(2)
  149. XC                                               !DESCRIBE ROOM ONLY.
  150. X      RETURN
  151. XC
  152. XC V66-- OBJECTS
  153. XC
  154. X66000 SVERBS=RMDESC(1)
  155. XC                                               !DESCRIBE OBJ ONLY.
  156. X      IF(.NOT.TELFLG) CALL RSPEAK(138)
  157. XC                                               !NO OBJECTS.
  158. X      RETURN
  159. XC
  160. XC V67-- RNAME
  161. XC
  162. X67000 CALL RSPEAK(RDESC2-HERE)
  163. XC                                               !SHORT ROOM NAME.
  164. X      RETURN
  165. XC
  166. XC V68-- RESERVED
  167. XC
  168. X68000 RETURN
  169. XC
  170. XC V69-- RESERVED
  171. XC
  172. X69000 RETURN
  173. X`0C
  174. XC SVERBS, PAGE 3
  175. XC
  176. XC V70-- BRIEF.  SET FLAG.
  177. XC
  178. X1000  BRIEFF=.TRUE.
  179. XC                                               !BRIEF DESCRIPTIONS.
  180. X      SUPERF=.FALSE.
  181. X      CALL RSPEAK(326)
  182. X      RETURN
  183. XC
  184. XC V71-- VERBOSE.  CLEAR FLAGS.
  185. XC
  186. X2000  BRIEFF=.FALSE.
  187. XC                                               !LONG DESCRIPTIONS.
  188. X      SUPERF=.FALSE.
  189. X      CALL RSPEAK(327)
  190. X      RETURN
  191. XC
  192. XC V72-- SUPERBRIEF.  SET FLAG.
  193. XC
  194. X3000  SUPERF=.TRUE.
  195. X      CALL RSPEAK(328)
  196. X      RETURN
  197. XC
  198. XC V73-- STAY (USED IN ENDGAME).
  199. XC
  200. X4000  IF(WINNER.NE.AMASTR) GO TO 4100
  201. XC                                               !TELL MASTER, STAY.
  202. X      CALL RSPEAK(781)
  203. XC                                               !HE DOES.
  204. X      CTICK(CEVFOL)=0
  205. XC                                               !NOT FOLLOWING.
  206. X      RETURN
  207. XC
  208. X4100  IF(WINNER.EQ.PLAYER) CALL RSPEAK(664)
  209. XC                                               !JOKE.
  210. X      RETURN
  211. XC
  212. XC V74-- VERSION.  PRINT INFO.
  213. XC
  214. X5000  WRITE(OUTCH,5010) VMAJ,VMIN,VEDIT
  215. X5010  FORMAT(' V',I1,'.',I2,A1)
  216. X      TELFLG=.TRUE.
  217. X      RETURN
  218. XC
  219. XC V75-- SWIM.  ALWAYS A JOKE.
  220. XC
  221. X6000  I=330
  222. XC                                               !ASSUME WATER.
  223. X      IF(and(RFLAG(HERE),(RWATER+RFILL)).EQ.0)
  224. X     &  I=331+RND(3)
  225. X      CALL RSPEAK(I)
  226. X      RETURN
  227. XC
  228. XC V76-- GERONIMO.  IF IN BARREL, FATAL, ELSE JOKE.
  229. XC
  230. X7000  IF(HERE.EQ.MBARR) GO TO 7100
  231. XC                                               !IN BARREL?
  232. X      CALL RSPEAK(334)
  233. XC                                               !NO, JOKE.
  234. X      RETURN
  235. XC
  236. X7100  CALL JIGSUP(335)
  237. XC                                               !OVER FALLS.
  238. X      RETURN
  239. XC
  240. XC V77-- SINBAD ET AL.  CHASE CYCLOPS, ELSE JOKE.
  241. XC
  242. X8000  IF((HERE.EQ.MCYCL).AND.QHERE(CYCLO,HERE)) GO TO 8100
  243. X      CALL RSPEAK(336)
  244. XC                                               !NOT HERE, JOKE.
  245. X      RETURN
  246. XC
  247. X8100  CALL NEWSTA(CYCLO,337,0,0,0)
  248. XC                                               !CYCLOPS FLEES.
  249. X      CYCLOF=.TRUE.
  250. XC                                               !SET ALL FLAGS.
  251. X      MAGICF=.TRUE.
  252. X      OFLAG2(CYCLO)=and(OFLAG2(CYCLO), not(FITEBT))
  253. X      RETURN
  254. XC
  255. XC V78-- WELL.  OPEN DOOR, ELSE JOKE.
  256. XC
  257. X9000  IF(RIDDLF.OR.(HERE.NE.RIDDL)) GO TO 9100
  258. XC                                               !IN RIDDLE ROOM?
  259. X      RIDDLF=.TRUE.
  260. XC                                               !YES, SOLVED IT.
  261. X      CALL RSPEAK(338)
  262. X      RETURN
  263. XC
  264. X9100  CALL RSPEAK(339)
  265. XC                                               !WELL, WHAT?
  266. X      RETURN
  267. XC
  268. XC V79-- PRAY.  IF IN TEMP2, POOF
  269. XC                                               !
  270. XC
  271. X10000 IF(HERE.NE.TEMP2) GO TO 10050
  272. XC                                               !IN TEMPLE?
  273. X      IF(MOVETO(FORE1,WINNER)) GO TO 10100
  274. XC                                               !FORE1 STILL THERE?
  275. X10050 CALL RSPEAK(340)
  276. XC                                               !JOKE.
  277. X      RETURN
  278. XC
  279. X10100 F=RMDESC(3)
  280. XC                                               !MOVED, DESCRIBE.
  281. X      RETURN
  282. XC
  283. XC V80-- TREASURE.  IF IN TEMP1, POOF
  284. XC                                               !
  285. XC
  286. X11000 IF(HERE.NE.TEMP1) GO TO 11050
  287. XC                                               !IN TEMPLE?
  288. X      IF(MOVETO(TREAS,WINNER)) GO TO 10100
  289. XC                                               !TREASURE ROOM THERE?
  290. X11050 CALL RSPEAK(341)
  291. XC                                               !NOTHING HAPPENS.
  292. X      RETURN
  293. XC
  294. XC V81-- TEMPLE.  IF IN TREAS, POOF
  295. XC                                               !
  296. XC
  297. X12000 IF(HERE.NE.TREAS) GO TO 12050
  298. XC                                               !IN TREASURE?
  299. X      IF(MOVETO(TEMP1,WINNER)) GO TO 10100
  300. XC                                               !TEMP1 STILL THERE?
  301. X12050 CALL RSPEAK(341)
  302. XC                                               !NOTHING HAPPENS.
  303. X      RETURN
  304. XC
  305. XC V82-- BLAST.  USUALLY A JOKE.
  306. XC
  307. X13000 I=342
  308. XC                                               !DONT UNDERSTAND.
  309. X      IF(PRSO.EQ.SAFE) I=252
  310. XC                                               !JOKE FOR SAFE.
  311. X      CALL RSPEAK(I)
  312. X      RETURN
  313. XC
  314. XC V83-- SCORE.  PRINT SCORE.
  315. XC
  316. X14000 CALL SCORE(.FALSE.)
  317. X      RETURN
  318. XC
  319. XC V84-- QUIT.  FINISH OUT THE GAME.
  320. XC
  321. X15000 CALL SCORE(.TRUE.)
  322. XC                                               !TELLL SCORE.
  323. X      IF(.NOT.YESNO(343,0,0)) RETURN
  324. XC                                               !ASK FOR Y/N DECISION.
  325. X      CLOSE (DBCH)
  326. X      CALL EXIT
  327. XC                                               !BYE.
  328. X`0C
  329. XC SVERBS, PAGE 4
  330. XC
  331. XC V85-- FOLLOW (USED IN ENDGAME)
  332. XC
  333. X16000 IF(WINNER.NE.AMASTR) RETURN
  334. XC                                               !TELL MASTER, FOLLOW.
  335. X      CALL RSPEAK(782)
  336. X      CTICK(CEVFOL)=-1
  337. XC                                               !STARTS FOLLOWING.
  338. X      RETURN
  339. XC
  340. XC V86-- WALK THROUGH
  341. XC
  342. X17000 IF((SCOLRM.EQ.0).OR.((PRSO.NE.SCOL).AND.
  343. X     &   ((PRSO.NE.WNORT).OR.(HERE.NE.BKBOX)))) GO TO 17100
  344. X      SCOLAC=SCOLRM
  345. XC                                               !WALKED THRU SCOL.
  346. X      PRSO=0
  347. XC                                               !FAKE OUT FROMDR.
  348. X      CTICK(CEVSCL)=6
  349. XC                                               !START ALARM.
  350. X      CALL RSPEAK(668)
  351. XC                                               !DISORIENT HIM.
  352. X      F=MOVETO(SCOLRM,WINNER)
  353. XC                                               !INTO ROOM.
  354. X      F=RMDESC(3)
  355. XC                                               !DESCRIBE.
  356. X      RETURN
  357. XC
  358. X17100 IF(HERE.NE.SCOLAC) GO TO 17300
  359. XC                                               !ON OTHER SIDE OF SCOL?
  360. X      DO 17200 I=1,12,3
  361. XC                                               !WALK THRU PROPER WALL?
  362. X        IF((SCOLWL(I).EQ.HERE).AND.(SCOLWL(I+1).EQ.PRSO))
  363. X     &    GO TO 17500
  364. X17200 CONTINUE
  365. XC
  366. X17300 IF(and(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 17400
  367. X      I=669
  368. XC                                               !NO, JOKE.
  369. X      IF(PRSO.EQ.SCOL) I=670
  370. XC                                               !SPECIAL JOKE FOR SCOL.
  371. X      CALL RSPSUB(I,ODO2)
  372. X      RETURN
  373. XC
  374. X17400 I=671
  375. XC                                               !JOKE.
  376. X      IF(OROOM(PRSO).NE.0) I=552+RND(5)
  377. XC                                               !SPECIAL JOKES IF CARRY.
  378. X      CALL RSPEAK(I)
  379. X      RETURN
  380. XC
  381. X17500 PRSO=SCOLWL(I+2)
  382. XC                                               !THRU SCOL WALL...
  383. X      DO 17600 I=1,8,2
  384. XC                                               !FIND MATCHING ROOM.
  385. X        IF(PRSO.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
  386. X17600 CONTINUE
  387. XC                                               !DECLARE NEW SCOLRM.
  388. X      CTICK(CEVSCL)=0
  389. XC                                               !CANCEL ALARM.
  390. X      CALL RSPEAK(668)
  391. XC                                               !DISORIENT HIM.
  392. X      F=MOVETO(BKBOX,WINNER)
  393. XC                                               !BACK IN BOX ROOM.
  394. X      F=RMDESC(3)
  395. X      RETURN
  396. XC
  397. XC V87-- RING.  A JOKE.
  398. XC
  399. X18000 I=359
  400. XC                                               !CANT RING.
  401. X      IF(PRSO.EQ.BELL) I=360
  402. XC                                               !DING, DONG.
  403. X      CALL RSPEAK(I)
  404. XC                                               !JOKE.
  405. X      RETURN
  406. XC
  407. XC V88-- BRUSH.  JOKE WITH OBSCURE TRAP.
  408. XC
  409. X19000 IF(PRSO.EQ.TEETH) GO TO 19100
  410. XC                                               !BRUSH TEETH?
  411. X      CALL RSPEAK(362)
  412. XC                                               !NO, JOKE.
  413. X      RETURN
  414. XC
  415. X19100 IF(PRSI.NE.0) GO TO 19200
  416. XC                                               !WITH SOMETHING?
  417. X      CALL RSPEAK(363)
  418. XC                                               !NO, JOKE.
  419. X      RETURN
  420. XC
  421. X19200 IF((PRSI.EQ.PUTTY).AND.(OADV(PUTTY).EQ.WINNER))
  422. X     &  GO TO 19300
  423. X      CALL RSPSUB(364,ODI2)
  424. XC                                               !NO, JOKE.
  425. X      RETURN
  426. XC
  427. X19300 CALL JIGSUP(365)
  428. XC                                               !YES, DEAD
  429. XC                                               !
  430. XC                                               !
  431. XC                                               !
  432. XC                                               !
  433. XC                                               !
  434. X      RETURN
  435. X`0C
  436. XC SVERBS, PAGE 5
  437. XC
  438. XC V89-- DIG.  UNLESS SHOVEL, A JOKE.
  439. XC
  440. X20000 IF(PRSO.EQ.SHOVE) RETURN
  441. XC                                               !SHOVEL?
  442. X      I=392
  443. XC                                               !ASSUME TOOL.
  444. X      IF(and(OFLAG1(PRSO),TOOLBT).EQ.0) I=393
  445. X      CALL RSPSUB(I,ODO2)
  446. X      RETURN
  447. XC
  448. XC V90-- TIME.  PRINT OUT DURATION OF GAME.
  449. XC
  450. X21000 CALL GTTIME(K)
  451. XC                                               !GET PLAY TIME.
  452. X      I=K/60
  453. X      J=MOD(K,60)
  454. XC
  455. X      WRITE(OUTCH,21010)
  456. X      IF(I.NE.0) WRITE(OUTCH,21011) I
  457. X      IF(I.GE.2) WRITE(OUTCH,21012)
  458. X      IF(I.EQ.1) WRITE(OUTCH,21013)
  459. X      IF(J.EQ.1) WRITE(OUTCH,21014) J
  460. X      IF(J.NE.1) WRITE(OUTCH,21015) J
  461. X      TELFLG=.TRUE.
  462. X      RETURN
  463. XC
  464. X21010   FORMAT(' You have been playing Dungeon for ',$)
  465. X21011   FORMAT('+',I3,' hour',$)
  466. X21012   FORMAT('+s and ',$)
  467. X21013   FORMAT('+ and ',$)
  468. X21014   FORMAT('+',I2,' minute.')
  469. X21015   FORMAT('+',I2,' minutes.')
  470. XC
  471. XC V91-- LEAP.  USUALLY A JOKE, WITH A CATCH.
  472. XC
  473. X22000 IF(PRSO.EQ.0) GO TO 22200
  474. XC                                               !OVER SOMETHING?
  475. X      IF(QHERE(PRSO,HERE)) GO TO 22100
  476. XC                                               !HERE?
  477. X      CALL RSPEAK(447)
  478. XC                                               !NO, JOKE.
  479. X      RETURN
  480. XC
  481. X22100 IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 22300
  482. X      CALL RSPSUB(448,ODO2)
  483. XC                                               !CANT JUMP VILLAIN.
  484. X      RETURN
  485. XC
  486. X22200 IF(.NOT.FINDXT(XDOWN,HERE)) GO TO 22300
  487. XC                                               !DOWN EXIT?
  488. X      IF((XTYPE.EQ.XNO).OR.((XTYPE.EQ.XCOND).AND.
  489. X     &          .NOT.FLAGS(XFLAG))) GO TO 22400
  490. X22300 CALL RSPEAK(314+RND(5))
  491. XC                                               !WHEEEE
  492. XC                                               !
  493. X      RETURN
  494. XC
  495. X22400 CALL JIGSUP(449+RND(4))
  496. XC                                               !FATAL LEAP.
  497. X      RETURN
  498. X`0C
  499. XC SVERBS, PAGE 6
  500. XC
  501. XC V92-- LOCK.
  502. XC
  503. X23000 IF((PRSO.EQ.GRATE).AND.(HERE.EQ.MGRAT))
  504. X     &          GO TO 23200
  505. X23100 CALL RSPEAK(464)
  506. XC                                               !NOT LOCK GRATE.
  507. X      RETURN
  508. XC
  509. X23200 GRUNLF=.FALSE.
  510. XC                                               !GRATE NOW LOCKED.
  511. X      CALL RSPEAK(214)
  512. X      TRAVEL(REXIT(HERE)+1)=214
  513. XC                                               !CHANGE EXIT STATUS.
  514. X      RETURN
  515. XC
  516. XC V93-- UNLOCK
  517. XC
  518. X24000 IF((PRSO.NE.GRATE).OR.(HERE.NE.MGRAT))
  519. X     &  GO TO 23100
  520. X      IF(PRSI.EQ.KEYS) GO TO 24200
  521. XC                                               !GOT KEYS?
  522. X      CALL RSPSUB(465,ODI2)
  523. XC                                               !NO, JOKE.
  524. X      RETURN
  525. XC
  526. X24200 GRUNLF=.TRUE.
  527. XC                                               !UNLOCK GRATE.
  528. X      CALL RSPEAK(217)
  529. X      TRAVEL(REXIT(HERE)+1)=217
  530. XC                                               !CHANGE EXIT STATUS.
  531. X      RETURN
  532. XC
  533. XC V94-- DIAGNOSE.
  534. XC
  535. X25000 I=FIGHTS(WINNER,.FALSE.)
  536. XC                                               !GET FIGHTS STRENGTH.
  537. X      J=ASTREN(WINNER)
  538. XC                                               !GET HEALTH.
  539. X      K=MIN0(I+J,4)
  540. XC                                               !GET STATE.
  541. X      IF(.NOT.CFLAG(CEVCUR)) J=0
  542. XC                                               !IF NO WOUNDS.
  543. X      L=MIN0(4,IABS(J))
  544. XC                                               !SCALE.
  545. X      CALL RSPEAK(473+L)
  546. XC                                               !DESCRIBE HEALTH.
  547. X      I=(30*(-J-1))+CTICK(CEVCUR)
  548. XC                                               !COMPUTE WAIT.
  549. XC
  550. X        IF(J.NE.0) WRITE(OUTCH,25100) I
  551. X25100 FORMAT(' You will be cured after ',I3,' moves.')
  552. XC
  553. X      CALL RSPEAK(478+K)
  554. XC                                               !HOW MUCH MORE?
  555. X      IF(DEATHS.NE.0) CALL RSPEAK(482+DEATHS)
  556. XC                                               !HOW MANY DEATHS?
  557. X      RETURN
  558. X`0C
  559. XC SVERBS, PAGE 7
  560. XC
  561. XC V95-- INCANT
  562. XC
  563. X26000 DO 26100 I=1,6
  564. XC                                               !SET UP PARSE.
  565. X        PP1(I)=' '
  566. X        PP2(I)=' '
  567. X26100 CONTINUE
  568. X      WP=1
  569. XC                                               !WORD POINTER.
  570. X      CP=1
  571. XC                                               !CHAR POINTER.
  572. X      IF(PRSCON.LE.1) GO TO 26300
  573. X      DO 26200 I=PRSCON,INLNT
  574. XC                                               !PARSE INPUT
  575. X        IF(INBUF(I).EQ.',') GO TO 26300
  576. XC                                               !END OF PHRASE?
  577. X        IF(INBUF(I).NE.' ') GO TO 26150
  578. XC                                               !SPACE?
  579. X        IF(CP.NE.1) WP=WP+1
  580. X        CP=1
  581. X        GO TO 26200
  582. X26150   IF(WP.EQ.1) PP1(CP)=INBUF(I)
  583. XC                                               !STUFF INTO HOLDER.
  584. X        IF(WP.EQ.2) PP2(CP)=INBUF(I)
  585. X        CP=MIN0(CP+1,6)
  586. X26200 CONTINUE
  587. XC
  588. X26300 PRSCON=1
  589. XC                                               !KILL REST OF LINE.
  590. X      IF(PP1(1).NE.' ') GO TO 26400
  591. XC                                               !ANY INPUT?
  592. X      CALL RSPEAK(856)
  593. XC                                               !NO, HO HUM.
  594. X      RETURN
  595. XC
  596. X26400 CALL ENCRYP(PP1,CH)
  597. XC                                               !COMPUTE RESPONSE.
  598. X      IF(PP2(1).NE.' ') GO TO 26600
  599. XC                                               !TWO PHRASES?
  600. XC
  601. X      IF(SPELLF) GO TO 26550
  602. XC                                               !HE'S TRYING TO LEARN.
  603. X      IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 26575
  604. X      SPELLF=.TRUE.
  605. XC                                               !TELL HIM.
  606. X      TELFLG=.TRUE.
  607. X      WRITE(OUTCH,26510) PP1,CH
  608. X26510 FORMAT(' A hollow voice replies:  '',6A1,1X,6A1,''.')
  609. XC
  610. X      RETURN
  611. XC
  612. X26550 CALL RSPEAK(857)
  613. XC                                               !HE'S GOT ONE ALREADY.
  614. X      RETURN
  615. XC
  616. X26575 CALL RSPEAK(858)
  617. XC                                               !HE'S NOT IN ENDGAME.
  618. X      RETURN
  619. XC
  620. X26600 IF(and(RFLAG(TSTRS),RSEEN).NE.0) GO TO 26800
  621. X      DO 26700 I=1,6
  622. X        IF(PP2(I).NE.CH(I)) GO TO 26575
  623. XC                                               !WRONG.
  624. X26700 CONTINUE
  625. X      SPELLF=.TRUE.
  626. XC                                               !IT WORKS.
  627. X      CALL RSPEAK(859)
  628. X      CTICK(CEVSTE)=1
  629. XC                                               !FORCE START.
  630. X      RETURN
  631. XC
  632. X26800 CALL RSPEAK(855)
  633. XC                                               !TOO LATE.
  634. X      RETURN
  635. XC SVERBS, PAGE 8
  636. XC
  637. XC V96-- ANSWER
  638. XC
  639. X27000 IF((PRSCON.GT.1).AND.
  640. X     &   (HERE.EQ.FDOOR).AND.INQSTF)
  641. X     &  GO TO 27100
  642. X      CALL RSPEAK(799)
  643. XC                                               !NO ONE LISTENS.
  644. X      PRSCON=1
  645. X      RETURN
  646. XC
  647. X27100 K=1
  648. XC                                               !POINTER INTO ANSSTR.
  649. X      DO 27300 J=1,28,2
  650. XC                                               !CHECK ANSWERS.
  651. X        NEWK=K+ANSWER(J+1)
  652. XC                                               !COMPUTE NEXT K.
  653. X        IF(QUESNO.NE.ANSWER(J)) GO TO 27300
  654. XC                                               !ONLY CHECK PROPER ANS.
  655. X        I=PRSCON-1
  656. XC                                               !SCAN ANSWER.
  657. X        DO 27200 L=K,NEWK-1
  658. X27150     I=I+1
  659. XC                                               !SKIP INPUT BLANKS.
  660. X          IF(I.GT.INLNT) GO TO 27300
  661. XC                                               !END OF INPUT? LOSE.
  662. X          IF(INBUF(I).EQ.' ') GO TO 27150
  663. X          IF(INBUF(I).NE.ANSSTR(L)) GO TO 27300
  664. X27200   CONTINUE
  665. X        GO TO 27500
  666. XC                                               !RIGHT ANSWER.
  667. X27300 K=NEWK
  668. XC
  669. X      PRSCON=1
  670. XC                                               !KILL REST OF LINE.
  671. X      NQATT=NQATT+1
  672. XC                                               !WRONG, CRETIN.
  673. X      IF(NQATT.GE.5) GO TO 27400
  674. XC                                               !TOO MANY WRONG?
  675. X      CALL RSPEAK(800+NQATT)
  676. XC                                               !NO, TRY AGAIN.
  677. X      RETURN
  678. XC
  679. X27400 CALL RSPEAK(826)
  680. XC                                               !ALL OVER.
  681. X      CFLAG(CEVINQ)=.FALSE.
  682. XC                                               !LOSE.
  683. X      RETURN
  684. XC
  685. X27500 PRSCON=1
  686. XC                                               !KILL REST OF LINE.
  687. X      CORRCT=CORRCT+1
  688. XC                                               !GOT IT RIGHT.
  689. X      CALL RSPEAK(800)
  690. XC                                               !HOORAY.
  691. X      IF(CORRCT.GE.3) GO TO 27600
  692. XC                                               !WON TOTALLY?
  693. X      CTICK(CEVINQ)=2
  694. XC                                               !NO, START AGAIN.
  695. X      QUESNO=MOD(QUESNO+3,8)
  696. X      NQATT=0
  697. X      CALL RSPEAK(769)
  698. XC                                               !ASK NEXT QUESTION.
  699. X      CALL RSPEAK(770+QUESNO)
  700. X      RETURN
  701. XC
  702. X27600 CALL RSPEAK(827)
  703. XC                                               !QUIZ OVER,
  704. X      CFLAG(CEVINQ)=.FALSE.
  705. X      OFLAG2(QDOOR)=or(OFLAG2(QDOOR),OPENBT)
  706. X      RETURN
  707. XC
  708. X      END
  709. $ CALL UNPACK [.SRC]SVERBS.FOR;1 2054834882
  710. $ create 'f'
  711. XC VAPPLI- MAIN VERB PROCESSING ROUTINE
  712. XC
  713. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  714. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  715. XC WRITTEN BY R. M. SUPNIK
  716. XC
  717. XC DECLARATIONS
  718. XC
  719. X      LOGICAL FUNCTION VAPPLI(RI)
  720. X      IMPLICIT INTEGER (A-Z)
  721. X      LOGICAL LIT,OBJACT
  722. X      LOGICAL QEMPTY,RMDESC,CLOCKD
  723. X      LOGICAL QOPEN,EDIBLE,DRKBLE
  724. X      LOGICAL TAKE,PUT,DROP,WALK
  725. X      LOGICAL QHERE,SVERBS,FINDXT,OAPPLI,F
  726. X
  727. X      INCLUDE 'PARSER.LIB'
  728. X      INCLUDE 'GAMESTATE.LIB'
  729. X      INCLUDE 'STATE.LIB'
  730. XC
  731. X      COMMON /STAR/ MBASE,STRBIT
  732. X      INCLUDE 'ROOMS.LIB'
  733. X      INCLUDE 'RFLAG.LIB'
  734. X      INCLUDE 'RINDEX.LIB'
  735. X      INCLUDE 'XSRCH.LIB'
  736. X      INCLUDE 'OBJECTS.LIB'
  737. X      INCLUDE 'OFLAGS.LIB'
  738. X      INCLUDE 'OINDEX.LIB'
  739. X      INCLUDE 'ADVERS.LIB'
  740. X      INCLUDE 'VERBS.LIB'
  741. XC
  742. XC FUNCTIONS AND DATA
  743. XC
  744. X      QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  745. X      EDIBLE(R)=and(OFLAG1(R),FOODBT).NE.0
  746. X      DRKBLE(R)=and(OFLAG1(R),DRNKBT).NE.0
  747. X      DATA MXNOP/39/,MXSMP/99/
  748. X`0C
  749. XC VAPPLI, PAGE 2
  750. XC
  751. X      VAPPLI=.TRUE.
  752. XC                                               !ASSUME WINS.
  753. XC
  754. X      IF(PRSO.GT.220) GO TO 5
  755. XC
  756. X      IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  757. XC                                               !SET UP DESCRIPTORS.
  758. X5     IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  759. X      AV=AVEHIC(WINNER)
  760. X      RMK=372+RND(6)
  761. XC                                               !REMARK FOR HACK-HACKS.
  762. XC
  763. X      IF(RI.EQ.0) GO TO 10
  764. XC                                               !ZERO IS FALSE.
  765. X      IF(RI.LE.MXNOP) RETURN
  766. XC                                               !NOP?
  767. X      IF(RI.LE.MXSMP) GO TO 100
  768. XC                                               !SIMPLE VERB?
  769. X      GO TO (18000,20000,
  770. X     &       22000,23000,24000,25000,26000,27000,28000,29000,30000,
  771. X     & 31000,32000,33000,34000,35000,36000,      38000,39000,40000,
  772. X     & 41000,42000,43000,44000,45000,46000,47000,48000,49000,50000,
  773. X     & 51000,52000,53000,      55000,56000,      58000,59000,60000,
  774. X     &             63000,64000,65000,66000,      68000,69000,70000,
  775. X     & 71000,72000,73000,74000,            77000,78000,
  776. X     & 80000,81000,82000,83000,84000,85000,86000,87000,88000),
  777. X     &(RI-MXSMP)
  778. X      CALL BUG(7,RI)
  779. XC
  780. XC ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
  781. XC
  782. X10    VAPPLI=.FALSE.
  783. XC                                               !LOSE.
  784. X      RETURN
  785. XC
  786. XC SIMPLE VERBS ARE HANDLED EXTERNALLY.
  787. XC
  788. X100   VAPPLI=SVERBS(RI)
  789. X      RETURN
  790. X`0C
  791. XC VAPPLI, PAGE 3
  792. XC
  793. XC V100--        READ.  OUR FIRST REAL VERB.
  794. XC
  795. X18000 IF(LIT(HERE)) GO TO 18100
  796. XC                                               !ROOM LIT?
  797. X      CALL RSPEAK(356)
  798. XC                                               !NO, CANT READ.
  799. X      RETURN
  800. XC
  801. X18100 IF(PRSI.EQ.0) GO TO 18200
  802. XC                                               !READ THROUGH OBJ?
  803. X      IF(and(OFLAG1(PRSI),TRANBT).NE.0) GO TO 18200
  804. X      CALL RSPSUB(357,ODI2)
  805. XC                                               !NOT TRANSPARENT.
  806. X      RETURN
  807. XC
  808. X18200 IF(and(OFLAG1(PRSO),READBT).NE.0) GO TO 18300
  809. X      CALL RSPSUB(358,ODO2)
  810. XC                                               !NOT READABLE.
  811. X      RETURN
  812. XC
  813. X18300 IF(.NOT.OBJACT(X)) CALL RSPEAK(OREAD(PRSO))
  814. X      RETURN
  815. XC
  816. XC V101--        MELT.  UNLESS OBJECT HANDLES, JOKE.
  817. XC
  818. X20000 IF(.NOT.OBJACT(X)) CALL RSPSUB(361,ODO2)
  819. X      RETURN
  820. XC
  821. XC V102--        INFLATE.  WORKS ONLY WITH BOATS.
  822. XC
  823. X22000 IF(.NOT.OBJACT(X)) CALL RSPEAK(368)
  824. XC                                               !OBJ HANDLE?
  825. X      RETURN
  826. XC
  827. XC V103--        DEFLATE.
  828. XC
  829. X23000 IF(.NOT.OBJACT(X)) CALL RSPEAK(369)
  830. XC                                               !OBJ HANDLE?
  831. X      RETURN
  832. X`0C
  833. XC VAPPLI, PAGE 4
  834. XC
  835. XC V104--        ALARM.  IF SLEEPING, WAKE HIM UP.
  836. XC
  837. X24000 IF(and(OFLAG2(PRSO),SLEPBT).EQ.0) GO TO 24100
  838. X      VAPPLI=OBJACT(X)
  839. XC                                               !SLEEPING, LET OBJ DO.
  840. X      RETURN
  841. XC
  842. X24100 CALL RSPSUB(370,ODO2)
  843. XC                                               !JOKE.
  844. X      RETURN
  845. XC
  846. XC V105--        EXORCISE.  OBJECTS HANDLE.
  847. XC
  848. X25000 F=OBJACT(X)
  849. XC                                               !OBJECTS HANDLE.
  850. X      RETURN
  851. XC
  852. XC V106--        PLUG.  LET OBJECTS HANDLE.
  853. XC
  854. X26000 IF(.NOT.OBJACT(X)) CALL RSPEAK(371)
  855. X      RETURN
  856. XC
  857. XC V107--        KICK.  IF OBJECT IGNORES, JOKE.
  858. XC
  859. X27000 IF(.NOT.OBJACT(X)) CALL RSPSB2(378,ODO2,RMK)
  860. X      RETURN
  861. XC
  862. XC V108--        WAVE.  SAME.
  863. XC
  864. X28000 IF(.NOT.OBJACT(X)) CALL RSPSB2(379,ODO2,RMK)
  865. X      RETURN
  866. XC
  867. XC V109,V110--   RAISE, LOWER.  SAME.
  868. XC
  869. X29000 CONTINUE
  870. X30000 IF(.NOT.OBJACT(X)) CALL RSPSB2(380,ODO2,RMK)
  871. X      RETURN
  872. XC
  873. XC V111--        RUB.  SAME.
  874. XC
  875. X31000 IF(.NOT.OBJACT(X)) CALL RSPSB2(381,ODO2,RMK)
  876. X      RETURN
  877. XC
  878. XC V112--        PUSH.  SAME.
  879. XC
  880. X32000 IF(.NOT.OBJACT(X)) CALL RSPSB2(382,ODO2,RMK)
  881. X      RETURN
  882. XC VAPPLI, PAGE 5
  883. XC
  884. XC V113--        UNTIE.  IF OBJECT IGNORES, JOKE.
  885. XC
  886. X33000 IF(OBJACT(X)) RETURN
  887. XC                                               !OBJECT HANDLE?
  888. X      I=383
  889. XC                                               !NO, NOT TIED.
  890. X      IF(and(OFLAG2(PRSO),TIEBT).EQ.0) I=384
  891. X      CALL RSPEAK(I)
  892. X      RETURN
  893. XC
  894. XC V114--        TIE.  NEVER REALLY WORKS.
  895. XC
  896. X34000 IF(and(OFLAG2(PRSO),TIEBT).NE.0) GO TO 34100
  897. X      CALL RSPEAK(385)
  898. XC                                               !NOT TIEABLE.
  899. X      RETURN
  900. XC
  901. X34100 IF(.NOT.OBJACT(X)) CALL RSPSUB(386,ODO2)
  902. XC                                               !JOKE.
  903. X      RETURN
  904. XC
  905. XC V115--        TIE UP.  NEVER REALLY WORKS.
  906. XC
  907. X35000 IF(and(OFLAG2(PRSI),TIEBT).NE.0) GO TO 35100
  908. X      CALL RSPSUB(387,ODO2)
  909. XC                                               !NOT TIEABLE.
  910. X      RETURN
  911. XC
  912. X35100 I=388
  913. XC                                               !ASSUME VILLAIN.
  914. X      IF(and(OFLAG2(PRSO),VILLBT).EQ.0) I=389
  915. X      CALL RSPSUB(I,ODO2)
  916. XC                                               !JOKE.
  917. X      RETURN
  918. XC
  919. XC V116--        TURN.  OBJECT MUST HANDLE.
  920. XC
  921. X36000 IF(and(OFLAG1(PRSO),TURNBT).NE.0) GO TO 36100
  922. X      CALL RSPEAK(390)
  923. XC                                               !NOT TURNABLE.
  924. X      RETURN
  925. XC
  926. X36100 IF(and(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 36200
  927. X      CALL RSPSUB(391,ODI2)
  928. XC                                               !NOT A TOOL.
  929. X      RETURN
  930. XC
  931. X36200 VAPPLI=OBJACT(X)
  932. XC                                               !LET OBJECT HANDLE.
  933. X      RETURN
  934. XC
  935. XC V117--        BREATHE.  BECOMES INFLATE WITH LUNGS.
  936. XC
  937. X38000 PRSA=INFLAW
  938. X      PRSI=LUNGS
  939. X      GO TO 22000
  940. XC                                               !HANDLE LIKE INFLATE.
  941. XC
  942. XC V118--        KNOCK.  MOSTLY JOKE.
  943. XC
  944. X39000 IF(OBJACT(X)) RETURN
  945. XC                                               !OBJ HANDLE?
  946. X      I=394
  947. XC                                               !JOKE FOR DOOR.
  948. X      IF(and(OFLAG1(PRSO),DOORBT).EQ.0) I=395
  949. X      CALL RSPSUB(I,ODO2)
  950. XC                                               !JOKE FOR NONDOORS TOO.
  951. X      RETURN
  952. XC
  953. XC V119--        LOOK.
  954. XC
  955. X40000 IF(PRSO.NE.0) GO TO 41500
  956. XC                                               !SOMETHING TO LOOK AT?
  957. X      VAPPLI=RMDESC(3)
  958. XC                                               !HANDLED BY RMDESC.
  959. X      RETURN
  960. XC
  961. XC V120--        EXAMINE.
  962. XC
  963. X41000 IF(PRSO.NE.0) GO TO 41500
  964. XC                                               !SOMETHING TO EXAMINE?
  965. X      VAPPLI=RMDESC(0)
  966. XC                                               !HANDLED BY RMDESC.
  967. X      RETURN
  968. XC
  969. X41500 IF(OBJACT(X)) RETURN
  970. XC                                               !OBJ HANDLE?
  971. X      I=OREAD(PRSO)
  972. XC                                               !GET READING MATERIAL.
  973. X      IF(I.NE.0) CALL RSPEAK(I)
  974. XC                                               !OUTPUT IF THERE,
  975. X      IF(I.EQ.0) CALL RSPSUB(429,ODO2)
  976. XC                                               !OTHERWISE DEFAULT.
  977. X      PRSA=FOOW
  978. XC                                               !DEFUSE ROOM PROCESSORS.
  979. X      RETURN
  980. XC
  981. XC V121--        SHAKE.  IF HOLLOW OBJECT, SOME ACTION.
  982. XC
  983. X42000 IF(OBJACT(X)) RETURN
  984. XC                                               !OBJECT HANDLE?
  985. X      IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 42100
  986. X      CALL RSPEAK(371)
  987. XC                                               !JOKE FOR VILLAINS.
  988. X      RETURN
  989. XC
  990. X42100 IF(QEMPTY(PRSO).OR.(and(OFLAG1(PRSO),TAKEBT).EQ.0))
  991. X     &  GO TO 10
  992. X      IF(QOPEN(PRSO)) GO TO 42300
  993. XC                                               !OPEN?  SPILL.
  994. X      CALL RSPSUB(396,ODO2)
  995. XC                                               !NO, DESCRIBE NOISE.
  996. X      RETURN
  997. XC
  998. X42300 CALL RSPSUB(397,ODO2)
  999. XC                                               !SPILL THE WORKS.
  1000. X      DO 42500 I=1,OLNT
  1001. XC                                               !SPILL CONTENTS.
  1002. X        IF(OCAN(I).NE.PRSO) GO TO 42500
  1003. XC                                               !INSIDE?
  1004. X        OFLAG2(I)=or(OFLAG2(I),TCHBT)
  1005. X        IF(AV.EQ.0) GO TO 42400
  1006. XC                                               !IN VEHICLE?
  1007. X        CALL NEWSTA(I,0,0,AV,0)
  1008. XC                                               !YES, SPILL IN THERE.
  1009. X        GO TO 42500
  1010. XC
  1011. X42400   CALL NEWSTA(I,0,HERE,0,0)
  1012. XC                                               !NO, SPILL ON FLOOR,
  1013. X        IF(I.EQ.WATER) CALL NEWSTA(I,133,0,0,0)
  1014. XC                                               !BUT WATER DISAPPEARS.
  1015. X42500 CONTINUE
  1016. X      RETURN
  1017. XC
  1018. XC V122--        MOVE.  MOSTLY JOKES.
  1019. XC
  1020. X43000 IF(OBJACT(X)) RETURN
  1021. XC                                               !OBJ HANDLE?
  1022. X      I=398
  1023. XC                                               !ASSUME NOT HERE.
  1024. X      IF(QHERE(PRSO,HERE)) I=399
  1025. X      CALL RSPSUB(I,ODO2)
  1026. XC                                               !JOKE.
  1027. X      RETURN
  1028. X`0C
  1029. XC VAPPLI, PAGE 6
  1030. XC
  1031. XC V123--        TURN ON.
  1032. XC
  1033. X44000 F=LIT(HERE)
  1034. XC                                               !RECORD IF LIT.
  1035. X      IF(OBJACT(X)) GO TO 44300
  1036. XC                                               !OBJ HANDLE?
  1037. X      IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
  1038. X     &   (OADV(PRSO).EQ.WINNER)) GO TO 44100
  1039. X      CALL RSPEAK(400)
  1040. XC                                               !CANT DO IT.
  1041. X      RETURN
  1042. XC
  1043. X44100 IF(and(OFLAG1(PRSO),ONBT).EQ.0) GO TO 44200
  1044. X      CALL RSPEAK(401)
  1045. XC                                               !ALREADY ON.
  1046. X      RETURN
  1047. XC
  1048. X44200 OFLAG1(PRSO)=or(OFLAG1(PRSO),ONBT)
  1049. X      CALL RSPSUB(404,ODO2)
  1050. X44300 IF(.NOT.F .AND.LIT(HERE)) F=RMDESC(0)
  1051. XC                                               !ROOM NEWLY LIT.
  1052. X      RETURN
  1053. XC
  1054. XC V124--        TURN OFF.
  1055. XC
  1056. X45000 IF(OBJACT(X)) GO TO 45300
  1057. XC                                               !OBJ HANDLE?
  1058. X      IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
  1059. X     &   (OADV(PRSO).EQ.WINNER)) GO TO 45100
  1060. X      CALL RSPEAK(402)
  1061. XC                                               !CANT DO IT.
  1062. X      RETURN
  1063. XC
  1064. X45100 IF(and(OFLAG1(PRSO),ONBT).NE.0) GO TO 45200
  1065. X      CALL RSPEAK(403)
  1066. XC                                               !ALREADY OFF.
  1067. X      RETURN
  1068. XC
  1069. X45200 OFLAG1(PRSO)=and(OFLAG1(PRSO), not(ONBT))
  1070. X      CALL RSPSUB(405,ODO2)
  1071. X45300 IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  1072. XC                                               !MAY BE DARK.
  1073. X      RETURN
  1074. XC
  1075. XC V125--        OPEN.  A FINE MESS.
  1076. XC
  1077. X46000 IF(OBJACT(X)) RETURN
  1078. XC                                               !OBJ HANDLE?
  1079. X      IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 46100
  1080. X46050 CALL RSPSUB(407,ODO2)
  1081. XC                                               !NOT OPENABLE.
  1082. X      RETURN
  1083. XC
  1084. X46100 IF(OCAPAC(PRSO).NE.0) GO TO 46200
  1085. X      CALL RSPSUB(408,ODO2)
  1086. XC                                               !NOT OPENABLE.
  1087. X      RETURN
  1088. XC
  1089. X46200 IF(.NOT.QOPEN(PRSO)) GO TO 46225
  1090. X      CALL RSPEAK(412)
  1091. XC                                               !ALREADY OPEN.
  1092. X      RETURN
  1093. XC
  1094. X46225 OFLAG2(PRSO)=or(OFLAG2(PRSO),OPENBT)
  1095. X      IF((and(OFLAG1(PRSO),TRANBT).NE.0).OR.QEMPTY(PRSO))
  1096. X     &  GO TO 46300
  1097. X      CALL PRINCO(PRSO,410)
  1098. XC                                               !PRINT CONTENTS.
  1099. X      RETURN
  1100. XC
  1101. X46300 CALL RSPEAK(409)
  1102. XC                                               !DONE
  1103. X      RETURN
  1104. XC
  1105. XC V126--        CLOSE.
  1106. XC
  1107. X47000 IF(OBJACT(X)) RETURN
  1108. XC                                               !OBJ HANDLE?
  1109. X      IF(and(OFLAG1(PRSO),CONTBT).EQ.0) GO TO 46050
  1110. X      IF(OCAPAC(PRSO).NE.0) GO TO 47100
  1111. X      CALL RSPSUB(411,ODO2)
  1112. XC                                               !NOT CLOSABLE.
  1113. X      RETURN
  1114. XC
  1115. X47100 IF(QOPEN(PRSO)) GO TO 47200
  1116. XC                                               !OPEN?
  1117. X      CALL RSPEAK(413)
  1118. XC                                               !NO, JOKE.
  1119. X      RETURN
  1120. XC
  1121. X47200 OFLAG2(PRSO)=and(OFLAG2(PRSO), not(OPENBT))
  1122. X      CALL RSPEAK(414)
  1123. XC                                               !DONE.
  1124. X      RETURN
  1125. X`0C
  1126. XC VAPPLI, PAGE 7
  1127. XC
  1128. XC V127--        FIND.  BIG MEGILLA.
  1129. XC
  1130. X48000 IF(OBJACT(X)) RETURN
  1131. XC                                               !OBJ HANDLE?
  1132. X      I=415
  1133. XC                                               !DEFAULT CASE.
  1134. X      IF(QHERE(PRSO,HERE)) GO TO 48300
  1135. XC                                               !IN ROOM?
  1136. X      IF(OADV(PRSO).EQ.WINNER) GO TO 48200
  1137. XC                                               !ON WINNER?
  1138. X      J=OCAN(PRSO)
  1139. XC                                               !DOWN ONE LEVEL.
  1140. X      IF(J.EQ.0) GO TO 10
  1141. X      IF(((and(OFLAG1(J),TRANBT).EQ.0).AND.
  1142. X     &   (.NOT.QOPEN(J).OR.(and(OFLAG1(J),(DOORBT+CONTBT)).EQ.0))))
  1143. X     &  GO TO 10
  1144. X      I=417
  1145. XC                                               !ASSUME IN ROOM.
  1146. X      IF(QHERE(J,HERE)) GO TO 48100
  1147. X      IF(OADV(J).NE.WINNER) GO TO 10
  1148. XC                                               !NOT HERE OR ON PERSON.
  1149. X      I=418
  1150. X48100 CALL RSPSUB(I,ODESC2(J))
  1151. XC                                               !DESCRIBE FINDINGS.
  1152. X      RETURN
  1153. XC
  1154. X48200 I=416
  1155. X48300 CALL RSPSUB(I,ODO2)
  1156. XC                                               !DESCRIBE FINDINGS.
  1157. X      RETURN
  1158. XC
  1159. XC V128--        WAIT.  RUN CLOCK DEMON.
  1160. XC
  1161. X49000 CALL RSPEAK(419)
  1162. XC                                               !TIME PASSES.
  1163. X      DO 49100 I=1,3
  1164. X        IF(CLOCKD(X)) RETURN
  1165. X49100 CONTINUE
  1166. X      RETURN
  1167. XC
  1168. XC V129--        SPIN.
  1169. XC V159--        TURN TO.
  1170. XC
  1171. X50000 CONTINUE
  1172. X88000 IF(.NOT.OBJACT(X)) CALL RSPEAK(663)
  1173. XC                                               !IF NOT OBJ, JOKE.
  1174. X      RETURN
  1175. XC
  1176. XC V130--        BOARD.  WORKS WITH VEHICLES.
  1177. XC
  1178. X51000 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 51100
  1179. X      CALL RSPSUB(421,ODO2)
  1180. XC                                               !NOT VEHICLE, JOKE.
  1181. X      RETURN
  1182. XC
  1183. X51100 IF(QHERE(PRSO,HERE)) GO TO 51200
  1184. XC                                               !HERE?
  1185. X      CALL RSPSUB(420,ODO2)
  1186. XC                                               !NO, JOKE.
  1187. X      RETURN
  1188. XC
  1189. X51200 IF(AV.EQ.0) GO TO 51300
  1190. XC                                               !ALREADY GOT ONE?
  1191. X      CALL RSPSUB(422,ODO2)
  1192. XC                                               !YES, JOKE.
  1193. X      RETURN
  1194. XC
  1195. X51300 IF(OBJACT(X)) RETURN
  1196. XC                                               !OBJ HANDLE?
  1197. X      CALL RSPSUB(423,ODO2)
  1198. XC                                               !DESCRIBE.
  1199. X      AVEHIC(WINNER)=PRSO
  1200. X      IF(WINNER.NE.PLAYER) OCAN(AOBJ(WINNER))=PRSO
  1201. X      RETURN
  1202. XC
  1203. XC V131--        DISEMBARK.
  1204. XC
  1205. X52000 IF(AV.EQ.PRSO) GO TO 52100
  1206. XC                                               !FROM VEHICLE?
  1207. X      CALL RSPEAK(424)
  1208. XC                                               !NO, JOKE.
  1209. X      RETURN
  1210. XC
  1211. X52100 IF(OBJACT(X)) RETURN
  1212. XC                                               !OBJ HANDLE?
  1213. X      IF(and(RFLAG(HERE),RLAND).NE.0) GO TO 52200
  1214. X      CALL RSPEAK(425)
  1215. XC                                               !NOT ON LAND.
  1216. X      RETURN
  1217. XC
  1218. X52200 AVEHIC(WINNER)=0
  1219. X      CALL RSPEAK(426)
  1220. X      IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,HERE,0,0)
  1221. X      RETURN
  1222. XC
  1223. XC V132--        TAKE.  HANDLED EXTERNALLY.
  1224. XC
  1225. X53000 VAPPLI=TAKE(.TRUE.)
  1226. X      RETURN
  1227. XC
  1228. XC V133--        INVENTORY.  PROCESSED EXTERNALLY.
  1229. XC
  1230. X55000 CALL INVENT(WINNER)
  1231. X      RETURN
  1232. XC VAPPLI, PAGE 8
  1233. XC
  1234. XC V134--        FILL.  STRANGE DOINGS WITH WATER.
  1235. XC
  1236. X56000 IF(PRSI.NE.0) GO TO 56050
  1237. XC                                               !ANY OBJ SPECIFIED?
  1238. X      IF(and(RFLAG(HERE),(RWATER+RFILL)).NE.0) GO TO 56025
  1239. X      CALL RSPEAK(516)
  1240. XC                                               !NOTHING TO FILL WITH.
  1241. X      PRSWON=.FALSE.
  1242. XC                                               !YOU LOSE.
  1243. X      RETURN
  1244. XC
  1245. X56025 PRSI=GWATE
  1246. XC                                               !USE GLOBAL WATER.
  1247. X56050 IF(OBJACT(X)) RETURN
  1248. XC                                               !OBJ HANDLE?
  1249. X      IF((PRSI.NE.GWATE).AND.(PRSI.NE.WATER))
  1250. X     &  CALL RSPSB2(444,ODI2,ODO2)
  1251. X      RETURN
  1252. XC
  1253. XC V135,V136--   EAT/DRINK
  1254. XC
  1255. X58000 CONTINUE
  1256. X59000 IF(OBJACT(X)) RETURN
  1257. XC                                               !OBJ HANDLE?
  1258. X      IF(PRSO.EQ.GWATE) GO TO 59500
  1259. XC                                               !DRINK GLOBAL WATER?
  1260. X      IF(.NOT.EDIBLE(PRSO)) GO TO 59400
  1261. XC                                               !EDIBLE?
  1262. X      IF(OADV(PRSO).EQ.WINNER) GO TO 59200
  1263. XC                                               !YES, ON WINNER?
  1264. X59100 CALL RSPSUB(454,ODO2)
  1265. XC                                               !NOT ACCESSIBLE.
  1266. X      RETURN
  1267. XC
  1268. X59200 IF(PRSA.EQ.DRINKW) GO TO 59300
  1269. XC                                               !DRINK FOOD?
  1270. X      CALL NEWSTA(PRSO,455,0,0,0)
  1271. XC                                               !NO, IT DISAPPEARS.
  1272. X      RETURN
  1273. XC
  1274. X59300 CALL RSPEAK(456)
  1275. XC                                               !YES, JOKE.
  1276. X      RETURN
  1277. XC
  1278. X59400 IF(.NOT.DRKBLE(PRSO)) GO TO 59600
  1279. XC                                               !DRINKABLE?
  1280. X      IF(OCAN(PRSO).EQ.0) GO TO 59100
  1281. XC                                               !YES, IN SOMETHING?
  1282. X      IF(OADV(OCAN(PRSO)).NE.WINNER) GO TO 59100
  1283. X      IF(QOPEN(OCAN(PRSO))) GO TO 59500
  1284. XC                                               !CONT OPEN?
  1285. X      CALL RSPEAK(457)
  1286. XC                                               !NO, JOKE.
  1287. X      RETURN
  1288. XC
  1289. X59500 CALL NEWSTA(PRSO,458,0,0,0)
  1290. XC                                               !GONE.
  1291. X      RETURN
  1292. XC
  1293. X59600 CALL RSPSUB(453,ODO2)
  1294. XC                                               !NOT FOOD OR DRINK.
  1295. X      RETURN
  1296. XC
  1297. XC V137--        BURN.  COMPLICATED.
  1298. XC
  1299. X60000 IF(and(OFLAG1(PRSI),(FLAMBT+LITEBT+ONBT)).NE.
  1300. X     &   (FLAMBT+LITEBT+ONBT)) GO TO 60400
  1301. X      IF(OBJACT(X)) RETURN
  1302. XC                                               !OBJ HANDLE?
  1303. X      IF(OCAN(PRSO).NE.RECEP) GO TO 60050
  1304. XC                                               !BALLOON?
  1305. X      IF(OAPPLI(OACTIO(BALLO),0)) RETURN
  1306. XC                                               !DID IT HANDLE?
  1307. X60050 IF(and(OFLAG1(PRSO),BURNBT).EQ.0) GO TO 60300
  1308. X      IF(OADV(PRSO).NE.WINNER) GO TO 60100
  1309. XC                                               !CARRYING IT?
  1310. X      CALL RSPSUB(459,ODO2)
  1311. X      CALL JIGSUP(460)
  1312. X      RETURN
  1313. XC
  1314. X60100 J=OCAN(PRSO)
  1315. XC                                               !GET CONTAINER.
  1316. X      IF(QHERE(PRSO,HERE).OR. ((AV.NE.0).AND.(J.EQ.AV)))
  1317. X     &  GO TO 60200
  1318. X      IF(J.EQ.0) GO TO 60150
  1319. XC                                               !INSIDE?
  1320. X      IF(.NOT.QOPEN(J)) GO TO 60150
  1321. XC                                               !OPEN?
  1322. X      IF(QHERE(J,HERE).OR.((AV.NE.0).AND.(OCAN(J).EQ.AV)))
  1323. X     &  GO TO 60200
  1324. X60150 CALL RSPEAK(461)
  1325. XC                                               !CANT REACH IT.
  1326. X      RETURN
  1327. XC
  1328. X60200 CALL RSPSUB(462,ODO2)
  1329. XC                                               !BURN IT.
  1330. X      CALL NEWSTA(PRSO,0,0,0,0)
  1331. X      RETURN
  1332. XC
  1333. X60300 CALL RSPSUB(463,ODO2)
  1334. XC                                               !CANT BURN IT.
  1335. X      RETURN
  1336. XC
  1337. X60400 CALL RSPSUB(301,ODI2)
  1338. XC                                               !CANT BURN IT WITH THAT.
  1339. X      RETURN
  1340. X`0C
  1341. XC VAPPLI, PAGE 9
  1342. XC
  1343. XC V138--        MUNG.  GO TO COMMON ATTACK CODE.
  1344. XC
  1345. X63000 I=466
  1346. XC                                               !CHOOSE PHRASE.
  1347. X      IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66100
  1348. X      IF(.NOT.OBJACT(X)) CALL RSPSB2(466,ODO2,RMK)
  1349. X      RETURN
  1350. XC
  1351. XC V139--        KILL.  GO TO COMMON ATTACK CODE.
  1352. XC
  1353. X64000 I=467
  1354. XC                                               !CHOOSE PHRASE.
  1355. X      GO TO 66100
  1356. XC
  1357. XC V140--        SWING.  INVERT OBJECTS, FALL THRU TO ATTACK.
  1358. XC
  1359. X65000 J=PRSO
  1360. XC                                               !INVERT.
  1361. X      PRSO=PRSI
  1362. X      PRSI=J
  1363. X      J=ODO2
  1364. X      ODO2=ODI2
  1365. X      ODI2=J
  1366. X      PRSA=ATTACW
  1367. XC                                               !FOR OBJACT.
  1368. XC
  1369. XC V141--        ATTACK.  FALL THRU TO ATTACK CODE.
  1370. XC
  1371. X66000 I=468
  1372. XC
  1373. XC COMMON MUNG/ATTACK/SWING/KILL CODE.
  1374. XC
  1375. X66100 IF(PRSO.NE.0) GO TO 66200
  1376. XC                                               !ANYTHING?
  1377. X      CALL RSPEAK(469)
  1378. XC                                               !NO, JOKE.
  1379. X      RETURN
  1380. XC
  1381. X66200 IF(OBJACT(X)) RETURN
  1382. XC                                               !OBJ HANDLE?
  1383. X      IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66300
  1384. X      IF(and(OFLAG1(PRSO),VICTBT).EQ.0)
  1385. X     &          CALL RSPSUB(470,ODO2)
  1386. X      RETURN
  1387. XC
  1388. X66300 J=471
  1389. XC                                               !ASSUME NO WEAPON.
  1390. X      IF(PRSI.EQ.0) GO TO 66500
  1391. X      IF(and(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 66400
  1392. X      MELEE=1
  1393. XC                                               !ASSUME SWORD.
  1394. X      IF(PRSI.NE.SWORD) MELEE=2
  1395. XC                                               !MUST BE KNIFE.
  1396. X      I=BLOW(PLAYER,PRSO,MELEE,.TRUE.,0)
  1397. XC                                               !STRIKE BLOW.
  1398. X      RETURN
  1399. XC
  1400. X66400 J=472
  1401. XC                                               !NOT A WEAPON.
  1402. X66500 CALL RSPSB2(I,ODO2,J)
  1403. XC                                               !JOKE.
  1404. X      RETURN
  1405. X`0C
  1406. XC VAPPLI, PAGE 10
  1407. XC
  1408. XC V142--        WALK.  PROCESSED EXTERNALLY.
  1409. XC
  1410. X68000 VAPPLI=WALK(X)
  1411. X      RETURN
  1412. XC
  1413. XC V143--        TELL.  PROCESSED IN GAME.
  1414. XC
  1415. X69000 CALL RSPEAK(603)
  1416. X      RETURN
  1417. XC
  1418. XC V144--        PUT.  PROCESSED EXTERNALLY.
  1419. XC
  1420. X70000 VAPPLI=PUT(.TRUE.)
  1421. X      RETURN
  1422. XC
  1423. XC V145,V146,V147,V148-- DROP/GIVE/POUR/THROW
  1424. XC
  1425. X71000 CONTINUE
  1426. X72000 CONTINUE
  1427. X73000 CONTINUE
  1428. X74000 VAPPLI=DROP(.FALSE.)
  1429. X      RETURN
  1430. XC
  1431. XC V149--        SAVE
  1432. XC
  1433. X77000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 77100
  1434. X      CALL RSPEAK(828)
  1435. XC                                               !NO SAVES IN ENDGAME.
  1436. X      RETURN
  1437. XC
  1438. X77100 CALL SAVEGM
  1439. X      RETURN
  1440. XC
  1441. XC V150--        RESTORE
  1442. XC
  1443. X78000 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 78100
  1444. X      CALL RSPEAK(829)
  1445. XC                                               !NO RESTORES IN ENDGAME.
  1446. X      RETURN
  1447. XC
  1448. X78100 CALL RSTRGM
  1449. X      RETURN
  1450. X`0C
  1451. XC VAPPLI, PAGE 11
  1452. XC
  1453. XC V151--        HELLO
  1454. XC
  1455. X80000 IF(PRSO.NE.0) GO TO 80100
  1456. XC                                               !ANY OBJ?
  1457. X      CALL RSPEAK(346+RND(4))
  1458. XC                                               !NO, VANILLA HELLO.
  1459. X      RETURN
  1460. XC
  1461. X80100 IF(PRSO.NE.AVIAT) GO TO 80200
  1462. XC                                               !HELLO AVIATOR?
  1463. X      CALL RSPEAK(350)
  1464. XC                                               !NOTHING HAPPENS.
  1465. X      RETURN
  1466. XC
  1467. X80200 IF(PRSO.NE.SAILO) GO TO 80300
  1468. XC                                               !HELLO SAILOR?
  1469. X      HS=HS+1
  1470. XC                                               !COUNT.
  1471. X      I=351
  1472. XC                                               !GIVE NORMAL OR
  1473. X      IF(MOD(HS,10).EQ.0) I=352
  1474. XC                                               !RANDOM MESSAGE.
  1475. X      IF(MOD(HS,20).EQ.0) I=353
  1476. X      CALL RSPEAK(I)
  1477. XC                                               !SPEAK UP.
  1478. X      RETURN
  1479. XC
  1480. X80300 IF(OBJACT(X)) RETURN
  1481. XC                                               !OBJ HANDLE?
  1482. X      I=354
  1483. XC                                               !ASSUME VILLAIN.
  1484. X      IF(and(OFLAG2(PRSO),(VILLBT+ACTRBT)).EQ.0) I=355
  1485. X      CALL RSPSUB(I,ODO2)
  1486. XC                                               !HELLO THERE
  1487. XC                                               !
  1488. X      RETURN
  1489. XC
  1490. XC V152--        LOOK INTO
  1491. XC
  1492. X81000 IF(OBJACT(X)) RETURN
  1493. XC                                               !OBJ HANDLE?
  1494. X      IF(and(OFLAG1(PRSO),DOORBT).EQ.0) GO TO 81300
  1495. X      IF(.NOT.QOPEN(PRSO)) GO TO 81200
  1496. XC                                               !OPEN?
  1497. X      CALL RSPSUB(628,ODO2)
  1498. XC                                               !OPEN DOOR- UNINTERESTING.
  1499. X      RETURN
  1500. XC
  1501. X81200 CALL RSPSUB(525,ODO2)
  1502. XC                                               !CLOSED DOOR- CANT SEE.
  1503. X      RETURN
  1504. XC
  1505. X81300 IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 81400
  1506. X      IF(QOPEN(PRSO).OR.(and(OFLAG1(PRSO),TRANBT).NE.0))
  1507. X     &  GO TO 81400
  1508. X      IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 81200
  1509. X      CALL RSPSUB(630,ODO2)
  1510. XC                                               !CANT LOOK INSIDE.
  1511. X      RETURN
  1512. XC
  1513. X81400 IF(QEMPTY(PRSO)) GO TO 81500
  1514. XC                                               !VEH OR SEE IN.  EMPTY?
  1515. X      CALL PRINCO(PRSO,573)
  1516. XC                                               !NO, LIST CONTENTS.
  1517. X      RETURN
  1518. XC
  1519. X81500 CALL RSPSUB(629,ODO2)
  1520. XC                                               !EMPTY.
  1521. X      RETURN
  1522. XC
  1523. XC V153--        LOOK UNDER
  1524. XC
  1525. X82000 IF(.NOT.OBJACT(X)) CALL RSPEAK(631)
  1526. XC                                               !OBJECT HANDLE?
  1527. X      RETURN
  1528. X`0C
  1529. XC VAPPLI, PAGE 12
  1530. XC
  1531. XC V154--        PUMP
  1532. XC
  1533. X83000 IF((OROOM(PUMP).EQ.HERE).OR.(OADV(PUMP).EQ.WINNER))
  1534. X     &  GO TO 83100
  1535. X      CALL RSPEAK(632)
  1536. XC                                               !NO.
  1537. X      RETURN
  1538. XC
  1539. X83100 PRSI=PUMP
  1540. XC                                               !BECOMES INFLATE
  1541. X      PRSA=INFLAW
  1542. XC                                               !X WITH PUMP.
  1543. X      GO TO 22000
  1544. XC                                               !DONE.
  1545. XC
  1546. XC V155--        WIND
  1547. XC
  1548. X84000 IF(.NOT.OBJACT(X)) CALL RSPSUB(634,ODO2)
  1549. XC                                               !OBJ HANDLE?
  1550. X      RETURN
  1551. XC
  1552. XC V156--        CLIMB
  1553. XC V157--        CLIMB UP
  1554. +-+-+-+-+-+-+-+-  END  OF PART 29 +-+-+-+-+-+-+-+-
  1555.