mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-01 15:10:15 +00:00
2181 lines
66 KiB
QBasic
2181 lines
66 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"
|
||
|