'===========================================================================
' Subject: CHOPPER COMMANDO                   Date: 10-11-98 (14:00)       
'  Author: Josh Ferguson                      Code: QB, QBasic, PDS        
'  Origin: qbasic.com                       Packet: DEMOS.ABC
'===========================================================================
DECLARE SUB bomb (thrust!(), bx!(), by!(), new!, current!, posx!, posy!, t!, obx!(), oby!(), thrust2!(), t2!, d!, bd!())
DECLARE SUB databaseprocessing (inputshort!, inputlong!, etype!(), ex!(), ey!())
DECLARE SUB buildingseg (posx!, posy!)
DECLARE SUB levl (lev, ex(), ey(), edx(), en, etype(), posx, oldx)
DECLARE SUB levr (lev!, ex!(), ey!(), edx!(), en!, etype!(), posx!, oldx!)
DECLARE SUB title ()
DECLARE SUB enemy (posx!, posy!, ex!(), ey!(), ed!(), oldx!, oldy!, en!, el(), edy!(), da, etype())
DECLARE SUB blowup (pox!, poy!)
DECLARE SUB wasoncenukked (pox!, poy!, f!)
DECLARE SUB egect (px!, py!, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype())
DECLARE SUB level (lev!, ex!(), ey!(), edx!(), en!, etype())
DECLARE SUB blowitup (pox!, poy!, spdy!, spdx!, auto, da)
DECLARE SUB abase (px!, py!)
DECLARE SUB imnukingyouhahahaha (posx!, posy!, speed!)
DECLARE SUB iamshootingyouwhitamissle (posx!, posy!, d!, size, speed)
SCREEN 1: CLS : COLOR 0, 2
hs = 1
power = 10
DIM etype(100)
DIM ex(100)
DIM ey(100)
DIM edx(100)
DIM edy(100)
DIM el(100)
DIM ed(1)
DIM bx(100)
DIM by(100)
DIM thrust(100)
DIM obx(100)
DIM oby(100)
DIM thrust2(100)
DIM bd(100)
title
' Drawing Animation for Chopper
PSET (4, 4), 3
PSET (4, 5), 3
PSET (5, 5), 3
PSET (6, 5), 3
PSET (7, 5), 3
PSET (7, 4), 3
PSET (8, 5), 3
PSET (9, 6), 3
PSET (10, 6), 3
PSET (11, 6), 3
PSET (11, 5), 3
PSET (12, 5), 3
PSET (11, 4), 3
PSET (10, 4), 3
PSET (9, 3), 3
PSET (8, 3), 3
PSET (7, 3), 3
PSET (6, 4), 3
PSET (4, 9), 3
PSET (4, 10), 3
PSET (5, 10), 3
PSET (6, 10), 3
PSET (7, 10), 3
PSET (8, 10), 3
PSET (9, 11), 3
PSET (10, 11), 3
PSET (11, 11), 3
PSET (12, 10), 3
PSET (11, 10), 3
PSET (11, 9), 3
PSET (10, 9), 3
PSET (9, 8), 3
PSET (8, 8), 3
PSET (7, 8), 3
PSET (7, 9), 3
PSET (6, 9), 3
PSET (4, 17), 3
PSET (5, 17), 3
PSET (5, 16), 3
PSET (6, 16), 3
PSET (7, 15), 3
PSET (8, 15), 3
PSET (9, 15), 3
PSET (10, 16), 3
PSET (9, 17), 3
PSET (10, 17), 3
PSET (11, 17), 3
PSET (12, 17), 3
PSET (8, 18), 3
PSET (7, 18), 3
PSET (6, 18), 3
PSET (12, 16), 3
PSET (9, 16), 3
PSET (4, 23), 3
PSET (5, 23), 3
PSET (5, 22), 3
PSET (6, 22), 3
PSET (7, 21), 3
PSET (8, 21), 3
PSET (9, 21), 3
PSET (9, 22), 3
PSET (10, 22), 3
PSET (9, 23), 3
PSET (10, 23), 3
PSET (11, 23), 3
PSET (12, 23), 3
PSET (12, 22), 3
PSET (8, 24), 3
PSET (7, 24), 3
PSET (6, 24), 3
PSET (9, 20), 3
PSET (8, 20), 3
PSET (7, 20), 3
PSET (6, 20), 3
PSET (5, 20), 3
PSET (4, 20), 3
PSET (7, 14), 3
PSET (8, 14), 3
PSET (9, 14), 3
PSET (10, 14), 3
PSET (11, 14), 3
PSET (12, 14), 3
PSET (9, 7), 3
PSET (8, 7), 3
PSET (7, 7), 3
PSET (6, 7), 3
PSET (5, 7), 3
PSET (4, 7), 3
PSET (7, 2), 3
PSET (8, 2), 3
PSET (9, 2), 3
PSET (10, 2), 3
PSET (11, 2), 3
PSET (12, 2), 3
lev = 1
'making array for chopper
DIM chop1a(5)
DIM chop1b(5)
DIM chop2a(5)
DIM chop2b(5)
'storing the chopper in memory
GET (3, 2)-(13, 6), chop1a
GET (3, 7)-(13, 12), chop1b
GET (3, 14)-(13, 19), chop2a
GET (3, 20)-(13, 25), chop2b
'drawing the man
PSET (7, 96), 3
PSET (7, 97), 3
PSET (6, 97), 3
PSET (8, 97), 3
PSET (7, 98), 3
PSET (6, 99), 3
PSET (8, 99), 3
PSET (17, 96), 3
PSET (17, 97), 3
PSET (18, 97), 3
PSET (16, 97), 3
PSET (17, 98), 3
PSET (17, 99), 3
'making an array for the man
DIM mana(1)
DIM manb(1)
'storing the man in memory
GET (6, 96)-(8, 99), mana
GET (16, 96)-(18, 99), manb

