mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-07 16:30:18 +00:00
These tests use a variety of sample code (with some of the larger files removed, so they are not complete!) and verifies that they all compile successfully.
2181 lines
63 KiB
QBasic
2181 lines
63 KiB
QBasic
REM - written for QBasic / QuickBasic (freeware) -
|
||
REM - V.26
|
||
REM - by Daniel Kupfer
|
||
REM - for more info look at the end / press f1 in title
|
||
REM - any problems / questions ? mail: dk1000000@aol.com
|
||
|
||
SCREEN 7
|
||
DEFINT A-Z
|
||
scx = 159: scy = 99
|
||
xp = scx: yp = 172: vp = 6: vsh = 6
|
||
xpmin = 0: xpmax = 319: shmax = 15: emax = 7: esmax = 3: fmax = 15
|
||
stmax = 31: exmax = 7
|
||
SND = 1: bonplay& = 20000
|
||
pi! = 3.14158: pi2! = pi! / 2: pi4! = pi! / 4
|
||
cts1 = 0: cts2 = 4: cts3 = 10
|
||
|
||
DIM tae(201), tne(201): n = shmax
|
||
DIM xsh(n), ysh(n): n = stmax
|
||
DIM xst(n), yst(n), xst!(n), yst!(n), cst(n), vst(n): n = emax
|
||
DIM xe!(n), ye!(n), ae(n), dae(n), ne(n), ce(n), ste(n)
|
||
DIM ze(n), zze(n), tpe(n), tce(n): n = exmax
|
||
DIM xex(n), yex(n), stex(n), zex(n), tex(n): n = esmax
|
||
DIM xes!(n), yes!(n), dxes!(n), dyes!(n), stes(n), tes(n)
|
||
DIM aes(n), des(n): n = fmax
|
||
DIM fx!(n), fy!(n), dfx!(n), dfy!(n), fc(n), ft(n): n = 11
|
||
DIM ptse(n), dble(n), anie(n), adde(n), zoome(n)
|
||
DIM table(n), c1e(n), c2e(n), expe(n), c1ee(2, n), c2ee(2, n): n = 7
|
||
DIM tce0(n), xec(n), yec(n), aec(n): n = 12
|
||
DIM xc!(n), yc!(n), zc!(n), cc(n), ac(n), nc(n)
|
||
DIM ENEMY$(20, 3), CRASH$(4), bin(4), CH$(42): n = 7
|
||
DIM vbos(n), vsbos(n), tsbos(n), fsbos(n), ptsbos(n), hrbos(n)
|
||
DIM BOSS$(n), STAGE$(n)
|
||
DIM cp(95), SFINAL$(2, 9), CREDIT$(50)
|
||
A5$ = STRING$(4, CHR$(170)) + STRING$(4, CHR$(85))
|
||
|
||
FOR e = 1 TO 11: READ p, d, m, a, z, T, ex
|
||
ptse(e) = p: dble(e) = d: anie(e) = m: adde(e) = a: zoome(e) = z
|
||
table(e) = T: expe(e) = ex: NEXT e
|
||
DATA 10,0,0,0,64,1,1, 20,0,0,0,64,2,1, 25,0,0,0,64,2,1
|
||
DATA 40,0,0,0,64,5,1, 50,0,0,0,64,4,1, 200,0,0,0,64,6,1
|
||
DATA 250,0,0,0,64,7,1, 100,1,0,1,64,2,1, 120,0,0,0,64,3,1
|
||
DATA 120,1,3,1,64,2,1, 160,0,2,0,48,3,1
|
||
|
||
FOR s = 0 TO 2
|
||
FOR e = 1 TO 11: READ c1, c2: c1ee(s, e) = c1: c2ee(s, e) = c2: NEXT e: NEXT s
|
||
DATA 7,13, 6,14, 5,15, 5,11, 3,15, 2,10, 2,10, 4,12, 1,14, 2,14, 9,15
|
||
DATA 4,13, 2,10, 1,4, 7,15, 4,14, 3,11, 3,11, 5,13, 2,15, 2,14, 9,15
|
||
DATA 5,14, 3,11, 2,14, 12,14, 14,4, 4,12, 4,12, 6,14, 3,15, 6,14, 4,12
|
||
|
||
REM - - - - BOSS SETUP - - - - - -
|
||
|
||
FOR n = 1 TO 7: READ a$, s$: BOSS$(n) = a$: STAGE$(n) = s$: NEXT n
|
||
DATA "MYKOR MASTER","VEGA SYSTEM","PHOENIX","ALPHA CENTAURI"
|
||
DATA "EVIL BATSY","DARK PLANET","QUARRIOR","AQUARUIS"
|
||
DATA "MC FISHKING","NEPTUN","BEEBOP QUEEN","MOONBASE"
|
||
DATA "MOTHERSHIP","EARTH"
|
||
FOR n = 1 TO 7: READ v, ts, f, p, r: vbos(n) = v: tsbos(n) = ts
|
||
fsbos(n) = f: ptsbos(n) = p: hrbos(n) = r: NEXT n
|
||
DATA 1,1,4,1000,20, 1,4,6,2500,20, 2,1,8,4000,20, 1,5,10,7500,20
|
||
DATA 1,3,100,10000,24, 2,2,10,16000,20, 1,0,0,25000,40
|
||
FOR n = 0 TO 3: READ c: csb(n) = c: NEXT n
|
||
DATA 4,12,14,10
|
||
|
||
REM - - - - ESHOT SETUP - - - -
|
||
FOR n = 1 TO 5: READ v, d: ves(n) = v: ses(n) = d: NEXT n
|
||
DATA 5,2, 4,2, 2,4, 3,2, 3,2
|
||
|
||
n = 1
|
||
DO: READ a, T: tae(n) = a: tne(n) = T: n = n + 1
|
||
LOOP UNTIL a = -1 AND T = -1
|
||
nte = n - 1
|
||
PATTERN1:
|
||
DATA 0,100, -900,1, 0,32, -900,1, 0,50, -900,1, 0,8, -900,1
|
||
DATA 0,70, 900,1, 0,10, 900,1, 0,50, -900,1, 30,60 ,0,90
|
||
DATA 30,30, 0,50, 900,1, 0,14, 900,1, 0,20, 900,1, 0,16
|
||
DATA 900,1, 0,20, 900,1, 0,14, 900,1, 0,20, 900,1, 0,16
|
||
DATA 900,1, 0,20, 900,1, 0,14, 900,1, 0,40, 900,2, 0,0
|
||
PATTERN2:
|
||
DATA -30,30, 30,75, 0,34, -30,95, 0,34, 30,95, 0,34, -30,95
|
||
DATA 0,34, 30,95, 0,34, -30,95, 0,34, 30,50, 0,25, 30,30
|
||
DATA 0,60, 60,30, 0,110, -60,31, 0,90, 60,31, 0,60, -60,32
|
||
DATA 0,30, 60,32, 30,28, 0,20, 0,0, 0,0, 0,0, 0,0
|
||
PATTERN3:
|
||
DATA -90,20, 90,30, -90,30, 90,20, -90,20, 90,40, 90,10, -90,20
|
||
DATA 90,20, -90,30, 90,20, -90,20, 90,20, -90,21, 0,20, 0,0
|
||
DATA 90,20, -90,30, 90,30, -90,20, 90,20, -90,40, -90,10, 90,20
|
||
DATA -90,20, 90,30, -90,20, 90,20, -90,20, 90,21, 0,20, 0,0
|
||
PATTERN4:
|
||
DATA 30,60, -30,-30, 30,60, 0,40, 30,20, 0,30, 30,90, -30,90
|
||
DATA -30,90, 30,45, 0,20, -30,15, 0,10, 30,15, -30,15, 30,15
|
||
DATA 0,80, 30,5, 0,40, 30,5, 0,40, 30,5, 0,40, 30,5
|
||
DATA 0,40, 30,180, 0,120, 0,0, 0,0, 0,0, 0,0, 0,0
|
||
PATTERN5:
|
||
DATA 0,130, 30,60, 0,105, 90,20, 0,60, -90,20, 0,20, 90,20
|
||
DATA 0,60, 90,10, 0,80, 90,20, 0,80, -90,20, 0,80, 90,20
|
||
DATA 0,60, 30,270, 0,50, 0,0, 0,0, 0,0, 0,0, 0,0
|
||
PATTERN6:
|
||
DATA -30,85, 0,50, 30,0, -30,80, 0,60, 30,80, 0,60, -30,80
|
||
DATA 0,60, 30,80, 0,60, -30,80, 0,60, 30,50, 0,25, 30,30
|
||
DATA 0,60, 60,30, 0,110, -60,31, 0,90, 60,31, 0,60, -60,32
|
||
DATA 0,30, 60,32, 30,28, 0,20, 0,0, 0,0, 0,0, 0,0
|
||
PATTERN7:
|
||
DATA -30,60, 0,80, 0,0, 0,0, 30,60, 0,80, 0,0, 0,0
|
||
DATA -1,-1
|
||
|
||
FOR n = 1 TO 7: READ T, x, y, a, v, c: tce0(n) = T: xec(n) = x: yec(n) = y
|
||
aec(n) = a: vec(n) = v: crec(n) = c: NEXT n
|
||
DATA 0,0,20,0,4,7, 40,159,119,900,4,7
|
||
DATA 72,159,119,900,4,7, 104,149,109,900,4,7
|
||
DATA 136,320,20,1800,4,7
|
||
DATA 160,159,50,900,4,7, 192,159,50,900,4,7
|
||
|
||
FOR n = 0 TO 9: READ x, y: pcx(n) = x: pcy(n) = y: NEXT n
|
||
DATA 0,-2, -10,-2, 10,-2, -10,3, 10,3
|
||
DATA 0,-5, -14,-4, 14,-4, -14,3, 14,3
|
||
|
||
RANDOMIZE TIMER
|
||
GOSUB LOAD.SPRITES
|
||
GOSUB LOAD.SOUNDS
|
||
GOSUB LOAD.CHARSET
|
||
|
||
FOR n = 0 TO shmax: ysh(n) = -1: NEXT n
|
||
FOR n = 0 TO stmax: GOSUB CREATE.STAR: NEXT n
|
||
FOR n = 0 TO emax: ste(n) = -1: ce(n) = 2: NEXT n
|
||
FOR n = 0 TO esmax: stes(n) = -1: NEXT n
|
||
|
||
|
||
REM - - - - - - - - TITLE SCREEN - - - - - - - -
|
||
x = -40: zmax = 40
|
||
FOR n = 0 TO 7: READ nc, cc
|
||
xc!(n) = x: yc!(n) = 26: zc!(n) = 200: nc(n) = nc: cc(n) = cc
|
||
x = x + 7: NEXT n
|
||
FOR n = 8 TO 9: READ nc, cc
|
||
xc!(n) = x + 55: yc!(n) = yc!(1) + 30: zc!(n) = zmax: nc(n) = nc: cc(n) = cc
|
||
x = x + 7: NEXT n
|
||
DATA 29,15, 31,15, 31,15, 30,15, 19,15, 34,15, 17,15, 32,15, 9,15, 9,15
|
||
|
||
REM - - - LEVEL SETUP - - -
|
||
FOR n = 1 TO 9: READ T, r, s, h
|
||
ltpe(n) = T: lrad(n) = r: lsum(n) = s: lhit(n) = h: NEXT n
|
||
DATA 1,14,1,1, 1,14,2,1, 2,12,2,1, 3,12,2,1
|
||
DATA 4,12,2,1, 5,14,2,1, 8,16,1,3, 10,14,1,3
|
||
DATA 6,12,4,1
|
||
|
||
RESTORE CREDITS
|
||
FOR n = 1 TO 34: READ a$: CREDIT$(n) = a$: NEXT n
|
||
|
||
x = 100: y = 100: c1 = 6: c2 = 14: a = 0: z = 4
|
||
e = 6: f = 0: GOSUB DRAW.ESPRITE
|
||
REM END
|
||
|
||
GOSUB WAITKEY0: GOSUB TITLE
|
||
|
||
STAGE = 1: LEVEL = 1: stbos = -1: tbos = 1
|
||
GOSUB LOAD.LEVEL
|
||
REM ---> player setup
|
||
ssec(1) = 1: ssec(2) = 0: ssec(3) = 0: GOSUB SETUP.SHIP
|
||
stp = 0: REM status player
|
||
score& = 0
|
||
GOSUB DRAW.PLAYER1
|
||
n = INT(2 * RND)
|
||
IF n = 0 AND SND = 1 THEN PLAY SLAUNCH$
|
||
IF n = 1 AND SND = 1 THEN PLAY SNEWPL1$
|
||
GOSUB WAITFIRE: REM GOTO GAME.FINISH
|
||
GOSUB ENTER.STAGE
|
||
|
||
MAIN:
|
||
k0 = k: k = INP(96): k$ = INKEY$
|
||
IF k = 1 THEN END
|
||
IF k = 31 THEN SND = 1 - SND: GOSUB WAITKEY0
|
||
IF k = 25 THEN GOSUB PAUSE.MODE
|
||
IF k = 29 AND k0 <> 29 THEN GOSUB FIRE.SHOT
|
||
GOSUB KEYS
|
||
GOSUB MOVE.PLAYER
|
||
GOSUB MOVE.SHOT
|
||
GOSUB MOVE.ENEMY
|
||
GOSUB MOVE.BOSS
|
||
GOSUB MOVE.ESHOT
|
||
GOSUB REFR.SCREEN
|
||
WAIT &H3DA, 8: WAIT &H3DA, 8, 8
|
||
GOSUB DRAW.ESHOT
|
||
GOSUB DRAW.ENEMY
|
||
GOSUB DRAW.BOSS
|
||
GOSUB TEST.HIT.SHOT
|
||
GOSUB TEST.HIT.PLAYER
|
||
GOSUB DRAW.SHOT
|
||
GOSUB DRAW.EVENT
|
||
GOSUB DRAW.PLAYER
|
||
GOSUB DRAW.EXP
|
||
GOSUB DRAW.STAR
|
||
LOCATE 1, 30: PRINT score&
|
||
GOSUB CREATE.ESHOT
|
||
crec1 = crec1 - 1: IF crec1 = 0 THEN crec1 = crec0: GOSUB CREATE.ENEMY
|
||
cnt1 = (cnt1 + 1) AND 255
|
||
GOSUB BINARY.CNT
|
||
GOSUB TEST.LEVELEND
|
||
REM GOSUB DOCKING
|
||
GOTO MAIN
|
||
|
||
|
||
MOVE.BOSS:
|
||
IF stbos < 0 THEN RETURN
|
||
xbos! = xbos! + dxbos!: ybos! = ybos! + dybos!
|
||
IF hbos = 1 AND ybos! > 10 AND tbos < 7 THEN ybos! = ybos! - 3
|
||
IF xbos! < 10 THEN dxbos! = 1
|
||
IF xbos! > 309 THEN dxbos! = -1
|
||
IF ybos! < 10 THEN dybos! = 1
|
||
IF ybos! > 99 THEN dybos! = -1
|
||
GOSUB SHOT.BOSS
|
||
IF INT(100 * RND) < 1 THEN GOSUB ACTIV.BOSS
|
||
RETURN
|
||
|
||
SHOT.BOSS:
|
||
IF tbos = 7 THEN GOTO SHOT.SUPERBOSS
|
||
r = fsbos(tbos) * STAGE
|
||
IF INT(1000 * RND) > r THEN RETURN
|
||
x = xbos!: y = ybos!: T = tsbos(tbos): s = ses(T)
|
||
IF T = 3 THEN s = 2 + INT(5 * RND)
|
||
GOSUB FIRE.ESHOT
|
||
RETURN
|
||
|
||
SHOT.SUPERBOSS:
|
||
GOSUB CREATE.SUPERENEMY
|
||
RETURN
|
||
|
||
CREATE.SUPERENEMY:
|
||
IF INT(8 * RND) > 0 THEN RETURN
|
||
n = (eptr + 1) AND emax: IF ste(n) <> -1 THEN RETURN
|
||
T = tpe + 1: mt = table(T)
|
||
ye!(n) = ybos!: ae(n) = 900 + 180 * RND - 90
|
||
xe!(n) = xbos!
|
||
ze(n) = 64: zze(n) = zoome(T)
|
||
ste(n) = 0: tpe(n) = T
|
||
tce(n) = tce0(mt) + INT(2 * RND) * 4
|
||
GOSUB LOADPTR.ENEMY
|
||
RETURN
|
||
|
||
ACTIV.BOSS:
|
||
a! = INT(8 * RND) * pi4!
|
||
dxbos! = COS(a!) * vbos(tbos): dybos! = SIN(a!) * vbos(tbos)
|
||
IF tbos = 7 THEN dybos! = 0
|
||
RETURN
|
||
|
||
DRAW.BOSS:
|
||
IF stbos = -1 THEN RETURN
|
||
IF stbos < 0 THEN GOTO DRAW.BOSS1
|
||
x = xbos!: y = ybos!
|
||
ON tbos GOSUB DBOSS1, DBOSS2, DBOSS3, DBOSS4, DBOSS5, DBOSS6, DBOSS7
|
||
IF bin(1) = 0 THEN hbos = 0
|
||
RETURN
|
||
DRAW.BOSS1:
|
||
stbos = stbos + 1: GOSUB DRAW.BDOTS
|
||
IF stbos < -100 AND SND = 1 THEN SOUND 37 + 120 * RND, .4
|
||
IF stbos = -90 THEN GOTO DRAW.BOSS2
|
||
IF stbos > -96 AND stbos < -48 AND PLAY(0) = 0 AND SND = 1 THEN PLAY SBOSPTS$
|
||
RETURN
|
||
DRAW.BOSS2:
|
||
FOR e = 0 TO emax: ste(e) = -1: NEXT e: cresum = 0
|
||
pts& = ptsbos(tbos): GOSUB LOAD.SCORE
|
||
evcnt = 50: evpts = pts&: evtpe = 1
|
||
RETURN
|
||
|
||
DRAW.BDOTS:
|
||
FOR m = 0 TO fmax
|
||
x = fx!(m): y = fy!(m)
|
||
LINE (x, y)-(x + 1, y + 1), fc(m), BF
|
||
fx!(m) = fx!(m) + dfx!(m): fy!(m) = fy!(m) + dfy!(m)
|
||
NEXT m
|
||
RETURN
|
||
|
||
DRAW.EVENT:
|
||
IF evcnt <= 0 THEN RETURN
|
||
evcnt = evcnt - 1: yc! = 70: ac = 0: sc = 4: T$ = evtxt$
|
||
IF evtpe = 1 THEN xc! = 160: i = evpts: cc = 15 * RND: GOSUB DRAW.INTF
|
||
IF evtpe = 2 THEN xc! = 159 - LEN(T$) * 4: cc = 15: GOSUB DRAW.TXTZ
|
||
RETURN
|
||
|
||
BINARY.CNT:
|
||
bin(1) = 1 - bin(1): b2 = bin(2): b3 = bin(3)
|
||
IF bin(1) = 0 THEN bin(2) = 1 - bin(2)
|
||
IF bin(2) < b2 THEN bin(3) = 1 - bin(3)
|
||
IF bin(3) < b3 THEN bin(4) = 1 - bin(4)
|
||
RETURN
|
||
|
||
TEST.LEVELEND:
|
||
IF emovcnt > 0 OR expcnt > 0 OR stbos <> -1 THEN etimer = 0: RETURN
|
||
etimer = etimer + 1: IF etimer < 25 THEN RETURN
|
||
etimer = 0
|
||
IF (LEVEL AND 7) = 5 THEN GOSUB DOCKING: REM level 3 + 7
|
||
GOSUB ADVANCE.LEVEL
|
||
GOTO MAIN
|
||
|
||
PAUSE:
|
||
DO: WAIT &H3DA, 8: WAIT &H3DA, 8, 8: c = c - 1: LOOP UNTIL c = 0
|
||
RETURN
|
||
|
||
WAITFIRE:
|
||
GOSUB WAITKEY0
|
||
t0! = TIMER
|
||
DO
|
||
k = INP(96): k$ = INKEY$
|
||
t1! = TIMER - t0!
|
||
LOOP UNTIL k = 29 OR t1! > 4
|
||
GOSUB WAITKEY0
|
||
RETURN
|
||
|
||
KEYS:
|
||
REM IF k0 = 75 OR k0 = 77 THEN RETURN
|
||
IF k = 75 THEN dxp = -vp: k1 = 203
|
||
IF k = 77 THEN dxp = vp: k1 = 205
|
||
IF k = k1 THEN dxp = 0
|
||
RETURN
|
||
|
||
MOVE.PLAYER:
|
||
IF stp < 0 THEN GOTO CREATE.PLAYER
|
||
xp = xp + dxp
|
||
IF xp > xpmax THEN xp = xpmax
|
||
IF xp < xpmin THEN xp = xpmin
|
||
RETURN
|
||
|
||
CREATE.PLAYER:
|
||
IF stp < -1 THEN RETURN
|
||
stp = 0: f = 0
|
||
FOR q = 1 TO 3
|
||
IF ssec(q) > -1 THEN f = 1
|
||
IF ssec(q) = 0 THEN ssec(q) = 1: f = 1: EXIT FOR
|
||
NEXT q
|
||
IF f = 0 THEN stp = 1
|
||
IF f = 1 AND SND = 1 THEN PLAY SNEWPL2$
|
||
GOSUB SETUP.SHIP
|
||
RETURN
|
||
|
||
SETUP.SHIP:
|
||
sss0 = 0: sss1 = 0: s = 0
|
||
IF ssec(1) = 1 THEN s = s OR 1
|
||
IF ssec(2) = 1 THEN s = s OR 2
|
||
IF ssec(3) = 1 THEN s = s OR 2
|
||
IF s = 3 THEN sss0 = 1
|
||
IF s = 2 THEN sss1 = 1
|
||
RETURN
|
||
|
||
FIRE.SHOT:
|
||
IF stp > 0 THEN RETURN
|
||
IF sss0 = 1 THEN sss1 = 1 - sss1
|
||
IF sss1 = 0 AND ssec(1) = 1 THEN GOSUB FIRE.SHOT1: s = 1
|
||
IF sss1 = 1 AND ssec(2) = 1 THEN GOSUB FIRE.SHOT2: s = 2
|
||
IF sss1 = 1 AND ssec(3) = 1 THEN GOSUB FIRE.SHOT3: s = 2
|
||
RETURN
|
||
FIRE.SHOT1:
|
||
IF ysh(cts1) > 0 THEN RETURN
|
||
xsh(cts1) = xp: ysh(cts1) = yp - 4
|
||
cts1 = cts1 + 1: IF cts1 = 4 THEN cts1 = 0
|
||
IF PLAY(0) = 0 AND SND = 1 THEN PLAY SLASER1$
|
||
RETURN
|
||
FIRE.SHOT2:
|
||
IF ysh(cts2) > 0 OR ysh(cts2 + 1) > 0 THEN RETURN
|
||
xsh(cts2) = xp - 9: ysh(cts2) = yp + 3
|
||
xsh(cts2 + 1) = xp + 9: ysh(cts2 + 1) = yp + 3
|
||
cts2 = cts2 + 2: IF cts2 = 10 THEN cts2 = 4
|
||
IF PLAY(0) = 0 AND SND = 1 THEN PLAY SLASER2$
|
||
RETURN
|
||
FIRE.SHOT3:
|
||
IF ysh(cts3) > 0 OR ysh(cts3 + 1) > 0 THEN RETURN
|
||
xsh(cts3) = xp - 14: ysh(cts3) = yp + 10
|
||
xsh(cts3 + 1) = xp + 14: ysh(cts3 + 1) = yp + 10
|
||
cts3 = cts3 + 2: IF cts3 = 16 THEN cts3 = 10
|
||
IF PLAY(0) = 0 AND SND = 1 THEN PLAY SLASER2$
|
||
RETURN
|
||
|
||
REFR.SCREEN:
|
||
WAIT &H3DA, 8, 8: WAIT &H3DA, 8
|
||
scr = 1 - scr: SCREEN 7, 0, 1 - scr, scr: CLS
|
||
RETURN
|
||
REFR.DOCKSCREEN:
|
||
WAIT &H3DA, 8, 8: WAIT &H3DA, 8
|
||
scr = 1 - scr: SCREEN 7, 0, 1 - scr, scr
|
||
VIEW (1, 25)-(318, 198), 0, 0: VIEW
|
||
RETURN
|
||
|
||
MOVE.SHOT:
|
||
FOR n = 0 TO shmax: ys = ysh(n)
|
||
IF ys < 0 THEN GOTO MOVE.SHOT1
|
||
ys = ys - vsh: ysh(n) = ys
|
||
MOVE.SHOT1:
|
||
NEXT n
|
||
|
||
MOVE.ENEMY:
|
||
emovcnt = 0
|
||
FOR n = 0 TO emax
|
||
IF ste(n) < 0 THEN GOTO MOVE.ENEMY1
|
||
ne(n) = ne(n) - 1: IF ne(n) <= 0 THEN GOSUB LOADPTR.ENEMY
|
||
a! = ae(n) * (pi! / 1800): emovcnt = emovcnt + 1
|
||
dx! = COS(a!) * vec: dy! = -SIN(a!) * vec
|
||
xe!(n) = xe!(n) + dx! / 2: ye!(n) = ye!(n) + dy! / 2
|
||
ae(n) = (ae(n) + dae(n)) MOD 3600
|
||
IF ze(n) < zze(n) THEN ze(n) = ze(n) + 1
|
||
IF ABS(xe!(n) - scx) > 180 OR ABS(ye!(n) - scy) > 120 THEN GOSUB RESET.ENEMY
|
||
MOVE.ENEMY1:
|
||
NEXT n
|
||
RETURN
|
||
|
||
MOVE.ESHOT:
|
||
FOR n = 0 TO esmax
|
||
IF stes(n) < 0 THEN GOTO MOVE.ESHOT1
|
||
xes!(n) = xes!(n) + dxes!(n): yes!(n) = yes!(n) + dyes!(n)
|
||
aes(n) = aes(n) + 1
|
||
IF ABS(xes!(n) - scx) > 160 OR ABS(yes!(n) - scy) > 100 THEN stes(n) = -1
|
||
MOVE.ESHOT1:
|
||
NEXT n
|
||
RETURN
|
||
|
||
DRAW.ESHOT:
|
||
FOR n = 0 TO esmax
|
||
IF stes(n) < 0 THEN GOTO DRAW.ESHOT1
|
||
x = xes!(n): y = yes!(n): a = aes(n): d = des(n)
|
||
T = tes(n)
|
||
ON T GOSUB DESHOT1, DESHOT2, DESHOT3, DESHOT4, DESHOT5
|
||
DRAW.ESHOT1:
|
||
NEXT n
|
||
RETURN
|
||
|
||
DESHOT1:
|
||
c = 1
|
||
LINE (x - 1, y - 2)-(x + 1, y + 2), c, B
|
||
LINE (x, y - 3)-(x, y + 3), c
|
||
LINE (x, y - 2)-(x, y + 2), 15
|
||
RETURN
|
||
DESHOT2:
|
||
CIRCLE (x, y), d, 4: PAINT (x, y), 10, 4
|
||
RETURN
|
||
DESHOT3:
|
||
f! = 1 + SIN(a / 4) * .4: f2! = d * .7
|
||
CIRCLE (x, y), d + .5, 7, , , f!
|
||
CIRCLE (x, y), d, 15, , , f!
|
||
LINE (x - d * .1 / f! - 1, y - d * .3 * f!)-(x - 1, y), 7, B
|
||
RETURN
|
||
DESHOT4:
|
||
a = (a * 30) MOD 360: z = 4: c = 15: e = 1: GOSUB DRAW.SSPRITE
|
||
RETURN
|
||
DESHOT5:
|
||
a = (a * 9) MOD 360: z = 4: c = 15: e = 2: GOSUB DRAW.SSPRITE
|
||
RETURN
|
||
|
||
CREATE.ESHOT:
|
||
IF STAGE <= 1 THEN RETURN
|
||
r = (20 / STAGE) * RND: IF r > 0 THEN RETURN
|
||
e = INT((emax + 1) * RND)
|
||
IF ye!(e) > 80 OR ste(e) < 0 THEN RETURN
|
||
x = xe!(e): y = ye!(e)
|
||
T = 1 - (tpe = 10): s = ses(T): GOSUB FIRE.ESHOT
|
||
RETURN
|
||
FIRE.ESHOT:
|
||
escnt = (escnt + 1) AND esmax: n = escnt
|
||
IF stes(n) > -1 THEN RETURN
|
||
xes!(n) = x: yes!(n) = y: v = ves(T)
|
||
a! = pi2! - (pi! / 8) * RND + pi4!: dx! = COS(a!) * v: dy! = SIN(a!) * v
|
||
IF SGN(xp - x) <> SGN(dx!) THEN dx! = -dx!
|
||
dxes!(n) = dx!: dyes!(n) = dy!
|
||
stes(n) = 0: tes(n) = T: aes(n) = 0: des(n) = s
|
||
IF PLAY(0) > 0 OR SND = 0 THEN RETURN
|
||
ON T GOSUB SESHOT1, SESHOT2, SESHOT3, SESHOT3, SESHOT3
|
||
RETURN
|
||
|
||
SESHOT1:
|
||
PLAY SSHOOT2$: RETURN
|
||
SESHOT2:
|
||
PLAY SSHOOT2$: RETURN
|
||
SESHOT3:
|
||
PLAY SSHOOT3$: RETURN
|
||
|
||
RESET.STAR:
|
||
xst(n) = 320 * RND: yst(n) = 0 * RND: cst(n) = INT(15 * RND) + 1
|
||
RETURN
|
||
CREATE.STAR:
|
||
xst(n) = 320 * RND: yst(n) = 200 * RND: cst(n) = INT(8 * RND)
|
||
RETURN
|
||
|
||
RESET.ENEMY:
|
||
IF tbos = 7 THEN GOSUB RESET.SUPERENEMY
|
||
mt = table(tpe)
|
||
xe!(n) = xec(mt): ye!(n) = yec(mt): ze(n) = 9
|
||
RETURN
|
||
RESET.SUPERENEMY:
|
||
IF (n AND 1) = 1 THEN ste(n) = -1
|
||
RETURN
|
||
|
||
CREATE.ENEMY:
|
||
n = eptr: eptr = (eptr + 2) AND emax
|
||
IF ste(n) <> -1 THEN RETURN
|
||
crecnt = crecnt + 1: IF crecnt > cresum THEN RETURN
|
||
T = tpe: mt = table(T)
|
||
xe!(n) = xec(mt): ye!(n) = yec(mt): ae(n) = aec(mt)
|
||
ze(n) = 9: zze(n) = zoome(T)
|
||
ste(n) = 0: tpe(n) = T: tce(n) = tce0(mt)
|
||
GOSUB LOADPTR.ENEMY
|
||
IF PLAY(0) = 0 AND SND = 1 THEN PLAY SNEW1$
|
||
RETURN
|
||
|
||
LOADPTR.ENEMY:
|
||
c = tce(n): dae(n) = tae(c): ne(n) = tne(c)
|
||
c = c + 1: IF tae(c) = 0 AND tne(c) = 0 THEN c = tce0(mt)
|
||
tce(n) = c
|
||
RETURN
|
||
|
||
DRAW.STAR:
|
||
dy = (cnt1 AND 1)
|
||
FOR n = 0 TO stmax
|
||
x = xst(n): y = yst(n): c = cst(n): y = y + dy
|
||
IF POINT(x, y) = 0 THEN PSET (x, y), c
|
||
yst(n) = y: IF y > 200 THEN GOSUB RESET.STAR
|
||
NEXT n
|
||
stcnt = (stcnt + 1) AND stmax: n = stcnt
|
||
IF INT(2 * RND) = 0 THEN n = stmax * RND: GOSUB CREATE.STAR
|
||
RETURN
|
||
|
||
DRAW.PLAYER:
|
||
IF stp > 0 THEN GOTO DRAW.GAMEOVER
|
||
IF stp < 0 THEN GOTO DRAW.SHIPEXPLODE
|
||
IF ssec(1) = 1 THEN x = xp: y = yp + 0: c = 4: GOSUB DRAW.SHIP1
|
||
IF ssec(2) = 1 THEN x = xp: y = yp + 6: c = 9: GOSUB DRAW.SHIP2
|
||
IF ssec(3) = 1 THEN x = xp: y = yp + 15: c = 5: GOSUB DRAW.SHIP3
|
||
RETURN
|
||
|
||
DRAW.ESTAR:
|
||
FOR n = 0 TO stmax
|
||
x = xst(n): y = yst(n): c = cst(n)
|
||
x = x + 1: IF x > 320 THEN x = 0: yst(n) = 10 + 180 * RND
|
||
PSET (x, y), c: xst(n) = x
|
||
NEXT n
|
||
c = 12 + INT(4 * RND): IF c = 13 OR c < 12 THEN c = 0
|
||
n = stmax * RND: cst(n) = c
|
||
RETURN
|
||
|
||
|
||
DRAW.SHIPEXPLODE:
|
||
stp = stp + 1: IF stp > -10 THEN RETURN
|
||
x0 = xp: y0 = yp + 6
|
||
IF SND = 1 THEN SOUND 37 + f1! * RND, .5
|
||
f1! = f1! * .85
|
||
FOR n = 1 TO 5
|
||
x = fx!(n): y = fy!(n): a = ft(n): c = fc(n): z = dfx!(n)
|
||
e$ = CRASH$(1): GOSUB DRAW.SPRITE
|
||
NEXT n
|
||
IF bin(2) = 1 THEN GOSUB CREATE.SHIPEXPLODE
|
||
RETURN
|
||
|
||
CREATE.SHIPEXPLODE:
|
||
FOR n = 1 TO 5
|
||
fx!(n) = x0 + 24 * RND - 12: fy!(n) = y0 + 14 * RND - 7
|
||
ft(n) = 360 * RND: c = 12 + INT(4 * RND): IF c = 13 THEN c = 15
|
||
fc(n) = c: dfx!(n) = INT(3 * RND) + 2
|
||
NEXT n
|
||
RETURN
|
||
|
||
DRAW.SHIP1:
|
||
LINE (x, y - 3)-(x - 6, y + 3), c
|
||
LINE (x, y - 3)-(x + 6, y + 3), c
|
||
LINE (x - 6, y + 4)-(x + 6, y + 4), c
|
||
PAINT (x, y), c, c
|
||
REM c = SGN(cnt1 AND 8) * 14
|
||
LINE (x, y + 0)-(x, y + 2), 14
|
||
LINE (x - 5, y + 5)-(x - 5, y + 5), c
|
||
LINE (x + 5, y + 5)-(x + 5, y + 5), c
|
||
RETURN
|
||
DRAW.SHIP2:
|
||
LINE (x - 4, y - 1)-(x + 4, y + 4), c, BF
|
||
LINE (x - 10, y - 2)-(x - 9, y + 3), c, B
|
||
LINE (x + 9, y - 2)-(x + 10, y + 3), c, B
|
||
LINE (x - 9, y + 4)-(x + 9, y + 4), c
|
||
LINE (x - 1, y + 0)-(x - 1, y + 2), 14
|
||
LINE (x + 1, y + 0)-(x + 1, y + 2), 14
|
||
RETURN
|
||
DRAW.SHIP3:
|
||
LINE (x - 8, y)-(x - 4, y - 4), c
|
||
LINE (x - 4, y - 4)-(x + 4, y - 4), c
|
||
LINE (x + 4, y - 4)-(x + 8, y), c
|
||
LINE (x - 8, y)-(x - 4, y + 4), c
|
||
LINE (x - 4, y + 4)-(x + 4, y + 4), c
|
||
LINE (x + 4, y + 4)-(x + 8, y), c
|
||
PAINT (x, y), c, c
|
||
LINE (x - 13, y)-(x + 13, y), c
|
||
LINE (x - 14, y - 4)-(x - 13, y + 3), c, B
|
||
LINE (x + 13, y - 4)-(x + 14, y + 3), c, B
|
||
PSET (x - 13, y + 3), 0: PSET (x + 13, y + 3), 0
|
||
LINE (x - 2, y - 1)-(x - 2, y + 1), 14
|
||
LINE (x, y - 1)-(x, y + 1), 14
|
||
LINE (x + 2, y - 1)-(x + 2, y + 1), 14
|
||
RETURN
|
||
|
||
DRAW.SHOT:
|
||
FOR n = 0 TO shmax: xs = xsh(n): ys = ysh(n)
|
||
IF ys < 0 THEN GOTO DRAW.SHOT1
|
||
LINE (xs, ys)-(xs, ys + 3), 14
|
||
DRAW.SHOT1:
|
||
NEXT n
|
||
RETURN
|
||
|
||
DRAW.EXP:
|
||
expcnt = 0
|
||
FOR n = 0 TO exmax
|
||
IF stex(n) = 0 THEN GOTO DRAW.EXP1
|
||
T = tex(n): c = 12 + (cnt1 AND 1) * 4: a = ae(n) / 10
|
||
x = xex(n): y = yex(n): z = zex(n) / 16
|
||
e$ = CRASH$(T): GOSUB DRAW.SPRITE
|
||
ae(n) = (ae(n) + 0) MOD 3600: stex(n) = stex(n) - 1
|
||
expcnt = expcnt + 1
|
||
DRAW.EXP1:
|
||
NEXT n
|
||
RETURN
|
||
|
||
DRAW.ENEMY:
|
||
FOR n = 0 TO emax
|
||
s = ste(n): IF s < 0 THEN GOTO DRAW.ENEMY1
|
||
a = ae(n) / 10: z = ze(n) / 16
|
||
x = xe!(n): y = ye!(n)
|
||
e = tpe(n): f = bin(anie(e)) * 2
|
||
c1 = c1e(e): c2 = c2e(e): GOSUB DRAW.ESPRITE
|
||
DRAW.ENEMY1:
|
||
NEXT n
|
||
RETURN
|
||
|
||
DRAW.GAMEOVER:
|
||
stp = stp + 1
|
||
IF k = 29 AND stp > 50 THEN GOTO GAME.OVER
|
||
IF stp > 400 THEN GOTO GAME.OVER
|
||
ac = 0: sc = 4: cc = 15
|
||
yc! = 90
|
||
xc! = 120: T$ = "GAME": GOSUB DRAW.TXTF
|
||
xc! = 168: T$ = "OVER": GOSUB DRAW.TXTF
|
||
RETURN
|
||
|
||
GAME.OVER:
|
||
IF SND = 1 THEN PLAY SEND$
|
||
GOSUB WAITKEY0
|
||
sc = 8: ac = 0
|
||
DO
|
||
k = INP(96): k$ = INKEY$
|
||
GOSUB DRAW.ESTAR
|
||
cc = 16 * RND
|
||
T$ = "WELL DONE": xc! = 80: yc! = 60: GOSUB DRAW.TXTZ
|
||
LOCATE 14, 11
|
||
PRINT "SCORE: "; score&; "PTS"
|
||
GOSUB REFR.SCREEN
|
||
LOOP UNTIL k = 29
|
||
RUN
|
||
|
||
DRAW.SPRITE:
|
||
x$ = LTRIM$(STR$(x)): y$ = LTRIM$(STR$(y))
|
||
a$ = LTRIM$(STR$(a)): c$ = LTRIM$(STR$(c))
|
||
z$ = LTRIM$(STR$(z))
|
||
s$ = "S" + z$ + "TA" + a$ + "C" + c$ + "bm" + x$ + "," + y$ + e$
|
||
IF z > 1 THEN s$ = s$ + "P" + c$ + "," + c$
|
||
DRAW s$
|
||
RETURN
|
||
DRAW.SSPRITE:
|
||
x$ = LTRIM$(STR$(x)): y$ = LTRIM$(STR$(y))
|
||
a$ = LTRIM$(STR$(a)): c$ = LTRIM$(STR$(c)): z$ = LTRIM$(STR$(z))
|
||
s$ = "S" + z$ + "TA" + a$ + "C" + c$ + "bm" + x$ + "," + y$ + SHOT$(e)
|
||
DRAW s$
|
||
RETURN
|
||
DRAW.ESPRITE:
|
||
x$ = LTRIM$(STR$(x)): y$ = LTRIM$(STR$(y))
|
||
a$ = LTRIM$(STR$(a)): c1$ = LTRIM$(STR$(c1)): c2$ = LTRIM$(STR$(c2))
|
||
z$ = LTRIM$(STR$(z))
|
||
e1$ = ENEMY$(e, f): e2$ = ENEMY$(e, f + 1)
|
||
s$ = "S" + z$ + "TA" + a$ + "C" + c1$ + "bm" + x$ + "," + y$ + e1$
|
||
IF z > 1 THEN s$ = s$ + "P" + c1$ + "," + c1$
|
||
s$ = s$ + "C" + c2$ + e2$
|
||
IF z > 1 THEN s$ = s$ + "P" + c2$ + "," + c2$
|
||
DRAW s$
|
||
RETURN
|
||
|
||
DRAW.PLAYER1:
|
||
SCREEN 7, 0, 0, 0: CLS
|
||
cc = 15: yc! = 90
|
||
xc! = 120: T$ = "PLAYER": GOSUB DRAW.TXT
|
||
xc! = 182: i = 1: GOSUB DRAW.INTF
|
||
RETURN
|
||
|
||
TEST.HIT.SHOT:
|
||
FOR n = 0 TO shmax: xs = xsh(n): ys = ysh(n)
|
||
IF ys < 0 THEN GOTO TEST.HIT.SHOT1
|
||
c = POINT(xs, ys) + POINT(xs, ys + 1) + POINT(xs, ys + 2)
|
||
IF c > 0 THEN GOSUB HIT.SHOT
|
||
TEST.HIT.SHOT1:
|
||
NEXT n
|
||
RETURN
|
||
|
||
TEST.HIT.PLAYER:
|
||
IF stp <> 0 THEN RETURN
|
||
c = POINT(xp, yp - 3) + POINT(xp, yp + 2) + POINT(xp - 3, yp) + POINT(xp + 3, yp)
|
||
IF c <= 0 THEN RETURN
|
||
c1 = POINT(319, 199) * 4
|
||
c2 = POINT(0, 0) + POINT(319, 0) + POINT(0, 199) + POINT(319, 199)
|
||
IF c1 = c2 AND c1 > 0 THEN RETURN
|
||
GOSUB HIT.PLAYER
|
||
RETURN
|
||
|
||
HIT.SHOT:
|
||
x! = xs: y! = ys: r1! = hitrad
|
||
FOR e = 0 TO emax
|
||
IF ste(e) <> 0 THEN GOTO HIT.SHOT1
|
||
dx! = xe!(e) - x!: dy! = ye!(e) - y!
|
||
r! = SQR(dx! * dx! + dy! * dy!)
|
||
IF r! < r1! THEN ysh(n) = -1: GOSUB HIT.ENEMY: EXIT FOR
|
||
HIT.SHOT1:
|
||
NEXT e
|
||
IF stbos < 0 THEN RETURN
|
||
dx! = xbos! - x!: dy! = ybos! - y!
|
||
rr! = SQR(dx! * dx! + dy! * dy!)
|
||
IF rr! < hrbos(tbos) THEN ysh(n) = -1: GOSUB HIT.BOSS
|
||
RETURN
|
||
|
||
HIT.BOSS:
|
||
IF PLAY(0) = 0 AND SND = 1 THEN PLAY SHITBOS1$
|
||
IF stbos < 0 THEN RETURN
|
||
IF stbos = 0 THEN GOTO EXP.BOSS
|
||
stbos = stbos - 1: hbos = 1
|
||
xex(0) = x!: yex(0) = y!: stex(0) = 12
|
||
zex(0) = 32: tex(0) = 2
|
||
GOSUB ACTIV.BOSS
|
||
RETURN
|
||
|
||
EXP.BOSS:
|
||
stbos = -160: dx = 48: d = 2
|
||
IF tbos = 7 THEN dx = 120: d = 4
|
||
FOR m = 0 TO exmax
|
||
xex(m) = xbos! + dx * RND - dx * .5: yex(m) = ybos! + 32 * RND - 16
|
||
stex(m) = 30 + 30 * RND
|
||
zex(m) = (3 + INT(d * RND)) * 16: tex(m) = 1
|
||
NEXT m
|
||
FOR m = 0 TO fmax
|
||
fx!(m) = xbos!: fy!(m) = ybos!: a! = pi! * 2 * RND
|
||
dfx!(m) = COS(a!) * 4: dfy!(m) = SIN(a!) * 4
|
||
fc(m) = 15
|
||
NEXT m
|
||
RETURN
|
||
|
||
PLAY.ENEMY.CRASH:
|
||
IF T = 1 THEN PLAY SETYPE1$
|
||
IF T = 2 THEN PLAY SETYPE2$
|
||
IF T = 3 THEN PLAY SETYPE3$
|
||
IF T = 4 THEN PLAY SETYPE4$
|
||
IF T = 5 THEN PLAY SETYPE1$
|
||
IF T = 6 THEN PLAY SETYPE1$
|
||
IF T = 7 THEN PLAY SETYPE1$
|
||
IF T = 8 THEN PLAY SETYPE8$
|
||
IF T = 9 THEN PLAY SETYPE9$
|
||
IF T = 10 THEN PLAY SETYPE10$
|
||
IF T = 11 THEN PLAY SETYPE11$
|
||
RETURN
|
||
|
||
HIT.ENEMY:
|
||
IF PLAY(0) = 0 AND SND = 1 THEN T = tpe(e): GOSUB PLAY.ENEMY.CRASH
|
||
ste(e) = -1: GOSUB CREATE.EXP
|
||
hitcnt = hitcnt + 1: pts& = ptse(tpe(e)) * STAGE: GOSUB LOAD.SCORE
|
||
T = tpe(e)
|
||
IF dble(T) = 0 THEN RETURN ' unteilbar/teilbar
|
||
SPLIT.ENEMY:
|
||
f = e + 1
|
||
ste(e) = 0: ae(e) = 900: ze(e) = zoome(T + 1): zze(e) = ze(e)
|
||
ste(f) = 0: ae(f) = 900: ze(f) = zoome(T + 1): zze(f) = ze(f)
|
||
tpe(e) = T + 1: tpe(f) = T + 1
|
||
mt1 = table(T + 1): mt2 = table(T + 1)
|
||
tce(e) = tce0(mt1): tce(f) = tce0(mt2): tce(e) = 72: tce(f) = 88
|
||
dae(e) = tae(tce(e)): ne(e) = tne(tce(e))
|
||
dae(f) = tae(tce(f)): ne(f) = tne(tce(f))
|
||
xe!(f) = xe!(e): ye!(f) = ye!(e)
|
||
IF PLAY(0) = 0 AND SND = 1 THEN PLAY SSPLIT$
|
||
RETURN
|
||
|
||
HIT.PLAYER:
|
||
REM LOCATE 2, 1: PRINT "HIT ON PLAYER!"
|
||
stp = -35: f1! = 600
|
||
FOR q = 1 TO 3
|
||
IF ssec(q) = 1 THEN ssec(q) = -1: EXIT FOR
|
||
NEXT q
|
||
GOSUB SETUP.SHIP
|
||
x0 = xp: y0 = yp + 6: GOSUB CREATE.SHIPEXPLODE
|
||
RETURN
|
||
|
||
CREATE.EXP:
|
||
exptr = (exptr + 1) AND exmax
|
||
IF stex(exptr) > 0 THEN RETURN
|
||
xex(e) = xe!(e): yex(e) = ye!(e): stex(e) = 30
|
||
zex(e) = ze(e): tex(e) = 1
|
||
RETURN
|
||
|
||
LOAD.SCORE:
|
||
B& = bonplay&
|
||
s& = score&: score& = score& + pts&
|
||
IF (score& MOD B&) > (s& MOD B&) THEN RETURN
|
||
SCREEN 7, 0, scr, scr
|
||
FOR q = 1 TO 3: IF ssec(q) = -1 THEN ssec(q) = 0: EXIT FOR
|
||
NEXT q
|
||
x = 160: y = 20: c = 4
|
||
ON q GOSUB DRAW.SHIP1, DRAW.SHIP2, DRAW.SHIP3
|
||
sc = 4: ac = 0: cc = 15
|
||
T$ = "BONUS PLAYER": xc! = 178: yc! = 17: GOSUB DRAW.TXTZ
|
||
IF ssec(1) = 0 THEN ssec(1) = 1: ssec(2) = 0: ssec(3) = 0: GOSUB SETUP.SHIP
|
||
IF SND = 1 THEN PLAY SBONPLAY$
|
||
c = 50: GOSUB PAUSE: SCREEN 7, 0, 1 - scr, scr
|
||
RETURN
|
||
|
||
REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
||
DOCKING:
|
||
REM REM PLAY SDOCK1$: DO: LOOP UNTIL PLAY(0) = 0
|
||
ss1 = 0: ss2 = 0
|
||
IF ssec(1) = 1 THEN ss1 = ss1 OR 1
|
||
IF ssec(2) = 1 THEN ss1 = ss1 OR 2
|
||
IF ssec(3) = 1 THEN GOTO DOCK.END
|
||
IF ssec(3) = 0 THEN ss2 = 4: dp = 5
|
||
IF ssec(2) = 0 THEN ss2 = 2: dp = 0
|
||
IF ss2 = 0 THEN GOTO DOCK.END
|
||
xb = scx: yb = 172
|
||
xp! = xb - 30 + 60 * RND: yp! = 100: vxp! = 0: vyp! = 0
|
||
dyp! = 0: IF ss1 = 3 THEN dyp! = 6
|
||
fcnt = 0: FOR n = 0 TO fmax: ft(n) = -1: NEXT n
|
||
grav! = .01 + ss1 * .006
|
||
dfuel = 1000: dtime! = 10
|
||
FOR n = 0 TO 1: SCREEN 7, 0, n, n: CLS
|
||
LOCATE 4, 9: PRINT "Time": LOCATE 4, 27: PRINT "Fuel"
|
||
GOSUB DRAW.VALUES: LOCATE 9, 12: PRINT "Docking Sequence"
|
||
NEXT n
|
||
GOSUB WAITFIRE: timer0! = TIMER + dtime!
|
||
|
||
DOCK.MAIN:
|
||
k0 = k: k = INP(96): k$ = INKEY$
|
||
IF k = 1 THEN END
|
||
IF k = 29 THEN GOSUB THRUST
|
||
IF k = 75 THEN vxp! = vxp! - .03
|
||
IF k = 77 THEN vxp! = vxp! + .03
|
||
vyp! = vyp! + grav!
|
||
GOSUB MOVE.SECTION
|
||
GOSUB MOVE.FIRE
|
||
GOSUB REFR.DOCKSCREEN
|
||
WAIT &H3DA, 8: WAIT &H3DA, 8, 8
|
||
GOSUB DRAW.SECTION
|
||
GOTO TEST.HIT.BASE
|
||
DOCK.MAIN1:
|
||
dtime! = timer0! - TIMER
|
||
GOSUB DRAW.DSTAR
|
||
GOSUB DRAW.VALUES: GOSUB DRAW.FIRE
|
||
GOSUB DRAW.BASE: GOSUB DRAW.SECTION
|
||
cnt1 = (cnt1 + 1) AND 255
|
||
GOTO TEST.DOCK.OUT
|
||
GOTO DOCK.MAIN
|
||
|
||
THRUST:
|
||
IF dfuel = 0 THEN RETURN
|
||
vyp! = vyp! - .07: dfuel = dfuel - 8: IF dfuel < 0 THEN dfuel = 0
|
||
IF SND = 1 THEN SOUND 37 + 80 * RND, .3
|
||
GOSUB CREATE.FIRE
|
||
RETURN
|
||
|
||
DRAW.DSTAR:
|
||
FOR n = 0 TO stmax
|
||
x = xst(n): y = yst(n): c = cst(n)
|
||
IF POINT(x, y) = 0 THEN PSET (x, y), c
|
||
NEXT n
|
||
IF cnt1 = 0 THEN RETURN
|
||
n = stmax * RND: xst(n) = 300 * RND + 10: yst(n) = 180 * RND + 10
|
||
RETURN
|
||
|
||
TEST.DOCK.OUT:
|
||
IF xp! < 0 OR xp! > 319 OR yp! < 32 OR yp! > 199 THEN GOTO DOCK.OUT
|
||
IF dtime! < .1 THEN GOTO DOCK.OUT
|
||
GOTO DOCK.MAIN
|
||
|
||
DRAW.VALUES:
|
||
LOCATE 6, 8: PRINT INT(dtime! * 10) / 10
|
||
LOCATE 6, 26: PRINT INT(dfuel / 10)
|
||
RETURN
|
||
|
||
DOCK.END:
|
||
RETURN
|
||
|
||
MOVE.FIRE:
|
||
FOR n = 0 TO fmax: IF ft(n) < 0 THEN GOTO MOVE.FIRE1
|
||
fx!(n) = fx!(n) + dfx!(n): fy!(n) = fy!(n) + dfy!(n): ft(n) = ft(n) - 1
|
||
IF POINT(fx!(n), fy!(n)) = 9 THEN dfy!(n) = -dfy!(n) / 2
|
||
MOVE.FIRE1:
|
||
NEXT n
|
||
RETURN
|
||
CREATE.FIRE:
|
||
IF ft(fcnt) >= 0 THEN RETURN
|
||
a! = pi2! + 1 * RND - .5: dv! = ABS(pi2! - a!) * 2: v! = 2 - dv!
|
||
fx!(fcnt) = xp!: fy!(fcnt) = yp! + 4
|
||
dfx!(fcnt) = COS(a!) * v! + vxp!: dfy!(fcnt) = SIN(a!) * v! + vyp!
|
||
ft(fcnt) = 8: fc(fcnt) = 14 - INT(2 * RND) * 8
|
||
fcnt = (fcnt + 1) AND fmax
|
||
RETURN
|
||
DRAW.FIRE:
|
||
FOR n = 0 TO fmax: IF ft(n) < 0 THEN GOTO DRAW.FIRE1
|
||
x = fx!(n): y = fy!(n): PSET (x, y), fc(n)
|
||
DRAW.FIRE1:
|
||
NEXT n
|
||
|
||
MOVE.SECTION:
|
||
xp! = xp! + vxp!: yp! = yp! + vyp!
|
||
RETURN
|
||
|
||
DRAW.SECTION:
|
||
IF (ss1 AND 1) = 1 THEN x = xp!: y = yp! - dyp!: c = 4: GOSUB DRAW.SHIP1
|
||
IF (ss1 AND 2) = 2 THEN x = xp!: y = yp!: c = 9: GOSUB DRAW.SHIP2
|
||
RETURN
|
||
DRAW.BASE:
|
||
IF ss2 = 2 THEN x = xb: y = yb: c = 9: GOSUB DRAW.SHIP2
|
||
IF ss2 = 4 THEN x = xb: y = yb: c = 5: GOSUB DRAW.SHIP3
|
||
RETURN
|
||
|
||
TEST.HIT.BASE:
|
||
n = dp
|
||
x = xb + pcx(n): y = yb + pcy(n)
|
||
IF POINT(x, y) > 0 THEN GOTO TEST.DOCK.OK
|
||
c = 14: IF (cnt1 AND 16) = 0 THEN c = 0
|
||
PSET (x, y), c
|
||
FOR n = dp + 1 TO dp + 4
|
||
x = xb + pcx(n): y = yb + pcy(n)
|
||
IF POINT(x, y) > 0 THEN GOTO DOCK.CRASH
|
||
REM PSET (x, y), 14
|
||
NEXT n
|
||
GOTO DOCK.MAIN1
|
||
|
||
TEST.DOCK.OK:
|
||
IF ABS(xp! - xb) > 3 THEN GOTO DOCK.CRASH
|
||
IF vyp! > .8 THEN GOTO DOCK.CRASH
|
||
GOTO DOCK.OK
|
||
|
||
DOCK.OK:
|
||
xp! = xb: yp! = yb + pcy(db) - 4
|
||
IF (ss1 AND 2) = 2 THEN yp! = yp! - 3
|
||
GOSUB REFR.DOCKSCREEN: SCREEN 7, 0, scr, scr: CLS
|
||
GOSUB DRAW.VALUES
|
||
GOSUB DRAW.BASE: GOSUB DRAW.SECTION
|
||
LOCATE 9, 15: PRINT "Right On !"
|
||
IF ss2 = 2 THEN ssec(2) = 1: GOSUB SETUP.SHIP
|
||
IF ss2 = 4 THEN ssec(3) = 1: GOSUB SETUP.SHIP
|
||
IF SND = 1 THEN PLAY SDOCK2$
|
||
DO: LOOP WHILE PLAY(0) > 0: c = 20: GOSUB PAUSE
|
||
T = INT(dtime! * 10) / 10: f = dfuel / 10: s = 200 * T + 10 * f
|
||
LOCATE 13, 6: PRINT "Bonus = 200 x"; T
|
||
LOCATE 15, 6: PRINT " + 10 x"; f; " ="; s; "x"; STAGE
|
||
pts& = s * STAGE: GOSUB LOAD.SCORE
|
||
IF SND = 1 THEN PLAY SRGTON$
|
||
GOSUB WAITFIRE
|
||
RETURN
|
||
|
||
DOCK.OUT:
|
||
SCREEN 7, 0, scr, scr
|
||
LOCATE 9, 10: PRINT "Section Out of Range"
|
||
GOSUB WAITFIRE
|
||
RETURN
|
||
|
||
DOCK.CRASH:
|
||
s = 0: z1 = 4: f1! = 40
|
||
FOR n = 1 TO 200
|
||
a1 = 3600 * RND: c1 = (s AND 1) * 3 + 12
|
||
c2 = 15 - (s AND 1) * 3
|
||
IF s = 0 THEN z2 = 3 + 4 * RND: a2 = 3600 * RND: c2 = 15
|
||
GOSUB REFR.DOCKSCREEN: GOSUB DRAW.VALUES
|
||
LOCATE 9, 13: PRINT "Sorry, no Bonus"
|
||
x = xp!: y = yp!: a = a1 / 10: c = c1: z = z1
|
||
e$ = CRASH$(1): GOSUB DRAW.SPRITE
|
||
x = xb: y = yb: a = a2 / 10: c = c2: z = z2
|
||
e$ = CRASH$(1): GOSUB DRAW.SPRITE
|
||
s = (s + 1) AND 7
|
||
GOSUB DOCK.CRASH.SND
|
||
NEXT n
|
||
GOSUB WAITFIRE
|
||
RETURN
|
||
|
||
DOCK.CRASH.SND:
|
||
f2! = f1! * RND: f1! = f1! * .98
|
||
IF n < 150 AND SND = 1 THEN SOUND 37 + f2! * f2!, .3
|
||
RETURN
|
||
|
||
REM - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
||
|
||
ADVANCE.LEVEL:
|
||
LEVEL = LEVEL + 1
|
||
IF STAGE = 6 AND LEVEL = 10 THEN GOTO SUPER.LEVEL
|
||
IF LEVEL = 9 THEN GOTO BOSS.LEVEL
|
||
IF LEVEL = 10 THEN GOTO WARP.LEVEL
|
||
IF LEVEL = 11 THEN GOTO GAME.FINISH
|
||
GOSUB LOAD.LEVEL
|
||
RETURN
|
||
|
||
SUPER.LEVEL:
|
||
STAGE = 7: GOSUB ENTER.STAGE
|
||
tbos = tbos + 1: GOSUB BOSS.LEVEL
|
||
stbos = 50
|
||
LEVEL = 9: GOSUB LOAD.LEVEL
|
||
LEVEL = 10: cresum = 24: hitsum = 24
|
||
c1e(6) = 4: c2e(6) = 12
|
||
c1e(7) = 12: c2e(7) = 14
|
||
RETURN
|
||
|
||
BOSS.LEVEL:
|
||
evcnt = 70: evtpe = 2: evtxt$ = BOSS$(STAGE)
|
||
stbos = 8 + tbos * 4: abos = 0
|
||
xbos! = scx: ybos! = 50: dxbos! = 0: dybos! = 0
|
||
cresum = 0: crecnt = 0: hitcnt = 0: hitsum = 0
|
||
RETURN
|
||
|
||
LOAD.LEVEL:
|
||
n = LEVEL
|
||
hitrad = lrad(n): tpe = ltpe(n): mt = table(tpe)
|
||
vec = vec(mt)
|
||
cresum = lsum(n) + (STAGE - 1) * 2
|
||
crecnt = 0: hitcnt = 0: hitsum = cresum * lhit(n)
|
||
crec0 = crec(mt): crec1 = crec0
|
||
s = (STAGE - 1) MOD 3: REM LOAD COLOR TABLE
|
||
FOR e = 1 TO 11: c1e(e) = c1ee(s, e): c2e(e) = c2ee(s, e): NEXT e
|
||
RETURN
|
||
|
||
WARP.LEVEL:
|
||
dyp! = .5: dys! = .5: ypp = yp: yp! = yp
|
||
f1! = 0
|
||
GOSUB SAVE.PALETTE
|
||
FOR o = 1 TO 260
|
||
IF INP(96) = 1 THEN END
|
||
GOSUB DRAW.WARPSTAR
|
||
GOSUB DRAW.PLAYER
|
||
yp = yp!: yp! = yp! - dyp!: dyp! = dyp! * 1.01: dys! = dys! + .1
|
||
WAIT &H3DA, 8, 8: WAIT &H3DA, 8
|
||
SCREEN 7, 0, 1 - scr, scr: scr = 1 - scr: CLS
|
||
IF o > 30 AND o < 150 THEN LOCATE 10, 14: PRINT " WARP OUT ! "
|
||
IF o < 180 THEN f1! = f1! + 3
|
||
IF o = 180 THEN f1! = 5000
|
||
IF o > 60 THEN c1 = 1: c2 = 31: c3 = 2: GOSUB INC.PALETTE
|
||
IF o > 180 THEN c1 = 0: c2 = 0: c3 = 4: GOSUB INC.PALETTE: f1! = f1! * .92
|
||
IF SND = 1 THEN SOUND 37 + f1! * RND, .3
|
||
NEXT o
|
||
SCREEN 7, 0, scr, scr: CLS
|
||
c1 = 0: c2 = 0: c3 = 4
|
||
FOR o = 1 TO 16: WAIT &H3DA, 8: WAIT &H3DA, 8, 8: GOSUB DEC.PALETTE: NEXT o
|
||
GOSUB LOAD.PALETTE
|
||
yp = ypp
|
||
REM IF SND = 1 THEN PLAY SFAROUT2$: PLAY SFAROUT2$
|
||
REM c = 70: GOSUB PAUSE
|
||
REM DO: LOOP UNTIL PLAY(0) < 4
|
||
LEVEL = 2: STAGE = STAGE + 1
|
||
GOSUB LOAD.LEVEL
|
||
tbos = tbos + 1: IF tbos > 6 THEN tbos = 1
|
||
c = 20: GOSUB PAUSE
|
||
GOSUB ENTER.STAGE
|
||
RETURN
|
||
|
||
ENTER.STAGE:
|
||
evcnt = 70: evtpe = 2: evtxt$ = "STAGE " + LTRIM$(STR$(STAGE))
|
||
GOSUB LOAD.3DSTAR
|
||
SCREEN 7, 0, 2, 0: CLS
|
||
xs! = 159: ys! = 160: rs! = 20
|
||
ON STAGE GOSUB DSTG1, DSTG2, DSTG3, DSTG4, DSTG5, DSTG6, DSTG7
|
||
REM IF SND = 1 THEN PLAY SSTAGE1$
|
||
|
||
ENTER.STAGE1:
|
||
xs! = 159: ys! = 99: rs! = 8: rsmax! = 40: cnt = 0
|
||
u$ = "STAGE " + LTRIM$(STR$(STAGE)): tptr = 0: mode = 0
|
||
sss = -(STAGE > 2 AND STAGE < 7): fs! = 1.02: cnt1 = 10: cnt2 = 0
|
||
DO
|
||
k = INP(96): k$ = INKEY$
|
||
rs! = rs! * fs!: vs! = 1.08
|
||
IF rs! >= rsmax! AND mode = 0 THEN rs! = rsmax!: vs! = 1.02
|
||
GOSUB ENTER.STAGE2
|
||
IF cnt < 160 AND mode = 0 THEN GOSUB ENTER.STAGE3
|
||
IF (cnt AND 7) = 7 THEN GOSUB ENTER.STAGE5
|
||
cnt = cnt + 1: IF cnt > 300 THEN GOSUB ENTER.STAGE4
|
||
GOSUB REFR.SCREEN
|
||
IF mode = 1 AND sss = 1 AND SND = 1 THEN SOUND 37 + cnt1 * RND, 1: cnt1 = (cnt1 * 1.2) MOD 32000
|
||
IF cnt2 = 4 AND SND = 1 THEN PLAY SSTAGE2$
|
||
IF k = 29 AND rs! >= rsmax! THEN GOSUB ENTER.STAGE4
|
||
LOOP WHILE rs! < 200
|
||
RETURN
|
||
|
||
ENTER.STAGE2:
|
||
IF sss = 0 THEN PCOPY 2, 1 - scr: RETURN
|
||
GOSUB DRAW.3DSTAR
|
||
ON STAGE - 2 GOSUB DSTG3, DSTG4, DSTG5, DSTG6
|
||
RETURN
|
||
ENTER.STAGE3:
|
||
T$ = LEFT$(u$, tptr)
|
||
xc! = 136: yc! = 24: ac = 0: sc = 4: cc = 15
|
||
GOSUB DRAW.TXTZ
|
||
T$ = STAGE$(STAGE)
|
||
xc! = 159 - LEN(T$) * 4: yc! = 44: ac = 0: sc = 4: cc = 15
|
||
s = (cnt AND 8)
|
||
IF tptr <= 8 OR s > 0 AND cnt2 < 24 THEN RETURN
|
||
GOSUB DRAW.TXTZ: cnt2 = cnt2 + 1
|
||
RETURN
|
||
ENTER.STAGE4: REM launch
|
||
mode = 1: fs! = 1.04: RETURN
|
||
ENTER.STAGE5:
|
||
tptr = tptr + 1: IF tptr < 8 THEN SOUND 622, 1
|
||
RETURN
|
||
|
||
|
||
SAVE.PALETTE:
|
||
OUT &H3C7, 0
|
||
FOR c = 0 TO 95: cp(c) = INP(&H3C9): NEXT c
|
||
RETURN
|
||
LOAD.PALETTE:
|
||
OUT &H3C8, 0
|
||
FOR c = 0 TO 95: OUT &H3C9, cp(c): NEXT c
|
||
RETURN
|
||
INC.PALETTE:
|
||
FOR c = c1 TO c2: OUT &H3C7, c
|
||
a = INP(&H3C9): a = a + c3: IF a > 63 THEN a = 63
|
||
B = INP(&H3C9): B = B + c3: IF B > 63 THEN B = 63
|
||
d = INP(&H3C9): d = d + c3: IF d > 63 THEN d = 63
|
||
OUT &H3C8, c: OUT &H3C9, a: OUT &H3C9, B: OUT &H3C9, d
|
||
NEXT c
|
||
RETURN
|
||
DEC.PALETTE:
|
||
FOR c = c1 TO c2: OUT &H3C7, c
|
||
a = INP(&H3C9): a = a - c3: IF a < 0 THEN a = 0
|
||
B = INP(&H3C9): B = B - c3: IF B < 0 THEN B = 0
|
||
d = INP(&H3C9): d = d - c3: IF d < 0 THEN d = 0
|
||
OUT &H3C8, c: OUT &H3C9, a: OUT &H3C9, B: OUT &H3C9, d
|
||
NEXT c
|
||
RETURN
|
||
|
||
DRAW.WARPSTAR:
|
||
dys = dys!
|
||
FOR n = 0 TO stmax
|
||
x = xst(n): y = yst(n)
|
||
LINE (x, y)-(x, y + dys), cst(n)
|
||
y = y + dys: yst(n) = y: IF y > 200 THEN yst(n) = -20: xst(n) = 320 * RND
|
||
NEXT n
|
||
RETURN
|
||
|
||
|
||
REM - - - - - - - - - - - - - - - - - - - - -
|
||
REM - - - - - - CREDITS - - - - - - -
|
||
|
||
GAME.FINISH:
|
||
GOSUB WAITKEY0
|
||
sc = 8: ac = 0: s = 1: GOSUB LOAD.SONG: GOSUB LOAD.3DSTAR
|
||
tcnt = 24: tptr = 0: cnt1 = -100: dy = 24: vs! = 1.06: cnt2 = 120
|
||
DO
|
||
k = INP(96): k$ = INKEY$
|
||
GOSUB DRAW.3DSTAR
|
||
d = 2: cc = 13
|
||
IF cnt1 < 0 THEN cnt1 = cnt1 + 1: cc = 16 * RND: d = 0
|
||
IF tptr > 28 THEN d = 0: cnt2 = cnt2 - 1
|
||
IF cnt2 = 0 THEN s = 2: GOSUB LOAD.SONG
|
||
tcnt = tcnt - d
|
||
IF tcnt = 0 THEN tcnt = dy: tptr = tptr + 1
|
||
yc! = tcnt - dy
|
||
FOR n = 1 TO 11
|
||
T$ = CREDIT$(n + tptr)
|
||
xc! = 20: GOSUB DRAW.TXTZ
|
||
yc! = yc! + dy
|
||
NEXT n
|
||
WAIT &H3DA, 8: WAIT &H3DA, 8, 8
|
||
GOSUB REFR.SCREEN: GOSUB PLAY.SONG
|
||
LOOP UNTIL (k = 29 AND cnt1 >= 0)
|
||
GOTO GAME.OVER
|
||
|
||
LOAD.SONG:
|
||
nsong = s: stsong = 1: tsong = 1: RETURN
|
||
|
||
PLAY.SONG:
|
||
IF stsong < 1 THEN RETURN
|
||
IF PLAY(0) > 0 THEN RETURN
|
||
PLAY SFINAL$(nsong, tsong)
|
||
tsong = tsong + 1: IF tsong > 7 THEN stsong = 0
|
||
RETURN
|
||
|
||
LOAD.3DSTAR:
|
||
FOR n = 0 TO stmax
|
||
x = 26 * RND - 13: y = 20 * RND - 10
|
||
xst!(n) = x * x * SGN(x): yst!(n) = y * y * SGN(y)
|
||
NEXT n
|
||
RETURN
|
||
DRAW.3DSTAR:
|
||
FOR n = 0 TO stmax
|
||
x! = xst!(n): y! = yst!(n): c = cst(n)
|
||
r! = SQR(x! * x! + y! * y!)
|
||
x! = x! * vs!: y! = y! * vs!
|
||
IF r! > 160 THEN r! = 2 + 6 * RND: a! = pi! * 2 * RND: x! = COS(a!) * r!: y! = SIN(a!) * r!
|
||
PSET (scx + x!, scy - y!), 15
|
||
xst!(n) = x!: yst!(n) = y!
|
||
NEXT n
|
||
RETURN
|
||
|
||
|
||
|
||
|
||
REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
TITLE:
|
||
a = 0: CH = 0: mode1 = 1: mode2 = 6: cnt = 35
|
||
TITLE.MAIN:
|
||
k = INP(96): k$ = INKEY$: IF k = 1 THEN END
|
||
IF k = 29 THEN RETURN
|
||
IF k = 31 THEN SND = 1 - SND: GOSUB WAITKEY0
|
||
IF k = 59 THEN GOSUB TITLE.HELP
|
||
GOSUB CARE.TITLE
|
||
GOSUB CARE.MENU
|
||
GOTO TITLE.MAIN
|
||
|
||
CARE.TITLE:
|
||
GOSUB MOVE.TITLE: IF mode1 > 4 THEN RETURN
|
||
cc = 15: GOSUB DRAW.TITLE: GOSUB DRAW.YEAR
|
||
WAIT &H3DA, 8, 8: WAIT &H3DA, 8
|
||
GOSUB REFR.TITLE
|
||
RETURN
|
||
|
||
DRAW.TITLE:
|
||
FOR n = 0 TO 7
|
||
nc = nc(n): ac = 0
|
||
xc! = xc!(n): yc! = yc!(n): zc! = zc!(n)
|
||
GOSUB DRAW.CHAR3D
|
||
NEXT n
|
||
RETURN
|
||
DRAW.YEAR:
|
||
IF CH < 8 THEN RETURN
|
||
FOR n = 8 TO 9
|
||
nc = nc(n): ac = 0
|
||
xc! = xc!(n): yc! = yc!(n): zc! = zc!(n)
|
||
GOSUB DRAW.CHAR3D
|
||
NEXT n
|
||
RETURN
|
||
|
||
MOVE.TITLE:
|
||
ON mode1 GOTO MTIT1, MTIT2, MTIT3, MTIT4
|
||
RETURN
|
||
MTIT1:
|
||
zc!(CH) = zc!(CH) - 12: IF zc!(CH) <= zmax AND SND = 1 THEN PLAY SCRASH8$
|
||
IF zc!(CH) <= zmax THEN CH = CH + 1
|
||
IF CH > 7 THEN mode1 = mode1 + 1: cnt = 2000
|
||
RETURN
|
||
MTIT2:
|
||
xc!(8) = xc!(8) - 2: yc!(8) = yc!(8) - 1
|
||
xc!(9) = xc!(9) - 2: yc!(9) = yc!(9) - 1
|
||
SOUND cnt, .4: cnt = cnt - 44
|
||
IF yc!(8) <= yc!(7) + 8 THEN mode1 = mode1 + 1: cnt = 35
|
||
RETURN
|
||
MTIT3:
|
||
cnt = cnt - 1: IF cnt = 34 AND SND = 1 THEN PLAY SCRASH9$
|
||
IF cnt = 0 THEN cnt = 35: mode1 = mode1 + 1
|
||
RETURN
|
||
MTIT4:
|
||
SCREEN 7, 0, scr, scr
|
||
scx = scx - 1: cc = 14: GOSUB DRAW.TITLE
|
||
scx = scx + 2: cc = 14: GOSUB DRAW.TITLE: scx = scx - 1
|
||
scy = scy - 1: cc = 14: GOSUB DRAW.TITLE
|
||
scy = scy + 2: cc = 14: GOSUB DRAW.TITLE: scy = scy - 1
|
||
cc = 4: GOSUB DRAW.TITLE
|
||
mode1 = mode1 + 1: mode2 = 1
|
||
sss = scx
|
||
FOR scx = sss - 2 TO sss + 2: cc = 15: GOSUB DRAW.YEAR: NEXT scx
|
||
x = 214: y = 15
|
||
CIRCLE (x, y), 5, 15: PAINT (x, y), 15, 15
|
||
CIRCLE (x - 3, y - 1), 5, 1: PAINT (x - 3, y - 1), 1, 1
|
||
RETURN
|
||
|
||
REFR.TITLE:
|
||
SCREEN 7, 0, scr, 1 - scr: scr = 1 - scr
|
||
LINE (0, 0)-(319, 120), 0, BF
|
||
RETURN
|
||
|
||
CARE.MENU:
|
||
IF mode2 < 6 THEN GOTO DRAW.MENU
|
||
RETURN
|
||
DRAW.MENU:
|
||
WAIT &H3DA, 8, 8: WAIT &H3DA, 8
|
||
ON mode2 GOTO DMEN1, DMEN2, DMEN3, DMEN4, DMEN5
|
||
RETURN
|
||
DMEN1:
|
||
cnt = cnt - 1: IF cnt = 0 THEN cnt = 35: mode2 = mode2 + 1
|
||
RETURN
|
||
DMEN2:
|
||
SCREEN 7, 0, scr, scr
|
||
x = 40: y = 66: a = 90: c1 = 8: c2 = 15: f = 0: z = 4
|
||
FOR e = 1 TO 5: GOSUB DRAW.ESPRITE: REM PSET (x, y), 10
|
||
y = y + 18: NEXT e
|
||
mode2 = mode2 + 1: x = 58
|
||
RETURN
|
||
DMEN3:
|
||
IF (x AND 7) > 0 THEN GOTO DMEN31
|
||
y = 70: c1 = 15
|
||
FOR e = 1 TO 5
|
||
REM LINE (x, y)-(x + 1, y + 1), 7, BF
|
||
REM PSET (x, y + 1), 15: PSET (x + 1, y), 8
|
||
LINE (x, y)-(x + 1, y), 8
|
||
LINE (x, y + 1)-(x + 1, y + 1), 15
|
||
y = y + 18: NEXT e
|
||
DMEN31:
|
||
x = x + 1: IF x >= 208 THEN mode2 = mode2 + 1
|
||
RETURN
|
||
DMEN4:
|
||
ac = 0: sc = 4: cc = 15: yc! = 64
|
||
FOR e = 1 TO 5
|
||
i = ptse(e): xc! = 220: GOSUB DRAW.INTF
|
||
T$ = "PTS": xc! = 234: GOSUB DRAW.TXTF: yc! = yc! + 18
|
||
NEXT e
|
||
ac = 0: sc = 4: cc = 7
|
||
xc! = 54: yc! = 162: T$ = "PRESS F1 FOR BRIEFING": GOSUB DRAW.TXTZ
|
||
mode2 = mode2 + 1
|
||
RETURN
|
||
DMEN5:
|
||
ac = 0: sc = 4: cc = 16 * RND
|
||
xc! = 100: yc! = 180: T$ = "PRESS FIRE": GOSUB DRAW.TXTZ
|
||
RETURN
|
||
|
||
|
||
REM - - - - - - - - - - - - - - - - -
|
||
|
||
DRAW.CHAR3D:
|
||
zf! = 100 / zc!: sc = zf! * 4
|
||
xd = INT(scx + xc! * zf!): yd = INT(scy - yc! * zf!)
|
||
x$ = LTRIM$(STR$(xd)): y$ = LTRIM$(STR$(yd))
|
||
ta$ = LTRIM$(STR$(ac)): c$ = LTRIM$(STR$(cc))
|
||
zs$ = LTRIM$(STR$(sc))
|
||
s$ = "TA" + ta$ + "S" + zs$ + "C" + c$ + "bm" + x$ + "," + y$ + CH$(nc)
|
||
DRAW s$
|
||
RETURN
|
||
|
||
DRAW.CHAR:
|
||
xd = xc!: yd = yc!
|
||
x$ = LTRIM$(STR$(xd)): y$ = LTRIM$(STR$(yd))
|
||
ta$ = LTRIM$(STR$(ac)): c$ = LTRIM$(STR$(cc))
|
||
zs$ = LTRIM$(STR$(sc))
|
||
s$ = "TA" + ta$ + "S" + zs$ + "C" + c$ + "bm" + x$ + "," + y$ + CH$(nc)
|
||
DRAW s$
|
||
RETURN
|
||
|
||
DRAW.FCHAR:
|
||
xd = xc!: yd = yc!
|
||
x$ = LTRIM$(STR$(xd)): y$ = LTRIM$(STR$(yd))
|
||
ta$ = LTRIM$(STR$(ac)): c$ = LTRIM$(STR$(cc))
|
||
zs$ = LTRIM$(STR$(sc))
|
||
s$ = "TA" + ta$ + "S" + zs$ + "C" + c$ + "bm" + x$ + "," + y$ + CH$(nc)
|
||
DRAW s$: x$ = LTRIM$(STR$(xd - 1))
|
||
s$ = "TA" + ta$ + "S" + zs$ + "C" + c$ + "bm" + x$ + "," + y$ + CH$(nc)
|
||
DRAW s$: x$ = LTRIM$(STR$(xd + 1))
|
||
s$ = "TA" + ta$ + "S" + zs$ + "C" + c$ + "bm" + x$ + "," + y$ + CH$(nc)
|
||
DRAW s$
|
||
RETURN
|
||
|
||
DRAW.INTF:
|
||
sc = 4: x! = xc!: ac = 0: sc = 4
|
||
FOR m = 0 TO 5
|
||
nc = i MOD 10
|
||
GOSUB DRAW.FCHAR
|
||
xc! = xc! - 10: i = INT(i / 10): IF i = 0 THEN EXIT FOR
|
||
NEXT m: xc! = x!
|
||
RETURN
|
||
|
||
DRAW.TXTF:
|
||
sc = 4: l = LEN(T$)
|
||
FOR m = 1 TO l
|
||
nc = ASC(MID$(T$, m, 1)) - 48
|
||
GOSUB DRAW.FCHAR
|
||
xc! = xc! + 9
|
||
NEXT m
|
||
RETURN
|
||
|
||
DRAW.TXT:
|
||
sc = 4: l = LEN(T$)
|
||
FOR m = 1 TO l
|
||
nc = ASC(MID$(T$, m, 1)) - 48
|
||
GOSUB DRAW.CHAR
|
||
xc! = xc! + 9
|
||
NEXT m
|
||
RETURN
|
||
|
||
DRAW.TXTZ:
|
||
l = LEN(T$)
|
||
FOR m = 1 TO l: nc = ASC(MID$(T$, m, 1)) - 48
|
||
IF nc >= 0 THEN GOSUB DRAW.CHAR
|
||
xc! = xc! + sc * 2
|
||
NEXT m
|
||
RETURN
|
||
|
||
WAITKEY0:
|
||
DO: k = INP(96): k$ = INKEY$: LOOP WHILE k < 128
|
||
RETURN
|
||
|
||
PAUSE.MODE:
|
||
GOSUB WAITKEY0: SCREEN 7, 0, scr, scr
|
||
LOCATE 11, 16: COLOR 14: PRINT "- PAUSE -"
|
||
DO: k$ = INKEY$: k = INP(96): LOOP UNTIL k = 25
|
||
GOSUB WAITKEY0
|
||
RETURN
|
||
|
||
REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
||
DBOSS1:
|
||
c1 = 13: c2 = 12: IF hbos = 1 THEN c1 = 15: c2 = 15
|
||
LINE (x - 10, y - 25)-(x, y - 32), 1
|
||
LINE (x, y - 32)-(x + 10, y - 25), 1
|
||
LINE (x - 10, y - 25)-(x + 10, y - 25), 1
|
||
PAINT (x, y - 30), c1, 1
|
||
LINE (x - 16, y)-(x, y + 16), 5
|
||
LINE (x, y + 16)-(x + 16, y), 5
|
||
LINE (x - 16, y)-(x + 16, y), 5
|
||
PAINT (x, y + 8), c1, 5
|
||
LINE (x, y + 15)-(x + 15, y), 5
|
||
LINE (x - 15, y)-(x, y + 15), 5
|
||
CIRCLE (x, y), 30, 5, -pi! * 2, -pi!, .85
|
||
PAINT (x, y - 10), c2, 5
|
||
CIRCLE (x - 11, y - 17), 4, 14: PAINT (x - 11, y - 17), 15, 14
|
||
CIRCLE (x + 10, y - 12), 8, 14: PAINT (x + 10, y - 12), 15, 14
|
||
CIRCLE (x - 15, y), 8, 14, -pi! * 2, -pi!, .85: PAINT (x - 15, y - 4), 15, 14
|
||
CIRCLE (x + 30, y), 8, 14, -pi! * .55, -pi!, .85: PAINT (x + 26, y - 3), 15, 14
|
||
s = SIN(cnt1 / 1) * 20 + 30
|
||
IF PLAY(0) = 0 AND s > 37 THEN SOUND s, .2
|
||
RETURN
|
||
|
||
DBOSS2:
|
||
c1 = 6: c2 = 14: IF hbos = 1 THEN c1 = 15
|
||
s = SGN(dybos!)
|
||
IF s > 0 THEN abos = abos + 2
|
||
IF s = 0 THEN abos = abos + 15
|
||
IF s < 0 THEN abos = abos + 30
|
||
dy1 = SIN(abos / 100) * 5: dy2 = SIN(abos / 100) * 10
|
||
LINE (x, y - 9)-(x + 20, y - 6 + dy1), c1
|
||
LINE (x + 20, y - 6 + dy1)-(x + 32, y - 1 + dy2), c1
|
||
LINE (x + 32, y - 1 + dy2)-(x + 32, y + 3 + dy2), c1
|
||
LINE (x + 32, y + 3 + dy2)-(x, y + 7), c1
|
||
LINE (x, y + 7)-(x - 32, y + 3 + dy2), c1
|
||
LINE (x - 32, y + 3 + dy2)-(x - 32, y - 1 + dy2), c1
|
||
LINE (x - 32, y - 1 + dy2)-(x - 20, y - 6 + dy1), c1
|
||
LINE (x - 20, y - 6 + dy1)-(x, y - 9), c1
|
||
PAINT (x, y), c1, c1
|
||
yy! = y + 4: dy! = dy2 / 7
|
||
FOR xx = 2 TO 32 STEP 4
|
||
x1 = x + xx: x2 = x - xx
|
||
LINE (x1, yy!)-(x1 + 1, yy! + 5), c1, B
|
||
LINE (x2 - 1, yy!)-(x2, yy! + 5), c1, B
|
||
yy! = yy! + dy!
|
||
NEXT xx
|
||
LINE (x, y - 9)-(x - 6, y - 3), c2
|
||
LINE (x - 6, y - 3)-(x, y + 12), c2
|
||
LINE (x, y + 12)-(x + 6, y - 3), c2
|
||
LINE (x + 6, y - 3)-(x, y - 9), c2
|
||
PAINT (x, y), c2, c2
|
||
CIRCLE (x, y - 13), 4, c1, , , 1: PAINT (x, y - 13), c2, c1
|
||
LINE (x, y + 11)-(x - 11, y + 23), c1
|
||
LINE (x - 11, y + 23)-(x, y + 19), c1
|
||
LINE (x, y + 19)-(x + 11, y + 23), c1
|
||
LINE (x + 11, y + 23)-(x, y + 11), c1
|
||
PAINT (x, y + 16), c2, c1
|
||
LINE (x - 1, y - 11)-(x + 1, y - 11), c1
|
||
PSET (x - 4, y - 17), c1
|
||
PSET (x + 4, y - 17), c1
|
||
LINE (x - 2, y - 14)-(x + 2, y - 14), c1
|
||
LINE (x - 2, y - 11)-(x - 2, y - 10), 0
|
||
LINE (x + 2, y - 11)-(x + 2, y - 10), 0
|
||
RETURN
|
||
|
||
DBOSS3:
|
||
c1 = 6: c2 = 14: IF hbos = 1 THEN c1 = 15: c2 = 15
|
||
c3 = 4: abos = abos + 1: d = abos AND 63
|
||
IF d < 4 THEN c3 = 15 - d / 2
|
||
LINE (x, y - 6)-(x + 7, y - 7), c1
|
||
LINE (x + 7, y - 7)-(x + 12, y - 10), c1
|
||
LINE (x + 12, y - 10)-(x + 20, y - 7), c1
|
||
LINE (x + 20, y - 7)-(x + 24, y + 1), c1
|
||
LINE (x + 24, y + 1)-(x + 25, y + 9), c1
|
||
LINE (x + 25, y + 9)-(x + 20, y + 16), c1
|
||
LINE (x + 19, y + 16)-(x + 15, y + 7), c1
|
||
LINE (x + 15, y + 7)-(x + 6, y + 2), c1
|
||
LINE (x + 6, y + 2)-(x, y + 6), c1
|
||
LINE (x, y - 6)-(x - 7, y - 7), c1
|
||
LINE (x - 7, y - 7)-(x - 12, y - 10), c1
|
||
LINE (x - 12, y - 10)-(x - 20, y - 7), c1
|
||
LINE (x - 20, y - 7)-(x - 24, y + 1), c1
|
||
LINE (x - 24, y + 1)-(x - 25, y + 9), c1
|
||
LINE (x - 25, y + 9)-(x - 20, y + 16), c1
|
||
LINE (x - 19, y + 16)-(x - 15, y + 7), c1
|
||
LINE (x - 15, y + 7)-(x - 6, y + 2), c1
|
||
LINE (x - 6, y + 2)-(x, y + 6), c1
|
||
|
||
LINE (x + 18, y + 11)-(x + 24, y + 9), c1
|
||
PAINT (x + 20, y + 13), c2, c1
|
||
LINE (x - 18, y + 11)-(x - 24, y + 9), c1
|
||
PAINT (x - 20, y + 13), c2, c1
|
||
PAINT (x, y), 2, c1
|
||
LINE (x + 3, y)-(x + 5, y - 2), c3
|
||
LINE (x - 3, y)-(x - 5, y - 2), c3
|
||
LINE (x + 6, y + 2)-(x, y + 6), 4
|
||
LINE (x - 6, y + 2)-(x, y + 6), 4
|
||
RETURN
|
||
|
||
DBOSS4:
|
||
c1 = 9: c2 = 11: c3 = 15: IF hbos = 1 THEN c1 = 15
|
||
CIRCLE (x, y), 30, c1, 0, pi!, .85
|
||
CIRCLE (x, y), 30, c1, pi!, pi! * 2, .1
|
||
PAINT (x, y - 10), 0, c1
|
||
abos = (abos + 1) AND 255
|
||
FOR xx = x - 24 TO x + 24 STEP 5
|
||
a1! = abos + xx + 1: r1! = SIN(a1! / 4.33)
|
||
a2! = abos + xx + 2: r2! = SIN(a2! / 3.97)
|
||
a3! = abos + xx + 3: r3! = SIN(a3! / 3.67)
|
||
yy = y - 4 - r2!: f1 = 40 - ABS(xx - x): f2 = f1 / 5
|
||
x1 = xx + f2 * r1!: x2 = xx + f2 * r2!: x3 = xx + f2 * r3!
|
||
LINE (xx, yy)-(x1, yy + 16), c2
|
||
LINE (x1, yy + 16)-(x2, yy + 30), c2
|
||
LINE (x2, yy + 30)-(x3, yy + 30 + f2 * 2), c2
|
||
NEXT xx
|
||
CIRCLE (x, y), 30, c3, 0, pi!, .1
|
||
RETURN
|
||
|
||
DBOSS5:
|
||
c1 = 9: dy = 0: abos = abos + 1
|
||
IF (abos AND 63) > 40 THEN dy = 1
|
||
IF hbos = 1 THEN c1 = 15: dy = -2
|
||
CIRCLE (x, y), 20, c1, , , .6
|
||
PAINT (x, y), c1, c1
|
||
LINE (x - 6, y - 12)-(x + 11, y - 24), c1
|
||
LINE (x + 11, y - 24)-(x + 8, y - 14), c1
|
||
LINE (x + 8, y - 14)-(x + 16, y - 8), c1
|
||
PAINT (x + 3, y - 16), c1, c1
|
||
LINE (x - 7, y + 12)-(x + 2, y + 20), c1
|
||
LINE (x + 2, y + 20)-(x + 7, y + 12), c1
|
||
PAINT (x, y + 16), c1, c1
|
||
LINE (x + 18, y)-(x + 40, y - 12), c1
|
||
LINE (x + 18, y)-(x + 40, y + 12), c1
|
||
LINE (x + 40, y - 12)-(x + 36, y), c1
|
||
LINE (x + 36, y)-(x + 40, y + 12), c1
|
||
PAINT (x + 24, y), c1, c1
|
||
CIRCLE (x - 7, y - 4), 5, 15, , , .9: PAINT (x - 7, y - 4), 15, 15
|
||
CIRCLE (x - 7, y - 4 + dy), 2, 0, , , .9: PAINT (x - 7, y - 4 + dy), 0, 0
|
||
RETURN
|
||
|
||
DBOSS6:
|
||
a = ((abos MOD 7) - 3) * 12: abos = abos + 1
|
||
c1 = 6: c2 = 14: c3 = 11: IF hbos = 1 THEN c1 = 15
|
||
a! = a * pi! / 180: r = 20: s = 1
|
||
FOR q = -2 TO 1
|
||
s = SGN(q + .5): a! = -a!
|
||
x1 = COS(a!) * r * s: y1 = SIN(a!) * r
|
||
CIRCLE (x + x1, y - y1), 8, c3: PAINT (x + x1, y - y1), c3, c3
|
||
x2 = COS(a! - .36) * r * s: y2 = SIN(a! - .36) * r
|
||
LINE (x, y)-(x + x2, y - y2), c3
|
||
x3 = COS(a! + .36) * r * s: y3 = SIN(a! + .36) * r
|
||
LINE (x, y)-(x + x3, y - y3), c3
|
||
PAINT (x + x1 * .4, y - y1 * .4), c3, c3
|
||
NEXT q
|
||
CIRCLE (x, y), 11, c1, , , 1.2: PAINT (x, y), c1, c1
|
||
CIRCLE (x, y - 12), 8, c1, -pi! * 1.9, -pi! * 1.1, .8
|
||
PAINT (x, y - 14), c1, c1
|
||
CIRCLE (x - 5, y - 14), 4, 7, , , .8
|
||
PAINT (x - 5, y - 14), A5$, 7
|
||
CIRCLE (x + 5, y - 14), 4, 7, , , .8
|
||
PAINT (x + 5, y - 14), A5$, 7
|
||
LINE (x - 8, y - 3)-(x + 8, y - 1), c2, BF
|
||
LINE (x - 7, y + 4)-(x + 7, y + 6), c2, BF
|
||
c = cnt1 AND 127
|
||
IF PLAY(0) = 0 AND SND = 1 AND c < 32 THEN SOUND 1600 + 200 * RND, .6
|
||
RETURN
|
||
|
||
DBOSS7:
|
||
c1 = 4: c2 = 12: abos = abos + 1: s = SGN(abos AND 16) * 10
|
||
c3 = 4: IF hbos = 1 THEN c3 = 15
|
||
IF stbos < 12 THEN c3 = 1
|
||
c4 = csb(stbos / 16)
|
||
CIRCLE (x - 32, y - 14), 4, 2, , , 1
|
||
CIRCLE (x, y - 12), 20, 15
|
||
CIRCLE (x + 32, y - 14), 4, 2, , , 1
|
||
CIRCLE (x, y - 13), 7, 15, -pi! * 2, -pi!
|
||
PAINT (x, y - 14), c4, 15
|
||
PAINT (x - 32, y - 15), s, 2
|
||
PAINT (x + 32, y - 15), 10 - s, 2
|
||
LINE (x - 50, y - 10)-(x + 50, y - 10), c1
|
||
LINE (x - 25, y + 10)-(x + 25, y + 10), c1
|
||
LINE (x - 50, y - 10)-(x - 80, y), c1
|
||
LINE (x - 80, y)-(x - 80, y + 4), c1
|
||
LINE (x - 80, y + 4)-(x - 25, y + 10), c1
|
||
LINE (x + 50, y - 10)-(x + 80, y), c1
|
||
LINE (x + 80, y)-(x + 80, y + 4), c1
|
||
LINE (x + 80, y + 4)-(x + 25, y + 10), c1
|
||
PAINT (x, y), c1, c1
|
||
PAINT (x - 40, y), c1, c1: PAINT (x + 40, y), c1, c1
|
||
LINE (x - 40, y - 13)-(x - 43, y - 11), c1
|
||
LINE (x - 40, y - 13)-(x + 40, y - 13), c1
|
||
LINE (x + 40, y - 13)-(x + 43, y - 11), c1
|
||
PAINT (x, y - 12), c2, c1
|
||
LINE (x - 80, y - 1)-(x + 80, y + 3), 14, BF
|
||
xx = x - 88 + (abos MOD 24)
|
||
FOR q = 1 TO 7
|
||
LINE (xx, y - 1)-(xx + 11, y + 3), 0, BF
|
||
xx = xx + 24
|
||
NEXT q
|
||
LINE (x - 80, y + 4)-(x - 25, y + 10), c3
|
||
LINE (x - 25, y + 10)-(x + 25, y + 10), c3
|
||
LINE (x + 80, y + 4)-(x + 25, y + 10), c3
|
||
RETURN
|
||
|
||
REM - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
||
DSTG1:
|
||
a1! = pi! - .7
|
||
FOR n = 1 TO 21
|
||
r1 = 400 + 20 * RND
|
||
x1 = COS(a1!) * r1 + 300: y1 = 450 - SIN(a1!) * r1
|
||
FOR m = 1 TO 20
|
||
a2! = pi! * 2 * RND
|
||
r = 36 * RND: x2 = x1 + COS(a2!) * r: y2 = y1 + SIN(a2!) * r
|
||
PSET (x2, y2), 1
|
||
r = 28 * RND: x2 = x1 + COS(a2!) * r: y2 = y1 + SIN(a2!) * r
|
||
PSET (x2, y2), 9
|
||
r = 16 * RND: x2 = x1 + COS(a2!) * r: y2 = y1 + SIN(a2!) * r
|
||
PSET (x2, y2), 11
|
||
r = 12 * RND: x2 = x1 + COS(a2!) * r: y2 = y1 + SIN(a2!) * r
|
||
PSET (x2, y2), 15
|
||
NEXT m
|
||
a1! = a1! - .05
|
||
NEXT n
|
||
RETURN
|
||
|
||
DSTG2:
|
||
c1 = 11: c2 = 9: c3 = 1
|
||
FOR n = 1 TO 32
|
||
x = 320 * RND: y = 200 * RND
|
||
c = 12 + INT(4 * RND): IF c = 13 THEN c = 4
|
||
PSET (x, y), c
|
||
NEXT n
|
||
x = 169: y = 109
|
||
CIRCLE (x, y), 36, 9, , , 1
|
||
CIRCLE (x, y), 37, 1, , , .94
|
||
CIRCLE (x - 19, y - 16), 18, c1, pi2! * 3, pi2! * 4
|
||
CIRCLE (x + 19, y - 16), 18, c1, pi2! * 2, pi2! * 3
|
||
CIRCLE (x - 19, y + 16), 18, c1, pi2! * 0, pi2! * 1
|
||
CIRCLE (x + 19, y + 16), 18, c1, pi2! * 1, pi2! * 2
|
||
LINE (x, y - 17)-(x, y - 50), c1
|
||
LINE (x, y + 17)-(x, y + 42), c1
|
||
LINE (x - 20, y)-(x - 48, y), c1
|
||
LINE (x + 20, y)-(x + 44, y), c1
|
||
LINE (x, y - 40)-(x, y - 50), c2
|
||
LINE (x, y + 40)-(x, y + 45), c2
|
||
LINE (x - 34, y)-(x - 48, y), c2
|
||
LINE (x + 34, y)-(x + 44, y), c2
|
||
LINE (x, y - 50)-(x, y - 54), c3
|
||
LINE (x, y + 45)-(x, y + 50), c3
|
||
LINE (x - 48, y)-(x - 52, y), c3
|
||
LINE (x + 44, y)-(x + 48, y), c3
|
||
PAINT (x, y), 15, c1
|
||
RETURN
|
||
|
||
DSTG3:
|
||
x = xs!: y = ys!: r1 = rs!: rsmax! = 30
|
||
c1 = 4: c2 = 14: c3 = 4: a2! = 0
|
||
|
||
a2! = a2! + .03
|
||
r2 = 0: n = 0: a! = 0
|
||
FOR a! = 0 TO pi! * 2 STEP .2
|
||
x0 = x1: y0 = y1
|
||
f = (r1 / 6) * RND: a1! = a! + .1 * RND
|
||
r = r1 + r2 * f: r2 = 1 - r2
|
||
x1 = SIN(a1! + a2!) * r + x: y1 = COS(a1! + a2!) * r + y
|
||
IF n = 0 THEN x2 = x1: y2 = y1
|
||
IF n > 0 THEN LINE (x0, y0)-(x1, y1), c1
|
||
n = n + 1
|
||
NEXT a!
|
||
LINE (x1, y1)-(x2, y2), c1
|
||
PAINT (x, y), c2, c1
|
||
CIRCLE (x, y), r1 - 2, c3, , , 1
|
||
PAINT (x, y), 0, c3
|
||
RETURN
|
||
|
||
|
||
DSTG4:
|
||
x = xs!: y = ys!: r1 = rs!: rsmax! = 60
|
||
c1 = 1: c2 = 9: c3 = 11: c4 = 11
|
||
|
||
CIRCLE (x, y), r1, c1
|
||
CIRCLE (x, y), r1, c2, pi2! * 3, pi2!
|
||
|
||
CIRCLE (x, y), r1 * .84, c1, pi2!, pi2! * 3, 3
|
||
PAINT (x - r1 * .5, y), c1, c1
|
||
CIRCLE (x, y), r1 * .84, c2, pi2!, pi2! * 3, 3
|
||
PAINT (x + r1 * .5, y), c2, c2
|
||
|
||
x1 = x - r1 * .36: y1 = y - r1 * .16
|
||
CIRCLE (x1, y1), r1 * .16, c2, , , .7: PAINT (x1, y1), c2, c2
|
||
x1 = x - r1 * .8: y1 = y - r1 * .05
|
||
CIRCLE (x1, y1), r1 * .16, c2, , , 1.8: PAINT (x1, y1), c2, c2
|
||
x1 = x - r1 * .6: y1 = y + r1 * .05
|
||
CIRCLE (x1, y1), r1 * .2, c2, , , 1: PAINT (x1, y1), c2, c2
|
||
x1 = x - r1 * .3: y1 = y + r1 * .1
|
||
CIRCLE (x1, y1), r1 * .3, c2: PAINT (x1, y1), c2, c2
|
||
x1 = x - r1 * .3: y1 = y + r1 * .1
|
||
CIRCLE (x1, y1), r1 * .3, c3, -pi2! * 3.1, -pi2! * .95
|
||
PAINT (x1 + r1 * .1, y1), c3, c3
|
||
|
||
x1 = x + r1 * .24: y1 = y - r1 * .5
|
||
CIRCLE (x1, y1), r1 * .16, c3, , , .8: PAINT (x1, y1), c3, c3
|
||
x1 = x + r1 * .33: y1 = y - r1 * .3
|
||
CIRCLE (x1, y1), r1 * .2, c3, , , .9: PAINT (x1, y1), c3, c3
|
||
x1 = x + r1 * .46: y1 = y - r1 * .46
|
||
CIRCLE (x1, y1), r1 * .14, c3, , , .9: PAINT (x1, y1), c3, c3
|
||
|
||
x1 = x + r1 * .02: y1 = y + r1 * .75
|
||
CIRCLE (x1, y1), r1 * .12, c3, , , .4: PAINT (x1, y1), c3, c3
|
||
x1 = x + r1 * .07: y1 = y + r1 * .67
|
||
CIRCLE (x1, y1), r1 * .15, c3, , , .4: PAINT (x1, y1), c3, c3
|
||
x1 = x + r1 * .2: y1 = y + r1 * .6
|
||
CIRCLE (x1, y1), r1 * .15, c3, , , .66: PAINT (x1, y1), c3, c3
|
||
|
||
x1 = x + r1 * .9: y1 = y + r1 * .02
|
||
CIRCLE (x1, y1), r1 * .14, c3, , , 3: PAINT (x1, y1), c3, c3
|
||
x1 = x + r1 * .7: y1 = y + r1 * .13
|
||
CIRCLE (x1, y1), r1 * .17, c3, , , 1.2: PAINT (x1, y1), c3, c3
|
||
|
||
x1 = x - r1 * .01: y1 = y - r1 * .8
|
||
CIRCLE (x1, y1), r1 * .12, c3, -pi2! * 2.5, -pi2! * 1.3, .2: PAINT (x1 + r1 * .06, y1), c3, c3
|
||
x1 = x - r1 * .08: y1 = y - r1 * .8
|
||
CIRCLE (x1, y1), r1 * .12, c2, -pi2! * 1, -pi2! * 2.8, .2
|
||
PAINT (x1 - r1 * .04, y1), c2, c2
|
||
|
||
CIRCLE (x, y), r1, c4, pi2! * .28, pi2! * .7
|
||
RETURN
|
||
|
||
|
||
DSTG5:
|
||
x = xs!: y = ys!: r1 = rs!: rsmax! = 50
|
||
c1 = 6: c2 = 4: c3 = 12: c4 = 4
|
||
a1! = pi2! * 2: a2! = pi2! * 4: f! = .2
|
||
CIRCLE (x, y), r1, c2
|
||
PAINT (x, y), c1, c2
|
||
CIRCLE (x, y - r1 * .8), r1 * .2, c2, a1!, a2!, f!
|
||
CIRCLE (x, y - r1 * .7), r1 * .5, c2, a1!, a2!, f!
|
||
CIRCLE (x, y - r1 * .56), r1 * .74, c2, a1!, a2!, f!
|
||
CIRCLE (x, y - r1 * .4), r1 * .89, c2, a1!, a2!, f!
|
||
CIRCLE (x, y - r1 * .32), r1 * .93, c2, a1!, a2!, f!
|
||
CIRCLE (x, y - r1 * .16), r1 * .98, c2, a1!, a2!, f!
|
||
CIRCLE (x, y + r1 * .06), r1 * 1, c2, a1!, a2!, f!
|
||
CIRCLE (x, y + r1 * .29), r1 * .94, c2, a1!, a2!, f!
|
||
CIRCLE (x, y + r1 * .42), r1 * .87, c2, a1!, a2!, f!
|
||
CIRCLE (x, y + r1 * .6), r1 * .69, c2, a1!, a2!, f!
|
||
PAINT (x, y - r1 * .16), c2, c2
|
||
PAINT (x, y + r1 * .38), c2, c2
|
||
PAINT (x, y + r1 * .78), c2, c2
|
||
CIRCLE (x, y), r1, c3, pi2! * .2, pi2! * 1.4
|
||
a1! = pi2! * 1.5: a2! = pi2! * .5
|
||
CIRCLE (x, y + r1 * .04), r1 * 1.6, c4, pi2! * 1.42, pi2! * .58, f!
|
||
CIRCLE (x, y + r1 * .04), r1 * 1.76, c1, pi2! * 1.36, pi2! * .64, f!
|
||
CIRCLE (x, y + r1 * .04), r1 * 1.8, c4, pi2! * 1.36, pi2! * .64, f!
|
||
RETURN
|
||
|
||
|
||
DSTG6:
|
||
x = xs!: y = ys!: r1 = rs!: rsmax! = 60
|
||
c1 = 8: c2 = 7: c3 = 15: c4 = 8
|
||
a1! = -pi2! * 1.1: a2! = -pi2! * 3 * .9
|
||
|
||
CIRCLE (x, y), r1, c1
|
||
CIRCLE (x, y), r1, c2, pi2!, pi2! * 3
|
||
|
||
CIRCLE (x, y), r1 * .84, c2, pi2! * 3, pi2!, 1.6
|
||
PAINT (x - r1 * .5, y), c2, c2
|
||
CIRCLE (x, y), r1 * .84, c1, pi2! * 3, pi2!, 1.6
|
||
PAINT (x + r1 * .8, y), c1, c1
|
||
|
||
x1 = x - r1 * .25: y1 = y - r1 * .2
|
||
CIRCLE (x1, y1), r1 * .24, c1: PAINT (x1, y1), c1, c1
|
||
CIRCLE (x1, y1), r1 * .24, c3, a1!, a2!: PAINT (x1 - r1 * .05, y1), c3, c3
|
||
CIRCLE (x1 - r1 * .02, y1), r1 * .18, c2: PAINT (x1, y1), c2, c2
|
||
x1 = x - r1 * .8: y1 = y - r1 * .04
|
||
CIRCLE (x1, y1), r1 * .13, c1, , , 1.6: PAINT (x1, y1), c1, c1
|
||
CIRCLE (x1, y1), r1 * .13, c3, a1!, a2!, 1.6: PAINT (x1 - r1 * .05, y1), c3, c3
|
||
CIRCLE (x1 - r1 * .01, y1), r1 * .08, c2, , , 1.6: PAINT (x1, y1), c2, c2
|
||
x1 = x - r1 * .5: y1 = y + r1 * .3
|
||
CIRCLE (x1, y1), r1 * .1, c1, , , 1: PAINT (x1, y1), c1, c1
|
||
CIRCLE (x1, y1), r1 * .1, c3, -a1!, -a2!, 1
|
||
|
||
x1 = x + r1 * .14: y1 = y - r1 * .55
|
||
CIRCLE (x1, y1), r1 * .13, c1, , , .66: PAINT (x1, y1), c1, c1
|
||
x1 = x + r1 * .3: y1 = y + r1 * .1
|
||
CIRCLE (x1, y1), r1 * .2, c1, , , .9: PAINT (x1, y1), c1, c1
|
||
x1 = x + r1 * .02: y1 = y + r1 * .75
|
||
CIRCLE (x1, y1), r1 * .12, c1, , , .4: PAINT (x1, y1), c1, c1
|
||
x1 = x - r1 * .07: y1 = y + r1 * .5
|
||
CIRCLE (x1, y1), r1 * .15, c1, , , .8: PAINT (x1, y1), c1, c1
|
||
x1 = x - r1 * .01: y1 = y - r1 * .8
|
||
CIRCLE (x1, y1), r1 * .12, c1, , , .2: PAINT (x1 + r1 * .06, y1), c1, c1
|
||
CIRCLE (x1, y1), r1 * .12, c3, -a1!, -a2!, .2
|
||
|
||
x1 = x + r1 * .9: y1 = y + r1 * .05
|
||
CIRCLE (x1, y1), r1 * .1, c4, , , 3: PAINT (x1, y1), c4, c4
|
||
CIRCLE (x1, y1), r1 * .1, c2, -a1!, -a2!, 3
|
||
CIRCLE (x1 + r1 * .02, y1), r1 * .1, c2, -a1!, -a2!, 3
|
||
x1 = x + r1 * .7: y1 = y + r1 * .2
|
||
CIRCLE (x1, y1), r1 * .15, c4, , , 1.5: PAINT (x1, y1), c4, c4
|
||
CIRCLE (x1, y1), r1 * .15, c2, -a1!, -a2!, 1.5
|
||
CIRCLE (x1 + r1 * .02, y1), r1 * .15, c2, -a1!, -a2!, 1.5
|
||
x1 = x + r1 * .62: y1 = y - r1 * .35
|
||
CIRCLE (x1, y1), r1 * .05, c4, , , 1.2: PAINT (x1, y1), c4, c4
|
||
CIRCLE (x1, y1), r1 * .05, c2, -a1!, -a2!, 1.2
|
||
CIRCLE (x1 + r1 * .02, y1), r1 * .05, c2, -a1!, -a2!, 1.2
|
||
RETURN
|
||
|
||
DSTG7:
|
||
c1 = 1: c2 = 9: c3 = 11: c4 = 15: c5 = 2: c6 = 10
|
||
FOR n = 1 TO 32
|
||
x = 320 * RND: y = 200 * RND: c = 7 + INT(2 * RND) * 8
|
||
PSET (x, y), c
|
||
NEXT n
|
||
x = -20: y = 330: r1 = 300
|
||
CIRCLE (x, y), r1, c1: PAINT (0, 199), c1, c1
|
||
CIRCLE (x, y), r1 * .985, c2: PAINT (0, 199), c2, c2
|
||
CIRCLE (x, y), r1 * .97, c3: PAINT (0, 199), c3, c3
|
||
CIRCLE (x, y), r1 * .955, c4: PAINT (0, 199), c4, c4
|
||
CIRCLE (x, y), r1 * .94, c3: PAINT (0, 199), c3, c3
|
||
CIRCLE (x, y), r1 * .925, c2: PAINT (0, 199), c2, c2
|
||
CIRCLE (x, y), r1 * .91, c1: PAINT (0, 199), c1, c1
|
||
y1 = 0
|
||
RESTORE EARTH
|
||
DO
|
||
x0 = x1: y0 = y1: READ x1, y1
|
||
IF y0 > 0 AND y1 > 0 THEN LINE (x0, y0)-(x1, y1), c5
|
||
LOOP UNTIL x1 = -1 AND y1 = -1
|
||
PAINT (0, 199), c6, c5
|
||
PAINT (130, 199), c6, c5
|
||
RETURN
|
||
|
||
EARTH:
|
||
DATA 0,119, 24,121, 40,124, 70,134, 69,138, 62,140, 79,148, 73,148, 84,155
|
||
DATA 82,154, 86,157, 88,162, 80,161, 70,158, 73,164, 88,172, 70,182
|
||
DATA 52,180, 48,183, 52,187, 51,193, 46,193, 62,199, 0,0
|
||
DATA 108,199, 114,186, 124,177, 123,172, 131,172, 138,185, 144,186, 147,192
|
||
DATA 154,194, 161,195, 165,199
|
||
DATA -1,-1
|
||
|
||
REM - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||
|
||
LOAD.SPRITES:
|
||
ENEMY$(1, 0) = "br5h8d4g4f4d4e8bl5"
|
||
ENEMY$(1, 1) = "br4h5d3g2f2d3e5bl4"
|
||
ENEMY$(1, 2) = "br6h5l2d10r2e5bl2"
|
||
ENEMY$(1, 3) = "bl1h7d5g2f2d5e7bl3"
|
||
ENEMY$(2, 0) = "br4e2h8g6f4g4f6e8h2bl4"
|
||
ENEMY$(2, 1) = "bl4e4f4g4h4br4"
|
||
ENEMY$(3, 0) = "e7l14f3d8g3r14h7bl1"
|
||
ENEMY$(3, 1) = "br6bu5l10bd10r10"
|
||
ENEMY$(4, 0) = "bu3br5d6g6l6e6u6h6r6f6bd3bl3"
|
||
ENEMY$(4, 1) = "bl5d3g5r4e5u6h5l4f5d3br2"
|
||
ENEMY$(5, 0) = "br3f3g3h3g5h3e5h5e3f5e3f3g3bl2"
|
||
ENEMY$(5, 1) = "br2e3d6h3br1"
|
||
ENEMY$(6, 0) = "g9l5e3u3e3h3u3h3r5f9bl4"
|
||
ENEMY$(6, 1) = "bl7e2r8f2g2l8h2br7"
|
||
ENEMY$(7, 0) = "h5l5f5g5r5e5bl3"
|
||
ENEMY$(7, 1) = "bl4u2r16f1r4f1g1l4g1l16u2l3br8"
|
||
ENEMY$(8, 0) = "bu4br7d8g4l6h5u8e4r6 f5"
|
||
ENEMY$(8, 1) = "bl1bd1g5l8e5r8bl7bd3"
|
||
ENEMY$(9, 0) = "bd5br6g2l4h5u7e4r2 l1"
|
||
ENEMY$(9, 1) = "bd10bl4e3r5g4l4u1br3bu2"
|
||
ENEMY$(10, 0) = "br7g9l3h3u3e3h3u3e3r3f9bl7"
|
||
ENEMY$(10, 1) = "br7g3l6h3e3r6f3bl8"
|
||
ENEMY$(10, 2) = "br6g4l10h2u4e2r10f4bl6"
|
||
ENEMY$(10, 3) = "br7g3l6h3e3r6f3bl7"
|
||
ENEMY$(11, 0) = "br7g9l3h3u3e3h3u3e3r3f9bl7"
|
||
ENEMY$(11, 1) = "br7g3l6h3e3r6f3bl8"
|
||
ENEMY$(11, 2) = "br6g4l10h2u4e2r10f4bl6"
|
||
ENEMY$(11, 3) = "br7g3l6h3e3r6f3bl7"
|
||
|
||
CRASH$(1) = "br4bu4h8d8g8r8f8u8e8l8bd4"
|
||
CRASH$(2) = "br4f4l4d4h4g4u4l4e4h4r4u4f4e4d4r4g4bl4"
|
||
CRASH$(3) = "br4d8h4l8e4u8f4r8g4bl4"
|
||
|
||
SHOT$(1) = "bl2bu2r2d4r2"
|
||
SHOT$(2) = "bl2bu2r4d4l4u4"
|
||
RETURN
|
||
|
||
LOAD.CHARSET:
|
||
CH$(0) = "br1r3f2d4g1l3h2u4e1"
|
||
CH$(1) = "br3ng1d7nl2r2"
|
||
CH$(2) = "bd2u1e1r3f1d1g2l1g2d1r5"
|
||
CH$(3) = "r5g3r2f1d2g1l3h1"
|
||
CH$(4) = "br4bd7u7g4d1r5"
|
||
CH$(5) = "br5l5d2r4f1d3g1l3h1"
|
||
CH$(6) = "br5l2g3d2f2r3e1u1h2l3g1"
|
||
CH$(7) = "r5d1g3d3"
|
||
CH$(8) = "br2r2f1d1g1l3g1d2f1r4e1u1h2l2h2e1r1"
|
||
CH$(9) = "bd7br1r2e3u2h2l3g1d1f2r3e1"
|
||
CH$(17) = "bd7u3nr5u2e2r1f2d5"
|
||
CH$(18) = "nd7r3f1d1g1bl3r4f1d2g1l4"
|
||
CH$(19) = "br4l2g2d4f1r3e1"
|
||
CH$(20) = "bd7u7r4f1d4g2l3"
|
||
CH$(21) = "nr4d3nr3d3f1r4"
|
||
CH$(22) = "br5l4g1d2nr3d4"
|
||
CH$(23) = "br4l2g2d4f1r3e1u3l2"
|
||
CH$(24) = "d7bu4r5bu3d7"
|
||
CH$(25) = "br2r2bl1d7bl1r2"
|
||
CH$(26) = "br1r4d5g2l2u1"
|
||
CH$(27) = "d7bu4r1ne3nf4"
|
||
CH$(28) = "d7r5"
|
||
CH$(29) = "bd7u6e1f2e2f1d6"
|
||
CH$(30) = "bd7u7f5nd2u5"
|
||
CH$(31) = "br2r2f1d4g2l2h1u4e2"
|
||
CH$(32) = "bd7u7r4f1d2g1l4"
|
||
CH$(33) = "br1r2f2d4nh2nf1g1l2h2u4e1"
|
||
CH$(34) = "bd7u7r4f1d1g1l4br1f4"
|
||
CH$(35) = "br5l3g2f1r3f1d2g1l5"
|
||
CH$(36) = "r6bl3d7"
|
||
CH$(37) = "d5f2r3e1u6"
|
||
CH$(38) = "d6f1e4u3"
|
||
CH$(39) = "d6f1e2nu2f2e1u6"
|
||
CH$(40) = "r1f2d3f2r1bl6r1e2bu3e2r1"
|
||
CH$(41) = "d2f3nd2e3u2"
|
||
CH$(42) = "r6d1g6r6"
|
||
RETURN
|
||
|
||
LOAD.SOUNDS:
|
||
REM 2,7,10,13,15,19,22,25,27,31,34,39,43,46,58
|
||
SLASER1$ = "MBT255l64n58n57n56n55n54"
|
||
SLASER2$ = "MBT255l48n58n56n54n52n58n56n54n52"
|
||
SSHOOT1$ = "MBT255l64n63n61n58n55n58"
|
||
SSHOOT2$ = "MBT255l64n61n58n55"
|
||
SSHOOT3$ = "MBT255l48n7n10n7"
|
||
SETYPE1$ = "MBT255l32n39n34n31n27n25n22n19n15n13n10n7n2"
|
||
SETYPE2$ = "MBT255l40n60n59n58n57n19n13n10n7n2n7n5n1n3n1n2n1"
|
||
SETYPE3$ = "MBT255l32n36n24n1n17n2n19n0n11n1n15n3n17n2n9n1n6n2n4n1n3n1"
|
||
SETYPE4$ = "MBT255l64n50n48n45n41n36n50n47n43n37n33n26n19n12n1n9n1n7n1n5n1n3n1"
|
||
SETYPE6$ = "MBT255l40n39n31n25n19n13n7n2n7n10n7n13n15n19n15n22n25n27n25n31n34n39n34n43n46"
|
||
SETYPE8$ = "MBT255l32n2n7n10n13n15n19n22n25n27n31n34n39n43n46n58"
|
||
SETYPE9$ = "MBT255l40n58n46n43n39n34n31n27n25n22n19n15n13"
|
||
SETYPE10$ = "MBT255l32n56n55n53n50n45n43n41n40n41n43n45n50n53n55n56"
|
||
SETYPE11$ = "MBT255l64n70n69n68n67n66n65n64n63n62n61n60"
|
||
SCRASH8$ = "MBT255l64n58n25n19n13n10n7n2n7n5n1n3n1n2n1"
|
||
SCRASH9$ = "MBT255l32n30n1n23n2n19n3n14n2n15n1n11n1n7n1n4n1n5n1n3n1n2n1n0n1n3n1n2n1"
|
||
SNEW1$ = "MBT255l24n58n57n58n53n57n58"
|
||
SNEWPL1$ = "MBT255l3n25n32"
|
||
SNEWPL2$ = "MBT255l8n25n32"
|
||
SDOCK2$ = "MBT255l32n15n17n15n17n20n25n29n32n37"
|
||
SRGTON$ = "MBT80l24n27n0l24n27n29n34n31n34n31l12n29l24n29n32l6n36l24n38n34n31n38n34n31n38n34l12n39l24n38l8n39"
|
||
SLAUNCH$ = "MBT96l64n27l8n22l16n22l4n27n34l16n0n22MLl4n27n34MSl24n39n0n0l32n39n0l48n39n0l64n39n0n39n0l32n39n0n39n0l48n39n0n39n0l24n51MN"
|
||
SFAROUT1$ = "MBT80l8n22l12n22l8n26l12n26l8n29l12n29l8n34l12n34l8n22l12n22l8n26l12n26l8n29l12n29l8n34l12n34"
|
||
SFAROUT2$ = "MBT80l64n17l8n22l12n22l64n17l8n26l12n26l64n17l8n29l12n29l64n17l8n34l12n34"
|
||
SEND$ = "MBT96l6n22l16n27l2n25l16n27l8n25n27n29l16n25n27l48n25n27l12n29l32n27n29n27n29l4n34"
|
||
SBONPLAY$ = "MBT64l64n15n22n19n22n19n22n27l32n34"
|
||
SHITBOS1$ = "MBT255l64n63n62n61n60n50n40n30n20n13n10n8n7n5n4n3n2n1n1n1"
|
||
SBOSPTS$ = "MBT255l64n46n45n44n43n42n41n40n39n38n37n36n35n34"
|
||
SSTAGE1$ = "MBMST64l32n40n0n40n40n0n40n40n40n40n0n40n40n0n40n0n40n0n40n40n40n0n40n0MN"
|
||
SSTAGE2$ = "MBT255l32n19n22n25n27n31n34n39n43n46"
|
||
|
||
SFINAL$(1, 1) = "MBMNT64l4n25l24n18n18l4n25l24n18n18l24n25n0n30n0l4n25"
|
||
SFINAL$(1, 2) = "MBMNT64l24n18n18l24n25n0n30n0l3n32"
|
||
SFINAL$(1, 3) = "MBMNT64l24n23n23l24n28n0n30n0l8n32l24n34l4n35"
|
||
SFINAL$(1, 4) = "MBMNT64l6n37l6n34l8n30n28n32n35"
|
||
SFINAL$(1, 5) = "MBMLT64l8n39l6n37l6n34l8n30n28n32n35n39l6n42"
|
||
SFINAL$(1, 6) = "MBMLT64l64n37n42n49n37n42n49n37n42n49n37n42n49n37n42n49n37n42n49l16n42"
|
||
SFINAL$(1, 7) = "MBMLT64"
|
||
SFINAL$(2, 1) = "MBMNT64l6n13n15n18n20n25l24n23n22l12n20l6n23l24n22n20l12n18n22n18l6n20"
|
||
SFINAL$(2, 2) = "MBMLT64l64n25n30n37MNl16n0l24n13n13n18n0n18n18n20n0n20n20n25n0n25n25n23n22n20n0"
|
||
SFINAL$(2, 3) = "MBMNT64l24n23n0n23n23n22n20n18n0l12n22l24n23n0n18n0n22n0l4n20"
|
||
SFINAL$(2, 4) = "MBMNT64l16n8n8n8n0n8n0n8n0n8n8n8n0n8n0"
|
||
SFINAL$(2, 5) = "MBMNT48l64n20l4n32MLl12n32n30n29n27n25l4n30l24n32n34l4n32"
|
||
SFINAL$(2, 6) = "MBMNT48l12n8l4n32MLl12n32n30n29n27T64n25l4n35l24n37n39"
|
||
SFINAL$(2, 7) = "MBMLT64l64n25n37n25n37n25n37n25n37n25n37n25n37n25n37n25n37l8n37"
|
||
RETURN
|
||
|
||
CREDITS:
|
||
DATA " ", " ", " "
|
||
DATA " YOU SAVED", " THE GALAXY", " ", " ", " ", " "
|
||
DATA " CONGRATULATIONS", " ", " THE MISSION", "IS ACCOMPLISHED"
|
||
DATA " ", "THE ALIENS HAVE", " LEFT", " AND THE EARTH"
|
||
DATA " IS NOW FREE", " ", "YOU HAVE BROUGHT", " BACK PEACE TO"
|
||
DATA " OUR GALAXY", " ", "WE WILL THANK", " YOU FOREVER"
|
||
DATA " ", " THE FORCE", "WILL BE WITH YOU", " ALWAYS"
|
||
DATA " ", " ", " ", " ", " THE END"
|
||
|
||
|
||
TITLE.HELP:
|
||
RESTORE THELP.TEXT
|
||
SCREEN 7, 0, 2, 2: tcnt = 0: tpos = 0: sss = 0
|
||
CLS : COLOR 15, 1
|
||
|
||
THELP.MAIN:
|
||
k = INP(96): k$ = INKEY$: da = 0
|
||
IF k = 1 THEN COLOR 15, 0: SCREEN 7, 0, scr, scr: GOTO WAITKEY0
|
||
WAIT &H3DA, 8: WAIT &H3DA, 8, 8
|
||
IF tcnt < 22 THEN GOSUB THELP.SOFT
|
||
IF k = 80 OR k = 77 OR tcnt < 22 THEN GOSUB THELP.SCROLL
|
||
IF k = 72 THEN RESTORE THELP.TEXT: CLS : tcnt = 0: tpos = 0: sss = 0
|
||
GOTO THELP.MAIN
|
||
|
||
THELP.SOFT:
|
||
a = 16024 + (tpos) * 80
|
||
OUT &H3D4, 12: OUT &H3D5, INT(a / 256)
|
||
OUT &H3D4, 13: OUT &H3D5, a AND 255
|
||
RETURN
|
||
|
||
THELP.SCROLL:
|
||
tpos = (tpos + 1) AND 3
|
||
IF tpos <> 2 OR sss > 0 THEN RETURN
|
||
LOCATE 24, 1: READ T$: PRINT T$: tcnt = tcnt + 1
|
||
IF T$ = "XXX" THEN sss = 1
|
||
IF SND = 1 THEN SOUND 600, .2
|
||
RETURN
|
||
|
||
THELP.TEXT:
|
||
DATA "- INCOMING MESSAGE -"
|
||
DATA ""
|
||
DATA " 16.Dec. 2011"
|
||
DATA ""
|
||
DATA "THE UNITED EARTH ADMINISTRATION"
|
||
DATA "- - - - - - - - - - - - - - - -"
|
||
DATA ""
|
||
DATA ""
|
||
DATA "ALIENS HAVE INVADED TO OUR GALAXY."
|
||
DATA "THEY BUILD BASES TO NEARBY STARS "
|
||
DATA "IN RANGE OF SEVERAL LIGHT YEARS."
|
||
DATA "BEFORE WE COULD START ANY COUNTER"
|
||
DATA "MEASURES TO PROTECT OURSELF,"
|
||
DATA "THEY NOTICED OUR TELEMITRY SIGNALS,"
|
||
DATA "SENT BETWEEN THE EARTH AND OUR"
|
||
DATA "SATELLITES "
|
||
DATA ""
|
||
DATA "THEY REACHED OUR SOLAY SYSTEM AND"
|
||
DATA "INSTANTLY OCCUPIED ONE PLANET"
|
||
DATA "AFTER ANOTHER, STARTING WITH PLUTO"
|
||
DATA "OVER TO NEPTUN, SATURN, JUPITER AND"
|
||
DATA "FINALLY THE EARTH MOON, WHERE THEY >>"
|
||
DATA "LOCATED THEIR GIANT NEXUS MOTHERSHIP"
|
||
DATA ""
|
||
DATA "WITH DESTROYING OUR SPACE STATION"
|
||
DATA "AND SEVERAL ORBIT SHUTTLES, COSTING"
|
||
DATA "OVER 10.000 HUMAN LIFES, THEY<45>VE"
|
||
DATA "DEMONSTRATED THEIR EXTREMELY AGRESSIVE
|
||
DATA "INTENTIONS"
|
||
DATA ""
|
||
DATA "ITS ASSUMED FOR CLEAR THAT THE"
|
||
DATA "MOTHERSHIP PREPARES FOR THE FINAL"
|
||
DATA "ATTACK ON THE EARTH"
|
||
DATA "AND IF THIS HAPPENS MANKIND CAN KISS"
|
||
DATA "THE DAY<41>S GOODBYE, THATS FOR SURE"
|
||
DATA ""
|
||
DATA "GOD, WE NEED SOMEONE WHO BLOWS THESE"
|
||
DATA "BASTARDS TO PIECES !"
|
||
DATA "WE NEED TO DESTROY ALL THEIR HOMEBASES"
|
||
DATA "TO BREAK UP THEIR SUPPLY LINE,"
|
||
DATA "STARTING AT THE VEGA CONSTELLATION"
|
||
DATA "37 LIGHTYEARS AWAY"
|
||
DATA ""
|
||
DATA ">> So, fine, but what has all this"
|
||
DATA "to do with me ? << YOU ASK
|
||
DATA ""
|
||
DATA "CAUSE ALL OUR ASTRONAUTS HAVE SUDDENLY"
|
||
DATA "GONE ON VACATION 3 DAYS AGO,"
|
||
DATA "WE ENGAGED YOU. YOU<4F>RE OUR LAST HOPE !"
|
||
DATA ""
|
||
DATA "ALTHOUGH YOURE NO ASTRONAUT, NOT EVEN
|
||
DATA "A PILOT, THAT DOESN<53>T REALLY MATTER."
|
||
DATA ""
|
||
DATA "WE<57>VE SIMPLIFIED THE SHIP<49>S CONTROLS SO"
|
||
DATA "THAT EVEN AN AVERAGE CLEVER SPACE-COW"
|
||
DATA "CAN FLY IT"
|
||
DATA "LOOK, ITS REALLY EASY:"
|
||
DATA "","",""
|
||
DATA "- - - - - - - - - - - - - - - - - - -"
|
||
DATA "Lunar Module Control Keys"
|
||
DATA "","",""
|
||
DATA "Arrow Left / Num 4 = Move Left "
|
||
DATA "Arrow Left / Num 6 = Move Right"
|
||
DATA "Left Strg = Fire / Thrust"
|
||
DATA "S = Sound On/Off"
|
||
DATA "P = Pause"
|
||
DATA "
|
||
DATA "Hint:"
|
||
DATA "Use the Num-Keys for better control"
|
||
DATA "","",""
|
||
DATA "Bonus Ship given every 20000 Pts"
|
||
DATA "Successful Docking increases Firepower"
|
||
DATA "Hitpoints increase every Stage"
|
||
DATA ""
|
||
DATA "- - - - - - - - - - - - - - - - - - -"
|
||
DATA "","","",""
|
||
DATA "YOU ARE SUPPLIED WITH 3 SEPERATE LUNAR"
|
||
DATA "MODULES, OUTFITTET WITH A STAR-DRIVE"
|
||
DATA "AND HIGH-VOLTAGE PLASMA LAUNCHERS"
|
||
DATA ""
|
||
DATA "THE MODULES CAN BE FLOWN SEPERATLY OR"
|
||
DATA "CONNECTED, WHICH GIVES AN EXTRA
|
||
DATA "FIRE-POWER."
|
||
DATA "HOWEVER, TO SAVE MODULES, THEY ARE"
|
||
DATA "DISCONNECTED AUTOMATICALLY WHEN POSSIBLE"
|
||
DATA "OR WHEN ONE OF THEM GETS DESTROYED."
|
||
DATA ""
|
||
DATA "IF THIS HAPPENS, YOU SHOULD BE EJECTED"
|
||
DATA "AND WHEN YOU<EFBFBD>VE BEEN EJECTED, YOU
|
||
DATA "SHOULD ENTER THE NEXT INTACT SECTION"
|
||
DATA "AUTOMATICALLY."
|
||
DATA ""
|
||
DATA "- Why SHOULD ?
|
||
DATA ""
|
||
DATA "THE SYSTEM<45>S NOT PERFECT YET, CAUSE"
|
||
DATA "THE SHIP<49>S COMPUTER CRASHES FROM"
|
||
DATA "TIME TO TIME. BUT DON<4F>T PANIC,"
|
||
DATA "OUR ENGINEERS WILL FIX THAT BY SENDING"
|
||
DATA "YOU UPDATE VERSIONS OF THE SHIP<49>S"
|
||
DATA "COMPUTER<45>S OPERATING SYSTEM"
|
||
DATA "(Windows 2011 v4.1.0.2.1-beta-beta)"
|
||
DATA ""
|
||
DATA ""
|
||
DATA "THE EARTH BASE WILL TRY TO SUPPLY YOU"
|
||
DATA "CONSTANTLY WITH NEW MODULES"
|
||
DATA ""
|
||
DATA "BUT PLEASE HANDLE WITH CARE,"
|
||
DATA "WE CAN<41>T BAKE THEM LIKE BREADS"
|
||
DATA ""
|
||
DATA "GOOD LUCK!"
|
||
DATA "","","","",""
|
||
DATA "END OF MESSAGE."
|
||
DATA "","","","","","","","","","","",""
|
||
DATA "GAME INFO"
|
||
DATA ""
|
||
DATA "This programm was intended as a tutorial"
|
||
DATA "for beginners who want to learn"
|
||
DATA "programming in Qbasic, demonstrating"
|
||
DATA "some of its capabillities for making"
|
||
DATA "sound and graphics."
|
||
DATA "It uses PLAY and SOUND for music and"
|
||
DATA "most of the Graphic functions,"
|
||
DATA "exspecially the DRAW Command for Sprites"
|
||
DATA "(which lets you rotate and scale)."
|
||
DATA "Even if some of the letters look like"
|
||
DATA "vectors, but they are all DRAW-Sprites"
|
||
DATA ""
|
||
DATA "The inspiration and ideas i lend
|
||
DATA "(took, stole) from following games:"
|
||
DATA "Mooncresta arcade game (1983)"
|
||
DATA "Galaga 88 arcade"
|
||
DATA "Space Pilot I-II (C64)"
|
||
DATA "(They belong to my all-time favorite
|
||
DATA "shoot-em-ups)"
|
||
DATA ""
|
||
DATA "In the beginning i just wanted to make"
|
||
DATA "a simple shooter (what it still is) but"
|
||
DATA "then those old shooting games came to"
|
||
DATA "mind, exspecially Mooncresta (obviously"
|
||
DATA "you can see where i got the title),"
|
||
DATA "which i played as a kid totally"
|
||
DATA "fascinated me."
|
||
DATA "Those games had great graphics and
|
||
DATA "sound (for this time) and where FUN"
|
||
DATA "to play."
|
||
DATA "So i also wanted to put in something of"
|
||
DATA "these games, and as the programm grew"
|
||
DATA "bigger and bigger, i decided to make a"
|
||
DATA "complete game of it, and here<72>s whats"
|
||
DATA "the result.
|
||
DATA "(hope you like this piece of <20>crap<61>)"
|
||
DATA "",""
|
||
DATA "Mooncr.99 made by Daniel Kupfer
|
||
DATA "in Nov.1999"
|
||
DATA "Mail me if U like"
|
||
DATA "EMail dk1000000@aol.com"
|
||
DATA " or dku1000000@cs.com"
|
||
DATA "","","",""
|
||
DATA "Machine Requirements:"
|
||
DATA "",""
|
||
DATA "Qbasic: Pentium 200"
|
||
DATA "Compiled: 486-66 / Pentium 66"
|
||
DATA ""
|
||
DATA "As its Qbasic you need decent computer"
|
||
DATA "power to run at full speed (35 frames)"
|
||
DATA "It works just fine on my P-II 233"
|
||
DATA "I<>ve never tried to compile this"
|
||
DATA "with Quick Basic"
|
||
DATA "<22>cause i don<6F>t own Quick Basic, but if"
|
||
DATA "it works, i guess its gonna be 5 times"
|
||
DATA "faster or so (however it never runs"
|
||
DATA "more than 35 frames)"
|
||
DATA "",""
|
||
DATA "Enjoy !"
|
||
DATA "If you liked it, ask for upcoming"
|
||
DATA "mooncr.2000"
|
||
DATA ""
|
||
DATA "SEE YA!"
|
||
DATA "","",""
|
||
DATA "PRESS ESC"
|
||
DATA "XXX"
|
||
|