'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ '³ SOLO .BAS Solo Dogfighting ³ 'ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ '³ This program is by Mallard. For other programs like this ³ '³ one, or for more information, please contact me. I can ³ '³ be reached at "mallard@gcomm.com" via Internet e-mail or ³ '³ or via WWW - "http://www.lookup.com/homepages/80948/qb/ ³ '³ index.html". Please upload as much source code as you can ³ '³ to this home page! Feel free to distribute this program,³ '³ or use part or all of it in one of your own as long as I ³ '³ am given credit. Thanks! ÍMallardÍ ³ 'ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; ' SOLO.BAS - A dogfighting/action game written by Mallard, C 1995. ' PLEASE DO NOT MODIFY THIS SOURCE CODE WITHOUT WRITTEN PERMISSION FROM ' THE AUTHOR. ' ' Sorry about the lack of comments in the source, but, hey - this is how ' I write my programs. ' DECLARE SUB youlose () DECLARE SUB youwin () RANDOMIZE TIMER hp = 32: ehp = 32 DIM ship(70), ship2(70), expl(70), aste(70), miss(70), shop(70), caps1(70), caps2(70), tri(70), beam(70), pts1(70) DIM fire1(5, 2), fire2(5, 2) DIM starx(30), stary(30), start(30) DIM obs(25, 3), desc$(5) desc$(1) = "Cake Walk" desc$(2) = "A little bit louder now" desc$(3) = "Don't sweat it" desc$(4) = "No pain, no gain" desc$(5) = "This is how we do it" CLS BLOAD "solo.bsv" DO WHILE INKEY$ = "": LOOP SCREEN 7, 0, 1, 0 DATA 00,00,00,00,07,07,00,00,00,00 DATA 00,00,00,00,07,07,00,00,00,00 DATA 00,00,00,07,07,07,07,00,00,00 DATA 00,00,07,03,03,03,03,07,00,00 DATA 00,00,07,03,11,11,03,07,00,00 DATA 00,00,07,07,11,11,07,07,00,00 DATA 00,00,07,03,11,11,03,07,00,00 DATA 00,00,07,03,03,03,03,07,00,00 DATA 00,07,07,07,07,07,07,07,07,00 DATA 07,07,07,07,07,07,07,07,07,07 DATA 07,04,04,08,08,08,08,04,04,07 DATA 07,04,08,00,00,00,00,08,04,07 DATA 08,08,00,00,00,00,00,00,08,08 DATA 08,08,00,00,00,00,00,00,08,08 DATA 13,04,08,00,00,00,00,01,04,13 DATA 13,04,04,05,05,05,05,04,04,13 DATA 13,13,13,13,13,13,13,13,13,13 DATA 00,13,13,13,13,13,13,13,13,00 DATA 00,00,13,03,03,03,03,13,00,00 DATA 00,00,13,03,11,11,03,13,00,00 DATA 00,00,13,13,11,11,13,13,00,00 DATA 00,00,13,03,11,11,03,13,00,00 DATA 00,00,13,03,03,03,03,13,00,00 DATA 00,00,00,13,13,13,13,00,00,00 DATA 00,00,00,00,13,13,00,00,00,00 DATA 00,00,00,00,13,13,00,00,00,00 DATA 00,00,00,00,00,00,04,00,00,00 DATA 00,00,00,00,00,04,04,00,00,00 DATA 00,04,04,00,04,04,04,00,00,00 DATA 04,04,04,04,12,12,04,00,04,04 DATA 00,04,12,12,14,12,04,04,04,04 DATA 00,04,12,14,14,14,12,12,04,00 DATA 04,04,12,14,14,14,12,12,00,00 DATA 00,04,04,12,14,12,12,00,00,00 DATA 00,00,04,12,12,12,04,00,00,00 DATA 00,04,04,04,04,04,04,04,00,00 DATA 00,04,04,04,04,00,04,04,04,00 DATA 04,00,00,04,00,00,00,04,00,00 DATA 00,00,00,00,00,00,00,00,00,00 DATA 00,00,00,00,15,15,00,00,00,00 DATA 00,00,00,15,15,15,15,15,00,00 DATA 00,00,15,15,07,07,15,15,15,00 DATA 00,07,07,07,07,07,07,15,15,00 DATA 00,07,07,07,07,07,07,07,07,07 DATA 07,07,07,07,07,07,07,07,07,07 DATA 07,07,07,07,07,07,07,07,07,07 DATA 07,07,07,07,07,07,07,07,07,07 DATA 07,07,07,07,07,07,07,07,07,08 DATA 00,07,07,07,07,07,07,07,08,00 DATA 00,08,07,07,07,07,08,08,00,00 DATA 00,08,08,08,07,08,08,00,00,00 DATA 00,00,00,08,08,08,00,00,00,00 DATA 00,00,04,12,14,12,04,00,00,00 DATA 00,00,00,04,04,04,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,01,01,01,00,00,00,00 DATA 00,00,00,09,09,09,00,00,00,00 DATA 00,00,00,09,09,09,00,00,00,00 DATA 00,00,00,00,09,00,00,00,00,00 DATA 08,08,00,00,00,00,00,00,08,08 DATA 09,04,08,00,00,00,00,01,04,09 DATA 09,04,04,01,01,01,01,04,04,09 DATA 09,09,09,09,09,09,09,09,09,09 DATA 00,09,09,09,09,09,09,09,09,00 DATA 00,00,09,03,03,03,03,09,00,00 DATA 00,00,09,03,11,11,03,09,00,00 DATA 00,00,09,09,11,11,09,09,00,00 DATA 00,00,09,03,11,11,03,09,00,00 DATA 00,00,09,03,03,03,03,09,00,00 DATA 00,00,00,09,09,09,09,00,00,00 DATA 00,00,00,00,09,09,00,00,00,00 DATA 00,00,00,00,09,09,00,00,00,00 DATA 00,00,00,02,02,02,02,00,00,00 DATA 00,00,02,10,10,10,10,02,00,00 DATA 00,02,10,10,10,10,10,10,02,00 DATA 00,15,15,15,15,15,15,15,15,00 DATA 00,15,15,00,00,00,00,00,00,00 DATA 00,15,15,00,00,00,00,00,00,00 DATA 00,15,15,15,15,15,15,15,15,00 DATA 00,00,00,00,00,00,00,15,15,00 DATA 00,00,00,00,00,00,00,15,15,00 DATA 00,15,15,15,15,15,15,15,15,00 DATA 00,02,10,10,10,10,10,10,02,00 DATA 00,00,02,10,10,10,10,02,00,00 DATA 00,00,00,02,02,02,02,00,00,00 DATA 00,00,00,05,05,05,05,00,00,00 DATA 00,00,05,13,13,13,13,05,00,00 DATA 00,05,13,13,13,13,13,13,05,00 DATA 00,15,15,00,00,00,00,15,15,00 DATA 00,15,15,00,00,00,00,15,15,00 DATA 00,15,15,00,00,00,00,15,15,00 DATA 00,15,15,15,15,15,15,15,15,00 DATA 00,15,15,00,00,00,00,15,15,00 DATA 00,15,15,00,00,00,00,15,15,00 DATA 00,15,15,00,00,00,00,15,15,00 DATA 00,05,13,13,13,13,13,13,05,00 DATA 00,00,05,13,13,13,13,05,00,00 DATA 00,00,00,05,05,05,05,00,00,00 DATA 00,00,04,12,14,12,04,00,00,00 DATA 02,02,02,02,02,02,02,02,02,02 DATA 02,10,10,10,10,10,10,10,10,02 DATA 02,10,10,10,10,10,10,10,10,02 DATA 00,02,10,10,10,10,10,10,02,00 DATA 00,02,10,10,10,10,10,10,02,00 DATA 00,00,02,10,10,10,10,02,00,00 DATA 00,00,02,10,10,10,10,02,00,00 DATA 00,04,00,02,10,10,02,00,04,00 DATA 00,04,00,02,10,10,02,00,04,00 DATA 00,04,00,00,02,02,00,00,04,00 DATA 00,04,00,00,02,02,00,00,04,00 DATA 00,00,00,00,00,00,00,00,00,00 DATA 00,00,00,00,04,04,00,00,00,00 DATA 00,00,00,00,04,04,00,00,00,00 DATA 00,00,00,00,04,04,00,00,00,00 DATA 00,00,00,00,04,04,00,00,00,00 DATA 00,00,00,00,04,12,00,00,00,00 DATA 00,00,00,00,12,12,00,00,00,00 DATA 00,00,00,00,12,12,00,00,00,00 DATA 00,00,00,00,12,14,00,00,00,00 DATA 00,00,00,00,14,14,00,00,00,00 DATA 00,00,00,00,14,14,00,00,00,00 DATA 00,00,00,00,15,14,00,00,00,00 DATA 00,00,00,00,15,15,00,00,00,00 DATA 00,00,00,00,15,15,00,00,00,00 DATA 00,00,00,00,00,00,00,00,00,00 DATA 00,15,15,00,15,15,15,15,15,00 DATA 00,15,15,00,15,00,00,00,15,00 DATA 00,15,15,00,15,00,00,00,15,00 DATA 00,15,15,00,15,00,00,00,15,00 DATA 00,15,15,00,15,15,15,15,15,00 DATA 00,00,00,00,00,00,00,00,00,00 DATA 00,15,15,15,00,00,00,15,15,15 DATA 00,15,00,15,07,07,07,15,00,00 DATA 00,15,15,15,00,07,00,15,15,15 DATA 00,15,00,00,00,07,00,00,00,15 DATA 00,15,00,00,00,07,00,15,15,15 DATA 00,00,00,00,00,00,00,00,00,00 FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), ship FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), ship2 FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), expl FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), aste FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), miss FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), shop FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), caps1 FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), caps2 FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), tri FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), beam FOR i = 1 TO 13 FOR j = 1 TO 10 READ z PSET (j, i), z NEXT NEXT GET (0, 0)-(12, 13), pts1 FOR i = 1 TO 30 starx(i) = INT(RND * 320) + 1 stary(i) = INT(RND * 180) + 1 start(i) = INT(RND * 3) + 1 NEXT i newlevel: CLS IF hp < 27 THEN hp = hp + 5 level = level + 1 ehp = level * 6 shot = 200 x = 160 y = 160 x2 = 160 y2 = 10 momentum = 0 hmomentum = 0 vdir = 1 hdir = 1 hdir2 = 1 vdir2 = 2 eship = 1 FOR i = 1 TO level * 5 obs(i, 1) = INT(RND * 3) + 1: obs(i, 2) = INT(RND * 305) + 1: obs(i, 3) = INT(RND * 60) + 1 NEXT i startime = TIMER CLS level1$ = "Wave" + STR$(level) LOCATE 12, 20 - (LEN(level1$) \ 2) PRINT level1$ level2$ = desc$(level) LOCATE 13, 20 - (LEN(level2$) \ 2) PRINT level2$ PCOPY 1, 0 DO WHILE INKEY$ = "": LOOP putship: s: s$ = "" DO WHILE s$ = "" s$ = INKEY$ IF momentum <> 0 THEN SELECT CASE vdir CASE 1 y = y - momentum CASE 2 y = y + momentum END SELECT END IF IF hmomentum <> 0 THEN SELECT CASE hdir CASE 1 x = x + hmomentum CASE 2 x = x - hmomentum END SELECT END IF CLS IF y >= 185 THEN y = 185: vdir = 1: momentum = 0 IF y <= 10 THEN y = 10: vdir = 2: momentum = 0 IF x <= 10 THEN x = 10: hdir = 1: hmomentum = 0 IF x >= 300 THEN x = 300: hdir = 2: hmomentum = 0 PUT (x, y), ship FOR i = 1 TO 30 IF start(i) = 1 THEN c = 8 IF start(i) = 2 THEN c = 7 IF start(i) = 3 THEN c = 15 PSET (starx(i), stary(i)), c stary(i) = stary(i) + (3 * start(i)) IF stary(i) >= 200 THEN LET stary(i) = 1: LET starx(i) = INT(RND * 320) + 1 NEXT i LINE (0, 0)-(0, 200), 1 LINE (0, 0)-(0, shot), 9 LINE (0, 199)-(320, 199), 4 LINE (0, 199)-(hp * 10, 199), 14 IF b1 = 1 THEN fire1(1, 2) = fire1(1, 2) - 5: LINE (fire1(1, 1), fire1(1, 2))-(fire1(1, 1), fire1(1, 2) - 5), 9: IF fire1(1, 2) <= 0 THEN b1 = 0 IF b2 = 1 THEN fire1(2, 2) = fire1(2, 2) - 5: LINE (fire1(2, 1), fire1(2, 2))-(fire1(2, 1), fire1(2, 2) - 5), 9: IF fire1(2, 2) <= 0 THEN b2 = 0 IF b3 = 1 THEN fire1(3, 2) = fire1(3, 2) - 5: LINE (fire1(3, 1), fire1(3, 2))-(fire1(3, 1), fire1(3, 2) - 5), 9: IF fire1(3, 2) <= 0 THEN b3 = 0 IF b4 = 1 THEN fire1(4, 2) = fire1(4, 2) - 5: LINE (fire1(4, 1), fire1(4, 2))-(fire1(4, 1), fire1(4, 2) - 5), 9: IF fire1(4, 2) <= 0 THEN b4 = 0 IF b5 = 1 THEN fire1(5, 2) = fire1(5, 2) - 5: LINE (fire1(5, 1), fire1(5, 2))-(fire1(5, 1), fire1(5, 2) - 5), 9: IF fire1(5, 2) <= 0 THEN b5 = 0 IF eship = 0 THEN shot = 200 LINE (0, 0)-(320, 0), 4 LINE (0, 0)-(ehp * 10, 0), 14 IF hmomentum2 <> 0 THEN SELECT CASE hdir2 CASE 1 x2 = x2 + hmomentum2 CASE 2 x2 = x2 - hmomentum2 END SELECT END IF IF vmomentum2 <> 0 THEN SELECT CASE vdir2 CASE 1 y2 = y2 - vmomentum2 CASE 2 y2 = y2 + vmomentum2 END SELECT END IF IF dy = 0 THEN IF INT(RND * 5 + 1) = 2 THEN LET dy = 1: vmomentum2 = INT(RND * 3) IF dy = 1 THEN IF INT(RND * 10 + 1) = 3 THEN LET vmomentum2 = 0: dy3 = 1 IF dy3 = 1 THEN IF INT(RND * 20 + 1) = 17 THEN LET dy2 = 1 IF dy2 = 1 THEN vmomentum2 = vmomentum2 - 1 IF dy2 = 1 THEN IF y2 < 15 THEN LET vmomentum2 = 0: dy = 0: dy2 = 0: GOTO skip3 IF y2 < 15 THEN y2 = 10: vmomentum2 = vmomentum2 + 1 IF dy2 = 1 THEN LET vmomentum2 = vmomentum2 - 1: GOTO skip3 IF y2 > 85 THEN y2 = 85: vmomentum2 = vmomentum2 - 1: IF dy = 1 THEN IF vmomentum2 <= 0 THEN IF INT(RND * 10 + 1) = 5 THEN LET dy2 = 1: vmomentum = vmomentum - 1 skip3: IF x2 < 10 THEN x2 = 10: IF x2 > 300 THEN x2 = 300: IF x2 < x THEN hmomentum2 = hmomentum2 + 1: noshoot = noshoot + 1: IF noshoot = 45 THEN noshoot = 0: GOTO shoots: ELSE GOTO skip IF x2 > x + 10 THEN hmomentum2 = hmomentum2 - 1: noshoot = noshoot + 1: IF noshoot = 45 THEN noshoot = 0: GOTO shoots: ELSE GOTO skip IF hmomentum2 > 0 THEN hmomentum2 = hmomentum2 - 1 IF hmomentum2 < 0 THEN hmomentum2 = hmomentum2 + 1 shoots: IF a1 = 0 THEN fire2(1, 1) = x2 + 5: fire2(1, 2) = y2: a1 = 1: GOTO skip IF a2 = 0 THEN fire2(2, 1) = x2 + 5: fire2(2, 2) = y2: a2 = 1: GOTO skip IF a3 = 0 THEN fire2(3, 1) = x2 + 5: fire2(3, 2) = y2: a3 = 1: GOTO skip IF a4 = 0 THEN fire2(4, 1) = x2 + 5: fire2(4, 2) = y2: a4 = 1: GOTO skip IF a5 = 0 THEN fire2(5, 1) = x2 + 5: fire2(5, 2) = y2: a5 = 1: GOTO skip IF x2 > 305 THEN x2 = 305 IF x2 < 10 THEN x2 = 10 IF y2 > 85 THEN y2 = 85 IF y2 < 0 THEN y2 = 0 skip: PUT (x2, y2), ship2 IF a1 = 1 THEN fire2(1, 2) = fire2(1, 2) + 5: LINE (fire2(1, 1), fire2(1, 2))-(fire2(1, 1), fire2(1, 2) - 5), 12: IF fire2(1, 2) >= 200 THEN a1 = 0 IF a1 = 1 THEN xpoint = fire2(1, 1) - x: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire2(1, 2) - y: IF ypoint < 10 AND ypoint >= 0 THEN hp = hp - 1: a1 = 0: IF hp = 0 THEN PUT (x, y), expl, PSET: PCOPY 1, 0: GOSUB youlose: END IF a2 = 1 THEN fire2(2, 2) = fire2(2, 2) + 5: LINE (fire2(2, 1), fire2(2, 2))-(fire2(2, 1), fire2(2, 2) - 5), 12: IF fire2(2, 2) >= 200 THEN a2 = 0 IF a2 = 1 THEN xpoint = fire2(2, 1) - x: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire2(2, 2) - y: IF ypoint < 10 AND ypoint >= 0 THEN hp = hp - 1: a2 = 0: IF hp = 0 THEN PUT (x, y), expl, PSET: PCOPY 1, 0: GOSUB youlose: END IF a3 = 1 THEN fire2(3, 2) = fire2(3, 2) + 5: LINE (fire2(3, 1), fire2(3, 2))-(fire2(3, 1), fire2(3, 2) - 5), 12: IF fire2(3, 2) >= 200 THEN a3 = 0 IF a3 = 1 THEN xpoint = fire2(3, 1) - x: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire2(3, 2) - y: IF ypoint < 10 AND ypoint >= 0 THEN hp = hp - 1: a3 = 0: IF hp = 0 THEN PUT (x, y), expl, PSET: PCOPY 1, 0: GOSUB youlose: END IF a4 = 1 THEN fire2(4, 2) = fire2(4, 2) + 5: LINE (fire2(4, 1), fire2(4, 2))-(fire2(4, 1), fire2(4, 2) - 5), 12: IF fire2(4, 2) >= 200 THEN a4 = 0 IF a4 = 1 THEN xpoint = fire2(4, 1) - x: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire2(4, 2) - y: IF ypoint < 10 AND ypoint >= 0 THEN hp = hp - 1: a4 = 0: IF hp = 0 THEN PUT (x, y), expl, PSET: PCOPY 1, 0: GOSUB youlose: END IF a5 = 1 THEN fire2(5, 2) = fire2(5, 2) + 5: LINE (fire2(5, 1), fire2(5, 2))-(fire2(5, 1), fire2(5, 2) - 5), 12: IF fire2(5, 2) >= 200 THEN a5 = 0 IF a5 = 1 THEN xpoint = fire2(5, 1) - x: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire2(5, 2) - y: IF ypoint < 10 AND ypoint >= 0 THEN hp = hp - 1: a5 = 0: IF hp = 0 THEN PUT (x, y), expl, PSET: PCOPY 1, 0: GOSUB youlose: END IF b1 = 1 THEN xpoint = fire1(1, 1) - x2: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(1, 2) - y2: IF ypoint < 10 AND ypoint >= 0 THEN b1 = 0: ehp = ehp - 1: IF ehp = 0 THEN PUT (x2, y2), expl, PSET: PCOPY 1, 0: GOSUB youwin: END IF b2 = 1 THEN xpoint = fire1(2, 1) - x2: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(2, 2) - y2: IF ypoint < 10 AND ypoint >= 0 THEN b2 = 0: ehp = ehp - 1: IF ehp = 0 THEN PUT (x2, y2), expl, PSET: PCOPY 1, 0: GOSUB youwin: END IF b3 = 1 THEN xpoint = fire1(3, 1) - x2: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(3, 2) - y2: IF ypoint < 10 AND ypoint >= 0 THEN b3 = 0: ehp = ehp - 1: IF ehp = 0 THEN PUT (x2, y2), expl, PSET: PCOPY 1, 0: GOSUB youwin: END IF b4 = 1 THEN xpoint = fire1(4, 1) - x2: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(4, 2) - y2: IF ypoint < 10 AND ypoint >= 0 THEN b4 = 0: ehp = ehp - 1: IF ehp = 0 THEN PUT (x2, y2), expl, PSET: PCOPY 1, 0: GOSUB youwin: END IF b5 = 1 THEN xpoint = fire1(5, 1) - x2: IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(5, 2) - y2: IF ypoint < 10 AND ypoint >= 0 THEN b5 = 0: ehp = ehp - 1: IF ehp = 0 THEN PUT (x2, y2), expl, PSET: PCOPY 1, 0: GOSUB youwin: END ELSE shipon = 0 FOR i = 1 TO level * 5 IF obs(i, 1) = 12 THEN shipon = shipon + 1: GOTO nexti IF obs(i, 1) < 4 THEN LET obs(i, 3) = obs(i, 3) + obs(i, 1) * 4: ELSE LET obs(i, 3) = obs(i, 3) + 6 IF obs(i, 3) >= 185 THEN newobj: LET obs(i, 1) = INT(RND * 11) + 1: LET obs(i, 2) = INT(RND * 305) + 1: LET obs(i, 3) = 0 IF (TIMER - startime) > level * 30 THEN LET obs(i, 1) = 12 END IF xpoint = obs(i, 2) - x IF xpoint >= 0 AND xpoint <= 10 THEN LET ypoint = obs(i, 3) - y IF ypoint >= 0 AND ypoint <= 10 THEN IF obs(i, 1) < 9 THEN LET hp = hp - 1 IF hp <= 0 THEN GOSUB youlose END ELSE GOTO newobj END IF ELSE IF obs(i, 1) = 11 THEN LET s = (32 - hp): LET hp = hp + (s \ 2): GOTO newobj IF obs(i, 1) = 10 THEN LET shot = shot + 50: IF shot > 200 THEN shot = 200: GOTO newobj IF obs(i, 1) = 9 THEN LET points = points + 10 END IF END IF END IF IF obs(i, 1) = 1 OR obs(i, 1) = 4 THEN PUT (obs(i, 2), obs(i, 3)), aste, PSET IF obs(i, 1) = 2 OR obs(i, 1) = 5 THEN PUT (obs(i, 2), obs(i, 3)), miss, PSET IF obs(i, 1) = 3 OR obs(i, 1) = 6 THEN PUT (obs(i, 2), obs(i, 3)), shop, PSET IF obs(i, 1) = 7 THEN PUT (obs(i, 2), obs(i, 3)), tri IF obs(i, 1) = 8 THEN PUT (obs(i, 2), obs(i, 3)), beam IF obs(i, 1) = 9 THEN PUT (obs(i, 2), obs(i, 3)), pts1 IF obs(i, 1) = 10 THEN PUT (obs(i, 2), obs(i, 3)), caps1 IF obs(i, 1) = 11 THEN PUT (obs(i, 2), obs(i, 3)), caps2 IF b1 = 1 THEN xpoint = fire1(1, 1) - obs(i, 2): IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(1, 2) - obs(i, 3): IF ypoint < 10 AND ypoint >= 0 THEN b1 = 0: points = points + 1: GOTO newobj IF b2 = 1 THEN xpoint = fire1(2, 1) - obs(i, 2): IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(2, 2) - obs(i, 3): IF ypoint < 10 AND ypoint >= 0 THEN b2 = 0: points = points + 1: GOTO newobj IF b3 = 1 THEN xpoint = fire1(3, 1) - obs(i, 2): IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(3, 2) - obs(i, 3): IF ypoint < 10 AND ypoint >= 0 THEN b3 = 0: points = points + 1: GOTO newobj IF b4 = 1 THEN xpoint = fire1(4, 1) - obs(i, 2): IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(4, 2) - obs(i, 3): IF ypoint < 10 AND ypoint >= 0 THEN b4 = 0: points = points + 1: GOTO newobj IF b5 = 1 THEN xpoint = fire1(5, 1) - obs(i, 2): IF xpoint < 10 AND xpoint >= 0 THEN ypoint = fire1(5, 2) - obs(i, 3): IF ypoint < 10 AND ypoint >= 0 THEN b5 = 0: points = points + 1: GOTO newobj nexti: NEXT i IF shipon = (level * 4) THEN eship = 0: x2 = 160: y2 = 10 END IF PCOPY 1, 0 LOOP SELECT CASE s$ CASE "8" SELECT CASE vdir CASE 1 momentum = momentum + 1 CASE 2 momentum = momentum - 1: IF momentum = 0 THEN vdir = 1 END SELECT CASE "2" SELECT CASE vdir CASE 1 momentum = momentum - 1: IF momentum = 0 THEN vdir = 2 CASE 2 momentum = momentum + 1 END SELECT CASE "6" SELECT CASE hdir CASE 1 hmomentum = hmomentum + 1 CASE 2 hmomentum = hmomentum - 1: IF hmomentum = 0 THEN hdir = 1 END SELECT CASE "4" SELECT CASE hdir CASE 1 hmomentum = hmomentum - 1: IF hmomentum = 0 THEN hdir = 2 CASE 2 hmomentum = hmomentum + 1 END SELECT CASE " " IF b1 = 0 THEN fire1(1, 1) = x + 5: fire1(1, 2) = y: b1 = 1: shot = shot - 1: GOTO skip2 IF b2 = 0 THEN fire1(2, 1) = x + 5: fire1(2, 2) = y: b2 = 1: shot = shot - 1: GOTO skip2 IF b3 = 0 THEN fire1(3, 1) = x + 5: fire1(3, 2) = y: b3 = 1: shot = shot - 1: GOTO skip2 IF b4 = 0 THEN fire1(4, 1) = x + 5: fire1(4, 2) = y: b4 = 1: shot = shot - 1: GOTO skip2 IF b5 = 0 THEN fire1(5, 1) = x + 5: fire1(5, 2) = y: b5 = 1: shot = shot - 1: GOTO skip2 CASE "*" GOSUB youlose END skip2: END SELECT SELECT CASE vdir CASE 1 y = y - momentum CASE 2 y = y + momentum END SELECT SELECT CASE hdir CASE 1 x = x + hmomentum CASE 2 x = x - hmomentum END SELECT GOTO putship CLS youlose: PCOPY 0, 2 PCOPY 2, 1 you$ = "c9u40l20u20d20r40u20br10d60r40u60l40r40br10d60r40u60br10" lose$ = "c11d60r40br10u60r40d60l40r40br10r40u30l40u30r40br10r40l40d30r40l40d30r40" FOR a = 1 TO 360 STEP 8 PSET (50, 100) DRAW "ta-" + STR$(a) + you$ PCOPY 1, 0 IF a <> 360 THEN PCOPY 2, 1 NEXT PCOPY 0, 2 PCOPY 2, 1 FOR a = 1 TO 360 STEP 8 PSET (120, 130) DRAW "ta-" + STR$(a) + lose$ PCOPY 1, 0 PCOPY 2, 1 NEXT DO WHILE INKEY$ = "" LOOP SCREEN 9 SCREEN 0, 0, 0, 0 PRINT "Your score: "; points PRINT PRINT "This has been a production of Monkey Business." PRINT "If you enjoyed this game, and are interested in others by the author," PRINT "please write (no donation required) to:" PRINT PRINT "CST" PRINT "c/o David Zohrob" PRINT "37676 Baywood" PRINT "Farmington Hills, MI, 48335-3606" PRINT PRINT "For free demos of other games, dial-up Near Wild Heaven at (810)477-5568." PRINT PRINT "Press a key." DO WHILE INKEY$ = "": LOOP RETURN youwin: IF level <> 5 THEN FOR n = 1 TO 4000: NEXT n PCOPY 0, 1 points = points + (50 * level) FOR n = 1 TO 50 FOR i = 1 TO 30 IF start(i) = 1 THEN c = 8 IF start(i) = 2 THEN c = 7 IF start(i) = 3 THEN c = 15 oldx = starx(i) oldy = stary(i) 'PSET (starx(i), stary(i)), c stary(i) = stary(i) + (3 * start(i)) LINE (oldx, oldy)-(oldx, stary(i)), c IF stary(i) >= 200 THEN LET stary(i) = 1: LET starx(i) = INT(RND * 320) + 1 NEXT i PCOPY 1, 0 NEXT PRINT "Score: "; points PRINT "Press a key" PCOPY 1, 0 DO WHILE INKEY$ = "": LOOP: GOTO newlevel END IF PCOPY 0, 2 PCOPY 2, 1 you$ = "c2u40l20u20d20r40u20br10d60r40u60l40r40br10d60r40u60br10" lose$ = "c10d60r20u30d30r20u60br10r40l20d60l20r40br10u60f60u60" FOR a = 1 TO 360 STEP 8 PSET (50, 100) DRAW "ta-" + STR$(a) + you$ PCOPY 1, 0 IF a <> 360 THEN PCOPY 2, 1 NEXT PCOPY 0, 2 PCOPY 2, 1 FOR a = 1 TO 360 STEP 8 PSET (120, 130) DRAW "ta-" + STR$(a) + lose$ PCOPY 1, 0 PCOPY 2, 1 NEXT DO WHILE INKEY$ = "" LOOP SCREEN 9 SCREEN 0, 0, 0, 0 PRINT "Your score: "; points PRINT PRINT "This has been a production of Monkey Business." PRINT "If you enjoyed this game, and are interested in others by the author," PRINT "please write (no donation required) to:" PRINT PRINT "CST" PRINT "c/o David Zohrob" PRINT "37676 Baywood" PRINT "Farmington Hills, MI, 48335-3606" PRINT PRINT "For free demos of other games, dial-up Near Wild Heaven at (810)477-5568." PRINT PRINT "Press a key." DO WHILE INKEY$ = "": LOOP RETURN SUB youlose PCOPY 0, 2 PCOPY 2, 1 you$ = "c9u40l20u20d20r40u20br10d60r40u60l40r40br10d60r40u60br10" lose$ = "c11d60r40br10u60r40d60l40r40br10r40u30l40u30r40br10r40l40d30r40l40d30r40" FOR a = 1 TO 360 STEP 4 PSET (50, 100) DRAW "ta-" + STR$(a) + you$ PCOPY 1, 0 IF a <> 360 THEN PCOPY 2, 1 NEXT PCOPY 0, 2 PCOPY 2, 1 FOR a = 1 TO 360 STEP 4 PSET (120, 130) DRAW "ta-" + STR$(a) + lose$ PCOPY 1, 0 PCOPY 2, 1 NEXT END SUB SUB youwin PCOPY 0, 2 PCOPY 2, 1 you$ = "c2u40l20u20d20r40u20br10d60r40u60l40r40br10d60r40u60br10" lose$ = "c10d60r20u30d30r20u60br10r40l20d60l20r40br10u60f60u60" FOR a = 1 TO 360 STEP 4 PSET (50, 100) DRAW "ta-" + STR$(a) + you$ PCOPY 1, 0 IF a <> 360 THEN PCOPY 2, 1 NEXT PCOPY 0, 2 PCOPY 2, 1 FOR a = 1 TO 360 STEP 4 PSET (120, 130) DRAW "ta-" + STR$(a) + lose$ PCOPY 1, 0 PCOPY 2, 1 NEXT END SUB