   SUBROUTINE SPEAK(N)
      USE ALLCOM

!     PRINT MESSAGE WHICH STARTS AT LINES(N).
      
      INTEGER OLINE(30),N,K,L,I

      CHARACTER(80) LINE
      
      IF (N.NE.0) THEN
         IF (LINES(N+1).NE.XCLYD) THEN
            K=N
         1  L=MIN(IABS(LINES(K))-K-1,30)
            IF (L.GT.30) CALL BUG('DATA FILE DOESN''T MATCH RESTORED FILE')
            DO I=1,L
               OLINE(I)=IEOR(LINES(K+I),ZCLYD)
            END DO
            WRITE (LINE,"(19A4)") OLINE(1:L) !MAKE CHARACTER MODE COPY OF MESSAGE FOR TESTING
            CALL UPPER_CASE(LINE)            !NOTE: UPPER_CASE DOESN'T DO IT AFTER A '
            IF (INDEX(LINE,'BELLOW').GT.0) CALL SOUND('BELLOW WATER WATER')
            IF (INDEX(LINE,'MURMUR').GT.0.AND.LOC.NE.115) CALL SOUND('MURMUR WATER WATER')
            IF (INDEX(LINE,'UP THE STEPS').GT.0) CALL SOUND('UP THE STEPS')
            IF (INDEX(LINE,'PLUGH').GT.0) CALL SOUND('PLUGH')
            IF (INDEX(LINE,'RUSTLING').GT.0) CALL SOUND('RUSTLE')
            IF (INDEX(LINE,'PHUCE').GT.0) CALL SOUND('PHUCE')
            IF (INDEX(LINE,'SAINT-MICHEL').GT.0) CALL SOUND('SAINT-MICHEL')
            IF (INDEX(LINE,'EXIT IS CLOSED').GT.0) CALL SOUND('EXIT CLOSED')
            IF (INDEX(LINE,'NOW CLOSED').GT.0) CALL SOUND('CAVE CLOSED')
            IF (INDEX(LINE,'BLAST OF').GT.0) CALL SOUND('HORN')
            IF (INDEX(LINE,'CAVE CLOSING').GT.0) CALL SOUND('CAVE CLOSING')
            IF (INDEX(LINE,'LOUD EXPLOSION').GT.0) CALL SOUND('DYNAMITE')
            IF (INDEX(LINE,'BEARDED PIRATE').GT.0) CALL SOUND('AARGH')
            IF (INDEX(LINE,'POOR BABY').GT.0) CALL SOUND('POOR BABY')
            IF (INDENT.EQ.0) THEN
               WRITE(*,"(1X,19A4)") (OLINE(I),I=1,L)
            ELSE
               WRITE(*,"(6X,19A4)") (OLINE(I),I=1,L)
            ENDIF
            K=K+L+1
            IF (LINES(K).GE.0) GO TO 1    !POSITIVE NUMBER INDICATES ADDITIONAL LINE IN MESSAGE; NEGATIVE INDICATES NEXT MESSAGE
         ENDIF
      ENDIF
      INDENT=0
      END