nrooms.for 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. C RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2
  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. LOGICAL FUNCTION RAPPL2(RI)
  10. IMPLICIT INTEGER (A-Z)
  11. LOGICAL QOPEN,QHERE
  12. include 'parser.h'
  13. include 'gamestat.h'
  14. include 'state.h'
  15. include 'io.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 'xsrch.h'
  23. include 'clock.h'
  24. include 'advers.h'
  25. include 'verbs.h'
  26. include 'flags.h'
  27. C
  28. C FUNCTIONS AND DATA
  29. C
  30. QOPEN(R)=iand(OFLAG2(R),OPENBT).NE.0
  31. DATA NEWRMS/38/
  32. C RAPPL2, PAGE 2
  33. C
  34. RAPPL2=.TRUE.
  35. GO TO (38000,39000,40000,41000,42000,43000,44000,
  36. & 45000,46000,47000,48000,49000,50000,
  37. & 51000,52000,53000,54000,55000,56000,
  38. & 57000,58000,59000,60000),
  39. & (RI-NEWRMS+1)
  40. CALL BUG(70,RI)
  41. RETURN
  42. C
  43. C R38-- MIRROR D ROOM
  44. C
  45. 38000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(FDOOR,MRG,0,682,681)
  46. RETURN
  47. C
  48. C R39-- MIRROR G ROOM
  49. C
  50. 39000 IF(PRSA.EQ.WALKIW) CALL JIGSUP(685)
  51. RETURN
  52. C
  53. C R40-- MIRROR C ROOM
  54. C
  55. 40000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRG,MRB,683,0,681)
  56. RETURN
  57. C
  58. C R41-- MIRROR B ROOM
  59. C
  60. 41000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRC,MRA,0,0,681)
  61. RETURN
  62. C
  63. C R42-- MIRROR A ROOM
  64. C
  65. 42000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRB,0,0,684,681)
  66. RETURN
  67. C RAPPL2, PAGE 3
  68. C
  69. C R43-- MIRROR C EAST/WEST
  70. C
  71. 43000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,683)
  72. RETURN
  73. C
  74. C R44-- MIRROR B EAST/WEST
  75. C
  76. 44000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,686)
  77. RETURN
  78. C
  79. C R45-- MIRROR A EAST/WEST
  80. C
  81. 45000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,687)
  82. RETURN
  83. C
  84. C R46-- INSIDE MIRROR
  85. C
  86. 46000 IF(PRSA.NE.LOOKW) RETURN
  87. C !LOOK?
  88. CALL RSPEAK(688)
  89. C !DESCRIBE
  90. C
  91. C NOW DESCRIBE POLE STATE.
  92. C
  93. C CASES 1,2-- MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE
  94. C CASES 3,4-- MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL
  95. C CASE 5-- POLE IS UP
  96. C
  97. I=689
  98. C !ASSUME CASE 5.
  99. IF((MDIR.EQ.270).AND.(MLOC.EQ.MRB))
  100. & I=690+MIN0(POLEUF,1)
  101. IF(MOD(MDIR,180).EQ.0)
  102. & I=692+MIN0(POLEUF,1)
  103. CALL RSPEAK(I)
  104. C !DESCRIBE POLE.
  105. CALL RSPSUB(694,695+(MDIR/45))
  106. C !DESCRIBE ARROW.
  107. RETURN
  108. C RAPPL2, PAGE 4
  109. C
  110. C R47-- MIRROR EYE ROOM
  111. C
  112. 47000 IF(PRSA.NE.LOOKW) RETURN
  113. C !LOOK?
  114. I=704
  115. C !ASSUME BEAM STOP.
  116. DO 47100 J=1,OLNT
  117. IF(QHERE(J,HERE).AND.(J.NE.RBEAM)) GO TO 47200
  118. 47100 CONTINUE
  119. I=703
  120. 47200 CALL RSPSUB(I,ODESC2(J))
  121. C !DESCRIBE BEAM.
  122. CALL LOOKTO(MRA,0,0,0,0)
  123. C !LOOK NORTH.
  124. RETURN
  125. C
  126. C R48-- INSIDE CRYPT
  127. C
  128. 48000 IF(PRSA.NE.LOOKW) RETURN
  129. C !LOOK?
  130. I=46
  131. C !CRYPT IS OPEN/CLOSED.
  132. IF(QOPEN(TOMB)) I=12
  133. CALL RSPSUB(705,I)
  134. RETURN
  135. C
  136. C R49-- SOUTH CORRIDOR
  137. C
  138. 49000 IF(PRSA.NE.LOOKW) RETURN
  139. C !LOOK?
  140. CALL RSPEAK(706)
  141. C !DESCRIBE.
  142. I=46
  143. C !ODOOR IS OPEN/CLOSED.
  144. IF(QOPEN(ODOOR)) I=12
  145. IF(LCELL.EQ.4) CALL RSPSUB(707,I)
  146. C !DESCRIBE ODOOR IF THERE.
  147. RETURN
  148. C
  149. C R50-- BEHIND DOOR
  150. C
  151. 50000 IF(PRSA.NE.WALKIW) GO TO 50100
  152. C !WALK IN?
  153. CFLAG(CEVFOL)=.TRUE.
  154. C !MASTER FOLLOWS.
  155. CTICK(CEVFOL)=-1
  156. RETURN
  157. C
  158. 50100 IF(PRSA.NE.LOOKW) RETURN
  159. C !LOOK?
  160. I=46
  161. C !QDOOR IS OPEN/CLOSED.
  162. IF(QOPEN(QDOOR)) I=12
  163. CALL RSPSUB(708,I)
  164. RETURN
  165. C RAPPL2, PAGE 5
  166. C
  167. C R51-- FRONT DOOR
  168. C
  169. 51000 IF(PRSA.EQ.WALKIW) CTICK(CEVFOL)=0
  170. C !IF EXITS, KILL FOLLOW.
  171. IF(PRSA.NE.LOOKW) RETURN
  172. C !LOOK?
  173. CALL LOOKTO(0,MRD,709,0,0)
  174. C !DESCRIBE SOUTH.
  175. I=46
  176. C !PANEL IS OPEN/CLOSED.
  177. IF(INQSTF) I=12
  178. C !OPEN IF INQ STARTED.
  179. J=46
  180. C !QDOOR IS OPEN/CLOSED.
  181. IF(QOPEN(QDOOR)) J=12
  182. CALL RSPSB2(710,I,J)
  183. RETURN
  184. C
  185. C R52-- NORTH CORRIDOR
  186. C
  187. 52000 IF(PRSA.NE.LOOKW) RETURN
  188. C !LOOK?
  189. I=46
  190. IF(QOPEN(CDOOR)) I=12
  191. C !CDOOR IS OPEN/CLOSED.
  192. CALL RSPSUB(711,I)
  193. RETURN
  194. C
  195. C R53-- PARAPET
  196. C
  197. 53000 IF(PRSA.EQ.LOOKW) CALL RSPSUB(712,712+PNUMB)
  198. RETURN
  199. C
  200. C R54-- CELL
  201. C
  202. 54000 IF(PRSA.NE.LOOKW) RETURN
  203. C !LOOK?
  204. I=721
  205. C !CDOOR IS OPEN/CLOSED.
  206. IF(QOPEN(CDOOR)) I=722
  207. CALL RSPEAK(I)
  208. I=46
  209. C !ODOOR IS OPEN/CLOSED.
  210. IF(QOPEN(ODOOR)) I=12
  211. IF(LCELL.EQ.4) CALL RSPSUB(723,I)
  212. C !DESCRIBE.
  213. RETURN
  214. C
  215. C R55-- PRISON CELL
  216. C
  217. 55000 IF(PRSA.EQ.LOOKW) CALL RSPEAK(724)
  218. C !LOOK?
  219. RETURN
  220. C
  221. C R56-- NIRVANA CELL
  222. C
  223. 56000 IF(PRSA.NE.LOOKW) RETURN
  224. C !LOOK?
  225. I=46
  226. C !ODOOR IS OPEN/CLOSED.
  227. IF(QOPEN(ODOOR)) I=12
  228. CALL RSPSUB(725,I)
  229. RETURN
  230. C RAPPL2, PAGE 6
  231. C
  232. C R57-- NIRVANA AND END OF GAME
  233. C
  234. 57000 IF(PRSA.NE.WALKIW) RETURN
  235. C !WALKIN?
  236. CALL RSPEAK(726)
  237. CALL SCORE(.FALSE.)
  238. C moved to exit routine CLOSE(DBCH)
  239. CALL EXIT
  240. C
  241. C R58-- TOMB ROOM
  242. C
  243. 58000 IF(PRSA.NE.LOOKW) RETURN
  244. C !LOOK?
  245. I=46
  246. C !TOMB IS OPEN/CLOSED.
  247. IF(QOPEN(TOMB)) I=12
  248. CALL RSPSUB(792,I)
  249. RETURN
  250. C
  251. C R59-- PUZZLE SIDE ROOM
  252. C
  253. 59000 IF(PRSA.NE.LOOKW) RETURN
  254. C !LOOK?
  255. I=861
  256. C !ASSUME DOOR CLOSED.
  257. IF(CPOUTF) I=862
  258. C !OPEN?
  259. CALL RSPEAK(I)
  260. C !DESCRIBE.
  261. RETURN
  262. C
  263. C R60-- PUZZLE ROOM
  264. C
  265. 60000 IF(PRSA.NE.LOOKW) RETURN
  266. C !LOOK?
  267. IF(CPUSHF) GO TO 60100
  268. C !STARTED PUZZLE?
  269. CALL RSPEAK(868)
  270. C !NO, DESCRIBE.
  271. IF(iand(OFLAG2(WARNI),TCHBT).NE.0) CALL RSPEAK(869)
  272. RETURN
  273. C
  274. 60100 CALL CPINFO(880,CPHERE)
  275. C !DESCRIBE ROOM.
  276. RETURN
  277. C
  278. END
  279. C LOOKTO-- DESCRIBE VIEW IN MIRROR HALLWAY
  280. C
  281. C DECLARATIONS
  282. C
  283. SUBROUTINE LOOKTO(NRM,SRM,NT,ST,HT)
  284. IMPLICIT INTEGER(A-Z)
  285. include 'gamestat.h'
  286. include 'flags.h'
  287. C LOOKTO, PAGE 2
  288. C
  289. CALL RSPEAK(HT)
  290. C !DESCRIBE HALL.
  291. CALL RSPEAK(NT)
  292. C !DESCRIBE NORTH VIEW.
  293. CALL RSPEAK(ST)
  294. C !DESCRIBE SOUTH VIEW.
  295. DIR=0
  296. C !ASSUME NO DIRECTION.
  297. IF(IABS(MLOC-HERE).NE.1) GO TO 200
  298. C !MIRROR TO N OR S?
  299. IF(MLOC.EQ.NRM) DIR=695
  300. IF(MLOC.EQ.SRM) DIR=699
  301. C !DIR=N/S.
  302. IF(MOD(MDIR,180).NE.0) GO TO 100
  303. C !MIRROR N-S?
  304. CALL RSPSUB(847,DIR)
  305. C !YES, HE SEES PANEL
  306. CALL RSPSB2(848,DIR,DIR)
  307. C !AND NARROW ROOMS.
  308. GO TO 200
  309. C
  310. 100 M1=MRHERE(HERE)
  311. C !WHICH MIRROR?
  312. MRBF=0
  313. C !ASSUME INTACT.
  314. IF(((M1.EQ.1).AND..NOT.MR1F).OR.
  315. & ((M1.EQ.2).AND..NOT.MR2F)) MRBF=1
  316. CALL RSPSUB(849+MRBF,DIR)
  317. C !DESCRIBE.
  318. IF((M1.EQ.1).AND.MROPNF) CALL RSPEAK(823+MRBF)
  319. IF(MRBF.NE.0) CALL RSPEAK(851)
  320. C
  321. 200 I=0
  322. C !ASSUME NO MORE TO DO.
  323. IF((NT.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.699))) I=852
  324. IF((ST.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.695))) I=853
  325. IF((NT+ST+DIR).EQ.0) I=854
  326. IF(HT.NE.0) CALL RSPEAK(I)
  327. C !DESCRIBE HALLS.
  328. RETURN
  329. C
  330. END
  331. C EWTELL-- DESCRIBE E/W NARROW ROOMS
  332. C
  333. C DECLARATIONS
  334. C
  335. SUBROUTINE EWTELL(RM,ST)
  336. IMPLICIT INTEGER(A-Z)
  337. LOGICAL M1
  338. C
  339. C ROOMS
  340. include 'rindex.h'
  341. include 'flags.h'
  342. C EWTELL, PAGE 2
  343. C
  344. C NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND
  345. C MIRROR MUST BE N-S.
  346. C
  347. M1=(MDIR+(MOD(RM-MRAE,2)*180)).EQ.180
  348. I=819+MOD(RM-MRAE,2)
  349. C !GET BASIC E/W STRING.
  350. IF((M1.AND..NOT.MR1F).OR.(.NOT.M1.AND..NOT.MR2F))
  351. & I=I+2
  352. CALL RSPEAK(I)
  353. IF(M1.AND.MROPNF) CALL RSPEAK(823+((I-819)/2))
  354. CALL RSPEAK(825)
  355. CALL RSPEAK(ST)
  356. RETURN
  357. C
  358. END