CLS
level 1, ex!(), ey!(), edx!(), en!, etype()
speed = 0: size = 20
d = 1
posx = 230: posy = 111: cs = 0: cst = .5: da = 0
begina:
IF posx < 0 THEN
 olev = lev
 IF lev = 2 THEN level 1, ex!(), ey!(), edx!(), en!, etype(): posx = 280: oldx = 280: lev = 1
 IF lev = 3 THEN level 2, ex!(), ey!(), edx!(), en!, etype(): posx = 280: lev = 2: oldx = 280
 REM CALL levr(lev, ex(), ey(), edx(), en, etype(), posx, oldx)
 IF olev = lev THEN
  posx = oldx
  ELSE current = 0
 END IF
END IF
IF posx > 290 THEN
 olev = lev
 REM CALL levr(lev, ex(), ey(), edx(), en, etype(), posx, oldx)
 IF lev = 2 THEN level 3, ex!(), ey!(), edx!(), en!, etype(): posx = 1: lev = 3: oldx = 1
 IF lev = 1 THEN level 2, ex!(), ey!(), edx!(), en!, etype(): posx = 1: lev = 2: oldx = 1
 inputshort = 1: inputlong = 1
 CALL databaseprocessing(inputshort, inputlong, etype(), ex(), ey())
 IF olev = lev THEN
  posx = oldx
  ELSE current = 0
 END IF

END IF
IF posy < 9 THEN posy = oldy: spdy = 0
IF posy > 180 THEN posy = oldy
IF d = 1 THEN PUT (posx, posy), chop1a
IF d = 2 THEN PUT (posx, posy), chop2a
od = d: oldx = posx: oldy = posy
a$ = INKEY$
REM IF a$ = "" THEN a$ = b$
b$ = a$
SELECT CASE a$
CASE CHR$(0) + "H": spdy = spdy - hs
CASE CHR$(0) + "P": spdy = spdy + hs
CASE CHR$(0) + "K": spdx = spdx - hs: d = 2
CASE CHR$(0) + "M": spdx = spdx + hs: d = 1
CASE "s": LOCATE 1, 1: INPUT speed: b$ = ""
CASE "S": LOCATE 1, 1: INPUT speed: b$ = ""
CASE "m": CALL iamshootingyouwhitamissle(posx, posy, d, size, speed): b$ = " "
CASE "M": CALL iamshootingyouwhitamissle(posx, posy, d, size, speed): b$ = " "
CASE "n": CALL imnukingyouhahahaha(posx, posy, speed): b$ = " "
CASE "N": CALL imnukingyouhahahaha(posx, posy, speed): b$ = " "
CASE "e": egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
CASE "E": egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
CASE "a": IF auto = 1 THEN LOCATE 1, 1: PRINT "Auto Egect Off": auto = 0 ELSE LOCATE 1, 1: PRINT "Auto Egect On ": auto = 1
CASE "A": IF auto = 1 THEN LOCATE 1, 1: PRINT "Auto Egect Off": auto = 0 ELSE LOCATE 1, 1: PRINT "Auto Egect On ": auto = 1
CASE "B": bomb thrust(), bx(), by(), 1, current, posx, posy + 6, 0, obx(), oby(), thrust2(), 0, 0, bd(): posx = oldx: posy = oldy
CASE "b": bomb thrust(), bx(), by(), 1, current, posx, posy + 6, 0, obx(), oby(), thrust2(), 0, 0, bd(): posx = oldx: posy = oldy
CASE " ": bomb thrust(), bx(), by(), 1, current, posx, posy + 6, 0, obx(), oby(), thrust2(), power, d, bd(): posx = oldx: posy = oldy
END SELECT
CALL bomb(thrust(), bx(), by(), 0, current, posx, posy + 6, 0, obx(), oby(), thrust2(), 0, d, bd())
IF POINT(posx, posy) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF POINT(posx + 10, posy) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF POINT(posx, posy + 5) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF POINT(posx + 10, posy + 5) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF da > 0 THEN spdy = spdy + da / 10
posy = posy + spdy
posx = posx + spdx
RANDOMIZE TIMER

CALL enemy(posx!, posy!, ex!(), ey!(), ed!(), oldx!, oldy!, en!, el(), edy!(), da, etype())
FOR a = 1 TO speed: NEXT a: IF cs > 30 THEN SOUND cs, cst
IF od = 1 THEN PUT (oldx, oldy), chop1a
IF od = 2 THEN PUT (oldx, oldy), chop2a
IF posx < 0 THEN
 olev = lev
 IF lev = 2 THEN level 1, ex!(), ey!(), edx!(), en!, etype(): posx = 280: oldx = 280: lev = 1
 IF lev = 3 THEN level 2, ex!(), ey!(), edx!(), en!, etype(): posx = 280: lev = 2: oldx = 280
 REM CALL levl(lev, ex(), ey(), edx(), en, etype(), posx, oldx)
 IF olev = lev THEN
  posx = oldx
  ELSE current = 0
 END IF
