SUBROUTINE GUNMOV C C THIS SUBROUTINE CONTROLS THE POSITIONING OF THE PLAYER'S GUN. C THIS IS DONE BY MOVING THE GUN IN THE DIRECTION SPECIFIED IN C THE VARIABLE 'DIRCOD', WHICH IS SET BY THE UNSOLICITED CHARACTER C INPUT AST ROUTINE, INPAST. C IMPLICIT INTEGER(A - Z) PARAMETER MAXCNT = 24 C SCREEN BOUNDARIES PARAMETER LMAR = 2, RMAR = 30, TMAR = 2, BMAR = 23, GMAR = 18 C DIRECTIONALS PARAMETER HALT = 0, UP = 1, DOWN = 2, LEFT = 4, RIGHT = 8 PARAMETER UPL = 10, UPR = 9, DOWNL = 12, DOWNR = 11 C DISPLAYABLE CHARACTERS PARAMETER GUNCHR="166, CBODY="140, MSHCHR="146, BULCHR="170 PARAMETER SPICHR="173, FLECHR="175, SCOCHR="142, PSNCHR="052 PARAMETER CLHEAD="074, CRHEAD="076, CDHEAD="126 PARAMETER SHFIN="17, SHFOUT="16, SPACE="40 C QIO FUNCTION CODES PARAMETER IOATA="1410, IOWVB="11000, SFSMC="2440 C INTEGER*4SCORE, FRESCO, TIMER, SEED, FLETIM, SPITIM, SCOTIM, CNTTI *M DIMENSION PRL(6), CX(MAXCNT, 12), CY(MAXCNT, 12) DIMENSION CLEN(MAXCNT), CDIR(MAXCNT), CRISE(MAXCNT), CBOT(MAXCNT) BYTE CNTBRD(BMAR, RMAR), MSHBRD(BMAR, RMAR), PSNBRD(BMAR, RMAR) COMMON/DIRCOM/DIRCOD, FIRCOD COMMON/CNTCOM/PRL, SCORE, TIMER, SEED, CX, CY, CLEN, CDIR, CRISE, *CBOT, GUNX, GUNY, FRESCO, CNTBRD, MSHBRD, PSNBRD, BULACT, BULX, BU *LY, FLETIM, FLEACT, FLEX, FLEY, SPITIM, SPIACT, SPIX, SPIY, SPILR, * SCOTIM, SCOACT, SCOX, SCOY, SCODIR, GUNCNT, CNTTIM, BOARD, CNTWAV C C VT100 DISPLAY CONTROL PARAMETER DEFINITIONS C CCURSOR POSITION REPORT CCURSOR UP CCURSOR DOWN CCURSOR FORWARD CCURSOR BACK CDOUBLE WIDTH LINE PARAMETER CUP = 1, CUU = 2, CUD = 3, CUF = 4, CUB = 5, DECDWL = 6, * DECDHL = 7, DECRC = 8, DECSC = 9, DECSWL = 10, ED = 11, EL = 12, *SGR = 13, NEL = 14, SCS = 15, SM = 16, RM = 17, ANSI = 18, CPP=19 IF (.NOT.(DIRCOD .GT. HALT)) GOTO 2000 CMOTION REQUESTED CSAVE OLD GUN COORDINATES NEWX = GUNX NEWY = GUNY IF (.NOT.(DIRCOD .EQ. UP)) GOTO 2020 CUPDATE GUNSIGHT X,Y COORDINATES NEWX = GUNX - 1 GOTO 2030 2020 CONTINUE IF (.NOT.(DIRCOD .EQ. DOWN)) GOTO 2040 NEWX = GUNX + 1 GOTO 2030 2040 CONTINUE IF (.NOT.(DIRCOD .EQ. LEFT)) GOTO 2060 NEWY = GUNY - 1 GOTO 2030 2060 CONTINUE IF (.NOT.(DIRCOD .EQ. RIGHT)) GOTO 2080 NEWY = GUNY + 1 GOTO 2030 2080 CONTINUE IF (.NOT.(DIRCOD .EQ. UPL)) GOTO 2100 NEWX = GUNX - 1 NEWY = GUNY - 1 GOTO 2030 2100 CONTINUE IF (.NOT.(DIRCOD .EQ. UPR)) GOTO 2120 NEWX = GUNX - 1 NEWY = GUNY + 1 GOTO 2030 2120 CONTINUE IF (.NOT.(DIRCOD .EQ. DOWNL)) GOTO 2140 NEWX = GUNX + 1 NEWY = GUNY - 1 GOTO 2030 2140 CONTINUE IF (.NOT.(DIRCOD .EQ. DOWNR)) GOTO 2160 NEWX = GUNX + 1 NEWY = GUNY + 1 C C IF NEW POSITION IS OUTSIDE OF LEGAL LIMITS, CORRECT IT. C 2160 CONTINUE 2030 CONTINUE IF (.NOT.(NEWX .LT. GMAR)) GOTO 2180 CTOO FAR TO TOP OF SCREEN NEWX = GMAR GOTO 2190 2180 CONTINUE IF (.NOT.(NEWX .GT. BMAR)) GOTO 2200 CTOO FAR TO BOTTOM OF SCREEN NEWX = BMAR 2200 CONTINUE 2190 CONTINUE IF (.NOT.(NEWY .LT. LMAR)) GOTO 2220 CTOO FAR TO LEFT OF SCREEN NEWY = LMAR GOTO 2230 2220 CONTINUE IF (.NOT.(NEWY .GT. RMAR)) GOTO 2240 CTOO FAR TO RIGHT OF SCREEN NEWY = RMAR 2240 CONTINUE 2230 CONTINUE IF (.NOT.(MSHBRD(NEWX, NEWY) .EQ. 0)) GOTO 2260 CCLEAR MOTION INDICATOR DIRCOD = HALT CBLANK OUT CURRENT DISPLAY OF GUNSIGHT CALL UVT100(CPP, GUNX, GUNY, SPACE) GUNX = NEWX GUNY = NEWY CDISPLAY GUN AT NEW LOCATION CALL UVT100(CPP, GUNX, GUNY, GUNCHR) CCHECK FOR COLLISION WITH GUN CALL COLIDE 2260 CONTINUE 2000 CONTINUE RETURN END