SUBROUTINE FIRE # # THIS SUBROUTINE CONTROLS THE FIRING OF MISSILES. # IMPLICIT INTEGER (A-Z) INCLUDE SY:MISSIL.CMN INCLUDE SY:UVT100.DAT REAL XTMP # # THE VARIABLE 'FIRCOD' IS SET BY THE UNSOLICITED CHARACTER INPUT # ROUTINE, INPAST. IF SET TO 20, IT MEANS FIRE FROM THE LEFT BASE, # IF SET TO 40, FIRE FROM CENTER BASE, AND IF SET TO 60, FIRE # FROM RIGHT BASE. # IF (FIRCOD == 20) [ #FIRE FROM LEFT BASE FIRCOD = 0 IF (LMSLCT == 0) [ #WARN PLAYER IF NO MISSILES OUTBUF(LEN+1) = BELL LEN = LEN + 1 RETURN ] DO I = 1,30 [ #UPDATE MISSILE ACTIVE TABLE IF (MSLACT(I) == 0) [ CALL UVT100(CUP,24,1) LN24(LMSLCT+1) = SPACE DO J = 1,80 OUTBUF(LEN+J) = LN24(J) LEN = LEN + 80 LMSLCT = LMSLCT - 1 MSLX(I) = GUNX MSLY(I) = GUNY ITMP = LMSLX - GUNX #CALCULATE DELAY TO EXPLOSION ITMP = ITMP * ITMP #BASED ON DISTANCE TO SITE JTMP = LMSLY - GUNY JTMP = JTMP * JTMP XTMP = ITMP + JTMP XTMP = SQRT(XTMP) MSLACT(I) = XTMP / 4 IF (MSLACT(I) == 0) MSLACT(I) = 1 BREAK ] ] ] ELSE IF (FIRCOD == 40) [ #FIRE FROM CENTER BASE FIRCOD = 0 IF (CMSLCT == 0) [ #WARN PLAYER IF NO MISSILES OUTBUF(LEN+1) = BELL LEN = LEN + 1 RETURN ] DO I = 1,30 [ #UPDATE ACTIVE MISSILE TABLE IF (MSLACT(I) == 0) [ CALL UVT100(CUP,24,1) LN24(CMSLCT+35) = SPACE DO J = 1,80 OUTBUF(LEN+J) = LN24(J) LEN = LEN + 80 CMSLCT = CMSLCT - 1 MSLX(I) = GUNX MSLY(I) = GUNY ITMP = CMSLX - GUNX #CALCULATE DELAY TO EXPLOSION ITMP = ITMP * ITMP #BASED ON DISTANCE TO SITE JTMP = CMSLY - GUNY JTMP = JTMP * JTMP XTMP = ITMP + JTMP XTMP = SQRT(XTMP) MSLACT(I) = XTMP / 4 IF (MSLACT(I) == 0) MSLACT(I) = 1 BREAK ] ] ] ELSE IF (FIRCOD == 60) [ #FIRE FROM RIGHT BASE FIRCOD = 0 IF (RMSLCT == 0) [ #WARN PLAYER IF NO MISSILES OUTBUF(LEN+1) = BELL LEN = LEN + 1 RETURN ] DO I = 1,30 [ #UPDATE ACTIVE MISSILE TABLE IF (MSLACT(I) == 0) [ CALL UVT100(CUP,24,1) LN24(RMSLCT+69) = SPACE DO J = 1,80 OUTBUF(LEN+J) = LN24(J) LEN = LEN + 80 RMSLCT = RMSLCT - 1 MSLX(I) = GUNX MSLY(I) = GUNY ITMP = RMSLX - GUNX #CALCULATE DELAY TO EXPLOSION ITMP = ITMP * ITMP #BASED ON DISTANCE TO SITE JTMP = RMSLY - GUNY JTMP = JTMP * JTMP XTMP = ITMP + JTMP XTMP = SQRT(XTMP) MSLACT(I) = XTMP / 4 IF (MSLACT(I) == 0) MSLACT(I) = 1 BREAK ] ] ] RETURN END