SUBROUTINE COLIDE # # THIS SUBROUTINE PROCESSES COLLISIONS BETWEEN THE PLAYER'S GUN # AND CENTIPEDES, MUSHROOMS, SPIDERS, FLEAS, AND/OR SCORPIONS. # IMPLICIT INTEGER (A-Z) INCLUDE SY:CNTPED.CMN INCLUDE SY:UVT100.DAT % PARAMETER BELL=7, DIECHR="147 DIE = 0 #SET TO ONE IF COLLISION # # TEST FOR COLLISION WITH CENTIPEDE # DO I = 1,MAXCNT [ IF (CLEN(I) == 0) NEXT DO J = 1,CLEN(I) [ IF (CX(I,J) == GUNX .AND. CY(I,J) == GUNY) [ DIE = 1 BREAK ] ] ] # # TEST FOR COLLISION WITH SPIDER OR FLEA # IF (SPIACT == 1 .AND. SPIX == GUNX .AND. SPIY == GUNY) DIE = 1 IF (FLEACT == 1 .AND. FLEX == GUNX .AND. FLEY == GUNY) DIE = 1 # # IF COLLISION HAS OCCURRED, SHOW COLLISION, REPAIR MUSHROOMS, # CLEAR CENTIPEDES FROM BOARD, AND RESTART IF GUNS REMAIN. # IF (DIE == 0) RETURN CALL GETADR(PRL,BELL) DO I = 1,3 CALL WTQIO(IOWVB,5,2,,,PRL) GUNCNT = GUNCNT - 1 DO I = 1,BMAR [ #REPAIR DAMAGED MUSHROOMS DO J = 1,RMAR [ IF (MSHBRD(I,J) > 0) [ IF (MSHBRD(I,J) < 4) [ MSHBRD(I,J) = 4 SCORE = SCORE + 5 ] IF (PSNBRD(I,J) == 1) [ PSNBRD(I,J) = 0 CALL UVT100(CUP,I,J) CALL GETADR(PRL,MSHCHR) CALL WTQIO(IOWVB,5,2,,,PRL) ] ] ] ] IF (SCORE >= FRESCO) [ GUNCNT = GUNCNT + 1 FRESCO = FRESCO + 12000 ] IF (GUNCNT == 0) [ #OUT OF GUNS - GAME OVER CALL UVT100(CUP,2,33) WRITE (5,200) SCORE CALL UVT100(CUP,GUNX,GUNY) CALL GETADR(PRL,DIECHR) CALL WTQIO(IOWVB,5,2,,,PRL) CALL UVT100(CUP,24,32) WRITE (5,100) CALL GETADR(PRL,SHFIN) CALL WTQIO(IOWVB,5,2,,,PRL) CALL UVT100(CUP,1,1) CALL EXIT ] DO I = 1,MAXCNT [ #CLEAR BOARD OF CENTIPEDES IF (CLEN(I) == 0) NEXT DO J = 1,CLEN(I) [ CNTBRD(CX(I,J),CY(I,J)) = 0 CALL UVT100(CUP,CX(I,J),CY(I,J)) IF (MSHBRD(I,J) == 0) CALL GETADR(PRL,SPACE) ELSE CALL GETADR(PRL,MSHCHR) CALL WTQIO(IOWVB,5,2,,,PRL) ] CLEN(I) = 0 ] IF (SPIACT == 1) [ #CLEAR SPIDER SPIACT = 0 CALL UVT100(CUP,SPIX,SPIY) CALL GETADR(PRL,SPACE) CALL WTQIO(IOWVB,5,2,,,PRL) ] IF (FLEACT == 1) [ #CLEAR FLEA FLEACT = 0 CALL UVT100(CUP,FLEX,FLEY) CALL GETADR(PRL,SPACE) CALL WTQIO(IOWVB,5,2,,,PRL) ] CALL UVT100(CUP,GUNX,GUNY) CALL GETADR(PRL,DIECHR) CALL WTQIO(IOWVB,5,2,,,PRL) CALL WAIT(2,2) CALL UVT100(CUP,GUNX,GUNY) CALL GETADR(PRL,SPACE) CALL WTQIO(IOWVB,5,2,,,PRL) MSHBRD(GUNX,GUNY) = 0 GUNX = BMAR GUNY = RMAR / 2 CALL UVT100(CUP,GUNX,GUNY) CALL GETADR(PRL,GUNCHR) CALL WTQIO(IOWVB,5,2,,,PRL) CALL START #START NEW BOARD RETURN 100 FORMAT ("GAME OVER") 200 FORMAT (I7) END