rooms.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941
  1. /* RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1 */
  2. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  3. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  4. /* WRITTEN BY R. M. SUPNIK */
  5. #include "funcs.h"
  6. #include "vars.h"
  7. logical rappl1_(ri)
  8. integer ri;
  9. {
  10. /* System generated locals */
  11. integer i__1, i__2;
  12. logical ret_val;
  13. /* Local variables */
  14. logical f;
  15. integer i;
  16. integer j;
  17. ret_val = TRUE_;
  18. /* !USUALLY IGNORED. */
  19. if (ri == 0) {
  20. return ret_val;
  21. }
  22. /* !RETURN IF NAUGHT. */
  23. /* !SET TO FALSE FOR */
  24. /* !NEW DESC NEEDED. */
  25. switch (ri) {
  26. case 1: goto L1000;
  27. case 2: goto L2000;
  28. case 3: goto L3000;
  29. case 4: goto L4000;
  30. case 5: goto L5000;
  31. case 6: goto L6000;
  32. case 7: goto L7000;
  33. case 8: goto L8000;
  34. case 9: goto L9000;
  35. case 10: goto L10000;
  36. case 11: goto L11000;
  37. case 12: goto L12000;
  38. case 13: goto L13000;
  39. case 14: goto L14000;
  40. case 15: goto L15000;
  41. case 16: goto L16000;
  42. case 17: goto L17000;
  43. case 18: goto L18000;
  44. case 19: goto L19000;
  45. case 20: goto L20000;
  46. case 21: goto L21000;
  47. case 22: goto L22000;
  48. case 23: goto L23000;
  49. case 24: goto L24000;
  50. case 25: goto L25000;
  51. case 26: goto L26000;
  52. case 27: goto L27000;
  53. case 28: goto L28000;
  54. case 29: goto L29000;
  55. case 30: goto L30000;
  56. case 31: goto L31000;
  57. case 32: goto L32000;
  58. case 33: goto L33000;
  59. case 34: goto L34000;
  60. case 35: goto L35000;
  61. case 36: goto L36000;
  62. case 37: goto L37000;
  63. }
  64. bug_(1, ri);
  65. /* R1-- EAST OF HOUSE. DESCRIPTION DEPENDS ON STATE OF WINDOW */
  66. L1000:
  67. if (prsvec_1.prsa != vindex_1.lookw) {
  68. return ret_val;
  69. }
  70. /* !LOOK? */
  71. i = 13;
  72. /* !ASSUME CLOSED. */
  73. if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
  74. i = 12;
  75. }
  76. /* !IF OPEN, AJAR. */
  77. rspsub_(11, i);
  78. /* !DESCRIBE. */
  79. return ret_val;
  80. /* R2-- KITCHEN. SAME VIEW FROM INSIDE. */
  81. L2000:
  82. if (prsvec_1.prsa != vindex_1.lookw) {
  83. return ret_val;
  84. }
  85. /* !LOOK? */
  86. i = 13;
  87. /* !ASSUME CLOSED. */
  88. if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
  89. i = 12;
  90. }
  91. /* !IF OPEN, AJAR. */
  92. rspsub_(14, i);
  93. /* !DESCRIBE. */
  94. return ret_val;
  95. /* R3-- LIVING ROOM. DESCRIPTION DEPENDS ON MAGICF (STATE OF */
  96. /* DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED) */
  97. L3000:
  98. if (prsvec_1.prsa != vindex_1.lookw) {
  99. goto L3500;
  100. }
  101. /* !LOOK? */
  102. i = 15;
  103. /* !ASSUME NO HOLE. */
  104. if (findex_1.magicf) {
  105. i = 16;
  106. }
  107. /* !IF MAGICF, CYCLOPS HOLE. */
  108. rspeak_(i);
  109. /* !DESCRIBE. */
  110. i = findex_1.orrug + 17;
  111. /* !ASSUME INITIAL STATE. */
  112. if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT) != 0) {
  113. i += 2;
  114. }
  115. /* !DOOR OPEN? */
  116. rspeak_(i);
  117. /* !DESCRIBE. */
  118. return ret_val;
  119. /* NOT A LOOK WORD. REEVALUATE TROPHY CASE. */
  120. L3500:
  121. if (prsvec_1.prsa != vindex_1.takew && (prsvec_1.prsa != vindex_1.putw ||
  122. prsvec_1.prsi != oindex_1.tcase)) {
  123. return ret_val;
  124. }
  125. advs_1.ascore[play_1.winner - 1] = state_1.rwscor;
  126. /* !SCORE TROPHY CASE. */
  127. i__1 = objcts_1.olnt;
  128. for (i = 1; i <= i__1; ++i) {
  129. /* !RETAIN RAW SCORE AS WELL. */
  130. j = i;
  131. /* !FIND OUT IF IN CASE. */
  132. L3550:
  133. j = objcts_1.ocan[j - 1];
  134. /* !TRACE OWNERSHIP. */
  135. if (j == 0) {
  136. goto L3600;
  137. }
  138. if (j != oindex_1.tcase) {
  139. goto L3550;
  140. }
  141. /* !DO ALL LEVELS. */
  142. advs_1.ascore[play_1.winner - 1] += objcts_1.otval[i - 1];
  143. L3600:
  144. ;
  145. }
  146. scrupd_(0);
  147. /* !SEE IF ENDGAME TRIG. */
  148. return ret_val;
  149. /* RAPPL1, PAGE 3 */
  150. /* R4-- CELLAR. SHUT DOOR AND BAR IT IF HE JUST WALKED IN. */
  151. L4000:
  152. if (prsvec_1.prsa != vindex_1.lookw) {
  153. goto L4500;
  154. }
  155. /* !LOOK? */
  156. rspeak_(21);
  157. /* !DESCRIBE CELLAR. */
  158. return ret_val;
  159. L4500:
  160. if (prsvec_1.prsa != vindex_1.walkiw) {
  161. return ret_val;
  162. }
  163. /* !WALKIN? */
  164. if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT +
  165. TCHBT) != OPENBT) {
  166. return ret_val;
  167. }
  168. objcts_1.oflag2[oindex_1.door - 1] = (objcts_1.oflag2[oindex_1.door - 1] |
  169. TCHBT) & ~ OPENBT;
  170. rspeak_(22);
  171. /* !SLAM AND BOLT DOOR. */
  172. return ret_val;
  173. /* R5-- MAZE11. DESCRIBE STATE OF GRATING. */
  174. L5000:
  175. if (prsvec_1.prsa != vindex_1.lookw) {
  176. return ret_val;
  177. }
  178. /* !LOOK? */
  179. rspeak_(23);
  180. /* !DESCRIBE. */
  181. i = 24;
  182. /* !ASSUME LOCKED. */
  183. if (findex_1.grunlf) {
  184. i = 26;
  185. }
  186. /* !UNLOCKED? */
  187. if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
  188. i = 25;
  189. }
  190. /* !OPEN? */
  191. rspeak_(i);
  192. /* !DESCRIBE GRATE. */
  193. return ret_val;
  194. /* R6-- CLEARING. DESCRIBE CLEARING, MOVE LEAVES. */
  195. L6000:
  196. if (prsvec_1.prsa != vindex_1.lookw) {
  197. goto L6500;
  198. }
  199. /* !LOOK? */
  200. rspeak_(27);
  201. /* !DESCRIBE. */
  202. if (findex_1.rvclr == 0) {
  203. return ret_val;
  204. }
  205. /* !LEAVES MOVED? */
  206. i = 28;
  207. /* !YES, ASSUME GRATE CLOSED. */
  208. if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
  209. i = 29;
  210. }
  211. /* !OPEN? */
  212. rspeak_(i);
  213. /* !DESCRIBE GRATE. */
  214. return ret_val;
  215. L6500:
  216. if (findex_1.rvclr != 0 || qhere_(oindex_1.leave, rindex_1.clear) && (
  217. prsvec_1.prsa != vindex_1.movew || prsvec_1.prso !=
  218. oindex_1.leave)) {
  219. return ret_val;
  220. }
  221. rspeak_(30);
  222. /* !MOVE LEAVES, REVEAL GRATE. */
  223. findex_1.rvclr = 1;
  224. /* !INDICATE LEAVES MOVED. */
  225. return ret_val;
  226. /* RAPPL1, PAGE 4 */
  227. /* R7-- RESERVOIR SOUTH. DESCRIPTION DEPENDS ON LOW TIDE FLAG. */
  228. L7000:
  229. if (prsvec_1.prsa != vindex_1.lookw) {
  230. return ret_val;
  231. }
  232. /* !LOOK? */
  233. i = 31;
  234. /* !ASSUME FULL. */
  235. if (findex_1.lwtidf) {
  236. i = 32;
  237. }
  238. /* !IF LOW TIDE, EMPTY. */
  239. rspeak_(i);
  240. /* !DESCRIBE. */
  241. rspeak_(33);
  242. /* !DESCRIBE EXITS. */
  243. return ret_val;
  244. /* R8-- RESERVOIR. STATE DEPENDS ON LOW TIDE FLAG. */
  245. L8000:
  246. if (prsvec_1.prsa != vindex_1.lookw) {
  247. return ret_val;
  248. }
  249. /* !LOOK? */
  250. i = 34;
  251. /* !ASSUME FULL. */
  252. if (findex_1.lwtidf) {
  253. i = 35;
  254. }
  255. /* !IF LOW TIDE, EMTPY. */
  256. rspeak_(i);
  257. /* !DESCRIBE. */
  258. return ret_val;
  259. /* R9-- RESERVOIR NORTH. ALSO DEPENDS ON LOW TIDE FLAG. */
  260. L9000:
  261. if (prsvec_1.prsa != vindex_1.lookw) {
  262. return ret_val;
  263. }
  264. /* !LOOK? */
  265. i = 36;
  266. /* !YOU GET THE IDEA. */
  267. if (findex_1.lwtidf) {
  268. i = 37;
  269. }
  270. rspeak_(i);
  271. rspeak_(38);
  272. return ret_val;
  273. /* R10-- GLACIER ROOM. STATE DEPENDS ON MELTED, VANISHED FLAGS. */
  274. L10000:
  275. if (prsvec_1.prsa != vindex_1.lookw) {
  276. return ret_val;
  277. }
  278. /* !LOOK? */
  279. rspeak_(39);
  280. /* !BASIC DESCRIPTION. */
  281. i = 0;
  282. /* !ASSUME NO CHANGES. */
  283. if (findex_1.glacmf) {
  284. i = 40;
  285. }
  286. /* !PARTIAL MELT? */
  287. if (findex_1.glacrf) {
  288. i = 41;
  289. }
  290. /* !COMPLETE MELT? */
  291. rspeak_(i);
  292. /* !DESCRIBE. */
  293. return ret_val;
  294. /* R11-- FOREST ROOM */
  295. L11000:
  296. if (prsvec_1.prsa == vindex_1.walkiw) {
  297. cevent_1.cflag[cindex_1.cevfor - 1] = TRUE_;
  298. }
  299. /* !IF WALK IN, BIRDIE. */
  300. return ret_val;
  301. /* R12-- MIRROR ROOM. STATE DEPENDS ON MIRROR INTACT. */
  302. L12000:
  303. if (prsvec_1.prsa != vindex_1.lookw) {
  304. return ret_val;
  305. }
  306. /* !LOOK? */
  307. rspeak_(42);
  308. /* !DESCRIBE. */
  309. if (findex_1.mirrmf) {
  310. rspeak_(43);
  311. }
  312. /* !IF BROKEN, NASTY REMARK. */
  313. return ret_val;
  314. /* RAPPL1, PAGE 5 */
  315. /* R13-- CAVE2 ROOM. BLOW OUT CANDLES WITH 50% PROBABILITY. */
  316. L13000:
  317. if (prsvec_1.prsa != vindex_1.walkiw) {
  318. return ret_val;
  319. }
  320. /* !WALKIN? */
  321. if (prob_(50, 50) || objcts_1.oadv[oindex_1.candl - 1] !=
  322. play_1.winner || ! ((objcts_1.oflag1[oindex_1.candl - 1] &
  323. ONBT) != 0)) {
  324. return ret_val;
  325. }
  326. objcts_1.oflag1[oindex_1.candl - 1] &= ~ ONBT;
  327. rspeak_(47);
  328. /* !TELL OF WINDS. */
  329. cevent_1.cflag[cindex_1.cevcnd - 1] = FALSE_;
  330. /* !HALT CANDLE COUNTDOWN. */
  331. return ret_val;
  332. /* R14-- BOOM ROOM. BLOW HIM UP IF CARRYING FLAMING OBJECT. */
  333. L14000:
  334. j = objcts_1.odesc2[oindex_1.candl - 1];
  335. /* !ASSUME CANDLE. */
  336. if (objcts_1.oadv[oindex_1.candl - 1] == play_1.winner && (
  337. objcts_1.oflag1[oindex_1.candl - 1] & ONBT) != 0) {
  338. goto L14100;
  339. }
  340. j = objcts_1.odesc2[oindex_1.torch - 1];
  341. /* !ASSUME TORCH. */
  342. if (objcts_1.oadv[oindex_1.torch - 1] == play_1.winner && (
  343. objcts_1.oflag1[oindex_1.torch - 1] & ONBT) != 0) {
  344. goto L14100;
  345. }
  346. j = objcts_1.odesc2[oindex_1.match - 1];
  347. if (objcts_1.oadv[oindex_1.match - 1] == play_1.winner && (
  348. objcts_1.oflag1[oindex_1.match - 1] & ONBT) != 0) {
  349. goto L14100;
  350. }
  351. return ret_val;
  352. /* !SAFE */
  353. L14100:
  354. if (prsvec_1.prsa != vindex_1.trnonw) {
  355. goto L14200;
  356. }
  357. /* !TURN ON? */
  358. rspsub_(294, j);
  359. /* !BOOM */
  360. /* ! */
  361. jigsup_(44);
  362. return ret_val;
  363. L14200:
  364. if (prsvec_1.prsa != vindex_1.walkiw) {
  365. return ret_val;
  366. }
  367. /* !WALKIN? */
  368. rspsub_(295, j);
  369. /* !BOOM */
  370. /* ! */
  371. jigsup_(44);
  372. return ret_val;
  373. /* R15-- NO-OBJS. SEE IF EMPTY HANDED, SCORE LIGHT SHAFT. */
  374. L15000:
  375. findex_1.empthf = TRUE_;
  376. /* !ASSUME TRUE. */
  377. i__1 = objcts_1.olnt;
  378. for (i = 1; i <= i__1; ++i) {
  379. /* !SEE IF CARRYING. */
  380. if (objcts_1.oadv[i - 1] == play_1.winner) {
  381. findex_1.empthf = FALSE_;
  382. }
  383. /* L15100: */
  384. }
  385. if (play_1.here != rindex_1.bshaf || ! lit_(play_1.here)) {
  386. return ret_val;
  387. }
  388. scrupd_(state_1.ltshft);
  389. /* !SCORE LIGHT SHAFT. */
  390. state_1.ltshft = 0;
  391. /* !NEVER AGAIN. */
  392. return ret_val;
  393. /* RAPPL1, PAGE 6 */
  394. /* R16-- MACHINE ROOM. DESCRIBE MACHINE. */
  395. L16000:
  396. if (prsvec_1.prsa != vindex_1.lookw) {
  397. return ret_val;
  398. }
  399. /* !LOOK? */
  400. i = 46;
  401. /* !ASSUME LID CLOSED. */
  402. if ((objcts_1.oflag2[oindex_1.machi - 1] & OPENBT) != 0) {
  403. i = 12;
  404. }
  405. /* !IF OPEN, OPEN. */
  406. rspsub_(45, i);
  407. /* !DESCRIBE. */
  408. return ret_val;
  409. /* R17-- BAT ROOM. UNLESS CARRYING GARLIC, FLY AWAY WITH ME... */
  410. L17000:
  411. if (prsvec_1.prsa != vindex_1.lookw) {
  412. goto L17500;
  413. }
  414. /* !LOOK? */
  415. rspeak_(48);
  416. /* !DESCRIBE ROOM. */
  417. if (objcts_1.oadv[oindex_1.garli - 1] == play_1.winner) {
  418. rspeak_(49);
  419. }
  420. /* !BAT HOLDS NOSE. */
  421. return ret_val;
  422. L17500:
  423. if (prsvec_1.prsa != vindex_1.walkiw || objcts_1.oadv[oindex_1.garli - 1]
  424. == play_1.winner) {
  425. return ret_val;
  426. }
  427. rspeak_(50);
  428. /* !TIME TO FLY, JACK. */
  429. f = moveto_(bats_1.batdrp[rnd_(9)], play_1.winner);
  430. /* !SELECT RANDOM DEST. */
  431. ret_val = FALSE_;
  432. /* !INDICATE NEW DESC NEEDED. */
  433. return ret_val;
  434. /* R18-- DOME ROOM. STATE DEPENDS ON WHETHER ROPE TIED TO RAILING. */
  435. L18000:
  436. if (prsvec_1.prsa != vindex_1.lookw) {
  437. goto L18500;
  438. }
  439. /* !LOOK? */
  440. rspeak_(51);
  441. /* !DESCRIBE. */
  442. if (findex_1.domef) {
  443. rspeak_(52);
  444. }
  445. /* !IF ROPE, DESCRIBE. */
  446. return ret_val;
  447. L18500:
  448. if (prsvec_1.prsa == vindex_1.leapw) {
  449. jigsup_(53);
  450. }
  451. /* !DID HE JUMP??? */
  452. return ret_val;
  453. /* R19-- TORCH ROOM. ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING. */
  454. L19000:
  455. if (prsvec_1.prsa != vindex_1.lookw) {
  456. return ret_val;
  457. }
  458. /* !LOOK? */
  459. rspeak_(54);
  460. /* !DESCRIBE. */
  461. if (findex_1.domef) {
  462. rspeak_(55);
  463. }
  464. /* !IF ROPE, DESCRIBE. */
  465. return ret_val;
  466. /* R20-- CAROUSEL ROOM. SPIN HIM OR KILL HIM. */
  467. L20000:
  468. if (prsvec_1.prsa != vindex_1.lookw) {
  469. goto L20500;
  470. }
  471. /* !LOOK? */
  472. rspeak_(56);
  473. /* !DESCRIBE. */
  474. if (! findex_1.caroff) {
  475. rspeak_(57);
  476. }
  477. /* !IF NOT FLIPPED, SPIN. */
  478. return ret_val;
  479. L20500:
  480. if (prsvec_1.prsa == vindex_1.walkiw && findex_1.carozf) {
  481. jigsup_(58);
  482. }
  483. /* !WALKED IN. */
  484. return ret_val;
  485. /* RAPPL1, PAGE 7 */
  486. /* R21-- LLD ROOM. HANDLE EXORCISE, DESCRIPTIONS. */
  487. L21000:
  488. if (prsvec_1.prsa != vindex_1.lookw) {
  489. goto L21500;
  490. }
  491. /* !LOOK? */
  492. rspeak_(59);
  493. /* !DESCRIBE. */
  494. if (! findex_1.lldf) {
  495. rspeak_(60);
  496. }
  497. /* !IF NOT VANISHED, GHOSTS. */
  498. return ret_val;
  499. L21500:
  500. if (prsvec_1.prsa != vindex_1.exorcw) {
  501. return ret_val;
  502. }
  503. /* !EXORCISE? */
  504. if (objcts_1.oadv[oindex_1.bell - 1] == play_1.winner && objcts_1.oadv[
  505. oindex_1.book - 1] == play_1.winner && objcts_1.oadv[
  506. oindex_1.candl - 1] == play_1.winner && (objcts_1.oflag1[
  507. oindex_1.candl - 1] & ONBT) != 0) {
  508. goto L21600;
  509. }
  510. rspeak_(62);
  511. /* !NOT EQUIPPED. */
  512. return ret_val;
  513. L21600:
  514. if (qhere_(oindex_1.ghost, play_1.here)) {
  515. goto L21700;
  516. }
  517. /* !GHOST HERE? */
  518. jigsup_(61);
  519. /* !NOPE, EXORCISE YOU. */
  520. return ret_val;
  521. L21700:
  522. newsta_(oindex_1.ghost, 63, 0, 0, 0);
  523. /* !VANISH GHOST. */
  524. findex_1.lldf = TRUE_;
  525. /* !OPEN GATE. */
  526. return ret_val;
  527. /* R22-- LLD2-ROOM. IS HIS HEAD ON A POLE? */
  528. L22000:
  529. if (prsvec_1.prsa != vindex_1.lookw) {
  530. return ret_val;
  531. }
  532. /* !LOOK? */
  533. rspeak_(64);
  534. /* !DESCRIBE. */
  535. if (findex_1.onpolf) {
  536. rspeak_(65);
  537. }
  538. /* !ON POLE? */
  539. return ret_val;
  540. /* R23-- DAM ROOM. DESCRIBE RESERVOIR, PANEL. */
  541. L23000:
  542. if (prsvec_1.prsa != vindex_1.lookw) {
  543. return ret_val;
  544. }
  545. /* !LOOK? */
  546. rspeak_(66);
  547. /* !DESCRIBE. */
  548. i = 67;
  549. if (findex_1.lwtidf) {
  550. i = 68;
  551. }
  552. rspeak_(i);
  553. /* !DESCRIBE RESERVOIR. */
  554. rspeak_(69);
  555. /* !DESCRIBE PANEL. */
  556. if (findex_1.gatef) {
  557. rspeak_(70);
  558. }
  559. /* !BUBBLE IS GLOWING. */
  560. return ret_val;
  561. /* R24-- TREE ROOM */
  562. L24000:
  563. if (prsvec_1.prsa != vindex_1.lookw) {
  564. return ret_val;
  565. }
  566. /* !LOOK? */
  567. rspeak_(660);
  568. /* !DESCRIBE. */
  569. i = 661;
  570. /* !SET FLAG FOR BELOW. */
  571. i__1 = objcts_1.olnt;
  572. for (j = 1; j <= i__1; ++j) {
  573. /* !DESCRIBE OBJ IN FORE3. */
  574. if (! qhere_(j, rindex_1.fore3) || j == oindex_1.ftree) {
  575. goto L24200;
  576. }
  577. rspeak_(i);
  578. /* !SET STAGE, */
  579. i = 0;
  580. rspsub_(502, objcts_1.odesc2[j - 1]);
  581. /* !DESCRIBE. */
  582. L24200:
  583. ;
  584. }
  585. return ret_val;
  586. /* RAPPL1, PAGE 8 */
  587. /* R25-- CYCLOPS-ROOM. DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
  588. */
  589. L25000:
  590. if (prsvec_1.prsa != vindex_1.lookw) {
  591. return ret_val;
  592. }
  593. /* !LOOK? */
  594. rspeak_(606);
  595. /* !DESCRIBE. */
  596. i = 607;
  597. /* !ASSUME BASIC STATE. */
  598. if (findex_1.rvcyc > 0) {
  599. i = 608;
  600. }
  601. /* !>0? HUNGRY. */
  602. if (findex_1.rvcyc < 0) {
  603. i = 609;
  604. }
  605. /* !<0? THIRSTY. */
  606. if (findex_1.cyclof) {
  607. i = 610;
  608. }
  609. /* !ASLEEP? */
  610. if (findex_1.magicf) {
  611. i = 611;
  612. }
  613. /* !GONE? */
  614. rspeak_(i);
  615. /* !DESCRIBE. */
  616. if (! findex_1.cyclof && findex_1.rvcyc != 0) {
  617. i__1 = abs(findex_1.rvcyc) + 193;
  618. rspeak_(i__1);
  619. }
  620. return ret_val;
  621. /* R26-- BANK BOX ROOM. */
  622. L26000:
  623. if (prsvec_1.prsa != vindex_1.walkiw) {
  624. return ret_val;
  625. }
  626. /* !SURPRISE HIM. */
  627. for (i = 1; i <= 8; i += 2) {
  628. /* !SCOLRM DEPENDS ON */
  629. if (screen_1.fromdr == screen_1.scoldr[i - 1]) {
  630. screen_1.scolrm = screen_1.scoldr[i];
  631. }
  632. /* L26100: */
  633. }
  634. /* !ENTRY DIRECTION. */
  635. return ret_val;
  636. /* R27-- TREASURE ROOM. */
  637. L27000:
  638. if (prsvec_1.prsa != vindex_1.walkiw || ! hack_1.thfact) {
  639. return ret_val;
  640. }
  641. if (objcts_1.oroom[oindex_1.thief - 1] != play_1.here) {
  642. newsta_(oindex_1.thief, 82, play_1.here, 0, 0);
  643. }
  644. hack_1.thfpos = play_1.here;
  645. /* !RESET SEARCH PATTERN. */
  646. objcts_1.oflag2[oindex_1.thief - 1] |= FITEBT;
  647. if (objcts_1.oroom[oindex_1.chali - 1] == play_1.here) {
  648. objcts_1.oflag1[oindex_1.chali - 1] &= ~ TAKEBT;
  649. }
  650. /* VANISH EVERYTHING IN ROOM */
  651. j = 0;
  652. /* !ASSUME NOTHING TO VANISH. */
  653. i__1 = objcts_1.olnt;
  654. for (i = 1; i <= i__1; ++i) {
  655. if (i == oindex_1.chali || i == oindex_1.thief || ! qhere_(i,
  656. play_1.here)) {
  657. goto L27200;
  658. }
  659. j = 83;
  660. /* !FLAG BYEBYE. */
  661. objcts_1.oflag1[i - 1] &= ~ VISIBT;
  662. L27200:
  663. ;
  664. }
  665. rspeak_(j);
  666. /* !DESCRIBE. */
  667. return ret_val;
  668. /* R28-- CLIFF FUNCTION. SEE IF CARRYING INFLATED BOAT. */
  669. L28000:
  670. findex_1.deflaf = objcts_1.oadv[oindex_1.rboat - 1] != play_1.winner;
  671. /* !TRUE IF NOT CARRYING. */
  672. return ret_val;
  673. /* RAPPL1, PAGE 9 */
  674. /* R29-- RIVR4 ROOM. PLAY WITH BUOY. */
  675. L29000:
  676. if (! findex_1.buoyf || objcts_1.oadv[oindex_1.buoy - 1] != play_1.winner)
  677. {
  678. return ret_val;
  679. }
  680. rspeak_(84);
  681. /* !GIVE HINT, */
  682. findex_1.buoyf = FALSE_;
  683. /* !THEN DISABLE. */
  684. return ret_val;
  685. /* R30-- OVERFALLS. DOOM. */
  686. L30000:
  687. if (prsvec_1.prsa != vindex_1.lookw) {
  688. jigsup_(85);
  689. }
  690. /* !OVER YOU GO. */
  691. return ret_val;
  692. /* R31-- BEACH ROOM. DIG A HOLE. */
  693. L31000:
  694. if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
  695. return ret_val;
  696. }
  697. ++findex_1.rvsnd;
  698. /* !INCREMENT DIG STATE. */
  699. switch (findex_1.rvsnd) {
  700. case 1: goto L31100;
  701. case 2: goto L31100;
  702. case 3: goto L31100;
  703. case 4: goto L31400;
  704. case 5: goto L31500;
  705. }
  706. /* !PROCESS STATE. */
  707. bug_(2, findex_1.rvsnd);
  708. L31100:
  709. i__1 = findex_1.rvsnd + 85;
  710. rspeak_(i__1);
  711. /* !1-3... DISCOURAGE HIM. */
  712. return ret_val;
  713. L31400:
  714. i = 89;
  715. /* !ASSUME DISCOVERY. */
  716. if ((objcts_1.oflag1[oindex_1.statu - 1] & VISIBT) != 0) {
  717. i = 88;
  718. }
  719. rspeak_(i);
  720. objcts_1.oflag1[oindex_1.statu - 1] |= VISIBT;
  721. return ret_val;
  722. L31500:
  723. findex_1.rvsnd = 0;
  724. /* !5... SAND COLLAPSES */
  725. jigsup_(90);
  726. /* !AND SO DOES HE. */
  727. return ret_val;
  728. /* R32-- TCAVE ROOM. DIG A HOLE IN GUANO. */
  729. L32000:
  730. if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
  731. return ret_val;
  732. }
  733. i = 91;
  734. /* !ASSUME NO GUANO. */
  735. if (! qhere_(oindex_1.guano, play_1.here)) {
  736. goto L32100;
  737. }
  738. /* !IS IT HERE? */
  739. /* Computing MIN */
  740. i__1 = 4, i__2 = findex_1.rvgua + 1;
  741. findex_1.rvgua = min(i__1,i__2);
  742. /* !YES, SET NEW STATE. */
  743. i = findex_1.rvgua + 91;
  744. /* !GET NASTY REMARK. */
  745. L32100:
  746. rspeak_(i);
  747. /* !DESCRIBE. */
  748. return ret_val;
  749. /* R33-- FALLS ROOM */
  750. L33000:
  751. if (prsvec_1.prsa != vindex_1.lookw) {
  752. return ret_val;
  753. }
  754. /* !LOOK? */
  755. rspeak_(96);
  756. /* !DESCRIBE. */
  757. i = 97;
  758. /* !ASSUME NO RAINBOW. */
  759. if (findex_1.rainbf) {
  760. i = 98;
  761. }
  762. /* !GOT ONE? */
  763. rspeak_(i);
  764. /* !DESCRIBE. */
  765. return ret_val;
  766. /* RAPPL1, PAGE 10 */
  767. /* R34-- LEDGE FUNCTION. LEDGE CAN COLLAPSE. */
  768. L34000:
  769. if (prsvec_1.prsa != vindex_1.lookw) {
  770. return ret_val;
  771. }
  772. /* !LOOK? */
  773. rspeak_(100);
  774. /* !DESCRIBE. */
  775. i = 102;
  776. /* !ASSUME SAFE ROOM OK. */
  777. if ((rooms_1.rflag[rindex_1.msafe - 1] & RMUNG) != 0) {
  778. i = 101;
  779. }
  780. rspeak_(i);
  781. /* !DESCRIBE. */
  782. return ret_val;
  783. /* R35-- SAFE ROOM. STATE DEPENDS ON WHETHER SAFE BLOWN. */
  784. L35000:
  785. if (prsvec_1.prsa != vindex_1.lookw) {
  786. return ret_val;
  787. }
  788. /* !LOOK? */
  789. rspeak_(104);
  790. /* !DESCRIBE. */
  791. i = 105;
  792. /* !ASSUME OK. */
  793. if (findex_1.safef) {
  794. i = 106;
  795. }
  796. /* !BLOWN? */
  797. rspeak_(i);
  798. /* !DESCRIBE. */
  799. return ret_val;
  800. /* R36-- MAGNET ROOM. DESCRIBE, CHECK FOR SPINDIZZY DOOM. */
  801. L36000:
  802. if (prsvec_1.prsa != vindex_1.lookw) {
  803. goto L36500;
  804. }
  805. /* !LOOK? */
  806. rspeak_(107);
  807. /* !DESCRIBE. */
  808. return ret_val;
  809. L36500:
  810. if (prsvec_1.prsa != vindex_1.walkiw || ! findex_1.caroff) {
  811. return ret_val;
  812. }
  813. /* !WALKIN ON FLIPPED? */
  814. if (findex_1.carozf) {
  815. goto L36600;
  816. }
  817. /* !ZOOM? */
  818. rspeak_(108);
  819. /* !NO, SPIN HIS COMPASS. */
  820. return ret_val;
  821. L36600:
  822. i = 58;
  823. /* !SPIN HIS INSIDES. */
  824. if (play_1.winner != aindex_1.player) {
  825. i = 99;
  826. }
  827. /* !SPIN ROBOT. */
  828. jigsup_(i);
  829. /* !DEAD. */
  830. return ret_val;
  831. /* R37-- CAGE ROOM. IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM. */
  832. L37000:
  833. if (findex_1.cagesf) {
  834. f = moveto_(rindex_1.cager, play_1.winner);
  835. }
  836. /* !IF SOLVED, MOVE. */
  837. return ret_val;
  838. } /* rappl1_ */