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 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) OUTBUF(LEN+1) = MSHCHR LEN = LEN + 1 ] ] ] ] IF (SCORE >= FRESCO) [ GUNCNT = GUNCNT + 1 FRESCO = FRESCO + 12000 ] IF (GUNCNT == 0) [ #OUT OF GUNS - GAME OVER CALL UVT100(CUP,2,33) ENCODE(7,200,OUTBUF(LEN+1)) SCORE LEN = LEN + 7 CALL UVT100(CUP,GUNX,GUNY) OUTBUF(LEN+1) = DIECHR LEN = LEN + 1 CALL UVT100(CUP,24,32) OUTBUF(LEN+1) = "G" OUTBUF(LEN+2) = "A" OUTBUF(LEN+3) = "M" OUTBUF(LEN+4) = "E" OUTBUF(LEN+5) = " " OUTBUF(LEN+6) = "O" OUTBUF(LEN+7) = "V" OUTBUF(LEN+8) = "E" OUTBUF(LEN+9) = "R" LEN = LEN + 9 DO I = 1,3 OUTBUF(LEN+I) = BELL LEN = LEN + 3 OUTBUF(LEN+1) = SHFIN LEN = LEN + 1 CALL UVT100(CUP,1,1) CALL GETADR(PRL,OUTBUF) PRL(2) = LEN CALL WTQIO(IOWVB,5,2,,,PRL) 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) OUTBUF(LEN+1) = SPACE ELSE OUTBUF(LEN+1) = MSHCHR LEN = LEN + 1 ] CLEN(I) = 0 ] IF (SPIACT == 1) [ #CLEAR SPIDER SPIACT = 0 CALL UVT100(CUP,SPIX,SPIY) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 ] IF (FLEACT == 1) [ #CLEAR FLEA FLEACT = 0 CALL UVT100(CUP,FLEX,FLEY) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 ] CALL UVT100(CUP,GUNX,GUNY) OUTBUF(LEN+1) = DIECHR LEN = LEN + 1 DO I = 1,3 OUTBUF(LEN+I) = BELL LEN = LEN + 3 CALL GETADR(PRL,OUTBUF) PRL(2) = LEN CALL WTQIO(IOWVB,5,2,,,PRL) LEN = 0 CALL WAIT(2,2) CALL UVT100(CUP,GUNX,GUNY) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 MSHBRD(GUNX,GUNY) = 0 GUNX = BMAR GUNY = RMAR / 2 CALL UVT100(CUP,GUNX,GUNY) OUTBUF(LEN+1) = GUNCHR LEN = LEN + 1 CALL START #START NEW BOARD RETURN 200 FORMAT (I7) END