SUBROUTINE EXPLOD(X,Y,CODE) # # THIS SUBROUTINE CONTROLS THE DISPLAY OF EXPLODING MISSILES ON THE # SCREEN. IT ALSO UPDATES 'DSPLAY', A 21 BY 40 ARRAY EACH OF WHOSE # ENTRIES IS SET TO ONE IF A MISSILE IS CURRENTLY EXPLODED AT THAT # LOCATION. THIS ARRAY IS USED TO TEST FOR THE DESTRUCTION OF ATTACKING # FORCES. THERE ARE FIVE CYCLES TO AN EXPLOSION, LOOKING AS FOLLOWS: # # # * # * *** * # * *** ***** *** * # * *** * # * # # # THE FIRST, SECOND AND THIRD STATES LAST TWO CYCLES, AND THE FOURTH # AND FIFTH STATES LAST FOUR CYCLES. THE EXPLOSIONS ARE DISPLAYED # AS SPACES WRITTEN IN REVERSE VIDEO MODE. # IMPLICIT INTEGER (A-Z) INCLUDE SY:MISSIL.CMN INCLUDE SY:UVT100.DAT IF (CODE == -1) [ #FIRST STATE CALL UVT100(SGR,7) CALL UVT100(CUP,X,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X,Y) = 1 ] ELSE IF (CODE == -3) [ #SECOND STATE CALL UVT100(SGR,7) CALL UVT100(CUP,X-1,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X-1,Y) = 1 CALL UVT100(CUP,X,Y-1) DO I = 1,3 OUTBUF(LEN+I) = SPACE LEN = LEN + 3 DO I = 1,3 DSPLAY(X,Y+2-I) = 1 CALL UVT100(CUP,X+1,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X+1,Y) = 1 ] ELSE IF (CODE == -5) [ #THIRD STATE CALL UVT100(SGR,7) CALL UVT100(CUP,X-2,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X-2,Y) = 1 CALL UVT100(CUP,X-1,Y-1) DO I = 1,3 OUTBUF(LEN+I) = SPACE LEN = LEN + 3 DO I = 1,3 DSPLAY(X-1,Y+2-I) = 1 CALL UVT100(CUP,X,Y-2) DO I = 1,5 OUTBUF(LEN+I) = SPACE LEN = LEN + 5 DO I = 1,5 DSPLAY(X,Y+3-I) = 1 CALL UVT100(CUP,X+1,Y-1) DO I = 1,3 OUTBUF(LEN+I) = SPACE LEN = LEN + 3 DO I = 1,3 DSPLAY(X+1,Y+2-I) = 1 CALL UVT100(CUP,X+2,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X+2,Y) = 1 ] ELSE IF (CODE == -7) [ #FOURTH STATE CALL UVT100(CUP,X-2,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X-2,Y) = 0 CALL UVT100(CUP,X-1,Y-1) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X-1,Y-1) = 0 CALL UVT100(CUP,X-1,Y+1) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X-1,Y+1) = 0 CALL UVT100(CUP,X,Y-2) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X,Y-2) = 0 CALL UVT100(CUP,X,Y+2) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X,Y+2) = 0 CALL UVT100(CUP,X+1,Y-1) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X+1,Y-1) = 0 CALL UVT100(CUP,X+1,Y+1) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X+1,Y+1) = 0 CALL UVT100(CUP,X+2,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X+2,Y) = 0 ] ELSE IF (CODE == -11) [ #FIFTH STATE CALL UVT100(CUP,X,Y-1) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X,Y-1) = 0 CALL UVT100(CUP,X,Y+1) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X,Y+1) = 0 CALL UVT100(CUP,X-1,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X-1,Y) = 0 CALL UVT100(CUP,X+1,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X+1,Y) = 0 ] ELSE IF (CODE == -15) [ #FINAL STATE. (DISAPPEAR) CALL UVT100(CUP,X,Y) OUTBUF(LEN+1) = SPACE LEN = LEN + 1 DSPLAY(X,Y) = 0 ] CALL UVT100(SGR,0) #CLEAR REVERSE VIDEO MODE END