END IF
IF posx > 290 THEN
 olev = lev
 REM CALL levr(lev, ex(), ey(), edx(), en, etype(), posx, oldx)
 IF lev = 2 THEN level 3, ex!(), ey!(), edx!(), en!, etype(): posx = 1: lev = 3: oldx = 1
 IF lev = 1 THEN level 2, ex!(), ey!(), edx!(), en!, etype(): posx = 1: lev = 2: oldx = 1
 IF olev = lev THEN posx = oldx
 IF olev = lev THEN
  posx = oldx
  ELSE current = 0
 END IF
END IF
IF posy < 9 THEN posy = oldy: spdy = 0
IF posy > 180 THEN posy = oldy
IF d = 1 THEN PUT (posx, posy), chop1b
IF d = 2 THEN PUT (posx, posy), chop2b
od = d: oldx = posx: oldy = posy
REM LOCATE 1, 1: PRINT "Speed="; USING "###"; spdx + spdy; : PRINT " Miles per Hour"
a$ = INKEY$
REM  IF a$ = "" THEN a$ = b$
b$ = a$
SELECT CASE a$
CASE CHR$(0) + "H": spdy = spdy - hs
CASE CHR$(0) + "P": spdy = spdy + hs
CASE CHR$(0) + "K": spdx = spdx - hs: d = 2
CASE CHR$(0) + "M": spdx = spdx + hs: d = 1
CASE "m": CALL iamshootingyouwhitamissle(posx, posy, d, size, speed): b$ = " "
CASE "M": CALL iamshootingyouwhitamissle(posx, posy, d, size, speed): b$ = " "
CASE "n": CALL imnukingyouhahahaha(posx, posy, speed): b$ = " "
CASE "N": CALL imnukingyouhahahaha(posx, posy, speed): b$ = " "
CASE "e": egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
CASE "E": egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
CASE "a": IF auto = 1 THEN LOCATE 1, 1: PRINT "Auto Egect Off": auto = 0 ELSE LOCATE 1, 1: PRINT "Auto Egect On ": auto = 1
CASE "A": IF auto = 1 THEN LOCATE 1, 1: PRINT "Auto Egect Off": auto = 0 ELSE LOCATE 1, 1: PRINT "Auto Egect On ": auto = 1
CASE "B": bomb thrust(), bx(), by(), 1, current, posx, posy + 6, 0, obx(), oby(), thrust2(), 0, 0, bd(): posx = oldx: posy = oldy
CASE "b": bomb thrust(), bx(), by(), 1, current, posx, posy + 6, 0, obx(), oby(), thrust2(), 0, 0, bd(): posx = oldx: posy = oldy
CASE " ": bomb thrust(), bx(), by(), 1, current, posx, posy + 6, 0, obx(), oby(), thrust2(), power, d, bd(): posx = oldx: posy = oldy
END SELECT
CALL bomb(thrust(), bx(), by(), 0, current, posx, posy + 6, 0, obx(), oby(), thrust2(), 0, d, bd())
IF POINT(posx, posy) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF POINT(posx + 10, posy) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF POINT(posx, posy + 5) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF POINT(posx + 10, posy + 5) = 0 THEN v = v ELSE blowitup posx, posy, spdx, spdy, auto, da: IF auto = 1 AND da = 3 THEN egect posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype(): spdx = 0: spdy = 0: GOTO begina
IF da > 0 THEN spdy = spdy + da / 10
posy = posy + spdy
posx = posx + spdx
c$ = a$
CALL enemy(posx!, posy!, ex!(), ey!(), edx!(), oldx!, oldy!, en!, el(), edy!(), da, etype())
SOUND 150, .2
FOR a = 1 TO speed: NEXT a: IF cs > 30 THEN SOUND cs, cst
LOCATE 22, 20: PRINT "Chopper:";
IF da = 0 THEN PRINT "Perfect"
IF da = 1 THEN PRINT "Bruhion"
IF da = 2 THEN PRINT "Junk   "
IF od = 1 THEN PUT (oldx, oldy), chop1b
IF od = 2 THEN PUT (oldx, oldy), chop2b
GOTO begina

SUB abase (px, py)
px = px - 21
py = py - 56
PSET (26 + px, 56 + py), 3
LINE (26 + px, 56 + py)-(39 + px, 56 + py), 3
LINE (39 + px, 56 + py)-(43 + px, 60 + py), 3
LINE (43 + px, 60 + py)-(43 + px, 66 + py), 3
LINE (21 + px, 61 + py)-(26 + px, 56 + py), 3
LINE (22 + px, 60 + py)-(22 + px, 66 + py), 3
PSET (21 + px, 61 + py), 0
LINE (22 + px, 66 + py)-(30 + px, 66 + py), 0
PSET (22 + px, 66 + py), 3
LINE (22 + px, 66 + py)-(26 + px, 70 + py), 3
LINE (39 + px, 70 + py)-(43 + px, 66 + py), 3
LINE (26 + px, 71 + py)-(26 + px, 88 + py), 3
LINE (39 + px, 71 + py)-(39 + px, 88 + py), 3
LINE (26 + px, 88 + py)-(20 + px, 90 + py), 3
PSET (39 + px, 88 + py), 3
LINE (39 + px, 87 + py)-(46 + px, 90 + py), 3
LINE (46 + px, 90 + py)-(20 + px, 90 + py), 3
PAINT (25 + px, 89 + py), 3, 3
LINE (23 + px, 60 + py)-(28 + px, 65 + py), 0, BF
LINE (30 + px, 60 + py)-(35 + px, 65 + py), 0, BF
LINE (37 + px, 60 + py)-(42 + px, 65 + py), 0, BF
END SUB

