SUBROUTINE GUNMOV # # THIS SUBROUTINE CONTROLS THE POSITIONING OF THE PLAYER'S GUN. # THIS IS DONE BY MOVING THE GUN IN THE DIRECTION SPECIFIED IN # THE VARIABLE 'DIRCOD', WHICH IS SET BY THE UNSOLICITED CHARACTER # INPUT AST ROUTINE, INPAST. # IMPLICIT INTEGER (A-Z) INCLUDE SY:CNTPED.CMN INCLUDE SY:UVT100.DAT IF (DIRCOD > HALT) [ #MOTION REQUESTED NEWX = GUNX #SAVE OLD GUN COORDINATES NEWY = GUNY IF (DIRCOD == UP) #UPDATE GUNSIGHT X,Y COORDINATES NEWX = GUNX - 1 ELSE IF (DIRCOD == DOWN) NEWX = GUNX + 1 ELSE IF (DIRCOD == LEFT) NEWY = GUNY - 1 ELSE IF (DIRCOD == RIGHT) NEWY = GUNY + 1 ELSE IF (DIRCOD == UPL) [ NEWX = GUNX - 1 NEWY = GUNY - 1 ] ELSE IF (DIRCOD == UPR) [ NEWX = GUNX - 1 NEWY = GUNY + 1 ] ELSE IF (DIRCOD == DOWNL) [ NEWX = GUNX + 1 NEWY = GUNY - 1 ] ELSE IF (DIRCOD == DOWNR) [ NEWX = GUNX + 1 NEWY = GUNY + 1 ] # # IF NEW POSITION IS OUTSIDE OF LEGAL LIMITS, CORRECT IT. # IF (NEWX < GMAR) #TOO FAR TO TOP OF SCREEN NEWX = GMAR ELSE IF (NEWX > BMAR) #TOO FAR TO BOTTOM OF SCREEN NEWX = BMAR IF (NEWY < LMAR) #TOO FAR TO LEFT OF SCREEN NEWY = LMAR ELSE IF (NEWY > RMAR) #TOO FAR TO RIGHT OF SCREEN NEWY = RMAR IF (MSHBRD(NEWX,NEWY) == 0) [ DIRCOD = HALT #CLEAR MOTION INDICATOR CALL UVT100(CUP,GUNX,GUNY) #BLANK OUT CURRENT DISPLAY OF GUNSIGHT CALL GETADR(PRL,SPACE) CALL WTQIO(IOWVB,5,2,,,PRL) GUNX = NEWX GUNY = NEWY CALL UVT100(CUP,GUNX,GUNY) #DISPLAY GUN AT NEW LOCATION CALL GETADR(PRL,GUNCHR) CALL WTQIO(IOWVB,5,2,,,PRL) CALL COLIDE #CHECK FOR COLLISION WITH GUN ] ] RETURN END