SUBROUTINE BOMB # # THIS SUBROUTINE IS CALLED TO UPDATE THE STATUS OF ATTACKING BOMBS # IMPLICIT INTEGER (A-Z) INCLUDE SY:MISSIL.CMN INCLUDE SY:UVT100.DAT DO I = 1,24 [ #LOOP THROUGH EACH ENTRY IN BOMB TABLE IF (BMBACT(I) == 0) #IF ZERO, ENTRY IS INACTIVE NEXT IF (BMBACT(I) > 0) [ #IF POSITIVE, ENTRY IS DELAY TIME. BMBACT(I) = BMBACT(I) - 1 #DECREMENT IT. IF (BMBACT(I) == 0) #IF DECREMENTED TO ZERO, SET IT TO BMBACT(I) = -1 #NEGATIVE, MEANING ACTIVE BOMB ] IF (BMBACT(I) < 0) [ #IF ACTIVE BOMB, PROCESS MOTION CALL UVT100(CUP,BMBX(I),BMBY(I)) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 BMBX(I) = BMBX(I) + 1 #INCREMENT X-COORDINATE # # CALCULATE NEW Y-COORDINATE BASED ON ANGLE OF FALL # IF (BMBAGL(I) == 1) #45 DEGREES TO THE RIGHT BMBY(I) = BMBY(I) + 1 #INCREMENT Y-COORDINATE ELSE IF (BMBAGL(I) == 2) [ #30 DEGREES TO THE RIGHT IF ((BMBX(I)/2)*2 == BMBX(I)) BMBY(I) = BMBY(I) + 1 #INCREMENT Y-COORDINATE HALF OF TIME ] ELSE IF (BMBAGL(I) == 3) #STRAIGHT DOWN CONTINUE #NO CHANGE TO Y-COORDINATE ELSE IF (BMBAGL(I) == 4) [ #30 DEGREES TO THE LEFT IF ((BMBX(I)/2)*2 == BMBX(I)) BMBY(I) = BMBY(I) - 1 #DECREMENT Y-COORDINATE HALF OF TIME ] ELSE IF (BMBAGL(I) == 5) #45 DEGREES TO THE LEFT BMBY(I) = BMBY(I) - 1 #DECREMENT Y-COORDINATE IF (BMBY(I) < 1) #MAKE SURE Y-COORDINATE IS IN RANGE BMBY(I) = 1 ELSE IF (BMBY(I) > 40) BMBY(I) = 40 # # IF WE ARE ABOUT TO BE ON LINE #21, WE BECOME 'SMART'. # IF OUR INTENDED MOVE WILL NOT HIT ANYTHING, WE MOVE LEFT # OR RIGHT ONE SQUARE TO HIT SOMETHING. (THE SITES ARE # PLACED SUCH THAT THERE ARE NO THREE CONSECUTIVE EMPTY SITES). # IF (BMBX(I) == 21 .AND. BMBY(I) > 1 .AND. BMBY(I) < 40) [ IF (SITENM(BMBY(I)) == 0) [ #NO SITE AT THIS LOCATION. IF (STATE(SITENM(BMBY(I)+1)) == 1) #IF SITE TO RIGHT ALIVE, BMBY(I) = BMBY(I) + 1 #HIT IT, ELSE HIT SITE TO LEFT ELSE BMBY(I) = BMBY(I) - 1 ] ] # # IF BOMB HAS MOVED INTO ACTIVE MISSILE EXPLOSION, # DELETE IT AND INCREMENT THE SCORE. # IF (DSPLAY(BMBX(I),BMBY(I)) == 1) [ BMBACT(I) = 0 SCORE = SCORE + (25 * (WAVE/2+1)) IF (SCORE >= FRESCO) [ #CHECK FOR NEW FREE CITY FRECTY = FRECTY + 1 FRESCO = FRESCO + 10000 ] ] # # IF THE BOMB IS STILL ACTIVE, DISPLAY ITS NEW LOCATION. # IF (BMBACT(I) != 0) [ CALL UVT100(CUP,BMBX(I),BMBY(I)) OUTBUF(LEN+1) = ASTRSK LEN = LEN + 1 IF (BMBX(I) == 21) [ #IF ON LINE 21, BLANK IT OUT BMBACT(I) = 0 CALL UVT100(CUP,BMBX(I),BMBY(I)) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 CALL DSTROY(SITENM(BMBY(I))) #AND SEE IF IT HIT ANYTHING ] ] ] ] RETURN END