DECLARE SUB LoadGraphics () DIM SHARED Filename$ Jet$ = "C0 BR2BD6 R20DL18U5D3RU2DRDBR12R3BD3R4L17RDR17DL20DR2L3BU9L" Enemy$ = "C0 BR27BD7 L20DR18U5D3LU2DLDBL12L3BD3L4R17LDL17DR20DL2R3BU9R" Clearer$ = _ "C0 R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80R80DL80" _ Speed = 3000 'Handles the game speed. EnemyH = 110: EnemyV = INT(RND * 8) + 1: EnemyV = EnemyV * 10: Count = 0 X = 10: Y = 30: BTime = 0: Planes = 0: Hits = 0 CLS : SCREEN 13 C = 16: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * a) + (256 * 0) + 0: C = C + 1: NEXT a C = 32: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * 0) + (256 * a) + 0: C = C + 1: NEXT a C = 48: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * 0) + (256 * 0) + a: C = C + 1: NEXT a C = 64: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * a) + (256 * a) + 0: C = C + 1: NEXT a C = 80: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * a) + (256 * 0) + a: C = C + 1: NEXT a C = 96: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * 0) + (256 * a) + a: C = C + 1: NEXT a C = 112: B = 0: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * a) + (256 * B) + 0: B = B + 3: C = C + 1: NEXT a C = 128: B = 0: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * B) + (256 * 0) + a: B = B + 3: C = C + 1: NEXT a C = 144: B = 0: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * B) + (256 * a) + 0: B = B + 3: C = C + 1: NEXT a C = 160: B = 0: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * B) + (256 * a) + a: B = B + 3: C = C + 1: NEXT a C = 176: B = 0: FOR a = 16 TO 61 STEP 3: PALETTE C, (256 ^ 2 * a) + (256 * a) + a: C = C + 1: NEXT a C = 192: B = 12: aa = 0: FOR a = 30 TO 62 STEP 2: PALETTE C, (256 ^ 2 * B) + (256 * aa) + a: B = B + 2: C = C + 1: NEXT a C = 208: B = 12: aa = 0: FOR a = 30 TO 62 STEP 2: PALETTE C, (256 ^ 2 * B) + (256 * B) + a: B = B + 2: C = C + 1: NEXT a C = 224: B = 12: aa = 0: FOR a = 30 TO 62 STEP 2: PALETTE C, (256 ^ 2 * aa) + (256 * B) + a: B = B + 2: C = C + 1: NEXT a PALETTE 1, 0 LOCATE 9, 15: COLOR 1 PRINT " HORIZONS Interactive Entertainment" LOCATE 12, 12: COLOR 1 PRINT " -------------" LOCATE 13, 12: COLOR 1 PRINT " SKY DESTROYER" LOCATE 14, 12: COLOR 1 PRINT " -------------" Vertical = 72: C = 48 - 16 DO FOR HScan = 1 TO 300 IF POINT(HScan, Vertical) > 0 THEN PSET (HScan, Vertical), C + INT(RND * 15) NEXT Vertical = Vertical + 1 LOOP UNTIL Vertical = 79 Vertical = 80: C = 49 DO FOR HScan = 1 TO 300 IF POINT(HScan, Vertical) > 0 THEN PSET (HScan, Vertical), C + INT(RND * 14) NEXT Vertical = Vertical + 1 LOOP UNTIL Vertical = 123 NOW = TIMER: WHILE (TIMER - 3) < NOW: WEND CLS : SCREEN 13 Filename$ = "GRAPH.BMP": LoadGraphics DIM BACKGROUND(10000) GET (0, 0)-(144, 108), BACKGROUND DIM Jet(200) GET (148, 1)-(176, 14), Jet DIM Enemy(200) GET (149, 28)-(179, 43), Enemy NOW = TIMER: WHILE (TIMER - 1) < NOW: WEND PSET (148, 1), 0: DRAW Clearer$ Col = POINT(X, Y): PSET (X, Y), Col: DRAW Jet$ PUT (X, Y), Jet, XOR GETKEY: Key$ = INKEY$ IF Key$ = "8" THEN IF Y > 10 THEN LET Y = Y - 10: GOSUB REFRESH ELSE Y = Y - 0 IF Key$ = "2" THEN IF Y < 90 THEN LET Y = Y + 10: GOSUB REFRESH ELSE Y = Y + 0 IF Key$ = "4" THEN IF X > 10 THEN LET X = X - 10: GOSUB REFRESH ELSE X = X - 0 IF Key$ = "6" THEN IF X < 110 THEN LET X = X + 10: GOSUB REFRESH ELSE X = X + 0 IF Key$ = CHR$(32) THEN GOSUB SHOOT IF Key$ = CHR$(27) THEN GOTO FINNISH IF EnemyH > 10 AND Count = 0 THEN LET EnemyH = EnemyH - 10: GOSUB REFRESH IF EnemyH = 10 THEN LET EnemyH = 110: EnemyV = INT(RND * 8) + 1: EnemyV = EnemyV * 10: Planes = Planes + 1 IF Planes = 50 THEN GOTO FINNISH IF Count < Speed THEN LET Count = Count + 1 ELSE Count = 0 IF BTime > 0 THEN BTime = BTime - 1 GOTO GETKEY REFRESH: PUT (0, 0), BACKGROUND, PSET Col = POINT(X, Y): PSET (X, Y), Col: DRAW Jet$ PUT (X, Y), Jet, XOR Col = POINT(EnemyH, EnemyV): PSET (EnemyH, EnemyV), Col DRAW Enemy$: PUT (EnemyH, EnemyV), Enemy IF X = EnemyH AND Y = EnemyV THEN GOTO CRASH IF BTime > 0 THEN LN = 110 - X FOR DrawLazer = 1 TO LN PSET (BX, BY), 21: BX = BX + 1 NEXT BX = BX - LN END IF RETURN SHOOT: BX = X + 29: BY = Y + 10: Col = POINT(BX, BY): BTime = CINT(2 * (Speed / 100)) IF Y = EnemyV THEN GOSUB CRASHENEMY ELSE GOSUB REFRESH RETURN CRASH: FOR Explode = 1 TO 10 CIRCLE (X + 10, Y + 10), Explode, 2 NOW = TIMER: WHILE (TIMER - .1 / 100) < NOW: WEND NEXT GOTO FINNISH CRASHENEMY: BTime = 5: GOSUB REFRESH FOR Explode = 1 TO 5 CIRCLE (EnemyH + 10, EnemyV + 10), Explode, 2 NOW = TIMER: WHILE (TIMER - .1 / 100) < NOW: WEND IF BTime > 0 THEN BTime = BTime - 1 NEXT Count = 0: EnemyH = 110: EnemyV = INT(RND * 8) + 1: EnemyV = EnemyV * 10 Hits = Hits + 1: Planes = Planes + 1 RETURN FINNISH: SCREEN 0: WIDTH 80, 25 PRINT "Number of enemy planes hit out of 50:"; Hits SUB LoadGraphics DIM xstart, xsiz, ystart, ysiz AS INTEGER DEF SEG = 0 RANDOMIZE TIMER grey = 0 slowpal = 0 va = &H3C8 vd = &H3C9 CLS OPEN Filename$ FOR BINARY AS #1 IF LOF(1) = 0 THEN CLOSE #1 PRINT "Empty File. Deleting" KILL Filename$ END END IF header$ = SPACE$(14) sizing$ = SPACE$(4) GET #1, 1, header$ IF LEN(header$) = 0 THEN PRINT "Not a valid Bitmap file.": CLOSE : END IF MID$(header$, 1, 2) <> "BM" THEN PRINT "Not a valid Bitmap file.": CLOSE : END GET #1, 15, sizing$ bmpinfosize = CVI(sizing$) IF bmpinfosize = 12 THEN infoheader$ = SPACE$(12) GET #1, 15, infoheader$ nbits = CVI(MID$(infoheader$, 15, 4)) IF nbits = 1 THEN palet$ = SPACE$(6) GET #1, bmpinfosize + 15, palet$ ELSEIF nbits = 4 THEN palet$ = SPACE$(48) GET #1, bmpinfosize + 15, palet$ ELSEIF nbits = 8 THEN palet$ = SPACE$(768) GET #1, bmpinfosize + 15, palet$ END IF ELSEIF bmpinfosize = 40 THEN infoheader$ = SPACE$(40) GET #1, 15, infoheader$ nbits = CVI(MID$(infoheader$, 15, 4)) IF nbits = 1 THEN palet$ = SPACE$(8) GET #1, bmpinfosize + 15, palet$ ELSEIF nbits = 4 THEN palet$ = SPACE$(64) GET #1, bmpinfosize + 15, palet$ ELSEIF nbits = 8 THEN palet$ = SPACE$(1024) GET #1, bmpinfosize + 15, palet$ END IF END IF ft$ = MID$(header$, 1, 2) filesize = CVL(MID$(header$, 3, 4)) r1 = CVI(MID$(header$, 7, 2)) r2 = CVI(MID$(header$, 9, 2)) offset = CVL(MID$(header$, 11, 4)) headersize = CVL(MID$(infoheader$, 1, 4)) picwidth = CVL(MID$(infoheader$, 5, 4)) picheight = CVL(MID$(infoheader$, 9, 4)) nplanes = CVI(MID$(infoheader$, 13, 4)) IF headersize = 40 THEN comptype = CVL(MID$(infoheader$, 17, 4)) imagesize = CVL(MID$(infoheader$, 21, 4)) xsize = CVL(MID$(infoheader$, 25, 4)) ysize = CVL(MID$(infoheader$, 29, 4)) colorsused = CVL(MID$(infoheader$, 33, 4)) neededcolours = CVL(MID$(infoheader$, 37, 4)) END IF IF nbits = 1 THEN SCREEN 11 xres = 640 yres = 480 nc = 2 ELSEIF nbits = 4 THEN SCREEN 12 xres = 640 yres = 480 nc = 16 ELSEIF nbits = 8 OR nbits = 24 THEN SCREEN 13 xres = 320 yres = 200 nc = 256 END IF IF bmpinfosize = 40 THEN ngroups = 4 IF bmpinfosize = 12 THEN ngroups = 3 IF nbits = 24 THEN IF grey = 1 THEN IF ngroups = 3 THEN FOR C = 0 TO 63 d = C * 4 palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d) palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1) palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d) palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d) NEXT C ELSEIF ngroups = 4 THEN FOR C = 0 TO 63 d = C * 4 palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d) + CHR$(0) palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1) + CHR$(0) palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d) + CHR$(0) palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d) + CHR$(0) NEXT C END IF ELSE FOR t = 0 TO 5 FOR u = 0 TO 5 FOR v = 0 TO 5 palet$ = palet$ + CHR$(INT(v * (256 / 6))) palet$ = palet$ + CHR$(INT(u * (256 / 6))) palet$ = palet$ + CHR$(INT(t * (256 / 6))) IF ngroups = 4 THEN palet$ = palet$ + CHR$(0) NEXT v NEXT u NEXT t FOR Count = 0 TO 31 palet$ = palet$ + CHR$(Count * 8) + CHR$(Count * 8) + CHR$(Count * 8) IF ngroups = 4 THEN palet$ = palet$ + CHR$(0) NEXT Count palet$ = palet$ + CHR$(255) + CHR$(255) + CHR$(255) END IF END IF IF slowpal = 1 THEN FOR X = 1 TO LEN(palet$) STEP ngroups zb# = INT((ASC(MID$(palet$, X, 1))) / 4) zg# = INT((ASC(MID$(palet$, X + 1, 1))) / 4) zr# = INT((ASC(MID$(palet$, X + 2, 1))) / 4) zc# = zb# * 65536# + zg# * 256# + zr# PALETTE ((X - 1) / ngroups), zc# NEXT X ELSE OUT va, 0 FOR X = 1 TO LEN(palet$) STEP ngroups zb = INT((ASC(MID$(palet$, X, 1))) / 4) zg = INT((ASC(MID$(palet$, X + 1, 1))) / 4) zr = INT((ASC(MID$(palet$, X + 2, 1))) / 4) OUT vd, zr OUT vd, zg OUT vd, zb NEXT X END IF IF comptype = 0 THEN IF nbits = 24 THEN Y = picheight - 1 X = 0 Lin$ = SPACE$((INT((3 * picwidth - 1) / 4) + 1) * 4) WHILE Y >= 0 GET 1, , Lin$ IF grey = 0 THEN WHILE X < picwidth B = ASC(MID$(Lin$, X * 3 + 1, 1)) g = ASC(MID$(Lin$, X * 3 + 2, 1)) r = ASC(MID$(Lin$, X * 3 + 3, 1)) IF B = g AND g = r THEN p1 = INT(B / 8) + 216 IF B = 255 THEN p1 = 247 ELSE r = INT(r * (6 / 256)) g = INT(g * (6 / 256)) B = INT(B * (6 / 256)) qa = INT(RND(1) * (r + 1)) * .4 qb = INT(RND(1) * (g + 1)) * .4 qc = INT(RND(1) * (B + 1)) * .4 r = INT(r + qa - (r * .2)) g = INT(g + qg - (g * .2)) B = INT(B + qb - (B * .2)) IF r > 5 THEN r = 5 IF r < 0 THEN r = 0 IF g > 5 THEN g = 5 IF g < 0 THEN g = 0 IF B > 5 THEN B = 5 IF B < 0 THEN B = 0 p1 = r * 36 + g * 6 + B END IF IF POINT(X, Y) = 0 THEN PSET (X, Y), p1 X = X + 1 WEND ELSE WHILE X < picwidth p1 = INT((ASC(MID$(Lin$, X * 3 + 1, 1)) + ASC(MID$(Lin$, X * 3 + 2, 1)) + ASC(MID$(Lin$, X * 3 + 3, 1))) / 3) IF POINT(X, Y) = 0 THEN PSET (X, Y), p1 X = X + 1 WEND END IF Y = Y - 1 X = 0 WEND ELSEIF nbits = 8 THEN Y = picheight - 1 X = 0 Lin$ = SPACE$((INT((picwidth - 1) / 4) + 1) * 4) WHILE Y >= 0 GET #1, , Lin$ WHILE X < picwidth IF POINT(X, Y) = 0 THEN PSET (X, Y), ASC(MID$(Lin$, X + 1, 1)) X = X + 1 WEND Y = Y - 1 X = 0 WEND ELSEIF nbits = 4 THEN Y = picheight - 1 X = 0 Lin$ = SPACE$((INT((picwidth - 1) / 8) + 1) * 4) WHILE Y >= 0 GET 1, , Lin$ WHILE X < picwidth p2 = ASC(MID$(Lin$, INT(X / 2) + 1, 1)) AND 15 p1 = (ASC(MID$(Lin$, INT(X / 2) + 1, 1)) AND 240) / 16 IF POINT(X, Y) = 0 THEN PSET (X, Y), p1 IF X + 1 < picwidth AND POINT(X, Y) = 0 THEN PSET (X + 1, Y), p2 X = X + 2 WEND Y = Y - 1 X = 0 WEND ELSEIF nbits = 1 THEN Y = picheight - 1 X = 0 Lin$ = SPACE$((INT((picwidth - 1) / 32) + 1) * 4) WHILE Y >= 0 GET 1, , Lin$ WHILE X < picwidth p8 = ASC(MID$(Lin$, INT(X / 8) + 1, 1)) FOR B = 0 TO 7 IF POINT(X, Y) = 0 AND X + (7 - B) < picwidth THEN PSET (X + (7 - B), Y), (p8 AND 2 ^ B) / 2 ^ B NEXT B X = X + 8 WEND Y = Y - 1 X = 0 WEND END IF ELSEIF comptype = 1 THEN a$ = " " X = 0 Y = 0 ef = 0 WHILE ef = 0 GET #1, , a$ C = ASC(a$) IF C > 0 THEN GET #1, , a$ B = ASC(a$) FOR Count = 1 TO C IF POINT(X, Y) = 0 THEN PSET (picwidth - X - 1, picheight - Y - 1), B X = X + 1 NEXT Count ELSE GET #1, , a$ C = ASC(a$) IF C = 0 THEN X = 0 Y = Y + 1 ELSEIF C = 1 THEN ef = 1 ELSEIF C = 2 THEN GET #1, , a$ h = ASC(a$) GET #1, , a$ v = ASC(a$) X = X + h Y = Y + v ELSE FOR Count = 1 TO C GET #1, , a$ p1 = ASC(a$) IF POINT(X, Y) = 0 THEN PSET (picwidth - X - 1, picheight - Y - 1), p1 X = X + 1 NEXT Count IF C MOD 2 = 1 THEN GET #1, , a$ END IF IF (Y = picheight - 1 AND X >= picwidth) OR Y >= picheight THEN ef = 1 END IF IF EOF(1) THEN ef = 1 WEND ELSEIF comptype = 2 THEN a$ = " " X = 0 Y = 0 ef = 0 WHILE ef = 0 GET #1, , a$ C = ASC(a$) IF C > 0 THEN GET #1, , a$ B = ASC(a$) FOR Count = 1 TO C IF (Count MOD 2) = 0 THEN IF POINT(X, Y) = 0 THEN PSET (picwidth - X - 1, picheight - Y - 1), B AND 15 ELSE IF POINT(X, Y) = 0 THEN PSET (picwidth - X - 1, picheight - Y - 1), (B AND 240) / 16 END IF X = X + 1 NEXT Count ELSE GET #1, , a$ C = ASC(a$) IF C = 0 THEN X = 0 Y = Y + 1 ELSEIF C = 1 THEN ef = 1 ELSEIF C = 2 THEN GET #1, , a$ h = ASC(a$) GET #1, , a$ v = ASC(a$) X = X + h Y = Y + v ELSE FOR Count = 1 TO INT(C / 2) GET #1, , a$ p1 = ASC(a$) IF POINT(X, Y) = 0 THEN PSET (picwidth - X - 1, picheight - Y - 1), (p1 AND 240) / 16 X = X + 1 IF POINT(X, Y) = 0 THEN PSET (picwidth - X - 1, picheight - Y - 1), p1 AND 15 X = X + 1 NEXT Count br = INT(C / 2) IF (C MOD 2) = 1 THEN GET #1, , a$ IF POINT(X, Y) = 0 THEN PSET (picwidth - X - 1, picheight - Y - 1), (p1 AND 240) / 16 X = X + 1 br = br + 1 END IF IF br MOD 2 = 1 THEN GET #1, , a$ END IF IF (Y = picheight - 1 AND X >= picwidth) OR Y >= picheight THEN ef = 1 END IF IF EOF(1) THEN ef = 1 WEND END IF END SUB