dso6.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /* GHERE-- IS GLOBAL ACTUALLY IN THIS ROOM? */
  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 ghere_(obj, rm)
  8. integer obj;
  9. integer rm;
  10. {
  11. /* System generated locals */
  12. logical ret_val;
  13. ret_val = TRUE_;
  14. /* !ASSUME WINS. */
  15. switch (obj - star_1.strbit) {
  16. case 1: goto L1000;
  17. case 2: goto L1000;
  18. case 3: goto L1000;
  19. case 4: goto L1000;
  20. case 5: goto L1000;
  21. case 6: goto L1000;
  22. case 7: goto L1000;
  23. case 8: goto L1000;
  24. case 9: goto L1000;
  25. case 10: goto L1000;
  26. case 11: goto L1000;
  27. case 12: goto L2000;
  28. case 13: goto L3000;
  29. case 14: goto L4000;
  30. case 15: goto L5000;
  31. case 16: goto L5000;
  32. case 17: goto L5000;
  33. case 18: goto L6000;
  34. case 19: goto L7000;
  35. case 20: goto L8000;
  36. case 21: goto L9000;
  37. case 22: goto L9100;
  38. case 23: goto L8000;
  39. case 24: goto L10000;
  40. case 25: goto L11000;
  41. }
  42. bug_(60, obj);
  43. /* 1000-- STARS ARE ALWAYS HERE */
  44. L1000:
  45. return ret_val;
  46. /* 2000-- BIRD */
  47. L2000:
  48. ret_val = rm >= rindex_1.fore1 && rm < rindex_1.clear || rm ==
  49. rindex_1.mtree;
  50. return ret_val;
  51. /* 3000-- TREE */
  52. L3000:
  53. ret_val = rm >= rindex_1.fore1 && rm < rindex_1.clear && rm !=
  54. rindex_1.fore3;
  55. return ret_val;
  56. /* 4000-- NORTH WALL */
  57. L4000:
  58. ret_val = rm >= rindex_1.bkvw && rm <= rindex_1.bkbox || rm ==
  59. rindex_1.cpuzz;
  60. return ret_val;
  61. /* 5000-- EAST, SOUTH, WEST WALLS */
  62. L5000:
  63. ret_val = rm >= rindex_1.bkvw && rm < rindex_1.bkbox || rm ==
  64. rindex_1.cpuzz;
  65. return ret_val;
  66. /* 6000-- GLOBAL WATER */
  67. L6000:
  68. ret_val = (rooms_1.rflag[rm - 1] & RWATER + RFILL) != 0;
  69. return ret_val;
  70. /* 7000-- GLOBAL GUARDIANS */
  71. L7000:
  72. ret_val = rm >= rindex_1.mrc && rm <= rindex_1.mrd || rm >=
  73. rindex_1.mrce && rm <= rindex_1.mrdw || rm == rindex_1.inmir;
  74. return ret_val;
  75. /* 8000-- ROSE/CHANNEL */
  76. L8000:
  77. ret_val = rm >= rindex_1.mra && rm <= rindex_1.mrd || rm ==
  78. rindex_1.inmir;
  79. return ret_val;
  80. /* 9000-- MIRROR */
  81. /* 9100 PANEL */
  82. L9100:
  83. if (rm == rindex_1.fdoor) {
  84. return ret_val;
  85. }
  86. /* !PANEL AT FDOOR. */
  87. L9000:
  88. ret_val = rm >= rindex_1.mra && rm <= rindex_1.mrc || rm >=
  89. rindex_1.mrae && rm <= rindex_1.mrcw;
  90. return ret_val;
  91. /* 10000-- MASTER */
  92. L10000:
  93. ret_val = rm == rindex_1.fdoor || rm == rindex_1.ncorr || rm ==
  94. rindex_1.parap || rm == rindex_1.cell;
  95. return ret_val;
  96. /* 11000-- LADDER */
  97. L11000:
  98. ret_val = rm == rindex_1.cpuzz;
  99. return ret_val;
  100. } /* ghere_ */
  101. /* MRHERE-- IS MIRROR HERE? */
  102. /* DECLARATIONS */
  103. integer mrhere_(rm)
  104. integer rm;
  105. {
  106. /* System generated locals */
  107. integer ret_val, i__1;
  108. if (rm < rindex_1.mrae || rm > rindex_1.mrdw) {
  109. goto L100;
  110. }
  111. /* RM IS AN E-W ROOM, MIRROR MUST BE N-S (MDIR= 0 OR 180) */
  112. ret_val = 1;
  113. /* !ASSUME MIRROR 1 HERE. */
  114. if ((rm - rindex_1.mrae) % 2 == findex_1.mdir / 180) {
  115. ret_val = 2;
  116. }
  117. return ret_val;
  118. /* RM IS NORTH OR SOUTH OF MIRROR. IF MIRROR IS N-S OR NOT */
  119. /* WITHIN ONE ROOM OF RM, LOSE. */
  120. L100:
  121. ret_val = 0;
  122. if ((i__1 = findex_1.mloc - rm, abs(i__1)) != 1 || findex_1.mdir % 180 ==
  123. 0) {
  124. return ret_val;
  125. }
  126. /* RM IS WITHIN ONE OF MLOC, AND MDIR IS E-W */
  127. ret_val = 1;
  128. if (rm < findex_1.mloc && findex_1.mdir < 180 || rm > findex_1.mloc &&
  129. findex_1.mdir > 180) {
  130. ret_val = 2;
  131. }
  132. return ret_val;
  133. } /* mrhere_ */