sobjs.for 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. C SOBJS- SIMPLE OBJECTS PROCESSOR
  2. C OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
  3. C MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
  4. C
  5. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  6. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  7. C WRITTEN BY R. M. SUPNIK
  8. C
  9. C DECLARATIONS
  10. C
  11. LOGICAL FUNCTION SOBJS(RI,ARG)
  12. IMPLICIT INTEGER (A-Z)
  13. LOGICAL QOPEN
  14. LOGICAL MOVETO,OPNCLS,LIT
  15. LOGICAL QHERE,F
  16. include 'parser.h'
  17. include 'gamestat.h'
  18. include 'state.h'
  19. include 'rooms.h'
  20. include 'rflag.h'
  21. include 'rindex.h'
  22. include 'objects.h'
  23. include 'oflags.h'
  24. include 'oindex.h'
  25. include 'clock.h'
  26. include 'villians.h'
  27. include 'advers.h'
  28. include 'verbs.h'
  29. include 'flags.h'
  30. C
  31. C FUNCTIONS AND DATA
  32. C
  33. QOPEN(R)=IAND(OFLAG2(R),OPENBT).NE.0
  34. C SOBJS, PAGE 2
  35. C
  36. IF(PRSO.GT.220) GO TO 5
  37. IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  38. 5 IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  39. AV=AVEHIC(WINNER)
  40. SOBJS=.TRUE.
  41. C
  42. GO TO (1000,3000,4000,6000,7000,8000,9000,
  43. & 13000,14000,16000,17000,
  44. & 21000,23000,24000,27000,28000,29000,30000,
  45. & 31000,33000,34000,36000,37000,38000,
  46. & 41000,42000,43000,44000,46000,
  47. & 53000,56000)
  48. & RI
  49. CALL BUG(6,RI)
  50. C
  51. C RETURN HERE TO DECLARE FALSE RESULT
  52. C
  53. 10 SOBJS=.FALSE.
  54. RETURN
  55. C SOBJS, PAGE 3
  56. C
  57. C O1-- GUNK FUNCTION
  58. C
  59. 1000 IF(OCAN(GUNK).EQ.0) GO TO 10
  60. C !NOT INSIDE? F
  61. CALL NEWSTA(GUNK,122,0,0,0)
  62. C !FALLS APART.
  63. RETURN
  64. C
  65. C O2-- TROPHY CASE
  66. C
  67. 3000 IF(PRSA.NE.TAKEW) GO TO 10
  68. C !TAKE?
  69. CALL RSPEAK(128)
  70. C !CANT.
  71. RETURN
  72. C
  73. C O3-- BOTTLE FUNCTION
  74. C
  75. 4000 IF(PRSA.NE.THROWW) GO TO 4100
  76. C !THROW?
  77. CALL NEWSTA(PRSO,129,0,0,0)
  78. C !BREAKS.
  79. RETURN
  80. C
  81. 4100 IF(PRSA.NE.MUNGW) GO TO 10
  82. C !MUNG?
  83. CALL NEWSTA(PRSO,131,0,0,0)
  84. C !BREAKS.
  85. RETURN
  86. C SOBJS, PAGE 4
  87. C
  88. C O4-- ROPE FUNCTION
  89. C
  90. 6000 IF(HERE.EQ.DOME) GO TO 6100
  91. C !IN DOME?
  92. DOMEF=.FALSE.
  93. C !NO,
  94. IF(PRSA.NE.UNTIEW) GO TO 6050
  95. C !UNTIE?
  96. CALL RSPEAK(134)
  97. C !CANT
  98. RETURN
  99. C
  100. 6050 IF(PRSA.NE.TIEW) GO TO 10
  101. C !TIE?
  102. CALL RSPEAK(135)
  103. C !CANT TIE
  104. RETURN
  105. C
  106. 6100 IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
  107. IF(DOMEF) GO TO 6150
  108. C !ALREADY TIED?
  109. DOMEF=.TRUE.
  110. C !NO, TIE IT.
  111. OFLAG1(ROPE)=IOR(OFLAG1(ROPE),NDSCBT)
  112. OFLAG2(ROPE)=IOR(OFLAG2(ROPE),CLMBBT)
  113. CALL NEWSTA(ROPE,137,DOME,0,0)
  114. RETURN
  115. C
  116. 6150 CALL RSPEAK(136)
  117. C !DUMMY.
  118. RETURN
  119. C
  120. 6200 IF(PRSA.NE.UNTIEW) GO TO 6300
  121. C !UNTIE?
  122. IF(DOMEF) GO TO 6250
  123. C !TIED?
  124. CALL RSPEAK(134)
  125. C !NO, DUMMY.
  126. RETURN
  127. C
  128. 6250 DOMEF=.FALSE.
  129. C !YES, UNTIE IT.
  130. OFLAG1(ROPE)=IAND(OFLAG1(ROPE), not(NDSCBT))
  131. OFLAG2(ROPE)=IAND(OFLAG2(ROPE), not(CLMBBT))
  132. CALL RSPEAK(139)
  133. RETURN
  134. C
  135. 6300 IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400
  136. C !DROP & UNTIED?
  137. CALL NEWSTA(ROPE,140,MTORC,0,0)
  138. C !YES, DROP.
  139. RETURN
  140. C
  141. 6400 IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
  142. CALL RSPEAK(141)
  143. C !TAKE & TIED.
  144. RETURN
  145. C
  146. C O5-- SWORD FUNCTION
  147. C
  148. 7000 IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
  149. & SWDACT=.TRUE.
  150. GO TO 10
  151. C
  152. C O6-- LANTERN
  153. C
  154. 8000 IF(PRSA.NE.THROWW) GO TO 8100
  155. C !THROW?
  156. CALL NEWSTA(LAMP,0,0,0,0)
  157. C !KILL LAMP,
  158. CALL NEWSTA(BLAMP,142,HERE,0,0)
  159. C !REPLACE WITH BROKEN.
  160. RETURN
  161. C
  162. 8100 IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
  163. IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
  164. GO TO 10
  165. C
  166. C O7-- RUG FUNCTION
  167. C
  168. 9000 IF(PRSA.NE.RAISEW) GO TO 9100
  169. C !RAISE?
  170. CALL RSPEAK(143)
  171. C !CANT
  172. RETURN
  173. C
  174. 9100 IF(PRSA.NE.TAKEW) GO TO 9200
  175. C !TAKE?
  176. CALL RSPEAK(144)
  177. C !CANT
  178. RETURN
  179. C
  180. 9200 IF(PRSA.NE.MOVEW) GO TO 9300
  181. C !MOVE?
  182. CALL RSPEAK(145+ORRUG)
  183. ORRUG=1
  184. OFLAG1(DOOR)=IOR(OFLAG1(DOOR),VISIBT)
  185. RETURN
  186. C
  187. 9300 IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
  188. & QOPEN(DOOR)) GO TO 10
  189. CALL RSPEAK(345)
  190. RETURN
  191. C SOBJS, PAGE 5
  192. C
  193. C O8-- SKELETON
  194. C
  195. 13000 I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
  196. IF(I.NE.0) CALL RSPEAK(162)
  197. C !IF ROBBED, SAY SO.
  198. RETURN
  199. C
  200. C O9-- MIRROR
  201. C
  202. 14000 IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
  203. MROOM=IEOR(HERE,1)
  204. DO 14100 I=1,OLNT
  205. C !INTERCHANGE OBJS.
  206. IF(OROOM(I).EQ.HERE) OROOM(I)=-1
  207. IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
  208. IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
  209. 14100 CONTINUE
  210. F=MOVETO(MROOM,WINNER)
  211. CALL RSPEAK(163)
  212. C !SHAKE WORLD.
  213. RETURN
  214. C
  215. 14500 IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
  216. & (PRSA.NE.EXAMIW)) GO TO 14600
  217. I=164
  218. C !MIRROR OK.
  219. IF(MIRRMF) I=165
  220. C !MIRROR DEAD.
  221. CALL RSPEAK(I)
  222. RETURN
  223. C
  224. 14600 IF(PRSA.NE.TAKEW) GO TO 14700
  225. C !TAKE?
  226. CALL RSPEAK(166)
  227. C !JOKE.
  228. RETURN
  229. C
  230. 14700 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  231. I=167
  232. C !MIRROR BREAKS.
  233. IF(MIRRMF) I=168
  234. C !MIRROR ALREADY BROKEN.
  235. MIRRMF=.TRUE.
  236. BADLKF=.TRUE.
  237. CALL RSPEAK(I)
  238. RETURN
  239. C SOBJS, PAGE 6
  240. C
  241. C O10-- DUMBWAITER
  242. C
  243. 16000 IF(PRSA.NE.RAISEW) GO TO 16100
  244. C !RAISE?
  245. IF(CAGETF) GO TO 16400
  246. C !ALREADY AT TOP?
  247. CALL NEWSTA(TBASK,175,TSHAF,0,0)
  248. C !NO, RAISE BASKET.
  249. CALL NEWSTA(FBASK,0,BSHAF,0,0)
  250. CAGETF=.TRUE.
  251. C !AT TOP.
  252. RETURN
  253. C
  254. 16100 IF(PRSA.NE.LOWERW) GO TO 16200
  255. C !LOWER?
  256. IF(.NOT.CAGETF) GO TO 16400
  257. C !ALREADY AT BOTTOM?
  258. CALL NEWSTA(TBASK,176,BSHAF,0,0)
  259. C !NO, LOWER BASKET.
  260. CALL NEWSTA(FBASK,0,TSHAF,0,0)
  261. CAGETF=.FALSE.
  262. IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  263. C !IF DARK, DIE.
  264. RETURN
  265. C
  266. 16200 IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
  267. CALL RSPEAK(130)
  268. C !WRONG BASKET.
  269. RETURN
  270. C
  271. 16300 IF(PRSA.NE.TAKEW) GO TO 10
  272. C !TAKE?
  273. CALL RSPEAK(177)
  274. C !JOKE.
  275. RETURN
  276. C
  277. 16400 CALL RSPEAK(125+RND(3))
  278. C !DUMMY.
  279. RETURN
  280. C
  281. C O11-- GHOST FUNCTION
  282. C
  283. 17000 I=178
  284. C !ASSUME DIRECT.
  285. IF(PRSO.NE.GHOST) I=179
  286. C !IF NOT, INDIRECT.
  287. CALL RSPEAK(I)
  288. RETURN
  289. C !SPEAK AND EXIT.
  290. C SOBJS, PAGE 7
  291. C
  292. C O12-- TUBE
  293. C
  294. 21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
  295. CALL RSPEAK(186)
  296. C !CANT PUT BACK IN.
  297. RETURN
  298. C
  299. C O13-- CHALICE
  300. C
  301. 23000 IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
  302. & (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
  303. & (IAND(OFLAG2(THIEF),FITEBT).EQ.0).OR.
  304. & .NOT. THFACT) GO TO 10
  305. CALL RSPEAK(204)
  306. C !CANT TAKE.
  307. RETURN
  308. C
  309. C O14-- PAINTING
  310. C
  311. 24000 IF(PRSA.NE.MUNGW) GO TO 10
  312. C !MUNG?
  313. CALL RSPEAK(205)
  314. C !DESTROY PAINTING.
  315. OFVAL(PRSO)=0
  316. OTVAL(PRSO)=0
  317. ODESC1(PRSO)=207
  318. ODESC2(PRSO)=206
  319. RETURN
  320. C SOBJS, PAGE 8
  321. C
  322. C O15-- BOLT
  323. C
  324. 27000 IF(PRSA.NE.TURNW) GO TO 10
  325. C !TURN BOLT?
  326. IF(PRSI.NE.WRENC) GO TO 27500
  327. C !WITH WRENCH?
  328. IF(GATEF) GO TO 27100
  329. C !PROPER BUTTON PUSHED?
  330. CALL RSPEAK(210)
  331. C !NO, LOSE.
  332. RETURN
  333. C
  334. 27100 IF(LWTIDF) GO TO 27200
  335. C !LOW TIDE NOW?
  336. LWTIDF=.TRUE.
  337. C !NO, EMPTY DAM.
  338. CALL RSPEAK(211)
  339. OFLAG2(COFFI)=IAND(OFLAG2(COFFI), not(SCRDBT))
  340. OFLAG1(TRUNK)=IOR(OFLAG1(TRUNK),VISIBT)
  341. RFLAG(RESER)=IAND(IOR(RFLAG(RESER),RLAND)
  342. & ,not(RWATER+RSEEN))
  343. RETURN
  344. C
  345. 27200 LWTIDF=.FALSE.
  346. C !YES, FILL DAM.
  347. CALL RSPEAK(212)
  348. IF(QHERE(TRUNK,RESER))
  349. & OFLAG1(TRUNK)=IAND(OFLAG1(TRUNK), not(VISIBT))
  350. RFLAG(RESER)=IAND(IOR(RFLAG(RESER),RWATER) ,not(RLAND))
  351. RETURN
  352. C
  353. 27500 CALL RSPSUB(299,ODI2)
  354. C !NOT WITH THAT.
  355. RETURN
  356. C
  357. C O16-- GRATING
  358. C
  359. 28000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
  360. IF(GRUNLF) GO TO 28200
  361. C !UNLOCKED?
  362. CALL RSPEAK(214)
  363. C !NO, LOCKED.
  364. RETURN
  365. C
  366. 28200 I=215
  367. C !UNLOCKED, VIEW FRM CLR.
  368. IF(HERE.NE.CLEAR) I=216
  369. C !VIEW FROM BELOW.
  370. SOBJS=OPNCLS(GRATE,I,885)
  371. C !OPEN/CLOSE.
  372. RFLAG(MGRAT)=IAND(RFLAG(MGRAT), not(RLIGHT))
  373. IF(QOPEN(GRATE)) RFLAG(MGRAT)=IOR(RFLAG(MGRAT),RLIGHT)
  374. IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  375. C !IF DARK, DIE.
  376. RETURN
  377. C
  378. C O17-- TRAP DOOR
  379. C
  380. 29000 IF(HERE.NE.LROOM) GO TO 29100
  381. C !FROM LIVING ROOM?
  382. SOBJS=OPNCLS(DOOR,218,219)
  383. C !OPEN/CLOSE.
  384. RETURN
  385. C
  386. 29100 IF(HERE.NE.CELLA) GO TO 10
  387. C !FROM CELLAR?
  388. IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
  389. CALL RSPEAK(220)
  390. C !CANT OPEN CLOSED DOOR.
  391. RETURN
  392. C
  393. 29200 SOBJS=OPNCLS(DOOR,0,22)
  394. C !NORMAL OPEN/CLOSE.
  395. RETURN
  396. C
  397. C O18-- DURABLE DOOR
  398. C
  399. 30000 I=0
  400. C !ASSUME NO APPL.
  401. IF(PRSA.EQ.OPENW) I=221
  402. C !OPEN?
  403. IF(PRSA.EQ.BURNW) I=222
  404. C !BURN?
  405. IF(PRSA.EQ.MUNGW) I=223+RND(3)
  406. C !MUNG?
  407. IF(I.EQ.0) GO TO 10
  408. CALL RSPEAK(I)
  409. RETURN
  410. C
  411. C O19-- MASTER SWITCH
  412. C
  413. 31000 IF(PRSA.NE.TURNW) GO TO 10
  414. C !TURN?
  415. IF(PRSI.NE.SCREW) GO TO 31500
  416. C !WITH SCREWDRIVER?
  417. IF(QOPEN(MACHI)) GO TO 31600
  418. C !LID UP?
  419. CALL RSPEAK(226)
  420. C !NO, ACTIVATE.
  421. IF(OCAN(COAL).NE.MACHI) GO TO 31400
  422. C !COAL INSIDE?
  423. CALL NEWSTA(COAL,0,0,0,0)
  424. C !KILL COAL,
  425. CALL NEWSTA(DIAMO,0,0,MACHI,0)
  426. C !REPLACE WITH DIAMOND.
  427. RETURN
  428. C
  429. 31400 DO 31450 I=1,OLNT
  430. C !KILL NONCOAL OBJECTS.
  431. IF(OCAN(I).NE.MACHI) GO TO 31450
  432. C !INSIDE MACHINE?
  433. CALL NEWSTA(I,0,0,0,0)
  434. C !KILL OBJECT AND CONTENTS.
  435. CALL NEWSTA(GUNK,0,0,MACHI,0)
  436. C !REDUCE TO GUNK.
  437. 31450 CONTINUE
  438. RETURN
  439. C
  440. 31500 CALL RSPSUB(300,ODI2)
  441. C !CANT TURN WITH THAT.
  442. RETURN
  443. C
  444. 31600 CALL RSPEAK(227)
  445. C !LID IS UP.
  446. RETURN
  447. C SOBJS, PAGE 9
  448. C
  449. C O20-- LEAK
  450. C
  451. 33000 IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
  452. & GO TO 10
  453. IF(PRSI.NE.PUTTY) GO TO 33100
  454. C !WITH PUTTY?
  455. RVMNT=-1
  456. C !DISABLE LEAK.
  457. CTICK(CEVMNT)=0
  458. CALL RSPEAK(577)
  459. RETURN
  460. C
  461. 33100 CALL RSPSUB(301,ODI2)
  462. C !CANT WITH THAT.
  463. RETURN
  464. C
  465. C O21-- DROWNING BUTTONS
  466. C
  467. 34000 IF(PRSA.NE.PUSHW) GO TO 10
  468. C !PUSH?
  469. GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
  470. GO TO 10
  471. C !NOT A BUTTON.
  472. C
  473. 34100 RFLAG(HERE)=IEOR(RFLAG(HERE),RLIGHT)
  474. I=230
  475. IF(IAND(RFLAG(HERE),RLIGHT).NE.0) I=231
  476. CALL RSPEAK(I)
  477. RETURN
  478. C
  479. 34200 GATEF=.TRUE.
  480. C !RELEASE GATE.
  481. CALL RSPEAK(232)
  482. RETURN
  483. C
  484. 34300 GATEF=.FALSE.
  485. C !INTERLOCK GATE.
  486. CALL RSPEAK(232)
  487. RETURN
  488. C
  489. 34400 IF(RVMNT.NE.0) GO TO 34500
  490. C !LEAK ALREADY STARTED?
  491. CALL RSPEAK(233)
  492. C !NO, START LEAK.
  493. RVMNT=1
  494. CTICK(CEVMNT)=-1
  495. RETURN
  496. C
  497. 34500 CALL RSPEAK(234)
  498. C !BUTTON JAMMED.
  499. RETURN
  500. C
  501. C O22-- INFLATABLE BOAT
  502. C
  503. 36000 IF(PRSA.NE.INFLAW) GO TO 10
  504. C !INFLATE?
  505. IF(OROOM(IBOAT).NE.0) GO TO 36100
  506. C !IN ROOM?
  507. CALL RSPEAK(235)
  508. C !NO, JOKE.
  509. RETURN
  510. C
  511. 36100 IF(PRSI.NE.PUMP) GO TO 36200
  512. C !WITH PUMP?
  513. CALL NEWSTA(IBOAT,0,0,0,0)
  514. C !KILL DEFL BOAT,
  515. CALL NEWSTA(RBOAT,236,HERE,0,0)
  516. C !REPL WITH INF.
  517. DEFLAF=.FALSE.
  518. RETURN
  519. C
  520. 36200 I=237
  521. C !JOKES.
  522. IF(PRSI.NE.LUNGS) I=303
  523. CALL RSPSUB(I,ODI2)
  524. RETURN
  525. C
  526. C O23-- DEFLATED BOAT
  527. C
  528. 37000 IF(PRSA.NE.INFLAW) GO TO 37100
  529. C !INFLATE?
  530. CALL RSPEAK(238)
  531. C !JOKE.
  532. RETURN
  533. C
  534. 37100 IF(PRSA.NE.PLUGW) GO TO 10
  535. C !PLUG?
  536. IF(PRSI.NE.PUTTY) GO TO 33100
  537. C !WITH PUTTY?
  538. CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
  539. CALL NEWSTA(DBOAT,0,0,0,0)
  540. C !KILL DEFL BOAT, REPL.
  541. RETURN
  542. C SOBJS, PAGE 10
  543. C
  544. C O24-- RUBBER BOAT
  545. C
  546. 38000 IF(ARG.NE.0) GO TO 10
  547. C !DISMISS READIN, OUT.
  548. IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
  549. CALL NEWSTA(RBOAT,0,0,0,0)
  550. C !KILL INFL BOAT,
  551. CALL NEWSTA(DBOAT,240,HERE,0,0)
  552. C !REPL WITH DEAD.
  553. DEFLAF=.TRUE.
  554. RETURN
  555. C
  556. 38100 IF(PRSA.NE.INFLAW) GO TO 38200
  557. C !INFLATE?
  558. CALL RSPEAK(367)
  559. C !YES, JOKE.
  560. RETURN
  561. C
  562. 38200 IF(PRSA.NE.DEFLAW) GO TO 10
  563. C !DEFLATE?
  564. IF(AV.EQ.RBOAT) GO TO 38300
  565. C !IN BOAT?
  566. IF(OROOM(RBOAT).EQ.0) GO TO 38400
  567. C !ON GROUND?
  568. CALL NEWSTA(RBOAT,0,0,0,0)
  569. C !KILL INFL BOAT,
  570. CALL NEWSTA(IBOAT,241,HERE,0,0)
  571. C !REPL WITH DEFL.
  572. DEFLAF=.TRUE.
  573. RETURN
  574. C
  575. 38300 CALL RSPEAK(242)
  576. C !IN BOAT.
  577. RETURN
  578. C
  579. 38400 CALL RSPEAK(243)
  580. C !NOT ON GROUND.
  581. RETURN
  582. C
  583. C O25-- BRAIDED ROPE
  584. C
  585. 41000 IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
  586. & ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
  587. & GO TO 41500
  588. BTIEF=PRSI
  589. C !RECORD LOCATION.
  590. CFLAG(CEVBAL)=.FALSE.
  591. C !STALL ASCENT.
  592. CALL RSPEAK(248)
  593. RETURN
  594. C
  595. 41500 IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
  596. IF(BTIEF.NE.0) GO TO 41600
  597. C !TIED UP?
  598. CALL RSPEAK(249)
  599. C !NO, JOKE.
  600. RETURN
  601. C
  602. 41600 CALL RSPEAK(250)
  603. BTIEF=0
  604. C !UNTIE.
  605. CTICK(CEVBAL)=3
  606. C !RESTART CLOCK.
  607. CFLAG(CEVBAL)=.TRUE.
  608. RETURN
  609. C
  610. C O26-- SAFE
  611. C
  612. 42000 I=0
  613. C !ASSUME UNPROCESSED.
  614. IF(PRSA.EQ.TAKEW) I=251
  615. C !TAKE?
  616. IF((PRSA.EQ.OPENW).AND.SAFEF) I=253
  617. C !OPEN AFTER BLAST?
  618. IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254
  619. C !OPEN BEFORE BLAST?
  620. IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253
  621. C !CLOSE AFTER?
  622. IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
  623. IF(I.EQ.0) GO TO 10
  624. CALL RSPEAK(I)
  625. RETURN
  626. C
  627. C O27-- FUSE
  628. C
  629. 43000 IF(PRSA.NE.BURNW) GO TO 10
  630. C !BURN?
  631. CALL RSPEAK(256)
  632. CTICK(CEVFUS)=2
  633. C !START COUNTDOWN.
  634. RETURN
  635. C
  636. C O28-- GNOME
  637. C
  638. 44000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
  639. IF(OTVAL(PRSO).EQ.0) GO TO 44100
  640. C !TREASURE?
  641. CALL RSPSUB(257,ODO2)
  642. C !YES, GET DOOR.
  643. CALL NEWSTA(PRSO,0,0,0,0)
  644. CALL NEWSTA(GNOME,0,0,0,0)
  645. C !VANISH GNOME.
  646. GNODRF=.TRUE.
  647. RETURN
  648. C
  649. 44100 CALL RSPSUB(258,ODO2)
  650. C !NO, LOSE OBJECT.
  651. CALL NEWSTA(PRSO,0,0,0,0)
  652. RETURN
  653. C
  654. 44500 CALL RSPEAK(259)
  655. C !NERVOUS GNOME.
  656. IF(.NOT.GNOMEF) CTICK(CEVGNO)=5
  657. C !SCHEDULE BYEBYE.
  658. GNOMEF=.TRUE.
  659. RETURN
  660. C
  661. C O29-- COKE BOTTLES
  662. C
  663. 46000 IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
  664. CALL NEWSTA(PRSO,262,0,0,0)
  665. C !MUNG BOTTLES.
  666. RETURN
  667. C SOBJS, PAGE 11
  668. C
  669. C
  670. C O30-- ROBOT
  671. C
  672. 53000 IF(PRSA.NE.GIVEW) GO TO 53200
  673. C !GIVE?
  674. CALL NEWSTA(PRSO,0,0,0,AROBOT)
  675. C !PUT ON ROBOT.
  676. CALL RSPSUB(302,ODO2)
  677. RETURN
  678. C
  679. 53200 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  680. CALL NEWSTA(ROBOT,285,0,0,0)
  681. C !KILL ROBOT.
  682. RETURN
  683. C
  684. C O31-- GRUE
  685. C
  686. 56000 IF(PRSA.NE.EXAMIW) GO TO 56100
  687. C !EXAMINE?
  688. CALL RSPEAK(288)
  689. RETURN
  690. C
  691. 56100 IF(PRSA.NE.FINDW) GO TO 10
  692. C !FIND?
  693. CALL RSPEAK(289)
  694. RETURN
  695. C
  696. END