SUB blowitup (pox, poy, spdx, spdy, auto, da)
IF spdy = 1 AND POINT(pox + 10, poy + 5) = 2 THEN spdy = 0: da = 0: GOTO aaa
IF spdy = 0 AND POINT(pox + 10, poy + 5) = 2 THEN da = 0: GOTO aaa
IF spdy = -1 AND POINT(pox + 10, poy + 5) = 2 THEN da = 0: GOTO aaa
IF da = 0 THEN
 da = 1
 spdy = -3
 GOTO aaa:
END IF
IF da = 1 THEN
 da = 2
 spdy = -4
 GOTO aaa:
END IF
IF da = 2 THEN
 da = 3
 spdy = -5
 GOTO aaa:
END IF
IF auto = 1 THEN GOTO aba:
aba:
h% = -1.56
IF 2 * (spdy + spdx) + 10 < 0 THEN spdy = 3: spdx = 3
FOR a% = 1 TO 2 * (spdy + spdx) + 10
CIRCLE (pox + f%, poy + 5), a%, 2, , , h%
CIRCLE (pox + f%, poy + 5), a% + 1, 1, , , h%
SOUND a% + 37, .1
NEXT a%
FOR a% = 2 * (spdy + spdx) + 10 TO 1 STEP -1
CIRCLE (pox + f%, poy + 5), a%, 0, , , h%
SOUND a% + 37, .1
NEXT a%
IF auto = 1 THEN GOTO aaa:

END
aaa:
END SUB

SUB blowup (pox, poy)
co = POINT(pox, poy)
k = poy
x = 0
j = k
aqw:
x = x + 1
j = j + 1
IF POINT(pox, j) = co THEN v = v ELSE GOTO aqw2
GOTO aqw
aqw2:
j = j / 2
k = j
FOR a% = 1 TO x * 2
CIRCLE (pox, poy), a%, 2
SOUND x + 37, .1
NEXT a%
FOR a% = x * 2 TO 1 STEP -1
CIRCLE (pox, poy), a%, 0
SOUND x + 37, .1
NEXT a%
LOCATE 1, 1: PRINT "Good Base Destroyed"
END SUB

SUB bomb (thrust(), bx(), by(), new, current, posx, posy, t, obx(), oby(), thrust2(), t2, d, bd())

IF new = 1 THEN
IF current < 1 THEN current = 1
 bx(current) = posx
 by(current) = posy
 thrust(current) = t
 thrust2(current) = t2
 bd(current) = d
 current = current + 1
 GOTO start
END IF


shotsimstart:
FOR h = 1 TO current - 1
thrust(h) = thrust(h) - RND
thrust2(h) = thrust2(h) - RND

by(h) = by(h) - thrust(h)

IF bd(h) = 1 THEN IF thrust2(h) > 0 THEN bx(h) = bx(h) + thrust2(h)
IF bd(h) = 2 THEN IF thrust2(h) > 0 THEN bx(h) = bx(h) - thrust2(h)

PSET (obx(h), oby(h)), 0
IF POINT(bx(h), by(h)) = 0 THEN v = v ELSE GOSUB explosion: GOTO start
PSET (bx(h), by(h)), 2
obx(h) = bx(h): oby(h) = by(h)

IF by(h) > 200 THEN GOTO start

GOTO jh
explosion:

FOR a = 1 TO 10
CIRCLE (bx(h), by(h)), a, 2
CIRCLE (bx(h) + 1, by(h) + 1), a, 3
SOUND 37 + a * 5, .1
NEXT a

FOR a = 1 TO 10
CIRCLE (bx(h), by(h)), a, 0
CIRCLE (bx(h) + 1, by(h) + 1), a, 0
NEXT a
PSET (bx(h), by(h)), 0

FOR v = 1 TO current - 1
 bx(h) = bx(current - 1)
 by(h) = by(current - 1)
 obx(h) = obx(current - 1)
 oby(h) = oby(current - 1)
 thrust2(h) = thrust2(current - 1)
 thrust(h) = thrust(current - 1)
 bd(h) = bd(current - 1)
NEXT v
current = current - 1

RETURN
jh:
NEXT h
start:
END SUB

