	SUBROUTINE MOVEBULL
C Routine to move all active bullets
	IMPLICIT REAL*8 (A-Z)
	INCLUDE 'ARRAYS.INC/NOLIST'
	INTEGER*4 I,IX,IY,J
C
	DO I = 1,MAX_BULLET
C Do for each possible bullet
	  IF(BU_ARY(B_XLOC,I).NE.0) THEN
C This bullet is active - see if anything ran into it at its current
C location before we move it
	    CALL HITCHECK(I)
	    IF(BU_ARY(B_XLOC,I).NE.0) THEN
C This bullet is still active - nothing ran into it
C Bullet speed is in squares per update cycle - check for an object at
C each of the squares the bullet will pass through on this update
	      DO J = 1,BULL_SPEED
C Move bullet up one square
		BU_ARY(B_YLOC,I) = BU_ARY(B_YLOC,I) - 1
		IF(BU_ARY(B_YLOC,I).LE.BORDER_MINY) THEN
C This bullet is off the top of the screen
		  BU_ARY(B_XLOC,I) = 0
		  GOTO 200
		ELSE
C See if there is something on this square - HITCHECK clears bullet's B_XLOC
C if there was a hit
		  CALL HITCHECK(I)
		  IF(BU_ARY(B_XLOC,I).EQ.0) GOTO 200
		ENDIF
	      ENDDO
C Bullet didn't hit anything - store character at its new location
	      SCREEN_ARY(BU_ARY(B_XLOC,I),BU_ARY(B_YLOC,I),POINT_NEW)
     1			 = CHAR_BULL
	    ENDIF
	  ENDIF
200	  CONTINUE
	ENDDO
	RETURN
	END
