' QB UP YOUR ASTEROIDS ! ' By John Dondzila ' I'll make this quick, to save space ' ' CTRL Rotates Left, ALT Rotates Right ' SPACE BAR To Fire, Right SHIFT For Thrust ' ENTER Is Hyperspace, ESC Exits Game ' - and + Keys control game speed if your ' machine is too fast. ' ' 3 Ships Per Game, Press SPACE after you die ' to bring up a new ship ' ' There are bugs ! ' > There is no scoring yet ' > Enemy saucers do not yet destroy asteroids ' > Game tends to get a bit fast with only a few ' asteroids left on screen. ' > I originally had rotating asteroids but took ' them out to keep the program size small. ' > "Gravity Effect" with thrusters STINKS! ' > Some shots tend to pass through the smaller ' asteroids. Have't figured out why ' ' AND - I've defintely noticed that QBASIC is about ' 10X slower than QUICK BASIC ' DEFINT A-Z: RANDOMIZE TIMER DIM clock1 AS SINGLE, clock2 AS SINGLE DIM clock3 AS SINGLE, clock4 AS SINGLE DIM ast(121), bst(49), cst(15), ship(53, 16) DIM lx(10), ly(10), la(10), lb(10), lc(40), li(10) DIM lr(10), lw(10), lp(10), es1(74), es2(33) DIM mx(20), my(20), ma(20), mb(20), mc(40) DIM sx(40), sy(40), sa(40), sb(40), sc(40) DIM fx(4), fy(4), fa(4), fb(4), fax(16), fay(16), fc(4) DIM efx(4), efy(4), efa(4), efb(4), efc(4) DIM bx(25), by(25), ba(25), bb(25) DIM starx(40), stary(40) DEF fnrand (n) = INT(RND(1) * n) + 1 v$(1) = "&hb0&h20&h23&h40&h43&h60&h63&h80&h83&hA0&hB0" v$(2) = "&hb1&h21&h24&h41&h44&h61&h64&h81&h84&hA1&hB1" v$(3) = "&hb2&h22&h25&h42&h45&h62&h65&h82&h85&hA2&hB2" v$(4) = "&hb3&h28&h2b&h48&h4b&h68&h6b&h88&h8b&hA3&hB3" v$(5) = "&hb7&h31&h51&h71&h91&ha7&h34&h54&h74&h94&hB7" v$(6) = "&hb8&h32&h52&h72&h92&ha8&h35&h55&h75&h95&hb8" s$(1) = "&h11&h0C&H03&H10&h00&hF8&hC2&h27&h70&h8E&h22" s$(2) = "&h11&h0C&H03&H10&h00&hF8&hC2&h27&h70&hBA&h22" s$(3) = "&h11&hc0&h00&h00&h00&h94&h33&h24&h00&hbb&h28" s$(4) = "&h11&hf4&h11&h00&h00&hbf&hb0&h42&h79&h98&h3a" s$(5) = "&h00&h00&h00&h00&h00&h00&h00&h00&h00&h00&h00" s$(6) = "&h11&hf9&h10&h00&h00&hf1&hd2&h15&h47&h8a&hfb" s$(7) = "&h11&hc0&h00&h00&h00&h94&h33&h24&h00&hbb&h23" s$(8) = "&h11&hf4&h11&h00&h00&hbf&hb0&h42&h79&h98&h3b" s$(9) = "&h00&h06&h40&hf3&h34&h21&hd1&h00&hd0&h7f&h2c" s$(10) = "&h00&h02&h00&hf0&h47&ha0&h00&h00&h40&h78&h20" SCREEN 7: CLS : RESTORE firedata: GOSUB sreset FOR i = 1 TO 16: READ fax(i), fay(i): NEXT GOSUB spriteload newgame: ships = 3: level = 4: adlib = 1 ' Change ADLIB To 0 For No Sounds newlevel: FOR i = 1 TO level: lc(i) = 1 new1: lx(i) = RND(1) * 299: ly(i) = RND(1) * 179 IF lx > 40 AND lx < 280 THEN IF ly > 40 AND ly < 160 THEN GOTO new1 END IF lr(i) = fnrand(8): li(i) = 1: lp(i) = 0 lw(i) = 1 + fnrand(3) IF fnrand(2) = 1 THEN li(i) = -1 redo: la(i) = -3 + RND(1) * 7: lb(i) = -3 + RND(1) * 7 IF la(i) = 0 AND lb(i) = 0 GOTO redo NEXT FOR i = 1 TO 20: mc(i) = 0 mx(i) = RND(1) * 299: my(i) = RND(1) * 179 redo2: ma(i) = -3 + RND(1) * 7: mb(i) = -3 + RND(1) * 7 IF ma(i) = 0 AND mb(i) = 0 GOTO redo2 NEXT FOR i = 1 TO 40: sc(i) = 0: starx(i) = fnrand(318) stary(i) = fnrand(198) sx(i) = RND(1) * 299: sy(i) = RND(1) * 179 redo3: sa(i) = -3 + RND(1) * 7: sb(i) = -3 + RND(1) * 7 IF sa(i) = 0 AND sb(i) = 0 GOTO redo3 NEXT pg1 = 0: pg2 = 1: sx = 154: sy = 94: sc = 1: ns = 0 bks = 15: bkl = 16: bkn = 2: sai = 0: sap = 100 dlay = 5: voc = 6: snd = 10: GOSUB sounds mainloop: clock2 = TIMER waithere1: clock1 = TIMER clock3 = clock1 - clock2 IF clock3 > .004 GOTO cdone GOTO waithere1 cdone: IF ships < 1 GOTO gameover bks = bks + 1: IF bks > bkl THEN GOSUB back IF saut < 1 THEN sai = sai + 1 IF sai > sap THEN GOSUB setsauc ky$ = INKEY$ IF ky$ = CHR$(27) GOTO quit IF ky$ = "-" THEN dlay = dlay - 1: IF dlay < 1 THEN dlay = 1 END IF IF ky$ = "+" OR ky$ = "=" THEN dlay = dlay + 1: IF dlay > 60 THEN dlay = 60 END IF IF ky$ = " " AND die = 1 AND boom < 1 THEN sx = 154: sy = 94: die = 0: ky$ = "": ships = ships - 1 END IF IF ns > 0 OR die > 0 GOTO skip IF ky$ = " " THEN GOSUB setfire IF ky$ = CHR$(13) THEN GOSUB hyper skip: SCREEN 7, , pg1, pg2 FOR d = 1 TO dlay: WAIT &H3DA, 8: NEXT: CLS gone = 0: FOR i = 1 TO 40 IF i < 5 THEN IF efc(i) > 0 THEN GOSUB efire IF i < 26 AND boom > 0 THEN GOSUB boom PSET (starx(i), stary(i)), 15 gone = gone + lc(i): gone = gone + mc(i) gone = gone + sc(i) IF lc(i) = 1 THEN GOSUB large IF mc(i) = 1 THEN GOSUB medium IF sc(i) = 1 THEN GOSUB small NEXT FOR o = 1 TO 4: IF fc(o) > 0 THEN GOSUB fire NEXT IF saut = 1 THEN PUT (saux, sauy), es1, OR: GOSUB saucer IF saut = 2 THEN PUT (saux, sauy), es2, OR: GOSUB saucer IF ns > 0 THEN ns = ns - 1: GOTO skip1 IF die = 1 GOTO skip1 PUT (sx, sy), ship(0, sc), OR DEF SEG = &H40: p = PEEK(&H17): thr = 0 IF (p AND 4) = 4 THEN sc = sc - 1: IF sc < 1 THEN sc = 16 IF (p AND 8) = 8 THEN sc = sc + 1: IF sc > 16 THEN sc = 1 IF (p AND 1) = 1 THEN thrst = thrst + 2: thr = 120 GOSUB thrust IF thrst > 12 THEN thrst = 12 IF thrst > 0 THEN sx = sx + fax(sc): sy = sy + fay(sc) IF sx < 0 THEN sx = 299 IF sx > 299 THEN sx = 0 IF sy < 0 THEN sy = 179 IF sy > 179 THEN sy = 0 thrst = thrst - 1 END IF skip1: pg1 = (pg1 + 1) AND 1: pg2 = (pg2 + 1) AND 1 IF gone = 0 GOTO inclevel IF saut = 0 GOTO mainloop saux = saux + saua: sauc = sauc + 1: sauy = sauy + saup IF saux > 299 OR saux < 0 THEN saut = 0: snd = 5: voc = 3: GOSUB sounds END IF IF sauy < 0 THEN sauy = 0: saup = 0 IF sauy > 185 THEN sauy = 185: saup = 0 IF sauc > 30 THEN sauc = 0: saup = -2 + fnrand(3) END IF GOTO mainloop quit: GOSUB sreset: SCREEN 0: CLEAR : WIDTH 80: END large: PUT (lx(i), ly(i)), ast, OR lx(i) = lx(i) + la(i): ly(i) = ly(i) + lb(i) cx = lx(i): cy = ly(i) IF die = 0 AND sx > cx - 12 AND sx < cx + 12 THEN IF sy > cy - 12 AND sy < cy + 12 THEN GOSUB youdie END IF IF lx(i) < 0 THEN lx(i) = 299 IF lx(i) > 299 THEN lx(i) = 0 IF ly(i) < 0 THEN ly(i) = 179 IF ly(i) > 179 THEN ly(i) = 0 RETURN medium: PUT (mx(i), my(i)), bst, OR mx(i) = mx(i) + ma(i): my(i) = my(i) + mb(i) cx = mx(i): cy = my(i) IF die = 0 AND sx > cx - 12 AND sx < cx + 6 THEN IF sy > cy - 12 AND sy < cy + 12 THEN GOSUB youdie END IF IF mx(i) < 0 THEN mx(i) = 299 IF mx(i) > 299 THEN mx(i) = 0 IF my(i) < 0 THEN my(i) = 179 IF my(i) > 179 THEN my(i) = 0 RETURN small: PUT (sx(i), sy(i)), cst, OR sx(i) = sx(i) + sa(i): sy(i) = sy(i) + sb(i) cx = sx(i): cy = sy(i) IF die = 0 AND sx > cx - 6 AND sx < cx + 6 THEN IF sy > cy - 6 AND sy < cy + 6 THEN GOSUB youdie END IF IF sx(i) < 0 THEN sx(i) = 299 IF sx(i) > 299 THEN sx(i) = 0 IF sy(i) < 0 THEN sy(i) = 179 IF sy(i) > 179 THEN sy(i) = 0 RETURN chklrg: cx = fx(o): cy = fy(o): dx = lx(i): dy = ly(i) IF lc(i) = 1 THEN IF cx > dx AND cx < dx + 19 THEN IF cy > dy AND cy < dy + 19 THEN GOSUB lahit END IF END IF RETURN lahit: lc(i) = 0: r = 1: rh = i: fc(o) = -1 lahit1: IF mc(r) = 0 GOTO lahit2 r = r + 1: IF r > 19 THEN RETURN GOTO lahit1 lahit2: snd = 3: voc = 2: GOSUB sounds: bout = 1 mc(r) = 1: mx(r) = lx(rh) + 3: my(r) = ly(rh) + 3 lahit3: ma(r) = -3 + RND(1) * 7: mb(r) = -3 + RND(1) * 7 IF ma(r) = 0 AND mb(r) = 0 GOTO lahit3 mc(r + 1) = 1: mx(r + 1) = lx(rh) + 3 my(r + 1) = ly(rh) + 3 lahit4: ma(r + 1) = -3 + RND(1) * 7: mb(r + 1) = -3 + RND(1) * 7 IF ma(r + 1) = 0 AND mb(r + 1) = 0 GOTO lahit4 RETURN chkmed: cx = fx(o): cy = fy(o): dx = mx(i): dy = my(i) IF mc(i) = 1 THEN IF cx > dx AND cx < dx + 11 THEN IF cy > dy AND cy < dy + 11 THEN GOSUB mehit END IF END IF RETURN mehit: mc(i) = 0: r = 1: rh = i: fc(o) = -1 mehit1: IF sc(r) = 0 GOTO mehit2 r = r + 1: IF r > 39 THEN RETURN GOTO mehit1 mehit2: snd = 3: voc = 2: GOSUB sounds: bout = 1 sc(r) = 1: sx(r) = mx(rh) + 3: sy(r) = my(rh) + 3 mehit3: sa(r) = -3 + RND(1) * 7: sb(r) = -3 + RND(1) * 7 IF sa(r) = 0 AND sb(r) = 0 GOTO mehit3 sc(r + 1) = 1: sx(r + 1) = mx(rh) + 3 sy(r + 1) = my(rh) + 3 mehit4: sa(r + 1) = -3 + RND(1) * 7: sb(r + 1) = -3 + RND(1) * 7 IF sa(r + 1) = 0 AND sb(r + 1) = 0 GOTO mehit4 RETURN chksml: cx = fx(o): cy = fy(o): dx = sx(i) - 4: dy = sy(i) - 4 IF sc(i) = 1 AND cx > dx AND cx < dx + 8 THEN IF cy > dy AND cy < dy + 8 THEN GOSUB smhit END IF RETURN smhit: snd = 7: voc = 2: GOSUB sounds: bout = 1 sc(i) = 0: fc(o) = -1: RETURN setfire: r = 1 setfire2: IF fc(r) = 0 GOTO setfire3 r = r + 1: IF r > 4 THEN RETURN GOTO setfire2 setfire3: voc = 4: snd = 6: GOSUB sounds fa(r) = fax(sc): fb(r) = fay(sc): fx(r) = sx + 6 fy(r) = sy + 6: fc(r) = 1: RETURN fire: p = POINT(fx(o), fy(o)) IF p > 0 AND p < 14 AND fc(o) > 0 THEN GOSUB ifhit PSET (fx(o), fy(o)), 14 fx(o) = fx(o) + fa(o): fy(o) = fy(o) + fb(o) IF fx(o) < 0 THEN fx(o) = 319 IF fx(o) > 319 THEN fx(o) = 0 IF fy(o) < 0 THEN fy(o) = 199 IF fy(o) > 199 THEN fy(o) = 0 IF saut > 0 THEN GOSUB chksau p = POINT(fx(o), fy(o)) IF p > 0 AND p < 14 AND fc(o) > 0 THEN GOSUB ifhit fc(o) = fc(o) + 1: IF fc(o) > 45 THEN fc(o) = 0 RETURN chksau: IF fx(o) > saux AND fx(o) < saux + 18 THEN IF fy(o) > sauy AND fy(o) < sauy + 12 THEN GOSUB hitsa END IF RETURN hitsa: saut = 0: snd = 9: voc = 5: GOSUB sounds x = saux + 9: y = sauy + 6: GOSUB setboom snd = 5: voc = 3: GOSUB sounds: RETURN setefire: r = 1 setefire2: IF efc(r) = 0 GOTO setefire3 r = r + 1: IF r > 4 THEN RETURN GOTO setefire2 setefire3: voc = 4: snd = 6: GOSUB sounds efa(r) = 1 + fnrand(2) IF fnrand(2) = 1 THEN efa(r) = -efa(r) efb(r) = 1 + fnrand(2) IF fnrand(2) = 1 THEN efb(r) = -efb(r) efx(r) = saux + 6: efy(r) = sauy + 6 IF saut = 2 THEN IF sx < efx(r) THEN efa(r) = ABS(efa(r)) * -1 IF sx > efx(r) THEN efa(r) = ABS(efa(r)) IF sy < efy(r) THEN efb(r) = ABS(efb(r)) * -1 IF sy > efy(r) THEN efb(r) = ABS(efb(r)) END IF efc(r) = 1: RETURN efire: PSET (efx(i), efy(i)), 14 efx(i) = efx(i) + efa(i): efy(i) = efy(i) + efb(i) IF efx(i) < 0 THEN efx(i) = 319 IF efx(i) > 319 THEN efx(i) = 0 IF efy(i) < 0 THEN efy(i) = 199 IF efy(i) > 199 THEN efy(i) = 0 efc(i) = efc(i) + 1: IF efc(i) > 50 THEN efc(i) = 0 IF die > 0 THEN RETURN IF efx(i) > sx AND efx(i) < sx + 12 THEN IF efy(i) > sy AND efy(i) < sy + 12 THEN GOSUB youdie END IF RETURN hyper: sx = 5 + fnrand(295): sy = 5 + fnrand(190) ns = 20 + fnrand(20): RETURN saucer: sauf = sauf + 1 IF sauf > saug THEN sauf = 1: saug = 10 + fnrand(10) GOSUB setefire END IF RETURN inclevel: CLS : level = level + 1: IF level > 10 THEN level = 10 GOTO newlevel firedata: DATA 0,-4,2,-3,3,-2,4,-1,4,0,4,1,3,2,2,3,0,4 DATA -2,3,-3,2,-4,1,-4,0,-4,-1,-3,-2,-2,-3,0,-4 spriteload: RESTORE sprites FOR i = 0 TO 121: READ ast(i): NEXT FOR i = 0 TO 49: READ bst(i): NEXT FOR i = 0 TO 15: READ cst(i): NEXT FOR o = 1 TO 16: FOR i = 0 TO 53: READ ship(i, o): NEXT NEXT: FOR i = 0 TO 74: READ es1(i): NEXT FOR i = 0 TO 33: READ es2(i): NEXT: RETURN sprites: DATA 20,20,0,0,0,0,0,0,-505,1792,254,-505,0,0,-241 DATA 3968,-32513,-241,128,0,-7410,3776,-16157,-7410 DATA 448,28,-9159,14816,-7972,-9159,1760,35,-137,30688 DATA -7937,-137,2272,0,-129,32736,-7937,-129,224,0 DATA -6273,32736,-7961,-6273,224,24,-1153,32736,-7941 DATA -1153,224,4,-145,28576,-24321,-145,4256,16384 DATA -145,28576,-24321,-145,4256,16384,-137,30624,-24321 DATA -137,2208,16384,-16521,30560,24767,-16521,2144 DATA -32704,-8325,31712,-7969,-8325,1248,32,-193,16352 DATA -7937,-193,224,0,-453,15328,-7938,-453,1248,1 DATA -1764,7360,-16135,-1764,960,6,-6385,3968,-32537 DATA -6385,128,24,-1021,768,252,-1021,0,0,0,0,0,0,0 DATA 0,12,12,0,0,0,0,31,31,31,0,-16321,-16321,-16321 DATA 0,-8089,-8089,-8089,24,-8097,-8097,-8097,32,-24449 DATA -24449,-24449,16384,-24449,-24449,-24449,16384 DATA 24703,24703,24703,-32768,-16273,-16273,-16273 DATA 16,-16333,-16333,-16333,12,-32737,-32737,-32737 DATA 0,0,0,0,0 DATA 7,7,30840,120,-4884,4332,-2314,2294,-258,254,-16706 DATA 16574,23130,9306,15420,60 DATA 13,13,0,0,0,0,0,0,0,2,2,2,2,5,2,2,2,5,7,7,7,-32758 DATA 7,7,7,-32758,-32753,-32753,-32753,16407,-32755 DATA -32755,-32755,16407,-16360,-16360,-16360,-24529 DATA -16353,-16353,-16353,-24529,-8136,-8136,-8136 DATA -12193,0,0,0,-3976,0,0,0,0 DATA 13,13,0,0,0,0,0,0,0,-16384,-32768,-32768,-32768 DATA 16385,-32767,-32767,-32767,16386,-32765,-32765 DATA -32765,16389,-32761,-32761,-32761,16395,-32753 DATA -32753,-32753,16407,-16353,-16353,-16353,-24529 DATA -16327,-16327,-16327,-24481,-16356,-16356,-16356 DATA -24473,-16383,-16383,-16383,-24545,-16384,-16384 DATA -16384,8193,0,0,0,-8192 DATA 13,13,2048,2048,2048,12288,12288,12288,12288,-10240 DATA -4096,-4096,-4096,10247,-8185,-8185,-8185,-12168 DATA 24703,24703,24703,-12153,-8136,-8136,-8136,-12161 DATA -8164,-8164,-8164,-28609,-16378,-16378,-16378 DATA -24545,-16381,-16381,-16381,-24569,-16381,-16381 DATA -16381,-24569,-16383,-16383,-16383,-24573,16384 DATA 16384,16384,-24575,0,0,0,24576 DATA 13,13,0,0,0,0,0,0,0,0,0,0,0,2300,124,124,124,-3965 DATA -8065,-8065,-8065,4348,-16257,-16257,-16257,-24321 DATA -16347,-16347,-16347,-24449,-32749,-32749,-32749 DATA 16447,-32749,-32749,-32749,16447,11,11,11,-32738 DATA 14,14,14,29,6,6,6,13,0,0,0,14 DATA 13,13,0,0,0,0,0,0,0,96,32,32,32,88,56,56,56,102 DATA 62,62,62,-32647,-32745,-32745,-32745,24638,-8173 DATA -8173,-8173,-28609,-32745,-32745,-32745,24638 DATA 62,62,62,-32647,56,56,56,102,32,32,32,88,0,0,0 DATA 96,0,0,0,0 DATA 13,13,0,0,0,0,0,0,0,24,8,8,8,20,28,28,28,42,30 DATA 30,30,45,23,23,23,-32706,-32761,-32761,-32761 DATA 16447,-16337,-16337,-16337,-24449,-8065,-8065 DATA -8065,4284,124,124,124,-3965,0,0,0,252,0,0,0,0 DATA 0,0,0,0 DATA 13,13,0,0,0,-32768,-32768,-32768,-32768,16385 DATA -32767,-32767,-32767,16387,-32765,-32765,-32765 DATA 16391,-32765,-32765,-32765,16391,-16378,-16378 DATA -16378,-24545,-16356,-16356,-16356,-24513,-16328 DATA -16328,-16328,-24449,24639,24639,24639,-12161 DATA -8065,-8065,-8065,-12159,-4093,-4093,-4093,10492 DATA 12288,12288,12288,-10237,2048,2048,2048,12288 DATA 13,13,0,0,0,-8191,-16383,-16383,-16383,-24573 DATA -16381,-16381,-16381,-24561,-16371,-16371,-16371 DATA -24513,-16335,-16335,-16335,-24321,-16285,-16285 DATA -16285,-24321,-32643,-32643,-32643,16543,-32737 DATA -32737,-32737,16495,-32753,-32753,-32753,16403 DATA -32765,-32765,-32765,16396,-32768,-32768,-32768 DATA 16387,0,0,0,-16384,0,0,0,8192 DATA 13,13,0,0,0,0,0,0,0,-3976,-8136,-8136,-8136,-12193 DATA -16353,-16353,-16353,-24529,-16360,-16360,-16360 DATA -24529,-32755,-32755,-32755,16407,-32753,-32753 DATA -32753,16407,7,7,7,-32758,7,7,7,-32758,2,2,2,5 DATA 2,2,2,5,0,0,0,2,0,0,0,0 DATA 13,13,0,0,0,56,24,24,24,36,28,28,28,-16337,-16359 DATA -16359,-16359,12335,-8164,-8164,-8164,-12241,-16353 DATA -16353,-16353,-24529,-32753,-32753,-32753,16407 DATA 15,15,15,-32746,14,14,14,21,12,12,12,18,8,8,8 DATA 20,0,0,0,24,0,0,0,0 DATA 13,13,0,0,0,48,16,16,16,44,28,28,28,46,30,30,30 DATA 47,30,30,30,47,27,27,27,-16337,-16327,-16327,-16327 DATA -8113,-8136,-8136,-8136,-4001,-4041,-4041,-4041 DATA 2143,63,63,63,-4008,120,120,120,167,96,96,96,216 DATA 128,128,128,96 DATA 13,13,0,0,0,-32765,3,3,3,-32763,-32765,-32765 DATA -32765,-16379,-32762,-32762,-32762,-16373,16398 DATA 16398,16398,-8169,16398,16398,16398,-8169,8221 DATA 8221,8221,-4049,-4065,-4065,-4065,-2001,-4033 DATA -4033,-4033,-1983,-4095,-4095,-4095,2174,0,0,0 DATA -1919,0,0,0,0,0,0,0,0 DATA 13,13,0,0,0,0,0,0,0,12288,8192,8192,8192,-12288 DATA -8192,-8192,-8192,12291,-8189,-8189,-8189,-4084 DATA 16399,16399,16399,-8141,16446,16446,16446,-8113 DATA 16399,16399,16399,-8141,-8189,-8189,-8189,-4084 DATA -8192,-8192,-8192,12291,8192,8192,8192,-12288 DATA 0,0,0,12288,0,0,0,0 DATA 13,13,0,0,0,0,0,0,0,0,0,0,0,-2047,-4095,-4095 DATA -4095,2174,-4033,-4033,-4033,-6079,-24545,-24545 DATA -24545,-4049,15,15,15,-8169,16391,16391,16391 DATA -8181,-16381,-16381,-16381,-24571,-16383,-16383 DATA -16383,-24574,-32768,-32768,-32768,16385,0,0,0 DATA -16384,0,0,0,0 DATA 13,13,128,128,128,96,96,96,96,222,126,126,126 DATA -1887,-4033,-4033,-4033,2140,-8137,-8137,-8137 DATA -4001,-8168,-8168,-8168,-4049,-16359,-16359,-16359 DATA -8145,27,27,27,-16337,14,14,14,23,14,14,14,23 DATA 12,12,12,22,8,8,8,20,0,0,0,8 DATA 13,13,0,0,0,32,0,0,0,24,8,8,8,22,14,14,14,-32751 DATA -32753,-32753,-32753,16406,-16369,-16369,-16369 DATA -20457,-4083,-4083,-4083,-14313,12318,12318,12318 DATA -2001,24604,24604,24604,-2001,-32739,-32739,-32739 DATA -8145,30,30,30,-32721,28,28,28,46,0,0,0,60 DATA 18,12,14343,0,0,-16384,0,192,-1009,0,0,0,1792 DATA 248,-481,0,0,0,3840,252,-193,3072,12,3084,7936 DATA 254,-129,3200,204,-13300,16128,255,-129,128,192 DATA -16384,16128,255,-129,128,0,128,3904,252,-1,20672 DATA 1,336,28672,-32765,-129,1408,84,21509,16128,255 DATA -129,128,0,0,16128,255,-193,0,0,0,7936,254,15903 DATA 0,0,-16384,0,192,0 DATA 10,8,12,0,12,0,30,0,30,12,63,0,63,30,-32641,0 DATA -32641,63,-16129,0,-16129,0,16597,-32726,-16129 DATA -32641,-32641,0,-32641,63,63,0,63,0 sounds: IF adlib = 0 THEN RETURN FOR in = 1 TO 44 STEP 4: a$ = MID$(v$(voc), in, 4) a = VAL(a$): b$ = MID$(s$(snd), in, 4) b = VAL(b$) OUT &H388, a: FOR i1 = 1 TO 6: p = INP(&H388): NEXT OUT &H389, b: FOR i1 = 1 TO 35: p = INP(&H388): NEXT NEXT RETURN back: bks = 1: bkn = bkn + 1: IF bkn > 2 THEN bkn = 1 snd = bkn: voc = 1: GOSUB sounds: RETURN sreset: FOR in = 0 TO 255 OUT &H388, in: FOR i1 = 1 TO 6: p = INP(&H388): NEXT OUT &H389, 0: FOR i1 = 1 TO 35: p = INP(&H388): NEXT NEXT: RETURN ifhit: bout = 0: FOR i = 1 TO 40 GOSUB chksml IF i < 11 THEN GOSUB chklrg IF i < 21 THEN GOSUB chkmed IF bout = 1 THEN EXIT FOR NEXT RETURN setboom: FOR in = 1 TO 25: bx(in) = x: by(in) = y ba(in) = fnrand(3): boom = 1250 IF fnrand(2) = 1 THEN ba(in) = -ba(in) bb(in) = fnrand(3) IF fnrand(2) = 1 THEN bb(in) = -bb(in) NEXT: RETURN boom: PSET (bx(i), by(i)), 15 bx(i) = bx(i) + ba(i): by(i) = by(i) + bb(i) IF bx(i) < 0 THEN bx(i) = 319 IF bx(i) > 319 THEN bx(i) = 0 IF by(i) < 0 THEN by(i) = 199 IF by(i) > 199 THEN by(i) = 0 boom = boom - 1: IF boom < 0 THEN boom = 0 RETURN youdie: x = sx: y = sy: GOSUB setboom thr = 0: GOSUB thrust snd = 9: voc = 5: GOSUB sounds: die = 1 RETURN setsauc: sai = 0: r = fnrand(5): sap = 100 + fnrand(40) IF r < 3 THEN sauc = 1: saux = 0: sauy = fnrand(180): saut = 1 saua = 2 snd = 4: voc = 3: GOSUB sounds: sauf = 1: saug = 20 END IF IF r > 2 THEN sauc = 1: saux = 0: sauy = fnrand(180): saut = 2 saua = 2 snd = 8: voc = 3: GOSUB sounds: sauf = 1: saug = 20 END IF IF fnrand(2) = 1 THEN saux = 298: saua = -2 RETURN thrust: OUT &H388, &HA8: FOR z = 1 TO 6: v = INP(&H388): NEXT OUT &H389, thr: FOR z = 1 TO 35: v = INP(&H388): NEXT RETURN gameover: SCREEN 0: WIDTH 80: CLS GOSUB sreset: PRINT "Game Over !" END