SUB buildingseg (posx, posy)
LINE (11 - 11 + posx, 34 - 34 + posy)-(28 - 11 + posx, 34 - 34 + posy), 3
LINE (11 - 11 + posx, 35 - 34 + posy)-(28 - 11 + posx, 35 - 34 + posy), 3
LINE (11 - 11 + posx, 36 - 34 + posy)-(28 - 11 + posx, 36 - 34 + posy), 3
LINE (11 - 11 + posx, 37 - 34 + posy)-(13 - 11 + posx, 37 - 34 + posy), 3
PSET (14 - 11 + posx, 37 - 34 + posy), 2
PSET (15 - 11 + posx, 37 - 34 + posy), 2
PSET (16 - 11 + posx, 37 - 34 + posy), 2
PSET (17 - 11 + posx, 37 - 34 + posy), 2
PSET (18 - 11 + posx, 37 - 34 + posy), 3
PSET (19 - 11 + posx, 37 - 34 + posy), 3
PSET (20 - 11 + posx, 37 - 34 + posy), 3
PSET (21 - 11 + posx, 37 - 34 + posy), 2
PSET (22 - 11 + posx, 37 - 34 + posy), 2
PSET (23 - 11 + posx, 37 - 34 + posy), 2
PSET (24 - 11 + posx, 37 - 34 + posy), 2
PSET (25 - 11 + posx, 37 - 34 + posy), 3
PSET (26 - 11 + posx, 37 - 34 + posy), 3
PSET (27 - 11 + posx, 37 - 34 + posy), 3
PSET (28 - 11 + posx, 36 - 34 + posy), 0
PSET (28 - 11 + posx, 35 - 34 + posy), 0
PSET (28 - 11 + posx, 34 - 34 + posy), 0
PSET (14 - 11 + posx, 38 - 34 + posy), 2
PSET (15 - 11 + posx, 38 - 34 + posy), 2
PSET (16 - 11 + posx, 38 - 34 + posy), 2
PSET (17 - 11 + posx, 38 - 34 + posy), 2
PSET (22 - 11 + posx, 38 - 34 + posy), 2
PSET (23 - 11 + posx, 38 - 34 + posy), 2
PSET (24 - 11 + posx, 38 - 34 + posy), 2
PSET (21 - 11 + posx, 38 - 34 + posy), 2
PSET (14 - 11 + posx, 39 - 34 + posy), 2
PSET (15 - 11 + posx, 39 - 34 + posy), 2
PSET (21 - 11 + posx, 39 - 34 + posy), 2
PSET (22 - 11 + posx, 39 - 34 + posy), 2
PSET (23 - 11 + posx, 39 - 34 + posy), 2
PSET (24 - 11 + posx, 39 - 34 + posy), 2
PSET (21 - 11 + posx, 40 - 34 + posy), 2
PSET (22 - 11 + posx, 40 - 34 + posy), 2
PSET (23 - 11 + posx, 40 - 34 + posy), 2
PSET (24 - 11 + posx, 40 - 34 + posy), 2
PSET (14 - 11 + posx, 40 - 34 + posy), 2
PSET (15 - 11 + posx, 40 - 34 + posy), 2
PSET (16 - 11 + posx, 40 - 34 + posy), 2
PSET (17 - 11 + posx, 40 - 34 + posy), 2
PSET (17 - 11 + posx, 39 - 34 + posy), 2
PSET (16 - 11 + posx, 39 - 34 + posy), 2
PSET (11 - 11 + posx, 38 - 34 + posy), 3
PSET (12 - 11 + posx, 38 - 34 + posy), 3
PSET (13 - 11 + posx, 38 - 34 + posy), 3
PSET (11 - 11 + posx, 39 - 34 + posy), 3
PSET (12 - 11 + posx, 39 - 34 + posy), 3
PSET (13 - 11 + posx, 39 - 34 + posy), 3
PSET (11 - 11 + posx, 40 - 34 + posy), 3
PSET (12 - 11 + posx, 40 - 34 + posy), 3
PSET (13 - 11 + posx, 40 - 34 + posy), 3
PSET (18 - 11 + posx, 40 - 34 + posy), 3
PSET (19 - 11 + posx, 40 - 34 + posy), 3
PSET (19 - 11 + posx, 39 - 34 + posy), 3
PSET (18 - 11 + posx, 39 - 34 + posy), 3
PSET (18 - 11 + posx, 38 - 34 + posy), 3
PSET (19 - 11 + posx, 38 - 34 + posy), 3
PSET (20 - 11 + posx, 40 - 34 + posy), 3
PSET (20 - 11 + posx, 39 - 34 + posy), 3
PSET (20 - 11 + posx, 38 - 34 + posy), 3
PSET (25 - 11 + posx, 38 - 34 + posy), 3
PSET (26 - 11 + posx, 38 - 34 + posy), 3
PSET (27 - 11 + posx, 38 - 34 + posy), 3
PSET (25 - 11 + posx, 39 - 34 + posy), 3
PSET (26 - 11 + posx, 39 - 34 + posy), 3
PSET (27 - 11 + posx, 39 - 34 + posy), 3
PSET (25 - 11 + posx, 40 - 34 + posy), 3
PSET (26 - 11 + posx, 40 - 34 + posy), 3
PSET (27 - 11 + posx, 40 - 34 + posy), 3
LINE (11 - 11 + posx, 41 - 34 + posy)-(27 - 11 + posx, 41 - 34 + posy), 3
LINE (11 - 11 + posx, 42 - 34 + posy)-(27 - 11 + posx, 42 - 34 + posy), 3
LINE (11 - 11 + posx, 43 - 34 + posy)-(27 - 11 + posx, 43 - 34 + posy), 3

END SUB

SUB databaseprocessing (inputshort, inputlong, etype(), ex(), ey())
GOTO qho
CLOSE
OPEN "levchop.dat" FOR RANDOM AS #1

REM ********** Section I - Looking it up in the short reference ************
REM GET #1, inputshort, reference
REM IF inputshort = 100 THEN LOCATE 1, 1: PRINT "Sorry. No more info in the Game Map.": GOTO qho
 reference = inputshort
REM ********** Section II - Looking it up in the long reference ************
GET #1, reference * 100 + 100 + inputlong, location

REM ********** Section III - Retrieving Information ************************
bogalish:
GET #1, location, info1$
IF info1$ = "Û" THEN GOTO qho
location = location + 1
IF info1$ = CHR$(1) THEN co = 1: GOTO doline
IF info1$ = CHR$(2) THEN co = 2: GOTO doline
IF info1$ = CHR$(3) THEN co = 3: GOTO doline
IF info1$ = CHR$(4) THEN co = 0: GOTO dodot
IF info1$ = CHR$(5) THEN co = 1: GOTO dodot
IF info1$ = CHR$(6) THEN co = 2: GOTO dodot
IF info1$ = CHR$(7) THEN co = 3: GOTO dodot
IF info1$ = CHR$(8) THEN co = 0: GOTO docircle
IF info1$ = CHR$(9) THEN co = 1: GOTO docircle
IF info1$ = CHR$(10) THEN co = 2: GOTO docircle
IF info1$ = CHR$(11) THEN co = 3: GOTO docircle
REM IF info1$ = CHR$(15) THEN GOTO dobuildingseg
GOTO doenemy

