dso1.for 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. C PRINCR- PRINT CONTENTS OF 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. SUBROUTINE PRINCR(FULL,RM)
  10. IMPLICIT INTEGER (A-Z)
  11. LOGICAL QEMPTY,QHERE,FULL
  12. include 'gamestat.h'
  13. include 'rooms.h'
  14. include 'rflag.h'
  15. C
  16. include 'objects.h'
  17. include 'oflags.h'
  18. include 'oindex.h'
  19. include 'advers.h'
  20. include 'flags.h'
  21. C PRINCR, PAGE 2
  22. C
  23. J=329
  24. C !ASSUME SUPERBRIEF FORMAT.
  25. DO 500 I=1,OLNT
  26. C !LOOP ON OBJECTS
  27. IF(.NOT.QHERE(I,RM).OR.(IAND(OFLAG1(I),(VISIBT+NDSCBT)).NE.
  28. & VISIBT).OR.(I.EQ.AVEHIC(WINNER))) GO TO 500
  29. IF(.NOT.FULL.AND.(SUPERF.OR.(BRIEFF.AND.
  30. & (IAND(RFLAG(HERE),RSEEN).NE.0)))) GO TO 200
  31. C
  32. C DO LONG DESCRIPTION OF OBJECT.
  33. C
  34. K=ODESCO(I)
  35. C !GET UNTOUCHED.
  36. IF((K.EQ.0).OR.(IAND(OFLAG2(I),TCHBT).NE.0)) K=ODESC1(I)
  37. CALL RSPEAK(K)
  38. C !DESCRIBE.
  39. GO TO 500
  40. C DO SHORT DESCRIPTION OF OBJECT.
  41. C
  42. 200 CALL RSPSUB(J,ODESC2(I))
  43. C !YOU CAN SEE IT.
  44. J=502
  45. C
  46. 500 CONTINUE
  47. C
  48. C NOW LOOP TO PRINT CONTENTS OF OBJECTS IN ROOM.
  49. C
  50. DO 1000 I=1,OLNT
  51. C !LOOP ON OBJECTS.
  52. IF(.NOT.QHERE(I,RM).OR.(IAND(OFLAG1(I),(VISIBT+NDSCBT)).NE.
  53. & VISIBT)) GO TO 1000
  54. IF(IAND(OFLAG2(I),ACTRBT).NE.0) CALL INVENT(OACTOR(I))
  55. IF(((IAND(OFLAG1(I),TRANBT).EQ.0)
  56. & .AND.(IAND(OFLAG2(I),OPENBT).EQ.0))
  57. & .OR.QEMPTY(I)) GO TO 1000
  58. C
  59. C OBJECT IS NOT EMPTY AND IS OPEN OR TRANSPARENT.
  60. C
  61. J=573
  62. IF(I.NE.TCASE) GO TO 600
  63. C !TROPHY CASE?
  64. J=574
  65. IF((BRIEFF.OR.SUPERF).AND. .NOT.FULL) GO TO 1000
  66. 600 CALL PRINCO(I,J)
  67. C !PRINT CONTENTS.
  68. C
  69. 1000 CONTINUE
  70. RETURN
  71. C
  72. END
  73. C INVENT- PRINT CONTENTS OF ADVENTURER
  74. C
  75. C DECLARATIONS
  76. C
  77. SUBROUTINE INVENT(ADV)
  78. IMPLICIT INTEGER (A-Z)
  79. LOGICAL QEMPTY
  80. include 'gamestat.h'
  81. include 'objects.h'
  82. include 'oflags.h'
  83. C
  84. include 'advers.h'
  85. C INVENT, PAGE 2
  86. C
  87. I=575
  88. C !FIRST LINE.
  89. IF(ADV.NE.PLAYER) I=576
  90. C !IF NOT ME.
  91. DO 10 J=1,OLNT
  92. C !LOOP
  93. IF((OADV(J).NE.ADV).OR.(IAND(OFLAG1(J),VISIBT).EQ.0))
  94. & GO TO 10
  95. CALL RSPSUB(I,ODESC2(AOBJ(ADV)))
  96. I=0
  97. CALL RSPSUB(502,ODESC2(J))
  98. 10 CONTINUE
  99. C
  100. IF(I.EQ.0) GO TO 25
  101. C !ANY OBJECTS?
  102. IF(ADV.EQ.PLAYER) CALL RSPEAK(578)
  103. C !NO, TELL HIM.
  104. RETURN
  105. C
  106. 25 DO 100 J=1,OLNT
  107. C !LOOP.
  108. IF((OADV(J).NE.ADV).OR.(IAND(OFLAG1(J),VISIBT).EQ.0).OR.
  109. & ((IAND(OFLAG1(J),TRANBT).EQ.0).AND.
  110. & (IAND(OFLAG2(J),OPENBT).EQ.0))) GO TO 100
  111. IF(.NOT.QEMPTY(J)) CALL PRINCO(J,573)
  112. C !IF NOT EMPTY, LIST.
  113. 100 CONTINUE
  114. RETURN
  115. C
  116. END
  117. C PRINCO- PRINT CONTENTS OF OBJECT
  118. C
  119. C DECLARATIONS
  120. C
  121. SUBROUTINE PRINCO(OBJ,DESC)
  122. IMPLICIT INTEGER(A-Z)
  123. include 'objects.h'
  124. C
  125. CALL RSPSUB(DESC,ODESC2(OBJ))
  126. C !PRINT HEADER.
  127. DO 100 I=1,OLNT
  128. C !LOOP THRU.
  129. IF(OCAN(I).EQ.OBJ) CALL RSPSUB(502,ODESC2(I))
  130. 100 CONTINUE
  131. RETURN
  132. C
  133. END