SUBROUTINE COLIDE C C THIS SUBROUTINE PROCESSES COLLISIONS BETWEEN THE PLAYER'S GUN C AND CENTIPEDES, MUSHROOMS, SPIDERS, FLEAS, AND/OR SCORPIONS. 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 PARAMETER BELL=7, DIECHR="147 CSET TO ONE IF COLLISION DIE = 0 C C TEST FOR COLLISION WITH CENTIPEDE C DO 2000 I = 1, MAXCNT IF (.NOT.(CLEN(I) .EQ. 0)) GOTO 2020 GOTO 2000 2020 CONTINUE DO 2040 J = 1, CLEN(I) IF (.NOT.(CX(I, J) .EQ. GUNX.AND.CY(I, J) .EQ. GUNY)) GOTO 206 *0 DIE = 1 GOTO 2050 2060 CONTINUE 2040 CONTINUE 2050 CONTINUE C C TEST FOR COLLISION WITH SPIDER OR FLEA C 2000 CONTINUE IF (.NOT.(SPIACT .EQ. 1.AND.SPIX .EQ. GUNX.AND.SPIY .EQ. GUNY)) GO *TO 2080 DIE = 1 2080 CONTINUE IF (.NOT.(FLEACT .EQ. 1.AND.FLEX .EQ. GUNX.AND.FLEY .EQ. GUNY)) GO *TO 2100 DIE = 1 C C IF COLLISION HAS OCCURRED, SHOW COLLISION, REPAIR MUSHROOMS, C CLEAR CENTIPEDES FROM BOARD, AND RESTART IF GUNS REMAIN. C 2100 CONTINUE IF (.NOT.(DIE .EQ. 0)) GOTO 2120 RETURN 2120 CONTINUE CALL GETADR(PRL, BELL) DO 2140 I = 1, 3 CALL WTQIO(IOWVB, 2, 2, , , PRL) 2140 CONTINUE GUNCNT = GUNCNT - 1 DO 2160 I = 1, BMAR CREPAIR DAMAGED MUSHROOMS DO 2180 J = 1, RMAR IF (.NOT.(MSHBRD(I, J) .GT. 0)) GOTO 2200 IF (.NOT.(MSHBRD(I, J) .LT. 4)) GOTO 2220 MSHBRD(I, J) = 4 SCORE = SCORE + 5 2220 CONTINUE IF (.NOT.(PSNBRD(I, J) .EQ. 1)) GOTO 2240 PSNBRD(I, J) = 0 CALL UVT100(CPP, I, J, MSHCHR) 2240 CONTINUE 2200 CONTINUE 2180 CONTINUE 2160 CONTINUE IF (.NOT.(SCORE .GE. FRESCO)) GOTO 2260 GUNCNT = GUNCNT + 1 FRESCO = FRESCO + 12000 2260 CONTINUE IF (.NOT.(GUNCNT .EQ. 0)) GOTO 2280 COUT OF GUNS - GAME OVER CALL UVT100(CUP, 2, 33) WRITE(2, 200) SCORE CALL UVT100(CPP, GUNX, GUNY, DIECHR) CALL UVT100(CUP, 24, 32) WRITE(2, 100) CALL GETADR(PRL, SHFIN) CALL WTQIO(IOWVB, 2, 2, , , PRL) CALL UVT100(CUP, 1, 1) CALL NEWSCR(SCORE) ! UPDATE SCORES, IF NECESSARY CALL EXIT 2280 CONTINUE DO 2300 I = 1, MAXCNT CCLEAR BOARD OF CENTIPEDES IF (.NOT.(CLEN(I) .EQ. 0)) GOTO 2320 GOTO 2300 2320 CONTINUE DO 2340 J = 1, CLEN(I) CNTBRD(CX(I, J), CY(I, J)) = 0 IF (.NOT.(MSHBRD(I, J) .EQ. 0)) GOTO 2360 CALL UVT100(CPP, CX(I, J), CY(I, J), SPACE) GOTO 2370 2360 CONTINUE CALL UVT100(CPP, CX(I, J), CY(I, J), MSHCHR) 2370 CONTINUE 2340 CONTINUE CLEN(I) = 0 2300 CONTINUE IF (.NOT.(SPIACT .EQ. 1)) GOTO 2380 CCLEAR SPIDER SPIACT = 0 CALL UVT100(CPP, SPIX, SPIY, SPACE) 2380 CONTINUE IF (.NOT.(FLEACT .EQ. 1)) GOTO 2400 CCLEAR FLEA FLEACT = 0 CALL UVT100(CPP, FLEX, FLEY, SPACE) 2400 CONTINUE CALL UVT100(CPP, GUNX, GUNY, DIECHR) CALL WAIT(2, 2) CALL UVT100(CPP, GUNX, GUNY, SPACE) MSHBRD(GUNX, GUNY) = 0 GUNX = BMAR GUNY = RMAR/2 CALL UVT100(CPP, GUNX, GUNY, GUNCHR) CSTART NEW BOARD CALL START RETURN 100 FORMAT('GAME OVER') 200 FORMAT(I7) END