REM ********** Makes a line on the Screen **********************************
doline:
GET #1, location, info2$: location = location + 1
GET #1, location, info3$: location = location + 1
GET #1, location, info4$: location = location + 1
GET #1, location, info5$: location = location + 1
GET #1, location, info6$: location = location + 1
GET #1, location, info7$: location = location + 1
x1 = ASC(info2$)
x1b = ASC(info3$)
y1 = ASC(info4$)
x1 = ASC(info5$)
x1b = ASC(info6$)
y2 = ASC(info7$)
LINE (x1 + x1b, y1)-(x2 + x2b, y2), co
GOTO bogalish

REM ********** Makes a dot on the Screen ***********************************
dodot:
GET #1, location, info2$: location = location + 1
GET #1, location, info3$: location = location + 1
GET #1, location, info4$: location = location + 1
x = ASC(info2$)
xb = ASC(info3$)
y = ASC(info4$)
PSET (x + xb, y), co
GOTO bogalish

REM ********** Makes a circle on the Screen ********************************
docircle:
GET #1, location, info2$: location = location + 1
GET #1, location, info3$: location = location + 1
GET #1, location, info4$: location = location + 1
GET #1, location, info5$: location = location + 1
x = ASC(info2$)
xb = ASC(info3$)
y = ASC(info4$)
siz = ASC(info5$)
CIRCLE (x + xb, y), co, siz
GOTO bogalish

REM ********** Tells the computer to make an enemy *************************
doenemy:
GET #1, location, info2$: location = location + 1
GET #1, location, info3$: location = location + 1
GET #1, location, info4$: location = location + 1
GET #1, location, info5$: location = location + 1
GET #1, location, info6$: location = location + 1
x = ASC(info2$)
xb = ASC(info3$)
y = ASC(info4$)
et = ASC(info5$)
en = ASC(info6$)
ex(en) = x + xb
ey(en) = y
etype(en) = et
GOTO bogalish

qho:
CLOSE
END SUB

SUB egect (posx, posy, mana(), manb(), speed, lev, da, ex!(), ey!(), edx!(), en!, etype())
FOR a = 1 TO 10
CIRCLE (posx, posy), a, 2: SOUND a * 37, .2
CIRCLE (posx, posy), a, 0
NEXT a
FOR a = 1 TO 10
CIRCLE (posx + 1, posy), a, 2: SOUND a * 37, .2
CIRCLE (posx + 1, posy), a, 0
NEXT a
d = 1
md = 1
loopstart:
IF posx < 0 THEN
 olev = lev
 IF lev = 2 THEN level 1, ex!(), ey!(), edx!(), en!, etype(): posx = 300: oldx = 280: lev = 1
 IF lev = 3 THEN level 2, ex!(), ey!(), edx!(), en!, etype(): posx = 300: lev = 2: oldx = 280
 REM CALL levl(lev, ex(), ey(), edx(), en, etype(), posx, oldx)
 IF olev = lev THEN posx = oldx
END IF
IF posx > 310 THEN
 olev = lev
 REM CALL levr(lev, ex(), ey(), edx(), en, etype(), posx, oldx)
 IF lev = 2 THEN level 3, ex!(), ey!(), edx!(), en!, etype(): posx = 1: lev = 3: oldx = 1
 IF lev = 1 THEN level 2, ex!(), ey!(), edx!(), en!, etype(): posx = 1: lev = 2: oldx = 1
 IF olev = lev THEN posx = oldx
END IF
IF posy < 9 THEN posy = oldy: spdy = 0
IF posy > 190 THEN posy = oldy: GOTO lk

IF d = 1 THEN PUT (posx, posy), mana
IF d = 2 THEN PUT (posx, posy), manb
od = d
oldx = posx: oldy = posy
a$ = INKEY$
IF POINT(posx, posy + 5) = 0 THEN GOTO asq
CALL enemy(posx!, posy!, ex!(), ey!(), ey!(), oldx!, oldy!, en!, ey(), ey!(), da, etype())
SELECT CASE a$
CASE CHR$(0) + "H": jump = 1
CASE CHR$(0) + "K": spdx = spdx - 4: md = 2
CASE CHR$(0) + "M": spdx = spdx + 4: md = 1
CASE "x": GOTO lk
CASE "X": GOTO lk
CASE "m": IF md = 2 THEN hg = 0: CALL iamshootingyouwhitamissle(posx + hg, posy - 5, md, 3, 0) ELSE hg = 3: CALL iamshootingyouwhitamissle(posx + hg, posy - 5, md, 3, 0)
CASE "M": IF md = 2 THEN hg = 0: CALL iamshootingyouwhitamissle(posx + hg, posy - 5, md, 3, 0) ELSE hg = 3: CALL iamshootingyouwhitamissle(posx + hg, posy - 5, md, 3, 0)
END SELECT
IF spdx < 0 THEN posx = posx - 1: IF d = 1 THEN d = 2 ELSE IF d = 2 THEN d = 1
IF spdx > 0 THEN posx = posx + 1: IF d = 1 THEN d = 2 ELSE IF d = 2 THEN d = 1

