dso6.for 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. C GHERE-- IS GLOBAL ACTUALLY IN THIS ROOM?
  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 GHERE(OBJ,RM)
  10. IMPLICIT INTEGER(A-Z)
  11. include 'rooms.h'
  12. include 'rflag.h'
  13. include 'rindex.h'
  14. C
  15. COMMON /STAR/ MBASE,STRBIT
  16. C GHERE, PAGE 2
  17. C
  18. GHERE=.TRUE.
  19. C !ASSUME WINS.
  20. GO TO (1000,1000,1000,1000,1000,1000,
  21. &1000,1000,1000,1000,1000,
  22. &2000,3000,4000,5000,5000,5000,6000,
  23. &7000,8000,9000,9100,8000,10000,11000),OBJ-STRBIT
  24. CALL BUG(60,OBJ)
  25. C
  26. C 1000-- STARS ARE ALWAYS HERE
  27. C
  28. 1000 RETURN
  29. C
  30. C 2000-- BIRD
  31. C
  32. 2000 GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).OR.(RM.EQ.MTREE)
  33. RETURN
  34. C
  35. C 3000-- TREE
  36. C
  37. 3000 GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).AND.(RM.NE.FORE3)
  38. RETURN
  39. C
  40. C 4000-- NORTH WALL
  41. C
  42. 4000 GHERE=((RM.GE.BKVW).AND.(RM.LE.BKBOX)).OR.(RM.EQ.CPUZZ)
  43. RETURN
  44. C
  45. C 5000-- EAST, SOUTH, WEST WALLS
  46. C
  47. 5000 GHERE=((RM.GE.BKVW).AND.(RM.LT.BKBOX)).OR.(RM.EQ.CPUZZ)
  48. RETURN
  49. C
  50. C 6000-- GLOBAL WATER
  51. C
  52. 6000 GHERE=IAND(RFLAG(RM),(RWATER+RFILL)).NE.0
  53. RETURN
  54. C
  55. C 7000-- GLOBAL GUARDIANS
  56. C
  57. 7000 GHERE=((RM.GE.MRC).AND.(RM.LE.MRD)).OR.
  58. &((RM.GE.MRCE).AND.(RM.LE.MRDW)).OR.(RM.EQ.INMIR)
  59. RETURN
  60. C
  61. C 8000-- ROSE/CHANNEL
  62. C
  63. 8000 GHERE=((RM.GE.MRA).AND.(RM.LE.MRD)).OR.(RM.EQ.INMIR)
  64. RETURN
  65. C
  66. C 9000-- MIRROR
  67. C 9100 PANEL
  68. C
  69. 9100 IF(RM.EQ.FDOOR) RETURN
  70. C !PANEL AT FDOOR.
  71. 9000 GHERE=((RM.GE.MRA).AND.(RM.LE.MRC)).OR.
  72. &((RM.GE.MRAE).AND.(RM.LE.MRCW))
  73. RETURN
  74. C
  75. C 10000-- MASTER
  76. C
  77. 10000 GHERE=(RM.EQ.FDOOR).OR.(RM.EQ.NCORR).OR.(RM.EQ.PARAP).OR.
  78. &(RM.EQ.CELL)
  79. RETURN
  80. C
  81. C 11000-- LADDER
  82. C
  83. 11000 GHERE=(RM.EQ.CPUZZ)
  84. RETURN
  85. C
  86. END
  87. C MRHERE-- IS MIRROR HERE?
  88. C
  89. C DECLARATIONS
  90. C
  91. INTEGER FUNCTION MRHERE(RM)
  92. IMPLICIT INTEGER(A-Z)
  93. C
  94. C ROOMS
  95. include 'rindex.h'
  96. include 'flags.h'
  97. C MRHERE, PAGE 2
  98. C
  99. IF((RM.LT.MRAE).OR.(RM.GT.MRDW)) GO TO 100
  100. C
  101. C RM IS AN E-W ROOM, MIRROR MUST BE N-S (MDIR= 0 OR 180)
  102. C
  103. MRHERE=1
  104. C !ASSUME MIRROR 1 HERE.
  105. IF(MOD(RM-MRAE,2).EQ.(MDIR/180)) MRHERE=2
  106. RETURN
  107. C
  108. C RM IS NORTH OR SOUTH OF MIRROR. IF MIRROR IS N-S OR NOT
  109. C WITHIN ONE ROOM OF RM, LOSE.
  110. C
  111. 100 MRHERE=0
  112. IF((IABS(MLOC-RM).NE.1).OR.(MOD(MDIR,180).EQ.0)) RETURN
  113. C
  114. C RM IS WITHIN ONE OF MLOC, AND MDIR IS E-W
  115. C
  116. MRHERE=1
  117. IF(((RM.LT.MLOC).AND.(MDIR.LT.180)).OR.
  118. & ((RM.GT.MLOC).AND.(MDIR.GT.180))) MRHERE=2
  119. RETURN
  120. END