clockr.for 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. C CEVAPP- CLOCK EVENT APPLICABLES
  2. C
  3. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  4. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  5. C WRITTEN BY R. M. SUPNIK
  6. C
  7. C DECLARATIONS
  8. C
  9. SUBROUTINE CEVAPP(RI)
  10. IMPLICIT INTEGER (A-Z)
  11. INTEGER CNDTCK(10),LMPTCK(12)
  12. LOGICAL FINDXT,LIT,RMDESC,QOPEN,MOVETO
  13. LOGICAL F,QLEDGE,QVAIR,QHERE,PROB
  14. include 'gamestat.h'
  15. include 'state.h'
  16. include 'rooms.h'
  17. include 'rflag.h'
  18. include 'rindex.h'
  19. include 'objects.h'
  20. include 'oflags.h'
  21. include 'oindex.h'
  22. include 'clock.h'
  23. include 'curxt.h'
  24. include 'xsrch.h'
  25. include 'villians.h'
  26. include 'advers.h'
  27. include 'flags.h'
  28. C
  29. C FUNCTIONS AND DATA
  30. C
  31. QOPEN(R)=(IAND(OFLAG2(R),OPENBT)).NE.0
  32. QLEDGE(R)=(R.EQ.LEDG2).OR.(R.EQ.LEDG3).OR.(R.EQ.LEDG4).OR.
  33. & (R.EQ.VLBOT)
  34. QVAIR(R)=(R.EQ.VAIR1).OR.(R.EQ.VAIR2).OR.(R.EQ.VAIR3).OR.
  35. & (R.EQ.VAIR4)
  36. DATA CNDTCK/50,20,10,5,0,156,156,156,157,0/
  37. DATA LMPTCK/50,30,20,10,4,0,154,154,154,154,155,0/
  38. C CEVAPP, PAGE 2
  39. C
  40. IF(RI.EQ.0) RETURN
  41. C !IGNORE DISABLED.
  42. GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
  43. & 11000,12000,13000,14000,15000,16000,17000,18000,19000,
  44. & 20000,21000,22000,23000,24000),RI
  45. CALL BUG(3,RI)
  46. C
  47. C CEV1-- CURE CLOCK. LET PLAYER SLOWLY RECOVER.
  48. C
  49. 1000 ASTREN(PLAYER)=MIN0(0,ASTREN(PLAYER)+1)
  50. C !RECOVER.
  51. IF(ASTREN(PLAYER).GE.0) RETURN
  52. C !FULLY RECOVERED?
  53. CTICK(CEVCUR)=30
  54. C !NO, WAIT SOME MORE.
  55. RETURN
  56. C
  57. C CEV2-- MAINT-ROOM WITH LEAK. RAISE THE WATER LEVEL.
  58. C
  59. 2000 IF(HERE.EQ.MAINT) CALL RSPEAK(71+(RVMNT/2))
  60. C !DESCRIBE.
  61. RVMNT=RVMNT+1
  62. C !RAISE WATER LEVEL.
  63. IF(RVMNT.LE.16) RETURN
  64. C !IF NOT FULL, EXIT.
  65. CTICK(CEVMNT)=0
  66. C !FULL, DISABLE CLOCK.
  67. RFLAG(MAINT)=IOR(RFLAG(MAINT),RMUNG)
  68. RRAND(MAINT)=80
  69. C !SAY IT IS FULL OF WATER.
  70. IF(HERE.EQ.MAINT) CALL JIGSUP(81)
  71. C !DROWN HIM IF PRESENT.
  72. RETURN
  73. C
  74. C CEV3-- LANTERN. DESCRIBE GROWING DIMNESS.
  75. C
  76. 3000 CALL LITINT(LAMP,ORLAMP,CEVLNT,LMPTCK,12)
  77. C !DO LIGHT INTERRUPT.
  78. RETURN
  79. C
  80. C CEV4-- MATCH. OUT IT GOES.
  81. C
  82. 4000 CALL RSPEAK(153)
  83. C !MATCH IS OUT.
  84. OFLAG1(MATCH)=IAND(OFLAG1(MATCH), not(ONBT))
  85. RETURN
  86. C
  87. C CEV5-- CANDLE. DESCRIBE GROWING DIMNESS.
  88. C
  89. 5000 CALL LITINT(CANDL,ORCAND,CEVCND,CNDTCK,10)
  90. C !DO CANDLE INTERRUPT.
  91. RETURN
  92. C CEVAPP, PAGE 3
  93. C
  94. C CEV6-- BALLOON
  95. C
  96. 6000 CTICK(CEVBAL)=3
  97. C !RESCHEDULE INTERRUPT.
  98. F=AVEHIC(WINNER).EQ.BALLO
  99. C !SEE IF IN BALLOON.
  100. IF(BLOC.EQ.VLBOT) GO TO 6800
  101. C !AT BOTTOM?
  102. IF(QLEDGE(BLOC)) GO TO 6700
  103. C !ON LEDGE?
  104. IF(QOPEN(RECEP).AND.(BINFF.NE.0))
  105. & GO TO 6500
  106. C
  107. C BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED).
  108. C FALL TO NEXT ROOM.
  109. C
  110. IF(BLOC.NE.VAIR1) GO TO 6300
  111. C !IN VAIR1?
  112. BLOC=VLBOT
  113. C !YES, NOW AT VLBOT.
  114. CALL NEWSTA(BALLO,0,BLOC,0,0)
  115. IF(F) GO TO 6200
  116. C !IN BALLOON?
  117. IF(QLEDGE(HERE)) CALL RSPEAK(530)
  118. C !ON LEDGE, DESCRIBE.
  119. RETURN
  120. C
  121. 6200 F=MOVETO(BLOC,WINNER)
  122. C !MOVE HIM.
  123. IF(BINFF.EQ.0) GO TO 6250
  124. C !IN BALLOON. INFLATED?
  125. CALL RSPEAK(531)
  126. C !YES, LANDED.
  127. F=RMDESC(0)
  128. C !DESCRIBE.
  129. RETURN
  130. C
  131. 6250 CALL NEWSTA(BALLO,532,0,0,0)
  132. C !NO, BALLOON & CONTENTS DIE.
  133. CALL NEWSTA(DBALL,0,BLOC,0,0)
  134. C !INSERT DEAD BALLOON.
  135. AVEHIC(WINNER)=0
  136. C !NOT IN VEHICLE.
  137. CFLAG(CEVBAL)=.FALSE.
  138. C !DISABLE INTERRUPTS.
  139. CFLAG(CEVBRN)=.FALSE.
  140. BINFF=0
  141. BTIEF=0
  142. RETURN
  143. C
  144. 6300 BLOC=BLOC-1
  145. C !NOT IN VAIR1, DESCEND.
  146. CALL NEWSTA(BALLO,0,BLOC,0,0)
  147. IF(F) GO TO 6400
  148. C !IS HE IN BALLOON?
  149. IF(QLEDGE(HERE)) CALL RSPEAK(533)
  150. C !IF ON LEDGE, DESCRIBE.
  151. RETURN
  152. C
  153. 6400 F=MOVETO(BLOC,WINNER)
  154. C !IN BALLOON, MOVE HIM.
  155. CALL RSPEAK(534)
  156. C !DESCRIBE.
  157. F=RMDESC(0)
  158. RETURN
  159. C
  160. C BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY
  161. C !
  162. C
  163. 6500 IF(BLOC.NE.VAIR4) GO TO 6600
  164. C !AT VAIR4?
  165. CTICK(CEVBRN)=0
  166. CTICK(CEVBAL)=0
  167. BINFF=0
  168. BTIEF=0
  169. BLOC=VLBOT
  170. C !FALL TO BOTTOM.
  171. CALL NEWSTA(BALLO,0,0,0,0)
  172. C !BALLOON & CONTENTS DIE.
  173. CALL NEWSTA(DBALL,0,BLOC,0,0)
  174. C !SUBSTITUTE DEAD BALLOON.
  175. IF(F) GO TO 6550
  176. C !WAS HE IN IT?
  177. IF(QLEDGE(HERE)) CALL RSPEAK(535)
  178. C !IF HE CAN SEE, DESCRIBE.
  179. RETURN
  180. C
  181. 6550 CALL JIGSUP(536)
  182. C !IN BALLOON AT CRASH, DIE.
  183. RETURN
  184. C
  185. 6600 BLOC=BLOC+1
  186. C !NOT AT VAIR4, GO UP.
  187. CALL NEWSTA(BALLO,0,BLOC,0,0)
  188. IF(F) GO TO 6650
  189. C !IN BALLOON?
  190. IF(QLEDGE(HERE)) CALL RSPEAK(537)
  191. C !CAN HE SEE IT?
  192. RETURN
  193. C
  194. 6650 F=MOVETO(BLOC,WINNER)
  195. C !MOVE PLAYER.
  196. CALL RSPEAK(538)
  197. C !DESCRIBE.
  198. F=RMDESC(0)
  199. RETURN
  200. C
  201. C ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT.
  202. C
  203. 6700 BLOC=BLOC+(VAIR2-LEDG2)
  204. C !MOVE TO MIDAIR.
  205. CALL NEWSTA(BALLO,0,BLOC,0,0)
  206. IF(F) GO TO 6750
  207. C !IN BALLOON?
  208. IF(QLEDGE(HERE)) CALL RSPEAK(539)
  209. C !NO, STRANDED.
  210. CTICK(CEVVLG)=10
  211. C !MATERIALIZE GNOME.
  212. RETURN
  213. C
  214. 6750 F=MOVETO(BLOC,WINNER)
  215. C !MOVE TO NEW ROOM.
  216. CALL RSPEAK(540)
  217. C !DESCRIBE.
  218. F=RMDESC(0)
  219. RETURN
  220. C
  221. C AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED.
  222. C
  223. 6800 IF((BINFF.EQ.0).OR..NOT.QOPEN(RECEP)) RETURN
  224. BLOC=VAIR1
  225. C !INFLATED AND OPEN,
  226. CALL NEWSTA(BALLO,0,BLOC,0,0)
  227. C !GO UP TO VAIR1.
  228. IF(F) GO TO 6850
  229. C !IN BALLOON?
  230. IF(QLEDGE(HERE)) CALL RSPEAK(541)
  231. C !IF CAN SEE, DESCRIBE.
  232. RETURN
  233. C
  234. 6850 F=MOVETO(BLOC,WINNER)
  235. C !MOVE PLAYER.
  236. CALL RSPEAK(542)
  237. F=RMDESC(0)
  238. RETURN
  239. C CEVAPP, PAGE 4
  240. C
  241. C CEV7-- BALLOON BURNUP
  242. C
  243. 7000 DO 7100 I=1,OLNT
  244. C !FIND BURNING OBJECT
  245. IF((RECEP.EQ.OCAN(I)).AND.((IAND(OFLAG1(I),FLAMBT)).NE.0))
  246. & GO TO 7200
  247. 7100 CONTINUE
  248. CALL BUG(4,0)
  249. C
  250. 7200 CALL NEWSTA(I,0,0,0,0)
  251. C !VANISH OBJECT.
  252. BINFF=0
  253. C !UNINFLATED.
  254. IF(HERE.EQ.BLOC) CALL RSPSUB(292,ODESC2(I))
  255. C !DESCRIBE.
  256. RETURN
  257. C
  258. C CEV8-- FUSE FUNCTION
  259. C
  260. 8000 IF(OCAN(FUSE).NE.BRICK) GO TO 8500
  261. C !IGNITED BRICK?
  262. BR=OROOM(BRICK)
  263. C !GET BRICK ROOM.
  264. BC=OCAN(BRICK)
  265. C !GET CONTAINER.
  266. IF((BR.EQ.0).AND.(BC.NE.0)) BR=OROOM(BC)
  267. CALL NEWSTA(FUSE,0,0,0,0)
  268. C !KILL FUSE.
  269. CALL NEWSTA(BRICK,0,0,0,0)
  270. C !KILL BRICK.
  271. IF((BR.NE.0).AND.(BR.NE.HERE)) GO TO 8100
  272. C !BRICK ELSEWHERE?
  273. C
  274. RFLAG(HERE)=IOR(RFLAG(HERE),RMUNG)
  275. RRAND(HERE)=114
  276. C !MUNG ROOM.
  277. CALL JIGSUP(150)
  278. C !DEAD.
  279. RETURN
  280. C
  281. 8100 CALL RSPEAK(151)
  282. C !BOOM.
  283. MUNGRM=BR
  284. C !SAVE ROOM THAT BLEW.
  285. CTICK(CEVSAF)=5
  286. C !SET SAFE INTERRUPT.
  287. IF(BR.NE.MSAFE) GO TO 8200
  288. C !BLEW SAFE ROOM?
  289. IF(BC.NE.SSLOT) RETURN
  290. C !WAS BRICK IN SAFE?
  291. CALL NEWSTA(SSLOT,0,0,0,0)
  292. C !KILL SLOT.
  293. OFLAG2(SAFE)=IOR(OFLAG2(SAFE),OPENBT)
  294. SAFEF=.TRUE.
  295. C !INDICATE SAFE BLOWN.
  296. RETURN
  297. C
  298. 8200 DO 8250 I=1,OLNT
  299. C !BLEW WRONG ROOM.
  300. IF(QHERE(I,BR) .AND. ((IAND(OFLAG1(I),TAKEBT)).NE.0))
  301. & CALL NEWSTA(I,0,0,0,0)
  302. 8250 CONTINUE
  303. IF(BR.NE.LROOM) RETURN
  304. C !BLEW LIVING ROOM?
  305. DO 8300 I=1,OLNT
  306. IF(OCAN(I).EQ.TCASE) CALL NEWSTA(I,0,0,0,0)
  307. C !KILL TROPHY CASE.
  308. 8300 CONTINUE
  309. RETURN
  310. C
  311. 8500 IF(QHERE(FUSE,HERE).OR.(OADV(FUSE).EQ.WINNER))
  312. & CALL RSPEAK(152)
  313. CALL NEWSTA(FUSE,0,0,0,0)
  314. C !KILL FUSE.
  315. RETURN
  316. C CEVAPP, PAGE 5
  317. C
  318. C CEV9-- LEDGE MUNGE.
  319. C
  320. 9000 RFLAG(LEDG4)=IOR(RFLAG(LEDG4),RMUNG)
  321. RRAND(LEDG4)=109
  322. IF(HERE.EQ.LEDG4) GO TO 9100
  323. C !WAS HE THERE?
  324. CALL RSPEAK(110)
  325. C !NO, NARROW ESCAPE.
  326. RETURN
  327. C
  328. 9100 IF(AVEHIC(WINNER).NE.0) GO TO 9200
  329. C !IN VEHICLE?
  330. CALL JIGSUP(111)
  331. C !NO, DEAD.
  332. RETURN
  333. C
  334. 9200 IF(BTIEF.NE.0) GO TO 9300
  335. C !TIED TO LEDGE?
  336. CALL RSPEAK(112)
  337. C !NO, NO PLACE TO LAND.
  338. RETURN
  339. C
  340. 9300 BLOC=VLBOT
  341. C !YES, CRASH BALLOON.
  342. CALL NEWSTA(BALLO,0,0,0,0)
  343. C !BALLOON & CONTENTS DIE.
  344. CALL NEWSTA(DBALL,0,BLOC,0,0)
  345. C !INSERT DEAD BALLOON.
  346. BTIEF=0
  347. BINFF=0
  348. CFLAG(CEVBAL)=.FALSE.
  349. CFLAG(CEVBRN)=.FALSE.
  350. CALL JIGSUP(113)
  351. C !DEAD
  352. RETURN
  353. C
  354. C CEV10-- SAFE MUNG.
  355. C
  356. 10000 RFLAG(MUNGRM)=IOR(RFLAG(MUNGRM),RMUNG)
  357. RRAND(MUNGRM)=114
  358. IF(HERE.EQ.MUNGRM) GO TO 10100
  359. C !IS HE PRESENT?
  360. CALL RSPEAK(115)
  361. C !LET HIM KNOW.
  362. IF(MUNGRM.EQ.MSAFE) CTICK(CEVLED)=8
  363. C !START LEDGE CLOCK.
  364. RETURN
  365. C
  366. 10100 I=116
  367. C !HE'S DEAD,
  368. IF((IAND(RFLAG(HERE),RHOUSE)).NE.0) I=117
  369. CALL JIGSUP(I)
  370. C !LET HIM KNOW.
  371. RETURN
  372. C CEVAPP, PAGE 6
  373. C
  374. C CEV11-- VOLCANO GNOME
  375. C
  376. 11000 IF(QLEDGE(HERE)) GO TO 11100
  377. C !IS HE ON LEDGE?
  378. CTICK(CEVVLG)=1
  379. C !NO, WAIT A WHILE.
  380. RETURN
  381. C
  382. 11100 CALL NEWSTA(GNOME,118,HERE,0,0)
  383. C !YES, MATERIALIZE GNOME.
  384. RETURN
  385. C
  386. C CEV12-- VOLCANO GNOME DISAPPEARS
  387. C
  388. 12000 CALL NEWSTA(GNOME,149,0,0,0)
  389. C !DISAPPEAR THE GNOME.
  390. RETURN
  391. C
  392. C CEV13-- BUCKET.
  393. C
  394. 13000 IF(OCAN(WATER).EQ.BUCKE)
  395. & CALL NEWSTA(WATER,0,0,0,0)
  396. RETURN
  397. C
  398. C CEV14-- SPHERE. IF EXPIRES, HE'S TRAPPED.
  399. C
  400. 14000 RFLAG(CAGER)=IOR(RFLAG(CAGER),RMUNG)
  401. RRAND(CAGER)=147
  402. CALL JIGSUP(148)
  403. C !MUNG PLAYER.
  404. RETURN
  405. C
  406. C CEV15-- END GAME HERALD.
  407. C
  408. 15000 ENDGMF=.TRUE.
  409. C !WE'RE IN ENDGAME.
  410. CALL RSPEAK(119)
  411. C !INFORM OF ENDGAME.
  412. RETURN
  413. C CEVAPP, PAGE 7
  414. C
  415. C CEV16-- FOREST MURMURS
  416. C
  417. 16000 CFLAG(CEVFOR)=(HERE.EQ.MTREE).OR.
  418. & ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))
  419. IF(CFLAG(CEVFOR).AND.PROB(10,10)) CALL RSPEAK(635)
  420. RETURN
  421. C
  422. C CEV17-- SCOL ALARM
  423. C
  424. 17000 IF(HERE.EQ.BKTWI) CFLAG(CEVZGI)=.TRUE.
  425. C !IF IN TWI, GNOME.
  426. IF(HERE.EQ.BKVAU) CALL JIGSUP(636)
  427. C !IF IN VAU, DEAD.
  428. RETURN
  429. C
  430. C CEV18-- ENTER GNOME OF ZURICH
  431. C
  432. 18000 CFLAG(CEVZGO)=.TRUE.
  433. C !EXITS, TOO.
  434. CALL NEWSTA(ZGNOM,0,BKTWI,0,0)
  435. C !PLACE IN TWI.
  436. IF(HERE.EQ.BKTWI) CALL RSPEAK(637)
  437. C !ANNOUNCE.
  438. RETURN
  439. C
  440. C CEV19-- EXIT GNOME
  441. C
  442. 19000 CALL NEWSTA(ZGNOM,0,0,0,0)
  443. C !VANISH.
  444. IF(HERE.EQ.BKTWI) CALL RSPEAK(638)
  445. C !ANNOUNCE.
  446. RETURN
  447. C CEVAPP, PAGE 8
  448. C
  449. C CEV20-- START OF ENDGAME
  450. C
  451. 20000 IF(SPELLF) GO TO 20200
  452. C !SPELL HIS WAY IN?
  453. IF(HERE.NE.CRYPT) RETURN
  454. C !NO, STILL IN TOMB?
  455. IF(.NOT.LIT(HERE)) GO TO 20100
  456. C !LIGHTS OFF?
  457. CTICK(CEVSTE)=3
  458. C !RESCHEDULE.
  459. RETURN
  460. C
  461. 20100 CALL RSPEAK(727)
  462. C !ANNOUNCE.
  463. 20200 DO 20300 I=1,OLNT
  464. C !STRIP HIM OF OBJS.
  465. CALL NEWSTA(I,0,OROOM(I),OCAN(I),0)
  466. 20300 CONTINUE
  467. CALL NEWSTA(LAMP,0,0,0,PLAYER)
  468. C !GIVE HIM LAMP.
  469. CALL NEWSTA(SWORD,0,0,0,PLAYER)
  470. C !GIVE HIM SWORD.
  471. C
  472. OFLAG1(LAMP)=IAND((IOR(OFLAG1(LAMP),LITEBT)), not(ONBT))
  473. OFLAG2(LAMP)=IOR(OFLAG2(LAMP),TCHBT)
  474. CFLAG(CEVLNT)=.FALSE.
  475. C !LAMP IS GOOD AS NEW.
  476. CTICK(CEVLNT)=350
  477. ORLAMP=0
  478. OFLAG2(SWORD)=IOR(OFLAG2(SWORD),TCHBT)
  479. SWDACT=.TRUE.
  480. SWDSTA=0
  481. C
  482. THFACT=.FALSE.
  483. C !THIEF GONE.
  484. ENDGMF=.TRUE.
  485. C !ENDGAME RUNNING.
  486. CFLAG(CEVMAT)=.FALSE.
  487. C !MATCHES GONE,
  488. CFLAG(CEVCND)=.FALSE.
  489. C !CANDLES GONE.
  490. C
  491. CALL SCRUPD(RVAL(CRYPT))
  492. C !SCORE CRYPT,
  493. RVAL(CRYPT)=0
  494. C !BUT ONLY ONCE.
  495. F=MOVETO(TSTRS,WINNER)
  496. C !TO TOP OF STAIRS,
  497. F=RMDESC(3)
  498. C !AND DESCRIBE.
  499. RETURN
  500. C !BAM
  501. C !
  502. C
  503. C CEV21-- MIRROR CLOSES.
  504. C
  505. 21000 MRPSHF=.FALSE.
  506. C !BUTTON IS OUT.
  507. MROPNF=.FALSE.
  508. C !MIRROR IS CLOSED.
  509. IF(HERE.EQ.MRANT) CALL RSPEAK(728)
  510. C !DESCRIBE BUTTON.
  511. IF((HERE.EQ.INMIR).OR.(MRHERE(HERE).EQ.1))
  512. & CALL RSPEAK(729)
  513. RETURN
  514. C CEVAPP, PAGE 9
  515. C
  516. C CEV22-- DOOR CLOSES.
  517. C
  518. 22000 IF(WDOPNF) CALL RSPEAK(730)
  519. C !DESCRIBE.
  520. WDOPNF=.FALSE.
  521. C !CLOSED.
  522. RETURN
  523. C
  524. C CEV23-- INQUISITOR'S QUESTION
  525. C
  526. 23000 IF(AROOM(PLAYER).NE.FDOOR) RETURN
  527. C !IF PLAYER LEFT, DIE.
  528. CALL RSPEAK(769)
  529. CALL RSPEAK(770+QUESNO)
  530. CTICK(CEVINQ)=2
  531. RETURN
  532. C
  533. C CEV24-- MASTER FOLLOWS
  534. C
  535. 24000 IF(AROOM(AMASTR).EQ.HERE) RETURN
  536. C !NO MOVEMENT, DONE.
  537. IF((HERE.NE.CELL).AND.(HERE.NE.PCELL)) GO TO 24100
  538. IF(FOLLWF) CALL RSPEAK(811)
  539. C !WONT GO TO CELLS.
  540. FOLLWF=.FALSE.
  541. RETURN
  542. C
  543. 24100 FOLLWF=.TRUE.
  544. C !FOLLOWING.
  545. I=812
  546. C !ASSUME CATCHES UP.
  547. DO 24200 J=XMIN,XMAX,XMIN
  548. IF(FINDXT(J,AROOM(AMASTR)).AND.(XROOM1.EQ.HERE))
  549. & I=813
  550. 24200 CONTINUE
  551. CALL RSPEAK(I)
  552. CALL NEWSTA(MASTER,0,HERE,0,0)
  553. C !MOVE MASTER OBJECT.
  554. AROOM(AMASTR)=HERE
  555. C !MOVE MASTER PLAYER.
  556. RETURN
  557. C
  558. END
  559. C LITINT- LIGHT INTERRUPT PROCESSOR
  560. C
  561. C DECLARATIONS
  562. C
  563. SUBROUTINE LITINT(OBJ,CTR,CEV,TICKS,TICKLN)
  564. IMPLICIT INTEGER (A-Z)
  565. INTEGER TICKS(TICKLN)
  566. include 'gamestat.h'
  567. include 'objects.h'
  568. include 'oflags.h'
  569. include 'clock.h'
  570. C
  571. CTR=CTR+1
  572. C !ADVANCE STATE CNTR.
  573. CTICK(CEV)=TICKS(CTR)
  574. C !RESET INTERRUPT.
  575. IF(CTICK(CEV).NE.0) GO TO 100
  576. C !EXPIRED?
  577. OFLAG1(OBJ)=IAND(OFLAG1(OBJ), not(LITEBT+FLAMBT+ONBT))
  578. IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
  579. & CALL RSPSUB(293,ODESC2(OBJ))
  580. RETURN
  581. C
  582. 100 IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
  583. & CALL RSPEAK(TICKS(CTR+(TICKLN/2)))
  584. RETURN
  585. C
  586. END