IF jump = 1 THEN posy = posy - 10
jump = 0
asq:
IF POINT(posx, posy + 5) = 1 THEN posy = posy - 1: IF d = 1 THEN d = 2 ELSE IF d = 2 THEN d = 1
IF POINT(posx, posy + 5) = 0 THEN posy = posy + 1: IF d = 1 THEN d = 2 ELSE IF d = 2 THEN d = 1
IF od = 1 THEN PUT (oldx, oldy), mana
IF od = 2 THEN PUT (oldx, oldy), manb
IF spdx < 0 THEN spdx = spdx + 1
IF spdx > 0 THEN spdx = spdx - 1
GOTO loopstart
END
lk:
IF d = 1 THEN PUT (oldx, oldy), mana ELSE PUT (oldx, oldy), manb
posy = posy - 20
da = 0
END SUB

SUB enemy (posx!, posy!, ex!(), ey!(), edx(), oldx!, oldy!, en!, el(), edy!(), da, etype())
FOR c = 1 TO en
IF etype(c) = 2 THEN GOTO enemy2
IF etype(c) = 3 THEN GOTO enemy3
ox = ex(c): oy = ey(c)
IF ex(c) < posx THEN ex(c) = ex(c) + 1
IF ex(c) > posx THEN ex(c) = ex(c) - 1
IF ey(c) < posy THEN ey(c) = ey(c) + 1
IF ey(c) > posy THEN ey(c) = ey(c) - 1
IF POINT(ex(c), ey(c)) = 0 THEN v = v ELSE ex(c) = ox: ey(c) = oy
PSET (ox, oy), 0
PSET (ex(c), ey(c)), 2
backintheloop:
NEXT c

GOTO eendnow

enemy2:
ox = ex(c): oy = ey(c)
IF ex(c) < posx THEN ex(c) = ex(c) + 1
IF ex(c) > posx THEN ex(c) = ex(c) - 1
IF POINT(ex(c), ey(c) + 1) = 0 THEN ey(c) = ey(c) + 1
IF POINT(ex(c), ey(c)) = 1 THEN ey(c) = ey(c) - 1

IF POINT(ex(c), ey(c)) = 0 THEN v = v ELSE GOTO brq
PSET (ox, oy), 0
PSET (ex(c), ey(c)), 2
brq:
GOTO backintheloop

enemy3:

ox = ex(c): oy = ey(c)
IF ex(c) < posx THEN ex(c) = ex(c) + 5
IF ex(c) > posx THEN ex(c) = ex(c) - 5
IF ey(c) < posy THEN ey(c) = ey(c) + 5
IF ey(c) > posy THEN ey(c) = ey(c) - 5
IF POINT(ex(c), ey(c)) = 0 THEN v = v ELSE ex(c) = ox: ey(c) = oy
PSET (ox, oy), 0
PSET (ex(c), ey(c)), 2
CIRCLE (ox, oy), 10, 0
CIRCLE (ex(c), ey(c)), 10, 3
GOTO backintheloop

eendnow:
END SUB

SUB iamshootingyouwhitamissle (posx, posy, d, size, speed)
asa:
IF d = 2 THEN GOTO asa2
f% = 0
jkla:
f% = f% + 1
IF POINT(posx + f% + 1, posy + 5) = 0 THEN v% = posx + f% + 1 ELSE GOTO jklb
PSET (posx + f%, posy + 5), 1
GOTO jkla:
jklb:
FOR a% = posx + f% + 1 TO posx STEP -1
PSET (a%, posy + 5), 0
NEXT a%
h% = -1.56
IF POINT(posx + f% + 5, posy + 5) = 3 THEN blowup posx + f% + 5, posy + 5: GOTO al
FOR a% = 1 TO 10
CIRCLE (posx + f%, posy + 5), a%, 2, , , h%
CIRCLE (posx + f%, posy + 5), a% + 1, 1, , , h%
NEXT a%
FOR a% = 11 TO 1 STEP -1
CIRCLE (posx + f%, posy + 5), a%, 0, , , h%
NEXT a%
GOTO al
asa2:
f% = 0
jkla2:
f% = f% + 1
IF POINT(posx - f% - 1, posy + 5) = 0 THEN v% = posx - f% - 1 ELSE GOTO jklb2
PSET (posx - f%, posy + 5), 1
GOTO jkla2:
a% = 0
jklb2:
a% = 0
FOR a% = posx - f% - 1 TO posx
PSET (a%, posy + 5), 0
NEXT a%
h% = -1.56
FOR a% = 1 TO 10 STEP 2
CIRCLE (posx - f%, posy + 5), a%, 2, , , h%
CIRCLE (posx - f%, posy + 5), a% + 1, 1, , , h%
NEXT a%
FOR a% = 11 TO 1 STEP -1
CIRCLE (posx - f%, posy + 5), a%, 0, , , h%
NEXT a%
al:
END SUB

