SUBROUTINE START # # THIS SUBROUTINE PROVIDES THE CODE NECESSARY TO BEGIN A NEW # ATTACK WAVE. IT ALSO ENDS THE GAME IF ALL CITIES ARE DESTROYED. # IMPLICIT INTEGER (A-Z) INCLUDE SY:MISSIL.CMN INCLUDE SY:UVT100.DAT REAL X,RAN DIMENSION SITEY(9),CIT1Y(9,3),CIT1AC(9,3),CIT1AG(9,3) BYTE DBMBY(24,5),DBMBAC(24,5),DBMBAG(24,5) BYTE DSMBX(12),DSMBY(12),DSMBAC(12),DSMBTA(12),NOSMB(24) DATA SITEY / 2,7,11,15,19,24,28,32,36 / DATA CIT1Y / 0,8,12,16,0,25,29,33,0, 0,18,22,6,0,35,19,23,0, 0,30,34,38,0,3,7,11,0 / DATA CIT1AC / 9*8,9*18,9*28 / DATA CIT1AG / 0,3,3,3,0,3,3,3,0, 0,4,4,2,0,4,2,2,0, 0,5,5,5,0,1,1,1,0 / # # BOMB AND SMART BOMB DATABASE # DATA DBMBY / 25,14,17,30,16,27,20,33,24,04,27,12, 04,20,37,21,31,17,14,04,29,3*0, 25,14,17,30,16,27,10,20,37,17,21,31, 20,37,04,12,27,37,04,24,29,3*0, 25,14,17,30,16,27,10,24,04,37,8,21, 37,04,20,31,17,27,37,14,20,3*0, 25,14,17,30,16,27,29,33,14,17,37,21, 04,20,37,12,08,04,04,10,20,3*0, 25,14,17,30,16,27,29,14,37,37,08,12, 20,37,04,31,27,04,24,33,10,3*0 / DATA DBMBAC / 1,2,3,4,13,14,15,16,13,14,15,16, 25,26,27,25,26,27,25,26,27,3*0, 1,2,3,1,2,3,12,13,14,15,12,13, 14,15,12,13,14,15,24,25,26,3*0, 1,2,3,4,1,2,3,4,1,2,3,4, 15,16,17,15,16,17,15,16,17,3*0, 1,2,3,4,1,2,3,4,13,14,15,16, 13,14,15,16,24,25,24,25,24,3*0, 1,2,3,1,2,3,1,2,3,1,12,13, 12,13,20,21,22,20,21,22,23,3*0 / DATA DBMBAG / 5,4,2,4,1,2,4,5,4,1,3,1,3,3,3,2,3,2,3,2,5,3*0, 5,4,2,4,1,2,3,4,5,2,2,3,3,3,3,1,3,4,2,4,5,3*0, 5,4,2,4,1,2,3,4,2,4,1,2,3,3,3,3,2,3,5,3,4,3*0, 5,4,2,4,1,2,5,5,3,2,4,2,3,3,3,1,1,1,2,3,4,3*0, 5,4,2,4,1,2,5,3,5,4,1,1,3,3,3,3,3,1,4,5,3,3*0 / DATA DSMBX / 12*0 / DATA DSMBY / 3,38,19,21,17,23,6,27,10,31,14,34 / DATA DSMBAC / 4,8,12,16,2,6,10,14,18,20,22,24 / DATA DSMBTA / 5,6,7,8,9,9,1,1,2,3,4,5 / DATA NOSMB / 0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,12,12 / # # IF NOT FIRST WAVE, COMPUTE BONUS SCORING. # IF NO CITIES LEFT, END THE GAME. # IF (WAVE > 0) [ #NOT FIRST WAVE CALL GETADR(PRL,OUTBUF) PRL(2) = LEN CALL WTQIO(IOWVB,5,2,,,PRL) #UPDATE BOARD DISPLAY LEN = 0 CALL WAIT(2,2) #WAIT TWO SECONDS SCORE = SCORE + (LMSLCT+CMSLCT+RMSLCT) * 10 #MISSILE BONUS IF (SCORE >= FRESCO) [ #TEST FOR NEW FREE CITY FRECTY = FRECTY + 1 FRESCO = FRESCO + 10000 ] CLEFT = 0 #SET IF ANY CITIES LEFT DO I = 2,4 [ #CHECK FIRST THREE CITIES IF (STATE(I) == 1) [ #COMPUTE BONUS FOR EACH REMAINING CITY SCORE = SCORE + (100 * (WAVE/2+1)) IF (SCORE >= FRESCO) [ #TEST FOR NEW FREE CITY FRECTY = FRECTY + 1 FRESCO = FRESCO + 10000 ] CLEFT = 1 ] ELSE IF (FRECTY > 0) [ #REPLACE CITY WITH STORED FREE ONE CLEFT = 1 STATE(I) = 1 FRECTY = FRECTY - 1 LN22(SITEY(I)) = ULCOR LN22(SITEY(I)+1) = TDOWN LN22(SITEY(I)+2) = URCOR LN23(SITEY(I)) = TUP LN23(SITEY(I)+1) = HORIZ LN23(SITEY(I)+2) = TUP ] ] DO I = 6,8 [ #CHECK LAST THREE CITIES IF (STATE(I) == 1) [ SCORE = SCORE + (100 * (WAVE/2+1)) IF (SCORE >= FRESCO) [ #TEST FOR NEW FREE CITY FRECTY = FRECTY + 1 FRESCO = FRESCO + 10000 ] CLEFT = 1 ] ELSE IF (FRECTY > 0) [ #REPLACE CITY WITH STORED FREE ONE CLEFT = 1 STATE(I) = 1 FRECTY = FRECTY - 1 LN22(SITEY(I)) = ULCOR LN22(SITEY(I)+1) = TDOWN LN22(SITEY(I)+2) = URCOR LN23(SITEY(I)) = TUP LN23(SITEY(I)+1) = HORIZ LN23(SITEY(I)+2) = TUP ] ] IF (CLEFT == 0) #END GAME IF NO CITIES LEFT CALL THEEND ] WAVE = WAVE + 1 #INCREMENT WAVE COUNT IF (WAVE > 24) WAVE = 24 #HIGHEST WAVE NUMBER IS 24 STATE(1) = 1 #RESURRECT MISSILE BASES STATE(5) = 1 STATE(9) = 1 LMSLCT = 10 #AND ARM THEM CMSLCT = 10 RMSLCT = 10 DO I = 2,11 #FULL COMPLEMENT OF MISSILES ON ROW 24 LN24(I) = DEGREE DO I = 36,45 LN24(I) = DEGREE DO I = 70,79 LN24(I) = DEGREE CALL UVT100(ED,2) #ERASE SCREEN DO I = 1,23 [ #MAKE LINES 1-23 DOUBLE-WIDTH CALL UVT100(CUP,I,1) CALL UVT100(DECDWL) ] GUNX = 12 #REPOSITION GUN SIGHT GUNY = 20 CALL UVT100(CUP,GUNX,GUNY) OUTBUF(LEN+1) = GSITE LEN = LEN + 1 CALL UVT100(CUP,21,1) #REDRAW ROWS 21 THROUGH 24 DO I = 1,40 OUTBUF(LEN+I) = LN21(I) LEN = LEN + 40 CALL UVT100(CUP,22,1) DO I = 1,40 OUTBUF(LEN+I) = LN22(I) LEN = LEN + 40 CALL UVT100(CUP,23,1) DO I = 1,40 OUTBUF(LEN+I) = LN23(I) LEN = LEN + 40 CALL UVT100(CUP,24,1) DO I = 1,80 OUTBUF(LEN+I) = LN24(I) LEN = LEN + 80 # # EACH BOMB ATTACK WAVE IS SELECTED RANDOMLY FROM A SET OF FIVE # BOMB COORDINATES AND ATTACK ANGLES, AND FROM A SET OF FIVE # DELAY TIMES. (THUS THERE ARE 5*5 == 25 DIFFERENT ATTACK PATTERNS) # X = RAN(SEED) #GENERATE TWO RANDOM NUMBERS RAND1 = (X * 5) + 1 #BETWEEN ONE AND FIVE X = RAN(SEED) RAND2 = (X * 5) + 1 DO I = 1,24 [ #LOAD BOMB COORDS, DELAYS, AND ANGLES BMBX(I) = 0 BMBY(I) = DBMBY(I,RAND1) BMBAGL(I) = DBMBAG(I,RAND1) BMBACT(I) = DBMBAC(I,RAND2) ] # # ELIMINATE CERTAIN BOMBS FROM CERTAIN WAVES # DO I = 6,1,-1 [ IF (WAVE <= I) BMBACT(I+15) = 0 ] DO I = 12,7,-1 [ IF (WAVE <= I) BMBACT(I+9) = 0 ] DO I = 18,13,-1 [ IF (WAVE <= I) BMBACT(I+3) = 0 ] # # IF THERE IS ONLY ONE CITY LEFT, TARGET SOME MORE BOMBS FOR IT. # (IF ON FIRST EIGHT WAVES, TARGET ONE. ON NEXT EIGHT, # TARGET TWO, AND ON FINAL EIGHT, TARGET THREE). # CLEFT = 0 #DETERMINE NUMBER OF CITIES LEFT DO I = 2,4 [ IF (STATE(I) == 1) [ CLEFT = CLEFT + 1 CITINX = I ] ] DO I = 6,8 [ IF (STATE(I) == 1) [ CLEFT = CLEFT + 1 CITINX = I ] ] IF (CLEFT == 1) [ #IF ONLY ONE CITY LEFT... BMBX(22) = 0 #TARGET ONE BOMB BMBY(22) = CIT1Y(CITINX,1) BMBACT(22) = CIT1AC(CITINX,1) BMBAGL(22) = CIT1AG(CITINX,1) IF (WAVE > 8) [ #AFTER EIGHTH WAVE, TARGET ANOTHER BMBX(23) = 0 BMBY(23) = CIT1Y(CITINX,2) BMBACT(23) = CIT1AC(CITINX,2) BMBAGL(23) = CIT1AG(CITINX,2) ] IF (WAVE > 16) [ #AFTER SIXTEENTH WAVE, TARGET ANOTHER BMBX(24) = 0 BMBY(24) = CIT1Y(CITINX,3) BMBACT(24) = CIT1AC(CITINX,3) BMBAGL(24) = CIT1AG(CITINX,3) ] ] # # LOAD SMART BOMBS. NOSMB CONTAINS NUMBER TO BE LOADED FOR THIS WAVE. # X = RAN(SEED) RAND1 = X * 12 #RANDOM NUMBER FROM 0-11 IF (NOSMB(WAVE) > 0) [ DO I = 1,NOSMB(WAVE) [ RAND1 = RAND1 + 1 IF (RAND1 > 12) RAND1 = 1 SMBX(I) = DSMBX(RAND1) SMBY(I) = DSMBY(RAND1) SMBACT(I) = DSMBAC(RAND1) SMBTAR(I) = DSMBTA(RAND1) ] ] DO I = 1,21 #CLEAR MISSILE DISPLAY ARRAY DO J = 1,40 DSPLAY(I,J) = 0 DO I = 1,30 #CLEAR ACTIVE MISSILES MSLACT(I) = 0 DO I = 1,9 #CLEAR SITE DESTROY TIMES DSTIME(I) = 0 RETURN END