nobjs.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944
  1. /* NOBJS- NEW OBJECTS PROCESSOR */
  2. /* OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, */
  3. /* MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES */
  4. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  5. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  6. /* WRITTEN BY R. M. SUPNIK */
  7. #include "funcs.h"
  8. #include "vars.h"
  9. static logical mirpan_ P((integer, logical));
  10. logical nobjs_(ri, arg)
  11. integer ri;
  12. integer arg;
  13. {
  14. /* System generated locals */
  15. integer i__1, i__2;
  16. logical ret_val;
  17. /* Local variables */
  18. logical f;
  19. integer target;
  20. integer i;
  21. integer j;
  22. integer av, wl;
  23. integer nxt, odi2 = 0, odo2 = 0;
  24. if (prsvec_1.prso != 0) {
  25. odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
  26. }
  27. if (prsvec_1.prsi != 0) {
  28. odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
  29. }
  30. av = advs_1.avehic[play_1.winner - 1];
  31. ret_val = TRUE_;
  32. switch (ri - 31) {
  33. case 1: goto L1000;
  34. case 2: goto L2000;
  35. case 3: goto L3000;
  36. case 4: goto L4000;
  37. case 5: goto L5000;
  38. case 6: goto L6000;
  39. case 7: goto L7000;
  40. case 8: goto L8000;
  41. case 9: goto L9000;
  42. case 10: goto L10000;
  43. case 11: goto L11000;
  44. case 12: goto L12000;
  45. case 13: goto L13000;
  46. case 14: goto L14000;
  47. case 15: goto L15000;
  48. case 16: goto L16000;
  49. case 17: goto L17000;
  50. case 18: goto L18000;
  51. case 19: goto L19000;
  52. case 20: goto L20000;
  53. case 21: goto L21000;
  54. }
  55. bug_(6, ri);
  56. /* RETURN HERE TO DECLARE FALSE RESULT */
  57. L10:
  58. ret_val = FALSE_;
  59. return ret_val;
  60. /* O32-- BILLS */
  61. L1000:
  62. if (prsvec_1.prsa != vindex_1.eatw) {
  63. goto L1100;
  64. }
  65. /* !EAT? */
  66. rspeak_(639);
  67. /* !JOKE. */
  68. return ret_val;
  69. L1100:
  70. if (prsvec_1.prsa == vindex_1.burnw) {
  71. rspeak_(640);
  72. }
  73. /* !BURN? JOKE. */
  74. goto L10;
  75. /* !LET IT BE HANDLED. */
  76. /* NOBJS, PAGE 3 */
  77. /* O33-- SCREEN OF LIGHT */
  78. L2000:
  79. target = oindex_1.scol;
  80. /* !TARGET IS SCOL. */
  81. L2100:
  82. if (prsvec_1.prso != target) {
  83. goto L2400;
  84. }
  85. /* !PRSO EQ TARGET? */
  86. if (prsvec_1.prsa != vindex_1.pushw && prsvec_1.prsa != vindex_1.movew &&
  87. prsvec_1.prsa != vindex_1.takew && prsvec_1.prsa != vindex_1.rubw)
  88. {
  89. goto L2200;
  90. }
  91. rspeak_(673);
  92. /* !HAND PASSES THRU. */
  93. return ret_val;
  94. L2200:
  95. if (prsvec_1.prsa != vindex_1.killw && prsvec_1.prsa != vindex_1.attacw &&
  96. prsvec_1.prsa != vindex_1.mungw) {
  97. goto L2400;
  98. }
  99. rspsub_(674, odi2);
  100. /* !PASSES THRU. */
  101. return ret_val;
  102. L2400:
  103. if (prsvec_1.prsa != vindex_1.throww || prsvec_1.prsi != target) {
  104. goto L10;
  105. }
  106. if (play_1.here == rindex_1.bkbox) {
  107. goto L2600;
  108. }
  109. /* !THRU SCOL? */
  110. newsta_(prsvec_1.prso, 0, rindex_1.bkbox, 0, 0);
  111. /* !NO, THRU WALL. */
  112. rspsub_(675, odo2);
  113. /* !ENDS UP IN BOX ROOM. */
  114. cevent_1.ctick[cindex_1.cevscl - 1] = 0;
  115. /* !CANCEL ALARM. */
  116. screen_1.scolrm = 0;
  117. /* !RESET SCOL ROOM. */
  118. return ret_val;
  119. L2600:
  120. if (screen_1.scolrm == 0) {
  121. goto L2900;
  122. }
  123. /* !TRIED TO GO THRU? */
  124. newsta_(prsvec_1.prso, 0, screen_1.scolrm, 0, 0);
  125. /* !SUCCESS. */
  126. rspsub_(676, odo2);
  127. /* !ENDS UP SOMEWHERE. */
  128. cevent_1.ctick[cindex_1.cevscl - 1] = 0;
  129. /* !CANCEL ALARM. */
  130. screen_1.scolrm = 0;
  131. /* !RESET SCOL ROOM. */
  132. return ret_val;
  133. L2900:
  134. rspeak_(213);
  135. /* !CANT DO IT. */
  136. return ret_val;
  137. /* NOBJS, PAGE 4 */
  138. /* O34-- GNOME OF ZURICH */
  139. L3000:
  140. if (prsvec_1.prsa != vindex_1.givew && prsvec_1.prsa != vindex_1.throww) {
  141. goto L3200;
  142. }
  143. if (objcts_1.otval[prsvec_1.prso - 1] != 0) {
  144. goto L3100;
  145. }
  146. /* !THROW A TREASURE? */
  147. newsta_(prsvec_1.prso, 641, 0, 0, 0);
  148. /* !NO, GO POP. */
  149. return ret_val;
  150. L3100:
  151. newsta_(prsvec_1.prso, 0, 0, 0, 0);
  152. /* !YES, BYE BYE TREASURE. */
  153. rspsub_(642, odo2);
  154. newsta_(oindex_1.zgnom, 0, 0, 0, 0);
  155. /* !BYE BYE GNOME. */
  156. cevent_1.ctick[cindex_1.cevzgo - 1] = 0;
  157. /* !CANCEL EXIT. */
  158. f = moveto_(rindex_1.bkent, play_1.winner);
  159. /* !NOW IN BANK ENTRANCE. */
  160. return ret_val;
  161. L3200:
  162. if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw &&
  163. prsvec_1.prsa != vindex_1.mungw) {
  164. goto L3300;
  165. }
  166. newsta_(oindex_1.zgnom, 643, 0, 0, 0);
  167. /* !VANISH GNOME. */
  168. cevent_1.ctick[cindex_1.cevzgo - 1] = 0;
  169. /* !CANCEL EXIT. */
  170. return ret_val;
  171. L3300:
  172. rspeak_(644);
  173. /* !GNOME IS IMPATIENT. */
  174. return ret_val;
  175. /* O35-- EGG */
  176. L4000:
  177. if (prsvec_1.prsa != vindex_1.openw || prsvec_1.prso != oindex_1.egg) {
  178. goto L4500;
  179. }
  180. if (! ((objcts_1.oflag2[oindex_1.egg - 1] & OPENBT) != 0)) {
  181. goto L4100;
  182. }
  183. /* !OPEN ALREADY? */
  184. rspeak_(649);
  185. /* !YES. */
  186. return ret_val;
  187. L4100:
  188. if (prsvec_1.prsi != 0) {
  189. goto L4200;
  190. }
  191. /* !WITH SOMETHING? */
  192. rspeak_(650);
  193. /* !NO, CANT. */
  194. return ret_val;
  195. L4200:
  196. if (prsvec_1.prsi != oindex_1.hands) {
  197. goto L4300;
  198. }
  199. /* !WITH HANDS? */
  200. rspeak_(651);
  201. /* !NOT RECOMMENDED. */
  202. return ret_val;
  203. L4300:
  204. i = 652;
  205. /* !MUNG MESSAGE. */
  206. if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0 || (
  207. objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) != 0) {
  208. goto L4600;
  209. }
  210. i = 653;
  211. /* !NOVELTY 1. */
  212. if ((objcts_1.oflag2[prsvec_1.prso - 1] & FITEBT) != 0) {
  213. i = 654;
  214. }
  215. objcts_1.oflag2[prsvec_1.prso - 1] |= FITEBT;
  216. rspsub_(i, odi2);
  217. return ret_val;
  218. L4500:
  219. if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.mungw) {
  220. goto L4800;
  221. }
  222. i = 655;
  223. /* !YOU BLEW IT. */
  224. L4600:
  225. newsta_(oindex_1.begg, i, objcts_1.oroom[oindex_1.egg - 1],
  226. objcts_1.ocan[oindex_1.egg - 1], objcts_1.oadv[oindex_1.egg - 1])
  227. ;
  228. newsta_(oindex_1.egg, 0, 0, 0, 0);
  229. /* !VANISH EGG. */
  230. objcts_1.otval[oindex_1.begg - 1] = 2;
  231. /* !BAD EGG HAS VALUE. */
  232. if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) {
  233. goto L4700;
  234. }
  235. /* !WAS CANARY INSIDE? */
  236. rspeak_(objcts_1.odesco[oindex_1.bcana - 1]);
  237. /* !YES, DESCRIBE RESULT. */
  238. objcts_1.otval[oindex_1.bcana - 1] = 1;
  239. return ret_val;
  240. L4700:
  241. newsta_(oindex_1.bcana, 0, 0, 0, 0);
  242. /* !NO, VANISH IT. */
  243. return ret_val;
  244. L4800:
  245. if (prsvec_1.prsa != vindex_1.dropw || play_1.here != rindex_1.mtree) {
  246. goto L10;
  247. }
  248. newsta_(oindex_1.begg, 658, rindex_1.fore3, 0, 0);
  249. /* !DROPPED EGG. */
  250. newsta_(oindex_1.egg, 0, 0, 0, 0);
  251. objcts_1.otval[oindex_1.begg - 1] = 2;
  252. if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) {
  253. goto L4700;
  254. }
  255. objcts_1.otval[oindex_1.bcana - 1] = 1;
  256. /* !BAD CANARY. */
  257. return ret_val;
  258. /* NOBJS, PAGE 5 */
  259. /* O36-- CANARIES, GOOD AND BAD */
  260. L5000:
  261. if (prsvec_1.prsa != vindex_1.windw) {
  262. goto L10;
  263. }
  264. /* !WIND EM UP? */
  265. if (prsvec_1.prso == oindex_1.canar) {
  266. goto L5100;
  267. }
  268. /* !RIGHT ONE? */
  269. rspeak_(645);
  270. /* !NO, BAD NEWS. */
  271. return ret_val;
  272. L5100:
  273. if (! findex_1.singsf && (play_1.here == rindex_1.mtree || play_1.here >=
  274. rindex_1.fore1 && play_1.here < rindex_1.clear)) {
  275. goto L5200;
  276. }
  277. rspeak_(646);
  278. /* !NO, MEDIOCRE NEWS. */
  279. return ret_val;
  280. L5200:
  281. findex_1.singsf = TRUE_;
  282. /* !SANG SONG. */
  283. i = play_1.here;
  284. if (i == rindex_1.mtree) {
  285. i = rindex_1.fore3;
  286. }
  287. /* !PLACE BAUBLE. */
  288. newsta_(oindex_1.baubl, 647, i, 0, 0);
  289. return ret_val;
  290. /* O37-- WHITE CLIFFS */
  291. L6000:
  292. if (prsvec_1.prsa != vindex_1.clmbw && prsvec_1.prsa != vindex_1.clmbuw &&
  293. prsvec_1.prsa != vindex_1.clmbdw) {
  294. goto L10;
  295. }
  296. rspeak_(648);
  297. /* !OH YEAH? */
  298. return ret_val;
  299. /* O38-- WALL */
  300. L7000:
  301. if ((i__1 = play_1.here - findex_1.mloc, abs(i__1)) != 1 || mrhere_(
  302. play_1.here) != 0 || prsvec_1.prsa != vindex_1.pushw) {
  303. goto L7100;
  304. }
  305. rspeak_(860);
  306. /* !PUSHED MIRROR WALL. */
  307. return ret_val;
  308. L7100:
  309. if ((rooms_1.rflag[play_1.here - 1] & RNWALL) == 0) {
  310. goto L10;
  311. }
  312. rspeak_(662);
  313. /* !NO WALL. */
  314. return ret_val;
  315. /* NOBJS, PAGE 6 */
  316. /* O39-- SONG BIRD GLOBAL */
  317. L8000:
  318. if (prsvec_1.prsa != vindex_1.findw) {
  319. goto L8100;
  320. }
  321. /* !FIND? */
  322. rspeak_(666);
  323. return ret_val;
  324. L8100:
  325. if (prsvec_1.prsa != vindex_1.examiw) {
  326. goto L10;
  327. }
  328. /* !EXAMINE? */
  329. rspeak_(667);
  330. return ret_val;
  331. /* O40-- PUZZLE/SCOL WALLS */
  332. L9000:
  333. if (play_1.here != rindex_1.cpuzz) {
  334. goto L9500;
  335. }
  336. /* !PUZZLE WALLS? */
  337. if (prsvec_1.prsa != vindex_1.pushw) {
  338. goto L10;
  339. }
  340. /* !PUSH? */
  341. for (i = 1; i <= 8; i += 2) {
  342. /* !LOCATE WALL. */
  343. if (prsvec_1.prso == puzzle_1.cpwl[i - 1]) {
  344. goto L9200;
  345. }
  346. /* L9100: */
  347. }
  348. bug_(80, prsvec_1.prso);
  349. /* !WHAT? */
  350. L9200:
  351. j = puzzle_1.cpwl[i];
  352. /* !GET DIRECTIONAL OFFSET. */
  353. nxt = findex_1.cphere + j;
  354. /* !GET NEXT STATE. */
  355. wl = puzzle_1.cpvec[nxt - 1];
  356. /* !GET C(NEXT STATE). */
  357. switch (wl + 4) {
  358. case 1: goto L9300;
  359. case 2: goto L9300;
  360. case 3: goto L9300;
  361. case 4: goto L9250;
  362. case 5: goto L9350;
  363. }
  364. /* !PROCESS. */
  365. L9250:
  366. rspeak_(876);
  367. /* !CLEAR CORRIDOR. */
  368. return ret_val;
  369. L9300:
  370. if (puzzle_1.cpvec[nxt + j - 1] == 0) {
  371. goto L9400;
  372. }
  373. /* !MOVABLE, ROOM TO MOVE? */
  374. L9350:
  375. rspeak_(877);
  376. /* !IMMOVABLE, NO ROOM. */
  377. return ret_val;
  378. L9400:
  379. i = 878;
  380. /* !ASSUME FIRST PUSH. */
  381. if (findex_1.cpushf) {
  382. i = 879;
  383. }
  384. /* !NOT? */
  385. findex_1.cpushf = TRUE_;
  386. puzzle_1.cpvec[nxt + j - 1] = wl;
  387. /* !MOVE WALL. */
  388. puzzle_1.cpvec[nxt - 1] = 0;
  389. /* !VACATE NEXT STATE. */
  390. cpgoto_(nxt);
  391. /* !ONWARD. */
  392. cpinfo_(i, nxt);
  393. /* !DESCRIBE. */
  394. princr_(1, play_1.here);
  395. /* !PRINT ROOMS CONTENTS. */
  396. rooms_1.rflag[play_1.here - 1] |= RSEEN;
  397. return ret_val;
  398. L9500:
  399. if (play_1.here != screen_1.scolac) {
  400. goto L9700;
  401. }
  402. /* !IN SCOL ACTIVE ROOM? */
  403. for (i = 1; i <= 12; i += 3) {
  404. target = screen_1.scolwl[i];
  405. /* !ASSUME TARGET. */
  406. if (screen_1.scolwl[i - 1] == play_1.here) {
  407. goto L2100;
  408. }
  409. /* !TREAT IF FOUND. */
  410. /* L9600: */
  411. }
  412. L9700:
  413. if (play_1.here != rindex_1.bkbox) {
  414. goto L10;
  415. }
  416. /* !IN BOX ROOM? */
  417. target = oindex_1.wnort;
  418. goto L2100;
  419. /* NOBJS, PAGE 7 */
  420. /* O41-- SHORT POLE */
  421. L10000:
  422. if (prsvec_1.prsa != vindex_1.raisew) {
  423. goto L10100;
  424. }
  425. /* !LIFT? */
  426. i = 749;
  427. /* !ASSUME UP. */
  428. if (findex_1.poleuf == 2) {
  429. i = 750;
  430. }
  431. /* !ALREADY UP? */
  432. rspeak_(i);
  433. findex_1.poleuf = 2;
  434. /* !POLE IS RAISED. */
  435. return ret_val;
  436. L10100:
  437. if (prsvec_1.prsa != vindex_1.lowerw && prsvec_1.prsa != vindex_1.pushw) {
  438. goto L10;
  439. }
  440. if (findex_1.poleuf != 0) {
  441. goto L10200;
  442. }
  443. /* !ALREADY LOWERED? */
  444. rspeak_(751);
  445. /* !CANT DO IT. */
  446. return ret_val;
  447. L10200:
  448. if (findex_1.mdir % 180 != 0) {
  449. goto L10300;
  450. }
  451. /* !MIRROR N-S? */
  452. findex_1.poleuf = 0;
  453. /* !YES, LOWER INTO */
  454. rspeak_(752);
  455. /* !CHANNEL. */
  456. return ret_val;
  457. L10300:
  458. if (findex_1.mdir != 270 || findex_1.mloc != rindex_1.mrb) {
  459. goto L10400;
  460. }
  461. findex_1.poleuf = 0;
  462. /* !LOWER INTO HOLE. */
  463. rspeak_(753);
  464. return ret_val;
  465. L10400:
  466. i__1 = findex_1.poleuf + 753;
  467. rspeak_(i__1);
  468. /* !POLEUF = 1 OR 2. */
  469. findex_1.poleuf = 1;
  470. /* !NOW ON FLOOR. */
  471. return ret_val;
  472. /* O42-- MIRROR SWITCH */
  473. L11000:
  474. if (prsvec_1.prsa != vindex_1.pushw) {
  475. goto L10;
  476. }
  477. /* !PUSH? */
  478. if (findex_1.mrpshf) {
  479. goto L11300;
  480. }
  481. /* !ALREADY PUSHED? */
  482. rspeak_(756);
  483. /* !BUTTON GOES IN. */
  484. i__1 = objcts_1.olnt;
  485. for (i = 1; i <= i__1; ++i) {
  486. /* !BLOCKED? */
  487. if (qhere_(i, rindex_1.mreye) && i != oindex_1.rbeam) {
  488. goto L11200;
  489. }
  490. /* L11100: */
  491. }
  492. rspeak_(757);
  493. /* !NOTHING IN BEAM. */
  494. return ret_val;
  495. L11200:
  496. cevent_1.cflag[cindex_1.cevmrs - 1] = TRUE_;
  497. /* !MIRROR OPENS. */
  498. cevent_1.ctick[cindex_1.cevmrs - 1] = 7;
  499. findex_1.mrpshf = TRUE_;
  500. findex_1.mropnf = TRUE_;
  501. return ret_val;
  502. L11300:
  503. rspeak_(758);
  504. /* !MIRROR ALREADYOPEN. */
  505. return ret_val;
  506. /* NOBJS, PAGE 8 */
  507. /* O43-- BEAM FUNCTION */
  508. L12000:
  509. if (prsvec_1.prsa != vindex_1.takew || prsvec_1.prso != oindex_1.rbeam) {
  510. goto L12100;
  511. }
  512. rspeak_(759);
  513. /* !TAKE BEAM, JOKE. */
  514. return ret_val;
  515. L12100:
  516. i = prsvec_1.prso;
  517. /* !ASSUME BLK WITH DIROBJ. */
  518. if (prsvec_1.prsa == vindex_1.putw && prsvec_1.prsi == oindex_1.rbeam) {
  519. goto L12200;
  520. }
  521. if (prsvec_1.prsa != vindex_1.mungw || prsvec_1.prso != oindex_1.rbeam ||
  522. prsvec_1.prsi == 0) {
  523. goto L10;
  524. }
  525. i = prsvec_1.prsi;
  526. L12200:
  527. if (objcts_1.oadv[i - 1] != play_1.winner) {
  528. goto L12300;
  529. }
  530. /* !CARRYING? */
  531. newsta_(i, 0, play_1.here, 0, 0);
  532. /* !DROP OBJ. */
  533. rspsub_(760, objcts_1.odesc2[i - 1]);
  534. return ret_val;
  535. L12300:
  536. j = 761;
  537. /* !ASSUME NOT IN ROOM. */
  538. if (qhere_(j, play_1.here)) {
  539. i = 762;
  540. }
  541. /* !IN ROOM? */
  542. rspsub_(j, objcts_1.odesc2[i - 1]);
  543. /* !DESCRIBE. */
  544. return ret_val;
  545. /* O44-- BRONZE DOOR */
  546. L13000:
  547. if (play_1.here == rindex_1.ncell || findex_1.lcell == 4 && (play_1.here
  548. == rindex_1.cell || play_1.here == rindex_1.scorr)) {
  549. goto L13100;
  550. }
  551. rspeak_(763);
  552. /* !DOOR NOT THERE. */
  553. return ret_val;
  554. L13100:
  555. if (! opncls_(oindex_1.odoor, 764, 765)) {
  556. goto L10;
  557. }
  558. /* !OPEN/CLOSE? */
  559. if (play_1.here == rindex_1.ncell && (objcts_1.oflag2[oindex_1.odoor - 1]
  560. & OPENBT) != 0) {
  561. rspeak_(766);
  562. }
  563. return ret_val;
  564. /* O45-- QUIZ DOOR */
  565. L14000:
  566. if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) {
  567. goto L14100;
  568. }
  569. rspeak_(767);
  570. /* !DOOR WONT MOVE. */
  571. return ret_val;
  572. L14100:
  573. if (prsvec_1.prsa != vindex_1.knockw) {
  574. goto L10;
  575. }
  576. /* !KNOCK? */
  577. if (findex_1.inqstf) {
  578. goto L14200;
  579. }
  580. /* !TRIED IT ALREADY? */
  581. findex_1.inqstf = TRUE_;
  582. /* !START INQUISITION. */
  583. cevent_1.cflag[cindex_1.cevinq - 1] = TRUE_;
  584. cevent_1.ctick[cindex_1.cevinq - 1] = 2;
  585. findex_1.quesno = rnd_(8);
  586. /* !SELECT QUESTION. */
  587. findex_1.nqatt = 0;
  588. findex_1.corrct = 0;
  589. rspeak_(768);
  590. /* !ANNOUNCE RULES. */
  591. rspeak_(769);
  592. i__1 = findex_1.quesno + 770;
  593. rspeak_(i__1);
  594. /* !ASK QUESTION. */
  595. return ret_val;
  596. L14200:
  597. rspeak_(798);
  598. /* !NO REPLY. */
  599. return ret_val;
  600. /* O46-- LOCKED DOOR */
  601. L15000:
  602. if (prsvec_1.prsa != vindex_1.openw) {
  603. goto L10;
  604. }
  605. /* !OPEN? */
  606. rspeak_(778);
  607. /* !CANT. */
  608. return ret_val;
  609. /* O47-- CELL DOOR */
  610. L16000:
  611. ret_val = opncls_(oindex_1.cdoor, 779, 780);
  612. /* !OPEN/CLOSE? */
  613. return ret_val;
  614. /* NOBJS, PAGE 9 */
  615. /* O48-- DIALBUTTON */
  616. L17000:
  617. if (prsvec_1.prsa != vindex_1.pushw) {
  618. goto L10;
  619. }
  620. /* !PUSH? */
  621. rspeak_(809);
  622. /* !CLICK. */
  623. if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) {
  624. rspeak_(810);
  625. }
  626. /* !CLOSE CELL DOOR. */
  627. i__1 = objcts_1.olnt;
  628. for (i = 1; i <= i__1; ++i) {
  629. /* !RELOCATE OLD TO HYPER. */
  630. if (objcts_1.oroom[i - 1] == rindex_1.cell && (objcts_1.oflag1[i - 1]
  631. & DOORBT) == 0) {
  632. i__2 = findex_1.lcell * hyper_1.hfactr;
  633. newsta_(i, 0, i__2, 0, 0);
  634. }
  635. if (objcts_1.oroom[i - 1] == findex_1.pnumb * hyper_1.hfactr) {
  636. newsta_(i, 0, rindex_1.cell, 0, 0);
  637. }
  638. /* L17100: */
  639. }
  640. objcts_1.oflag2[oindex_1.odoor - 1] &= ~ OPENBT;
  641. objcts_1.oflag2[oindex_1.cdoor - 1] &= ~ OPENBT;
  642. objcts_1.oflag1[oindex_1.odoor - 1] &= ~ VISIBT;
  643. if (findex_1.pnumb == 4) {
  644. objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT;
  645. }
  646. if (advs_1.aroom[aindex_1.player - 1] != rindex_1.cell) {
  647. goto L17400;
  648. }
  649. /* !PLAYER IN CELL? */
  650. if (findex_1.lcell != 4) {
  651. goto L17200;
  652. }
  653. /* !IN RIGHT CELL? */
  654. objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT;
  655. f = moveto_(rindex_1.ncell, aindex_1.player);
  656. /* !YES, MOVETO NCELL. */
  657. goto L17400;
  658. L17200:
  659. f = moveto_(rindex_1.pcell, aindex_1.player);
  660. /* !NO, MOVETO PCELL. */
  661. L17400:
  662. findex_1.lcell = findex_1.pnumb;
  663. return ret_val;
  664. /* NOBJS, PAGE 10 */
  665. /* O49-- DIAL INDICATOR */
  666. L18000:
  667. if (prsvec_1.prsa != vindex_1.spinw) {
  668. goto L18100;
  669. }
  670. /* !SPIN? */
  671. findex_1.pnumb = rnd_(8) + 1;
  672. /* !WHEE */
  673. /* ! */
  674. i__1 = findex_1.pnumb + 712;
  675. rspsub_(797, i__1);
  676. return ret_val;
  677. L18100:
  678. if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.putw &&
  679. prsvec_1.prsa != vindex_1.trntow) {
  680. goto L10;
  681. }
  682. if (prsvec_1.prsi != 0) {
  683. goto L18200;
  684. }
  685. /* !TURN DIAL TO X? */
  686. rspeak_(806);
  687. /* !MUST SPECIFY. */
  688. return ret_val;
  689. L18200:
  690. if (prsvec_1.prsi >= oindex_1.num1 && prsvec_1.prsi <= oindex_1.num8) {
  691. goto L18300;
  692. }
  693. rspeak_(807);
  694. /* !MUST BE DIGIT. */
  695. return ret_val;
  696. L18300:
  697. findex_1.pnumb = prsvec_1.prsi - oindex_1.num1 + 1;
  698. /* !SET UP NEW. */
  699. i__1 = findex_1.pnumb + 712;
  700. rspsub_(808, i__1);
  701. return ret_val;
  702. /* O50-- GLOBAL MIRROR */
  703. L19000:
  704. ret_val = mirpan_(832, 0);
  705. return ret_val;
  706. /* O51-- GLOBAL PANEL */
  707. L20000:
  708. if (play_1.here != rindex_1.fdoor) {
  709. goto L20100;
  710. }
  711. /* !AT FRONT DOOR? */
  712. if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) {
  713. goto L10;
  714. }
  715. rspeak_(843);
  716. /* !PANEL IN DOOR, NOGO. */
  717. return ret_val;
  718. L20100:
  719. ret_val = mirpan_(838, 1);
  720. return ret_val;
  721. /* O52-- PUZZLE ROOM SLIT */
  722. L21000:
  723. if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.cslit) {
  724. goto L10;
  725. }
  726. if (prsvec_1.prso != oindex_1.gcard) {
  727. goto L21100;
  728. }
  729. /* !PUT CARD IN SLIT? */
  730. newsta_(prsvec_1.prso, 863, 0, 0, 0);
  731. /* !KILL CARD. */
  732. findex_1.cpoutf = TRUE_;
  733. /* !OPEN DOOR. */
  734. objcts_1.oflag1[oindex_1.stldr - 1] &= ~ VISIBT;
  735. return ret_val;
  736. L21100:
  737. if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0 && (
  738. objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
  739. goto L21200;
  740. }
  741. i__1 = rnd_(5) + 552;
  742. rspeak_(i__1);
  743. /* !JOKE FOR VILL, VICT. */
  744. return ret_val;
  745. L21200:
  746. newsta_(prsvec_1.prso, 0, 0, 0, 0);
  747. /* !KILL OBJECT. */
  748. rspsub_(864, odo2);
  749. /* !DESCRIBE. */
  750. return ret_val;
  751. } /* nobjs_ */
  752. /* MIRPAN-- PROCESSOR FOR GLOBAL MIRROR/PANEL */
  753. /* DECLARATIONS */
  754. static logical mirpan_(st, pnf)
  755. integer st;
  756. logical pnf;
  757. {
  758. /* System generated locals */
  759. integer i__1;
  760. logical ret_val;
  761. /* Local variables */
  762. integer num;
  763. integer mrbf;
  764. ret_val = TRUE_;
  765. num = mrhere_(play_1.here);
  766. /* !GET MIRROR NUM. */
  767. if (num != 0) {
  768. goto L100;
  769. }
  770. /* !ANY HERE? */
  771. rspeak_(st);
  772. /* !NO, LOSE. */
  773. return ret_val;
  774. L100:
  775. mrbf = 0;
  776. /* !ASSUME MIRROR OK. */
  777. if (num == 1 && ! findex_1.mr1f || num == 2 && ! findex_1.mr2f) {
  778. mrbf = 1;
  779. }
  780. if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.openw) {
  781. goto L200;
  782. }
  783. i__1 = st + 1;
  784. rspeak_(i__1);
  785. /* !CANT OPEN OR MOVE. */
  786. return ret_val;
  787. L200:
  788. if (pnf || prsvec_1.prsa != vindex_1.lookiw && prsvec_1.prsa !=
  789. vindex_1.examiw && prsvec_1.prsa != vindex_1.lookw) {
  790. goto L300;
  791. }
  792. i__1 = mrbf + 844;
  793. rspeak_(i__1);
  794. /* !LOOK IN MIRROR. */
  795. return ret_val;
  796. L300:
  797. if (prsvec_1.prsa != vindex_1.mungw) {
  798. goto L400;
  799. }
  800. /* !BREAK? */
  801. i__1 = st + 2 + mrbf;
  802. rspeak_(i__1);
  803. /* !DO IT. */
  804. if (num == 1 && ! (pnf)) {
  805. findex_1.mr1f = FALSE_;
  806. }
  807. if (num == 2 && ! (pnf)) {
  808. findex_1.mr2f = FALSE_;
  809. }
  810. return ret_val;
  811. L400:
  812. if (pnf || mrbf == 0) {
  813. goto L500;
  814. }
  815. /* !BROKEN MIRROR? */
  816. rspeak_(846);
  817. return ret_val;
  818. L500:
  819. if (prsvec_1.prsa != vindex_1.pushw) {
  820. goto L600;
  821. }
  822. /* !PUSH? */
  823. i__1 = st + 3 + num;
  824. rspeak_(i__1);
  825. return ret_val;
  826. L600:
  827. ret_val = FALSE_;
  828. /* !CANT HANDLE IT. */
  829. return ret_val;
  830. } /* mirpan_ */