SUB imnukingyouhahahaha (posx, posy, speed)
jka:
IF POINT(posx, posy + 1 + f) = 0 THEN GOTO jkaaaaa
GOTO aj
jkaaaaa:
PSET (posx, posy + f), 1
PSET (posx, posy + 1 + f), 1
PSET (posx, posy + f), 0
PSET (posx, posy + 1 + f), 0
f = f + 1
GOTO jka
aj:
FOR a = 1 TO 80 + x STEP 2
CIRCLE (posx, posy + f), a, 2: SOUND a * 37, .1
CIRCLE (posx, posy + f), a, 0
CIRCLE (posx + 1, posy + f + 1), a, 2: SOUND a * 37, .1
CIRCLE (posx + 1, posy + f + 1), a, 0
CIRCLE (posx + 2, posy + f + 1 + 1), a, 2: SOUND a * 37, .1
CIRCLE (posx + 2, posy + f + 1 + 1), a, 0
CIRCLE (posx - 1, posy + f + 1 + 1 + 1), a, 2: SOUND a * 37, .1
CIRCLE (posx - 1, posy + f + 1 + 1 + 1), a, 0
CIRCLE (posx - 2, posy + f + 1 + 1 + 1 + 1), a, 2: SOUND a * 37, .1
CIRCLE (posx - 2, posy + f + 1 + 1 + 1 + 1), a, 0
                           
NEXT a
END SUB

SUB level (lev, ex!(), ey!(), edx!(), en!, etype())
SELECT CASE lev
CASE 1
SCREEN 1: CLS : COLOR 0, 2
LINE (0, 40)-(34, 135), 1
LINE (35, 135)-(56, 141), 1
LINE (56, 141)-(104, 141), 1
LINE (104, 141)-(121, 137), 1
LINE (122, 137)-(139, 99), 1
LINE (139, 99)-(165, 135), 1
LINE (160, 127)-(192, 98), 1
LINE (192, 98)-(211, 122), 1
LINE (211, 119)-(305, 117), 1
PSET (138, 100), 1
PSET (139, 100), 1
PSET (224, 116), 2
PSET (224, 117), 2
PSET (225, 117), 2
PSET (226, 116), 2
PSET (225, 116), 2
PSET (224, 115), 2
PSET (225, 115), 2
PSET (224, 114), 2
PSET (226, 117), 2
PSET (227, 117), 2
PSET (228, 117), 2
PSET (229, 117), 2
PSET (230, 117), 2
LINE (231, 117)-(256, 117), 2
LINE (227, 116)-(256, 116), 2
PSET (256, 115), 2
PSET (255, 115), 2
PSET (256, 114), 2
LINE (305, 117)-(320, 117), 1
PAINT (5, 190), 1
abase 68, 106
en = 0
CASE 2
SCREEN 1: CLS
LINE (0, 117)-(64, 123), 1
LINE (64, 123)-(104, 123), 1
LINE (105, 123)-(143, 75), 1
LINE (143, 75)-(163, 109), 1
LINE (163, 107)-(195, 58), 1
LINE (195, 58)-(216, 92), 1
LINE (216, 92)-(305, 57), 1
LINE (305, 57)-(320, 40), 1
buildingseg 80, 113
buildingseg 80, 103
buildingseg 80, 93
buildingseg 80, 83

buildingseg 63, 113
buildingseg 63, 103
buildingseg 63, 93
buildingseg 63, 83

PAINT (5, 190), 1
ex(1) = 64
ey(1) = 122
etype(1) = 1

ey(2) = 143
ex(2) = 74
etype(2) = 2

en = 2
CASE 3
SCREEN 1: CLS : COLOR 0, 2
LINE (0, 40)-(44, 64), 1
LINE (44, 64)-(63, 45), 1
LINE (63, 45)-(99, 93), 1
LINE (99, 93)-(99, 93), 1
LINE (99, 93)-(162, 115), 1
LINE (162, 115)-(340, 119), 1
PAINT (5, 95), 1, 1

ey(1) = 114
ex(1) = 162
etype(1) = 3

en = 1
END SELECT
END SUB

SUB title
SCREEN 1: CLS : COLOR 0, 2
LINE (77, 33)-(101, 33), 1
LINE (78, 32)-(100, 32), 1
LINE (76, 34)-(82, 34), 1
LINE (76, 35)-(82, 35), 1
LINE (76, 36)-(82, 36), 1
LINE (76, 37)-(82, 37), 1
LINE (76, 38)-(82, 38), 1
LINE (76, 39)-(82, 39), 1
LINE (76, 40)-(82, 40), 1
LINE (76, 41)-(82, 41), 1
LINE (77, 42)-(101, 42), 1
LINE (78, 43)-(100, 43), 1
LINE (88, 52)-(114, 52), 1
LINE (89, 51)-(113, 51), 1
LINE (87, 53)-(94, 53), 1
LINE (87, 54)-(94, 54), 1
LINE (87, 55)-(94, 55), 1
LINE (87, 56)-(94, 56), 1
LINE (87, 57)-(94, 57), 1
LINE (87, 58)-(94, 58), 1
LINE (87, 59)-(94, 59), 1
LINE (87, 60)-(94, 60), 1
LINE (88, 61)-(113, 61), 1
LINE (89, 62)-(112, 62), 1
LOCATE 6, 14: PRINT "hopper"
LOCATE 8, 16: PRINT "ommando-X"
LOCATE 10, 10: PRINT "Demo Version"
LOCATE 14, 15: PRINT "By: Josh Ferguson"
DO: LOOP WHILE INKEY$ = ""
END SUB

SUB wasoncenukked (pox, poy, f)
FOR a = 1 TO 80 + x STEP 2
CIRCLE (pox, posy + f), a, 0
CIRCLE (pox + 1, poy + f), a, 0
CIRCLE (pox + 2, poy + f), a, 0
CIRCLE (pox - 1, poy + f), a, 0
CIRCLE (pox - 2, poy + f), a, 0
NEXT a
END SUB
