'$DYNAMIC '$INCLUDE: 'c:\qb45\qb.bi' SCREEN 13 DIM p%(26002), mssub%(100), r%(255), g%(255), b%(255), kyp%(8), kyr%(8), kyo%(8), control%(8) DIM ap%(21), dt1(21), dt2(21), hp!(42), xd(21), yd(21), x(21), y(21), ox(21), dt(21), oy(21), ty%(21), blk%(21), oblk%(21), md%(21) DIM bbx(10), by(10), bt%(10), obx(10), oby(10), dm%(15) DIM lvtmnm$(5, 13), lvtm%(5, 13), lvesnm$(5, 13), lves%(5, 13), lvpnnm$(5, 13), lvpn&(5, 13) DIM sx(20), sy(20), osx(20), osy(20), sd(20) DIM wt%(100, 20), wx(100, 20), wy(100, 20) DIM lvlnm$(12) DIM SHARED inregs AS regtype, outregs AS regtype RESTORE keydata FOR a = 1 TO 8 READ kyp%(a) NEXT FOR a = 1 TO 8 READ kyr%(a) NEXT RESTORE levelname FOR a% = 1 TO 12 READ lvlnm$(a%) NEXT dm%(1) = 1: wnf%(1) = 4 dm%(2) = 2: wnf%(2) = 4 dm%(3) = 2: wnf%(3) = 2 dm%(4) = 3: wnf%(4) = 2 u$ = CHR$(0) + "H" d$ = CHR$(0) + "P" l$ = CHR$(0) + "K" r$ = CHR$(0) + "M" DEF SEG = VARSEG(mssub%(0)) OPEN "usemouse.com" FOR BINARY AS #1 WHILE EOF(1) = 0 GET #1, flc% + 1, i% POKE flc%, i% AND 255 flc% = flc% + 1 WEND CLOSE #1 bblk%(0) = 20 bblk%(1) = 7 DEF SEG = VARSEG(p%(0)) BLOAD "thresh.pic", 0 DEF SEG OPEN "thresh.pll" FOR BINARY AS #1 rc% = 0 FOR a% = 0 TO 255 rc% = rc% + 1: GET #1, rc%, r%(a%) rc% = rc% + 1: GET #1, rc%, g%(a%) rc% = rc% + 1: GET #1, rc%, b%(a%) r%(a%) = r%(a%) AND 255 g%(a%) = g%(a%) AND 255 b%(a%) = b%(a%) AND 255 NEXT CLOSE #1 GOSUB updatepal topgame: pnt& = 0 life% = 3 cr% = 1 GOSUB tittle cd% = 1 cd$ = "yibble" star% = 1 DO t# = TIMER a$ = "": WHILE a$ = "": a$ = INKEY$ IF TIMER > t# + 10 THEN GOSUB tittle WEND LOCATE ((cr% - 1) * 2) + 12: PRINT " " IF a$ = MID$(cd$, cd%, 1) THEN cd% = cd% + 1 IF cd% = 7 THEN PALETTE 0, 15 IF cd% > 7 THEN cd% = 7 IF a$ = u$ THEN cr% = cr% - 1 IF a$ = d$ THEN cr% = cr% + 1 IF cr% < 1 THEN cr% = 4 IF cr% > 4 THEN cr% = 1 IF cr% = 1 AND a$ = l$ AND cd% = 7 THEN life% = life% - 1 IF cr% = 1 AND a$ = r$ AND cd% = 7 THEN life% = life% + 1 IF cr% = 2 AND a$ = l$ THEN star% = star% - 1 IF cr% = 2 AND a$ = r$ THEN star% = star% + 1 IF cr% = 4 AND a$ = CHR$(13) THEN GOTO playg IF a$ = CHR$(27) THEN SYSTEM IF life% < 0 THEN life% = 0 IF life% > 123 THEN life% = 123 IF star% < 1 THEN star% = 3 IF star% > 3 THEN star% = 1 LOCATE 12, 9: PRINT life% IF star% = 1 THEN LOCATE 14, 9: PRINT "On " IF star% = 2 THEN LOCATE 14, 9: PRINT "Dark" IF star% = 3 THEN LOCATE 14, 9: PRINT "Off " LOCATE ((cr% - 1) * 2) + 12: PRINT "*" LOOP playg: x(0) = 150: y(0) = 183 cbul% = 1 FOR a% = 0 TO 20 sd(a%) = 23 blk%(a%) = 30 NEXT t = TIMER z% = 0 tg = TIMER INPUT "Name"; nm$ IF LEN(nm$) > 15 THEN nm$ = LEFT$(nm$, 15) ppnt& = 0 newlev% = 1 lvl% = 1 shot! = 3 WHILE life% >= 0 AND gameover% = 0 IF newlev% = 1 THEN CLS GOSUB dsp x(0) = 153: y(0) = 183 newlev% = 0 FOR b% = 0 TO 10 bt%(b%) = 14 NEXT OPEN lvlnm$(lvl%) FOR INPUT AS #1 DO a% = a% + 1 FOR b% = 1 TO 20 ty%(b%) = 0 INPUT #1, wt%(a%, b%), wx(a%, b%), wy(a%, b%) IF wt%(a%, b%) = 999 AND wx(a%, b%) = 999 THEN GOTO noloop NEXT: LOOP CLOSE #1 noloop: END IF t# = TIMER GOSUB dupdate GOSUB display WHILE TIMER < t# + .02: WEND WEND gameover% = 0 GOTO topgame tittle: DEF SEG = &HA000 BLOAD "thresh.ttl", 0 DEF SEG t# = TIMER WHILE INKEY$ = "" AND TIMER < t# + 35: WEND CLS LOCATE 10, 13: PRINT " THRESH OPTIONS" LOCATE 12: PRINT " Lives:" LOCATE 14: PRINT " Stars:" LOCATE 16: PRINT " Scores" LOCATE 18: PRINT " Start game" LOCATE ((cr% - 1) * 2) + 12: PRINT "*" LOCATE 12, 9: PRINT life% LOCATE 14, 9: PRINT "On " RETURN display: upd% = upd% + 1: IF upd% > 20 THEN GOSUB dsp: upd% = 0 IF inv% > 0 THEN d% = d% XOR 1: IF d% = 1 AND ty%(0) = 0 AND shlds% = 0 THEN blk%(0) = 23 IF nxtl% <> 11 THEN nxtl% = nxtl% + 1 IF nxtl% = 10 THEN nxtl% = 11: CLS : GOSUB redraw FOR a% = 0 TO 20 IF ox(a%) > -1 AND ox(a%) < 304 AND oy(a%) > 0 AND oy(a%) < 183 THEN PUT (ox(a%), oy(a%)), p%(oblk%(a%) * 130), XOR ox(a%) = x(a%): oy(a%) = y(a%): oblk%(a%) = blk%(a%) IF x(a%) > -1 AND x(a%) < 304 AND y(a%) > 0 AND y(a%) < 183 THEN PUT (ox(a%), oy(a%)), p%(blk%(a%) * 130), XOR NEXT tbl% = 0 FOR a% = 1 TO 10 IF bt%(a%) <> 14 THEN tbl% = tbl% + 1 PUT (obx(a%), oby(a%)), p%((6 + obt%(a%)) * 130), XOR: obt%(a%) = bt%(a%): obx(a%) = bbx(a%): oby(a%) = by(a%): PUT (bbx(a%), by(a%)), p%((6 + bt%(a%)) * 130), XOR NEXT IF star% <> 3 THEN IF star% = 1 THEN starc% = 15 ELSE starc% = 3 FOR a% = 1 TO 20 PSET (osx(a%), osy(a%)), starc% XOR POINT(osx(a%), osy(a%)) osx(a%) = sx(a%): osy(a%) = sy(a%) PSET (sx(a%), sy(a%)), starc% XOR POINT(sx(a%), sy(a%)) IF ty%(a%) = 99 THEN ty%(a%) = 0 NEXT END IF LINE (280, 0)-(319, 5), 0, BF LINE (280, 0)-(319, 5), 52, B LINE (281, 2)-((dm% * 5.6) + 281, 4), 55, BF LINE (280, 7)-(319, 12), 0, BF LINE (280, 7)-(319, 12), 43, B 'LINE (281, 8)-(((np! / tnp!) * 39) + 281, 11), 47, BF LINE (280, 15)-(319, 20), 0, BF LINE (280, 15)-(319, 20), 28, B 'LINE (281, 16)-(((hp!(boss!) / bossmax!) * 39) + 281, 19), 31, BF 'LINE (281, 1)-(((shot! - 3) * 5.6) + 281, 1), 12 RETURN redraw: FOR a% = 0 TO 20 IF ox(a%) > -1 AND ox(a%) < 304 AND oy(a%) > 0 AND oy(a%) < 183 THEN PUT (ox(a%), oy(a%)), p%(oblk%(a%) * 130), XOR NEXT FOR a% = 1 TO 10 PUT (obbx(a%), oby(a%)), p%((6 + obt%(a%)) * 130), XOR NEXT FOR a% = 1 TO 20 PSET (osx(a%), osy(a%)), starc% XOR POINT(osx(a%), osy(a%)) NEXT RETURN dupdate: a$ = INKEY$: IF a$ = "s" THEN sl% = sl% XOR 1 IF a$ <> "" THEN km% = 0 a$ = INKEY$: IF a$ = "s" THEN sl% = sl% XOR 1 a$ = INKEY$: IF a$ = "s" THEN sl% = sl% XOR 1 IF sl% = 1 THEN t3# = TIMER: WHILE TIMER < t3# + .2: WEND IF a$ = "1" THEN LOCATE 1: INPUT "frame rate (frames/sec)"; fs: fr = 1 / fs: LOCATE 1: PRINT " " np! = 0 inv% = inv% - 1: IF inv% < 0 THEN inv% = 0 FOR a% = 0 TO 20 IF ty%(a%) <> 0 THEN np! = np! + 1 IF ty%(a%) = 999 THEN newlev% = 1: GOTO endloop2 ON ty%(a%) GOSUB plop, glop, flip, null, flip2, wormhead, wormbody, wormtail, headf, satelite, cruiser, bar, wshot, wpower, p1000, boss2, projdown, wings, shields, projdir, disco, trashe, trash, zoom, computerc, projfol, exlife, sidecari, batthing, _ eatguy, asteriod, rtoss, rvmir, projcrv, mwhead, minel, mine, squid, clone IF ty%(a%) = 100 THEN GOSUB explosion IF ty%(a%) = 99 THEN GOSUB unit IF ty%(a%) = 0 AND a% <> 0 THEN blk%(a%) = 20 sy(a%) = sy(a%) + sd(a%) IF sy(a%) > 199 THEN sy(a%) = 0: sx(a%) = RND * 319: sd(a%) = RND * 8 + 2 NEXT IF np! = 0 OR bdead% = 1 THEN stageend% = 0: bdead% = 0 wv% = wv% + 1 tnp! = 0 FOR a% = 1 TO 20 hp!(a%) = 0: ty%(a%) = wt%(wv%, a%): x(a%) = wx(wv%, a%): y(a%) = wy(wv%, a%) - 100 md%(a%) = 1: dt(a%) = 0: dt1(a%) = 0: dt2(a%) = 0: xd(a%) = 0: yd(a%) = 0 IF ty%(a%) <> 0 THEN tnp! = tnp! + 1 IF ap%(a%) = 1 THEN ap%(a%) = 0 NEXT END IF inregs.ax = 3 CALL interrupt(&H33, inregs, outregs) IF outregs.bx <> 0 THEN km% = 1 IF km% = 0 THEN GOSUB keyboard ELSE GOSUB mouse IF ty%(0) = 0 THEN blk%(0) = dm% msk = 1 IF nf% > 0 THEN msk = 0 IF control%(1) = 1 OR control%(2) = 1 OR outregs.bx <> 0 THEN IF msk = 1 THEN GOSUB bullet: IF bt%(1) <> 14 THEN nf% = wnf%(bt%(1)) nf% = nf% - 1 IF nf% < 0 THEN nf% = 0 FOR a% = 1 TO 10 ON bt%(a%) GOSUB laser, laser, phaser, phaser IF by(a%) < 0 THEN bt%(a%) = 14: by(a%) = 0 IF bbx(a%) < 0 THEN bbx(a%) = 0 IF by(a%) < 0 THEN by(a%) = 0 IF bbx(a%) > 303 THEN bbx(a%) = 303 IF by(a%) > 183 THEN by(a%) = 183 NEXT FOR a% = 0 TO 20 IF x(a%) < 0 THEN x(a%) = 0 IF x(a%) > 303 THEN x(a%) = 303 NEXT IF y(0) < 1 THEN y(0) = 1 IF y(0) > 182 THEN y(0) = 182 IF dm% >= 7 THEN life% = life% - 1: dm% = 0: GOSUB dsp: shexp% = 1: ty%(0) = 100: dt(0) = 15: shot! = 3: cbul% = 1 IF ty%(1) = 999 THEN level% = level% + 1 IF level% = 1 THEN level% = 0: lvl% = lvl% + 1: GOSUB endlevel IF dm% <> ddm% AND shlds% > 0 THEN shlds% = shlds% - 1: dm% = ddm% IF dm% <> ddm% AND sidecar% = 1 THEN sidecar% = 0: dm% = ddm%: bt%(10) = 0 IF dm% <> ddm% AND shot! > 3 THEN shot! = shot! - 1 ddm% = dm% IF shlds% > 0 THEN blk%(0) = 74 + shlds% IF sidecar% = 1 THEN GOSUB sidecar endloop2: RETURN sidecar: suse% = 1 IF ty%(sideen%) <> 0 THEN GOSUB bullet suse% = 0 IF ty%(sideen%) = 0 OR sideen% = 0 THEN sideen% = RND * 18 + 1 bbx(10) = x(sideen%) by(10) = y(0) bt%(10) = 54 RETURN null: RETURN keyboard: FOR wa% = 1 TO 2 IF control%(wa%) = 1 THEN control%(wa%) = 2 NEXT ki% = INP(&H60) FOR a% = 1 TO 8 IF ki% = kyp%(a%) AND control%(wa%) <> 2 THEN kyo%(a%) = 1 NEXT FOR a% = 1 TO 8 IF ki% = kyr%(a%) THEN kyo%(a%) = 0 NEXT IF ki% = kyp%(5) THEN kyo%(6) = 0 IF ki% = kyp%(6) THEN kyo%(5) = 0 IF ki% = kyp%(7) THEN kyo%(8) = 0 IF ki% = kyp%(8) THEN kyo%(7) = 0 control%(1) = kyo%(1) OR kyo%(2) control%(2) = kyo%(3) OR kyo%(4) control%(3) = kyo%(5) control%(4) = kyo%(6) control%(5) = kyo%(7) control%(6) = kyo%(8) IF control%(5) = 1 THEN ud = ud - 2 IF control%(6) = 1 THEN ud = ud + 2 IF control%(3) = 1 THEN lr = lr - 2 IF control%(4) = 1 THEN lr = lr + 2 IF a$ = CHR$(27) THEN SYSTEM IF ud < -7 THEN ud = -7 IF ud > 7 THEN ud = 7 IF lr < -7 THEN lr = -7 IF lr > 7 THEN lr = 7 IF ud < 0 THEN ud = ud + .5 IF ud > 0 THEN ud = ud - .5 IF lr < 0 THEN lr = lr + .5 IF lr > 0 THEN lr = lr - .5 IF ty%(0) = 0 THEN x(0) = x(0) + ud IF ty%(0) = 0 THEN y(0) = y(0) + lr RETURN mouse: x% = outregs.cx / 2 y% = outregs.dx ud = (y% / 14) - 7 lr = (x% / 23) - 7 IF ty%(0) = 0 THEN x(0) = x(0) + lr IF ty%(0) = 0 THEN y(0) = y(0) + ud RETURN laser: by(a%) = by(a%) - 7 RETURN phaser: by(a%) = by(a%) - 15 RETURN plop: y(a%) = y(a%) + 2 sp% = 2: GOSUB ranmove IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 45: pnt& = pnt& + 50: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 blk%(a%) = 14 RETURN glop: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 2 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 blk%(a%) = 21 RETURN flip: y(a%) = y(a%) + 3 dt1(a%) = dt1(a%) + .1 x(a%) = x(a%) + (SIN(dt1(a%)) * 5) IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 blk%(a%) = 22 RETURN flip2: y(a%) = y(a%) + 3 dt1(a%) = dt1(a%) + .1 dt2(a%) = dt2(a%) + .5: IF dt2(a%) > 5 THEN dt2(a%) = 1 x(a%) = x(a%) + (SIN(dt1(a%)) * 5) IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 2 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 200: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 blk%(a%) = 29 + dt2(a%) RETURN wormhead: IF dt(a%) = 0 THEN dt(a%) = 1: xd(a%) = 1: yd(a%) = 1 boss! = a%: bossmax! = 60 tile% = 3 GOSUB testtile IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) = 60 THEN debri% = 64: GOSUB bossexp: bdead% = 1: a% = 1: RETURN IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 GOSUB testhit IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 60 THEN debri% = 64: GOSUB bossexp: bdead% = 1: a% = 1: RETURN IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 dt1(a%) = dt1(a%) + RND * .2 - .1 IF dt1(a%) > .2 THEN dt1(a%) = .2 IF dt1(a%) < -.2 THEN dt1(a%) = -.2 dt2(a%) = dt2(a%) + dt1(a%) IF dt2(a%) < 0 THEN dt2(a%) = 6.28 IF dt2(a%) > 6.28 THEN dt2(a%) = 0 x(a%) = x(a%) + (SIN(dt2(a%)) * 4) * xd(a%) y(a%) = y(a%) + (COS(dt2(a%)) * 4) * yd(a%) xmax% = 287: ymax% = 167: GOSUB bossbound blk%(a%) = 35 blk%(a% + 1) = 36: x(a% + 1) = x(a%) + 16: y(a% + 1) = y(a%): ty%(a% + 1) = 99 blk%(a% + 2) = 37: x(a% + 2) = x(a%): y(a% + 2) = y(a%) + 16: ty%(a% + 2) = 99 blk%(a% + 3) = 38: x(a% + 3) = x(a%) + 16: y(a% + 3) = y(a%) + 16: ty%(a% + 3) = 99 RETURN wormbody: IF ABS(x(a%) - x(a% - 2)) + ABS(y(a%) - y(a% - 2)) > 32 THEN x(a%) = x(a%) + (x(a% - 2) - x(a%)) / 10 y(a%) = y(a%) + (y(a% - 2) - y(a%)) / 10 END IF blk%(a%) = 39 RETURN wormtail: IF ABS(x(a%) - x(a% - 1)) + ABS(y(a%) - y(a% - 1)) > 15 THEN x(a%) = x(a%) + (x(a% - 1) - x(a%)) / 20 y(a%) = y(a%) + (y(a% - 1) - y(a%)) / 20 END IF blk%(a%) = 40 RETURN headf: IF md%(a%) = 0 THEN md%(a%) = 1 ON md%(a%) GOSUB hd1, hd2 RETURN hd1: sp% = 1: n% = 0: GOSUB follow GOSUB testhit IF bulhit% = 1 THEN ty%(a% + 1) = 100: dt(a% + 1) = 15: ty%(a% + 2) = 100: dt(a% + 2) = 15: ty%(a% + 3) = 100: dt(a% + 3) = 15: md%(a%) = 2: RETURN IF shphit% = 1 THEN dm% = dm% + 2: inv% = 60 tile% = 3 GOSUB testtile IF bulhit% = 1 THEN ty%(a% + 1) = 100: dt(a% + 1) = 15: ty%(a% + 2) = 100: dt(a% + 2) = 15: ty%(a% + 3) = 100: dt(a% + 3) = 15: md%(a%) = 2: RETURN blk%(a%) = 42 blk%(a% + 1) = 43: x(a% + 1) = x(a%) + 16: y(a% + 1) = y(a%): ty%(a% + 1) = 99 blk%(a% + 2) = 44: x(a% + 2) = x(a%): y(a% + 2) = y(a%) + 16: ty%(a% + 2) = 99 blk%(a% + 3) = 45: x(a% + 3) = x(a%) + 16: y(a% + 3) = y(a%) + 16: ty%(a% + 3) = 99 RETURN hd2: GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15 IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 sp% = 2: n% = 0: GOSUB follow blk%(a%) = 41 RETURN testtile: aa% = a% bb% = 0: sb% = 0 FOR w% = 1 TO tile% a% = a% + 1 GOSUB testhit IF bulhit% = 1 THEN bb% = 1 IF shphit% = 1 THEN sb% = 1 NEXT IF sb% = 1 THEN shphit% = 1 IF bb% = 1 THEN bulhit% = 1 a% = aa% RETURN follow: IF x(a%) < x(n%) THEN x(a%) = x(a%) + sp% IF x(a%) > x(n%) THEN x(a%) = x(a%) - sp% IF y(a%) < y(n%) THEN y(a%) = y(a%) + sp% IF y(a%) > y(n%) THEN y(a%) = y(a%) - sp% RETURN unit: RETURN satelite: y(a%) = y(a%) + .75 IF xd(a%) <> -5 AND xd(a%) <> 5 THEN xd(a%) = 5 IF dt1(a%) <> -.25 AND dt1(a%) <> .25 THEN dt1(a%) = .25 x(a%) = x(a%) + xd(a%) IF x(a%) < 6 THEN xd(a%) = 5 IF x(a%) > 297 THEN xd(a%) = -5 GOSUB testhit IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: pnt& = pnt& + 350: GOSUB dsp: RETURN IF shphit% = 1 THEN dm% = dm% + 1.5: inv% = 60 dt(a%) = dt(a%) + dt1(a%) IF dt(a%) > 2 THEN dt1(a%) = -.25 IF dt(a%) < 0 THEN dt1(a%) = .25 blk%(a%) = 46 + dt(a%) IF dt(a%) > 1 AND ty%(a% + 1) <> 17 THEN ty%(a% + 1) = 17: blk%(a% + 1) = 50: blk%(a%) = 49: x(a% + 1) = x(a%): y(a% + 1) = y(a%): dt(a% + 1) = 8 RETURN boss2: boss! = a%: bossmax! = 110 tile% = 3 GOSUB testtile IF xd(a%) = 0 THEN xd(a%) = 1: yd(a%) = 1 IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) = 110 THEN debri% = 70: GOSUB bossexp: bdead% = 1: a% = 1: RETURN IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 GOSUB testhit IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 IF hp!(a%) >= 110 THEN debri% = 70: GOSUB bossexp: bdead% = 1: a% = 1: RETURN IF xd(a%) > 0 AND xd(a%) < 5 THEN xd(a%) = xd(a%) + (RND * 3 - 1) IF xd(a%) < 0 AND xd(a%) > -5 THEN xd(a%) = xd(a%) - (RND * 3 - 1) yd(a%) = yd(a%) + RND - .5 IF yd(a%) < -5 THEN yd(a%) = -5 IF yd(a%) > 5 THEN yd(a%) = 5 IF y(a%) > 100 THEN yd(a%) = yd(a%) - .25 x(a%) = x(a%) + xd(a%) y(a%) = y(a%) + yd(a%) gr1% = gr1% + 1 IF gr1% > 16 THEN gr1% = 0 IF gr1% > 15 AND y(0) > y(a%) THEN r% = RND * 13 + 5 ty%(r%) = 20 x(r%) = x(a%): y(r%) = y(a%) xd(r%) = (x(0) - x(r%)) / 20 yd(r%) = (y(0) - y(r%)) / 20 blk%(r%) = 74 END IF dt(a%) = dt(a%) XOR 1 xmax% = 303: ymax% = 183: GOSUB bossbound blk%(a%) = 68 blk%(a% + 1) = 69: x(a% + 1) = x(a%): y(a% + 1) = y(a%) + 16: ty%(a% + 1) = 99 blk%(a% + 2) = 70 + dt(a%) * 2: x(a% + 2) = x(a%) - 16: y(a% + 2) = y(a%): ty%(a% + 2) = 99 blk%(a% + 3) = 71 + dt(a%) * 2: x(a% + 3) = x(a%) + 16: y(a% + 3) = y(a%): ty%(a% + 3) = 99 RETURN projdown: y(a%) = y(a%) + dt(a%) IF y(a%) > 184 THEN ty%(a%) = 0 GOSUB testhit IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60: ty%(a%) = 100: dt(a%) = 15 RETURN projdir: y(a%) = y(a%) + yd(a%) x(a%) = x(a%) + xd(a%) IF y(a%) > 184 OR y(a%) < 0 OR x(a%) > 303 OR x(a%) < 0 THEN ty%(a%) = 0 GOSUB testhit IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60: ty%(a%) = 100: dt(a%) = 15 RETURN cruiser: IF dt(a%) <> 99 THEN dt(a%) = 99: xd(a%) = RND * 4 - 2: ty%(a% + 2) = 99 y(a%) = y(a%) + 3 x(a%) = x(a%) + xd(a%) GOSUB testhit IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1: ty%(a + 1) = 0: ty%(a + 2) = 0: RETURN IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + 1 IF hp!(a%) >= 3 THEN dt(a%) = 15: ty%(a%) = 100: ty%(a% + 1) = 18: dt(a% + 1) = 6: ty%(a% + 2) = 18: dt(a% + 2) = -6: RETURN IF shphit% = 1 THEN dm% = dm% + 2: inv% = 60 blk%(a%) = 52 blk%(a% + 1) = 53: x(a% + 1) = x(a%) + 16: y(a% + 1) = y(a%): ty%(a% + 1) = 99 blk%(a% + 2) = 51: x(a% + 2) = x(a%) - 16: y(a% + 2) = y(a%): ty%(a% + 2) = 99 RETURN bar: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit IF bulhit% = 1 THEN n% = RND * 2 - 1: hp!(a% + n%) = hp!(a% + n%) + dam%: y(a%) = y(a%) - 1 IF hp!(a%) >= 5 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60: hp!(a%) = hp!(a%) + 1 blk%(a%) = 54 + hp!(a%) RETURN wings: x(a%) = x(a%) + dt(a%) y(a%) = y(a%) + 2 IF x(a%) > 303 OR x(a%) < 0 OR y(a%) > 183 THEN ty%(a%) = 100: dt(a%) = 15 RETURN bossbound: IF x(a%) < 1 THEN x(a%) = 1: xd(a%) = -xd(a%) IF y(a%) < 1 THEN y(a%) = 1: yd(a%) = -yd(a%) IF x(a%) > xmax% THEN x(a%) = xmax%: xd(a%) = -xd(a%) IF y(a%) > ymax% THEN y(a%) = ymax%: yd(a%) = -yd(a%) RETURN wshot: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 ninv% = 1: GOSUB testhit IF shphit% = 1 THEN ty%(a%) = 0: IF shot! < 10 THEN shot! = shot! + 1 blk%(a%) = 59 RETURN wpower: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 ninv% = 1: GOSUB testhit IF shphit% = 1 THEN ty%(a%) = 0: IF cbul% < 4 THEN cbul% = cbul% + 1 blk%(a%) = 24 RETURN p1000: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 ninv% = 1: GOSUB testhit IF shphit% = 1 THEN ty%(a%) = 0: pnt& = pnt& + 1000 blk%(a%) = 28 RETURN shields: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 ninv% = 1: GOSUB testhit IF shphit% = 1 THEN ty%(a%) = 0: shlds% = 4 blk%(a%) = 25 RETURN disco: dt2(a%) = dt2(a%) - 1: IF dt2(a%) < 0 THEN dt2(a%) = 0 IF tbl% > 2 THEN dt2(a%) = 50 IF dt2(a%) > 0 THEN GOTO dmad ELSE GOTO dhappy dmad: IF xd(a%) = 0 THEN xd(a%) = 1 IF xd(a%) > 0 AND xd(a%) < 14 THEN xd(a%) = xd(a%) + (RND * 3 - 1) IF xd(a%) < 0 AND xd(a%) > -14 THEN xd(a%) = xd(a%) - (RND * 3 - 1) yd(a%) = yd(a%) + RND - .5 IF yd(a%) < -14 THEN yd(a%) = -14 IF yd(a%) > 14 THEN yd(a%) = 14 x(a%) = x(a%) + xd(a%) y(a%) = y(a%) + yd(a%) GOSUB testhit IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 xmax% = 303: ymax% = 183: GOSUB bossbound blk%(a%) = 83 RETURN dhappy: y(a%) = y(a%) + 1 x(a%) = x(a%) + RND - .5 IF x(a%) < 0 THEN x(a%) = 0 IF x(a%) > 303 THEN x(a%) = 303 IF dt1(a%) <> -.5 AND dt1(a%) <> .5 THEN dt1(a%) = .5 dt(a%) = dt(a%) + dt1(a%) IF dt(a%) >= 3 THEN dt1(a%) = -.5: IF dt(a%) = 3 THEN dt(a%) = 2.9 IF dt(a%) < 0 THEN dt1(a%) = .5 GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 45: pnt& = pnt& + 50: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 blk%(a%) = 79 + dt(a%) IF y(a%) > 184 THEN ty%(a%) = 0: escape% = ecsape% + 1 RETURN trashe: IF md(a%) = 0 THEN md%(a%) = 1 ON md%(a%) GOSUB trmd1, trmd2, trmd3, trmd4 RETURN trmd1: y(a%) = y(a%) + 1 sp% = 1: GOSUB ranmove IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 n% = RND * 20 IF ty%(n%) = 23 THEN dt(a%) = n%: md%(a%) = 2 GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 45: pnt& = pnt& + 50: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 dt1(a%) = dt1(a%) XOR 1 blk%(a%) = 85 + dt1(a%) RETURN trmd2: sp% = 5: n% = dt(a%): GOSUB follow IF FIX(x(a%) / 8) * 8 = FIX(x(dt(a%)) / 8) * 8 AND FIX(y(a%) / 8) * 8 = FIX(y(dt(a%)) / 8) * 8 THEN dt2(a%) = 1 IF FIX(x(a%)) = FIX(dt(a%)) AND FIX(y(a%)) = FIX(y(dt(a%))) THEN md%(a%) = 3: dt2(a%) = 0 RETURN trmd3: ty%(dt(a%)) = 0 dt2(a%) = dt2(a%) + .5 IF dt2(a%) > 7.5 THEN md%(a%) = 4: dt1(a%) = RND * 5 + 5 blk%(a%) = 87 + dt2(a%) GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 45: pnt& = pnt& + 50: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 RETURN trmd4: dt1(a%) = dt1(a%) - 1: IF dt1(a%) < 0 THEN md%(a%) = 1: dt1(a%) = 0: ty(dt(a%)) = 23: x(dt(a%)) = x(a%): y(dt(a%)) = y: xd(r%) = (x(0) - x(a%)) / 20: yd(r%) = (y(0) - y(a%)) / 20 blk%(a%) = 94 GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 45: pnt& = pnt& + 50: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 RETURN trash: xd(a%) = xd(a%) / 1.1 x(a%) = x(a%) + xd(a%) yd(a%) = yd(a%) / 1.1 y(a%) = y(a%) + yd(a%) + 1 blk%(a%) = 84 GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 45: pnt& = pnt& + 50: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 RETURN zoom: dt2(a%) = dt2(a%) + .1 IF dt(a%) = 0 THEN dt(a%) = 1: y(a%) = y(a%) + 100: dt2(a%) = -2.5 - a% IF dt2(a%) < -3.5 THEN RETURN IF dt2(a%) > -.5 AND dt2(a%) < .5 THEN ty%(a% + 1) = 26: x(a% + 1) = x(a%): y(a% + 1) = y(a%) dt2(a%) = dt2(a%) - .08 GOSUB testhit IF bulhit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 45: pnt& = pnt& + 50: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 END IF y(a%) = y(a%) + 1 IF dt2(a%) > 3.5 THEN ty%(a%) = 0: escape% = ecsape% + 1 blk%(a%) = (3 - ABS(dt2(a%))) + 102 RETURN computerc: IF RND * 50 > 49 THEN xd(a%) = -xd(a%) IF RND * 50 > 49 THEN yd(a%) = -yd(a%) IF RND * 50 > 49 THEN xd(a%) = xd(a%) XOR 5 IF RND * 50 > 49 THEN yd(a%) = yd(a%) XOR 5 xmax% = 271: ymax% = 167: GOSUB bossbound tile% = 1: GOSUB testtile IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) = 110 THEN debri% = 114: GOSUB bossexp: bdead% = 1: a% = 1: RETURN IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 GOSUB testhit gr1% = gr1% + 1 IF gr1% > 35 AND y(0) > y(a%) THEN gr1% = 0 blk%(a% + 5) = 114: x(a% + 5) = x(a%): y(a% + 5) = y(a%) + 16: ty%(a% + 5) = 20: xd(a%) = -4: yd(a%) = 5 blk%(a% + 6) = 114: x(a% + 6) = x(a%): y(a% + 6) = y(a%) + 16: ty%(a% + 6) = 20: xd(a%) = -2: yd(a%) = 6 blk%(a% + 7) = 114: x(a% + 7) = x(a%): y(a% + 7) = y(a%) + 16: ty%(a% + 7) = 20: xd(a%) = 0: yd(a%) = 7 blk%(a% + 8) = 114: x(a% + 8) = x(a%): y(a% + 8) = y(a%) + 16: ty%(a% + 8) = 20: xd(a%) = 2: yd(a%) = 6 blk%(a% + 9) = 114: x(a% + 9) = x(a%): y(a% + 9) = y(a%) + 16: ty%(a% + 9) = 20: xd(a%) = 4: yd(a%) = 5 END IF blk%(a%) = 109 blk%(a% + 1) = 110: x(a% + 1) = x(a%): y(a% + 1) = y(a%) + 16: ty%(a% + 1) = 99 blk%(a% + 2) = 111: x(a% + 2) = x(a%): y(a% + 2) = y(a%) + 32: ty%(a% + 2) = 99 blk%(a% + 3) = 112: x(a% + 3) = x(a%) + 16: y(a% + 3) = y(a%): ty%(a% + 3) = 99 blk%(a% + 4) = 113: x(a% + 4) = x(a%) + 16: y(a% + 4) = y(a%) + 16: ty%(a% + 4) = 99 RETURN projfol: dt(a%) = dt(a%) + 1 x(a%) = x(a%) + xd(a%) y(a%) = y(a%) + yd(a%) IF dt(a%) > 20 THEN ods% = ABS(ox(0) - ox(a%)) + ABS(oy(0) - oy(a%)) DS% = ABS(x(0) - x(a%)) + ABS(y(0) - y(a%)) IF DS% + 7 > ods% THEN dt1(a%) = dt1(a%) + .5 IF dt1(a%) > 6.28 THEN dt1(a%) = 0 xd(a%) = SIN(dt1(a%)) * 5 yd(a%) = COS(dt1(a%)) * 5 END IF IF dt(a%) = 450 THEN ty%(a%) = 100: dt(a%) = 15 IF y(a%) > 184 OR y(a%) < 0 OR x(a%) < 0 OR x(a%) > 303 THEN ty%(a%) = 0 GOSUB testhit IF shphit% = 1 THEN ty%(a%) = 100: dt(a%) = 15: dm% = dm% + .75: inv% = 60 blk%(a%) = 106 RETURN exlife: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 ninv% = 1: GOSUB testhit IF shphit% = 1 THEN ty%(a%) = 0: life% = life% + 1 blk%(a%) = 28 RETURN sidecari: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 ninv% = 1: GOSUB testhit IF shphit% = 1 THEN ty%(a%) = 0: sidecar% = 1 blk%(a%) = 61 RETURN batthing: y(a%) = y(a%) + 4 - yd(a%) GOSUB testhit IF x(a%) < 0 OR x(a%) > 303 OR y(a%) < 0 THEN ty(a%) = 0: escape% = escacpe% + 1 IF y(a%) > 184 THEN yd(r%) = ((y(0) - y(a%)) / 20) - 4: xd(r%) = (x(0) - x(a%)) / 20 IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 3 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 IF dt2(a%) = 0 THEN dt2(a%) = .5 dt1(a%) = dt1(a%) + dt2(a%) IF dt1(a%) < .5 THEN dt2(a%) = .5 IF dt1(a%) > 6.5 THEN dt2(a%) = -.5 blk%(a%) = 116 RETURN eatguy: IF md%(a%) = 0 THEN md%(a%) = 1 ON md%(a%) GOSUB eg1, eg2, eg3, eg4 RETURN eg1: y(a%) = y(a%) + 2 sp% = 2: GOSUB ranmove IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit DS% = ABS(x(0) - x(a%)) + ABS(y(0) - y(a%)) IF DS% < 70 OR hp!(a%) > 0 THEN md%(a%) = 2 IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 3 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 dt(a%) = dt(a%) XOR 1 blk%(a%) = dt(a%) + 123 RETURN eg2: sp% = 4: n% = 0: GOSUB follow IF FIX(x(a%) / 8) * 8 = FIX(x(0) / 8) * 8 AND FIX(y(a%) / 8) * 8 = FIX(y(0) / 8) * 8 THEN dt2(a%) = 1 IF FIX(x(a%)) = FIX(x(0)) AND FIX(y(a%)) = FIX(y(0)) THEN md%(a%) = 3: dt2(a%) = 0 RETURN eg3: shipeat% = 1 dt2(a%) = dt2(a%) + .5 IF dt2(a%) > 6.5 THEN md%(a%) = 4: dt1(a%) = RND * 15 + 25 blk%(a%) = 127 + dt2(a%) GOSUB testhit RETURN eg4: dt1(a%) = dt1(a%) - 1: IF dt1(a%) < 0 THEN md%(a%) = 1: dt1(a%) = 0: shipeat% = 0 blk%(a%) = 133 GOSUB testhit RETURN asteriod: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 tile% = 3 GOSUB testtile IF shphit% = 1 THEN dm% = dm% + 3: inv% = 60 blk%(a%) = 134 blk%(a% + 1) = 135: x(a% + 1) = x(a%) + 16: y(a% + 1) = y(a%): ty%(a% + 1) = 99 blk%(a% + 2) = 136: x(a% + 2) = x(a%): y(a% + 2) = y(a%) + 16: ty%(a% + 2) = 99 blk%(a% + 3) = 137: x(a% + 3) = x(a%) + 16: y(a% + 3) = y(a%) + 16: ty%(a% + 3) = 99 RETURN rtoss: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 2 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 ty%(a% + 1) = 26: x(a% + 1) = x(a%): y(a% + 1) = y(a%) dt(a%) = dt(a%) + 1: IF dt(a%) = 4 THEN dt(a%) = 0 blk%(a%) = 138 + dt(a%) RETURN rvmir: IF xd(a%) = 0 THEN xd(a%) = 8 x(a%) = x(a%) + xd(a%) xmax% = 271: ymax% = 167: GOSUB bossbound tile% = 1 GOSUB testtile IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) = 110 THEN debri% = 114: GOSUB bossexp: bdead% = 1: a% = 1: RETURN IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 GOSUB testhit IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) = 110 THEN debri% = 114: GOSUB bossexp: bdead% = 1: a% = 1: RETURN IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 gr1% = gr1% + 1 IF gr1% > 16 THEN gr1% = 0 IF gr1% > 15 AND y(0) > y(a%) THEN r% = RND * 13 + 5 ty%(r%) = 34 shtt% = shtt% XOR 1 x(r%) = x(a%): y(r%) = y(a%) dt(r%) = shtt% blk%(r%) = 74 END IF dt2(a%) = dt2(a%) XOR 1 blk%(a%) = 142 + (dt2(a%) * 2) blk%(a% + 1) = 143 + (dt2(a%) * 2): x(a% + 1) = x(a%): y(a% + 1) = y(a%) + 16: ty%(a% + 1) = 99 RETURN projcrv: IF yd(a%) = 0 THEN yd(a%) = 10 y(a%) = y(a%) + yd(a%) x(a%) = x(a%) - (dt(a%) * 5) IF x(a%) > 303 OR x(a%) < 0 THEN ty%(a%) = 0 GOSUB testhit IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60: ty%(a%) = 100: dt(a%) = 15 IF dt(a%) = -1 THEN blk%(a%) = 147 IF dt(a%) = 1 THEN blk%(a%) = 146 RETURN mwhead: dt1(a%) = dt1(a%) + RND * .4 - .2 IF dt1(a%) > .4 THEN dt1(a%) = .4 IF dt1(a%) < -.4 THEN dt1(a%) = -.4 dt2(a%) = dt2(a%) + dt1(a%) IF dt2(a%) < 0 THEN dt2(a%) = 6.28 IF dt2(a%) > 6.28 THEN dt2(a%) = 0 x(a%) = x(a%) + SIN(dt2(a%)) * 5 y(a%) = y(a%) + COS(dt2(a%)) * 5 FOR b% = 1 TO 4 GOSUB tailf NEXT GOSUB testhit IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60: ty%(a%) = 100: dt(a%) = 15 blk%(a%) = 23 RETURN tailf: dst% = ABS(x(a% + b%) - x((a% + b%) - 1)) + ABS(y(a% + b%) - y((a% + b%) - 1)) IF dst% > 16 THEN x(a% + b%) = x(a% + b%) + (x(a% + b%) - x((a% + b%) + 1)) / 20 y(a% + b%) = y(a% + b%) + (y(a% + b%) - y((a% + b%) + 1)) / 20 END IF blk%(a% + b%) = 156 + b% RETURN minel: y(a%) = y(a%) + 2 xd(a%) = xd(a%) + RND * .2 - .1 IF xd(a%) < -4 THEN xd(a%) = -4 IF xd(a%) > 4 THEN xd(a%) = 4 x(a%) = x(a%) + xd(a%) IF y(a%) > 184 THEN ty%(a%) = 0 IF RND * 20 > 19 THEN END IF GOSUB testhit IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 3 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp RETURN mine: y(a%) = y(a%) + 1 IF y(a%) > 184 THEN ty%(a%) = 0 GOSUB testhit IF shphit% = 1 THEN dm% = dm% + 2.5: inv% = 60: ty%(a%) = 100: dt(a%) = 15 blk%(a%) = 152 RETURN squid: y(a%) = y(a%) + 4 IF y(a%) > 184 THEN ty%(a%) = 0: escape% = escape% + 1 GOSUB testhit IF bulhit% = 1 THEN hp!(a%) = hp!(a%) + dam% IF hp!(a%) >= 2 THEN ty%(a%) = 100: dt(a%) = 15: levpnt& = levpnt& + 95: pnt& = pnt& + 100: GOSUB dsp IF shphit% = 1 THEN dm% = dm% + 1: inv% = 60 dt1(a%) = dt1(a%) + 1 IF dt1(a%) >= 3 THEN dt1(a%) = 0 blk%(a%) = 153 + dt1(a%) RETURN clone: y(a%) = y(a%) + 1 x(a%) = (320 - x(0)) msk = 1 IF nf% > 0 THEN msk = 0 IF control%(1) = 1 OR control%(2) = 1 OR outregs.bx <> 0 THEN IF msk = 1 THEN GOSUB cbult RETURN cbult: n% = RND * 13 + 5 IF ty%(n%) = 0 THEN ty%(n%) = 20: blk%(n%) = 162: x(n%) = x(a%): y(n%) = y(a%): xd(n%) = 0: yd(n%) = 3 RETURN dsp: LOCATE 3: PRINT pnt&; " " PUT (0, 0), p%(0), PSET LOCATE 2, 3: PRINT USING "x###"; life% RETURN explosion: IF a% = 0 THEN y(a%) = y(a%) + 1: dt(a%) = dt(a%) + .2 ELSE y(a%) = y(a%) + 3: dt(a%) = dt(a%) + .5 IF dt(a%) > 19 THEN dt% = dt% + 1: ty%(a%) = 0: IF a% = 0 THEN x(0) = 150: y(0) = 183 IF dt% = 10 THEN dt% = 0 IF dt(a%) > 19 AND a% <> 0 AND dt% = 9 AND RND * 10 > 9 THEN IF RND > .5 THEN ty%(a%) = 13 ELSE ty%(a%) = 15 END IF blk%(a%) = dt(a%) RETURN bossexp: FOR a% = 1 TO 20: md%(a%) = 0: NEXT FOR amn = 20 TO 5 STEP -.3 t# = TIMER: WHILE TIMER < t# + .01: WEND FOR a% = 2 TO amn IF md%(a%) = 0 AND RND * 10 > 9 THEN IF RND * 3 > 2 THEN md%(a%) = 1 ELSE md%(a%) = 2 IF md%(a%) = 1 THEN x(a%) = x(1) + RND * 32 - 16: y(a%) = y(1) + RND * 32 - 16: dt(a%) = 0 IF md%(a%) = 2 THEN x(a%) = x(1) + RND * 32 - 16: y(a%) = y(1) + RND * 32 - 16: xd(a%) = RND * 30 - 15: yd(a%) = RND * 30 - 15: dt(a%) = 0: dt1(a%) = FIX(RND * 2) * 2: dt2(a%) = 5 + RND * 5 END IF FOR g% = amn TO 20 blk%(g%) = 20 NEXT ON md%(a%) GOSUB ex2, deb NEXT GOSUB exup NEXT FOR a% = 0 TO 20 blk%(a%) = 20 NEXT RETURN exup: FOR b% = 0 TO 20 IF oy(b%) > 0 AND oy(b%) < 183 AND ox(b%) > 0 AND ox(b%) < 303 THEN PUT (ox(b%), oy(b%)), p%(oblk%(b%) * 130), XOR ox(b%) = x(b%): oy(b%) = y(b%): oblk%(b%) = blk%(b%) IF y(b%) > 0 AND y(b%) < 183 AND x(b%) > 0 AND x(b%) < 303 THEN PUT (ox(b%), oy(b%)), p%(blk%(b%) * 130), XOR NEXT RETURN ex2: dt(a%) = dt(a%) + .5 IF dt(a%) > 4 THEN md%(a%) = 0 blk%(a%) = dt(a%) + 15 RETURN deb: dt(a%) = dt(a%) XOR 1 dt2(a%) = dt2(a%) - 1 IF dt2(a%) < 0 THEN md%(a%) = 0: blk%(a%) = 20: RETURN x(a%) = x(a%) + xd(a%) y(a%) = y(a%) + yd(a%) blk%(a%) = debri% + dt(a%) RETURN ranmove: xd(a%) = xd(a%) + RND * .2 - .1 yd(a%) = yd(a%) + RND * .2 - .1 IF xd(a%) < -sp% THEN xd(a%) = -sp% IF xd(a%) > sp% THEN xd(a%) = sp% IF yd(a%) < -sp% THEN yd(a%) = -sp% IF yd(a%) > sp% THEN yd(a%) = sp% y(a%) = y(a%) + yd(a%) x(a%) = x(a%) + xd(a%) RETURN testhit: bulhit% = 0: shphit% = 0 FOR b% = 1 TO shot! tst% = 0 IF bbx(b%) - 16 <= x(a%) AND bbx(b%) + 16 >= x(a%) THEN tst% = tst% + 1 IF by(b%) - 16 <= y(a%) AND by(b%) + 16 >= y(a%) THEN tst% = tst% + 1 IF tst% = 2 AND bt%(b%) <> 14 THEN bulhit% = 1: dam% = dm%(bt%(b%)): bt%(b%) = 14 NEXT tst% = 0 IF x(0) - 16 <= x(a%) AND x(0) + 16 >= x(a%) THEN tst% = tst% + 1 IF y(0) - 16 <= y(a%) AND y(0) + 16 >= y(a%) THEN tst% = tst% + 1 IF tst% = 2 AND inv% = 0 THEN shphit% = 1 IF tst% = 2 AND ninv% = 1 THEN shphit% = 1 ninv% = 0 RETURN bullet: a% = 0 IF suse% = 1 THEN n% = 5: sshot! = 10 ELSE n% = 1: sshot! = shot! FOR a% = n% TO sshot! IF bt%(a%) = 0 OR bt%(a%) = 14 THEN bt%(a%) = cbul%: GOTO found1 NEXT IF a% > shot! THEN a% = 0 found1: IF suse% = 1 THEN bbx(a%) = bbx(10): by(a%) = by(10) ELSE bbx(a%) = x(0): by(a%) = y(0) RETURN endlevel: CLS tm% = TIMER - tg lpnt& = pnt& - ppnt& PRINT "Time:"; tm% PRINT "Enemys ascaped:"; escape% PRINT "Points:"; lpnt& CLOSE #1 OPEN "bestlev.dat" FOR INPUT AS #1 FOR b% = 1 TO 3 FOR a% = 1 TO 5 INPUT #1, lvtmnm$(a%, b%), lvtm%(a%, b%) INPUT #1, lvesnm$(a%, b%), lves%(a%, b%) INPUT #1, lvpnnm$(a%, b%), lvpn&(a%, b%) NEXT NEXT CLOSE #1 place% = 6 FOR a% = 5 TO 1 STEP -1 IF lpnt& > lvpn&(a%, lvl%) THEN place% = a% NEXT IF place% <> 6 THEN FOR a% = 4 TO place% STEP -1 lvpn&(a% + 1, lvl%) = lvpn&(a%, lvl%) lvpnnm$(a% + 1, lvl%) = lvpnnm$(a%, lvl%) NEXT lvpn&(place%, lvl%) = lpnt& lvpnnm$(place%, lvl%) = nm$ END IF place% = 6 FOR a% = 5 TO 1 STEP -1 IF tm% < lvtm%(a%, lvl%) THEN place% = a% NEXT IF place% <> 6 THEN FOR a% = 4 TO place% STEP -1 lvtm%(a% + 1, lvl%) = lvtm%(a%, lvl%) lvtmnm$(a% + 1, lvl%) = lvtmnm$(a%, lvl%) NEXT lvtm%(place%, lvl%) = tm% lvtmnm$(place%, lvl%) = nm$ END IF place% = 6 FOR a% = 5 TO 1 STEP -1 IF escape% < lves%(a%, lvl%) THEN place% = a% NEXT IF place% <> 6 THEN FOR a% = 4 TO place% STEP -1 lves%(a% + 1, lvl%) = lves%(a%, lvl%) lvesnm$(a% + 1, lvl%) = lvesnm$(a%, lvl%) NEXT lves%(place%, lvl%) = escape% lvesnm$(place%, lvl%) = nm$ END IF OPEN "bestlev.dat" FOR OUTPUT AS #1 FOR b% = 1 TO 3 FOR a% = 1 TO 5 WRITE #1, lvtmnm$(a%, b%), lvtm%(a%, b%) WRITE #1, lvesnm$(a%, b%), lves%(a%, b%) WRITE #1, lvpnnm$(a%, b%), lvpn&(a%, b%) NEXT NEXT CLOSE #1 t# = TIMER: WHILE TIMER < t# + 2: a$ = INKEY$: WEND a$ = INPUT$(1) GOSUB levelbest a$ = INPUT$(1) ppnt& = pnt& escape% = 0 CLS a% = 0 IF lvl% = 13 THEN GOTO topgame wv% = 0: stageend% = 1: nxtl% = 0 RETURN levelbest: CLS LOCATE 1: PRINT "Best level "; lvl% - 1; " scores:" LOCATE 3: PRINT "Best points:" FOR a% = 1 TO 5 LOCATE a% + 3: PRINT a%; "--"; lvpnnm$(a%, lvl%) LOCATE a% + 3, 20: PRINT a%; "--"; lvpn&(a%, lvl%) NEXT LOCATE 10: PRINT "Best time:" FOR a% = 1 TO 5 LOCATE a% + 10: PRINT a%; "--"; lvtmnm$(a%, lvl%) LOCATE a% + 10, 20: PRINT a%; "--"; lvtm%(a%, lvl%) NEXT LOCATE 17: PRINT "Least escapes:" FOR a% = 1 TO 5 LOCATE a% + 17: PRINT a%; "--"; lvesnm$(a%, lvl%) LOCATE a% + 17, 20: PRINT a%; "--"; lves%(a%, lvl%) NEXT RETURN updatepal: FOR a% = 0 TO 255 PALETTE a%, r%(a%) + g%(a%) * 256 + b%(a%) * 65536 NEXT RETURN levelname: DATA "level1.dat","level2.dat","level3.dat","level4.dat","level5.dat","level6.dat","level7.dat","level8.dat", "level9.dat","level10.dat","level11.dat","level12.dat" keydata: DATA 57,56,32,33,72,80,75,77 DATA 185,184,160,161,200,208,203,205 DATA 109,86,221,102 DATA 108,103,228,115