10REM     ELIMINATOR
20REM     CONVERTED FOR ADAM BY ROBERT WILCOX
30REM     GRAPHIC ROUTINES MOSTLY BY 
40REM      SERENDIPITY PRODUCCTIONS  
50REM     P.O. BOX 07592, MILWUKEE, WI 53207
60LOMEM :29000
70CLEAR
80 ff=28950
90DATA       245,197,1,0,0,62,0,211,191,62,0,211,191,227,227,227    
100DATA      227,227,227,62,0,211,190,11,120,177,32,247,193,241,201
110DATA     245,62,0,211,191,62,0,211,191,227,227 
120DATA     227,227,0,0,219,190,50,0,0,241,201,0,0,0,0 
130 ux=PEEK(16102)*256+PEEK(16101)-2
140 ux=PEEK(ux)+PEEK(ux+1)*256+10
150FOR ui=ux TO ux+56:READ ua:POKE ui, ua:NEXT ui
160 ut=ux+55:POKE ux+50, INT(ut/256):POKE ux+49, ut-INT(ut/256)*256
170POKE 17059, 1:POKE 17115, 241:TEXT:GOTO 770
180REM     CALL POSITION SN=SPRITE #  RETURNS YP(ROW) & XP(COL) 
190POKE 17009, 0:POKE ux+33, sn*4+128:POKE ux+37, 63:CALL ux+31: yp=PEEK(ux+55)
200POKE 17009, 0:POKE ux+33, sn*4+129:CALL ux+31: xp=PEEK(ux+55)
210REM     CALL DELSPRITE (SINGLE) SN=SPRITE #   
220 ua=8:GOSUB 440:RETURN
230REM     CALL DELSPRITE (ALL)
240 ua=16256: ub=0: uc=127:GOSUB 350:RETURN
250REM      DISPLAY AT row,col m$ = string r = row c = col 
260FOR i=1 TO LEN(m$)
270 ur=r: u1=c+i: ub=ASC(MID$(m$, i, 1)): uc=1:GOSUB 490
280NEXT
290RETURN
300REM   VERT DISPLAY AT row,col m$ =string r = row c =   col 
310FOR i=1 TO LEN(m$)
320 ur=r+i: u1=c: ub=ASC(MID$(m$, i, 1)): uc=1:GOSUB 490
330NEXT
340RETURN
350REM      POKEVM routine ua=address ub=data uc=number of copies  
360 uw=INT(ua/256): uy=ua-uw*256: uw=uw+64:POKE ux+6, uy:POKE ux+10, uw:POKE ux+20, ub:POKE ux+4, INT(uc/256)
370POKE 17009, 0
380POKE ux+3, uc-INT(uc/256)*256:CALL ux:RETURN
390REM     CALL MAGNIFY SZ=FACTOR 1 TO 4   
400 sz=sz-1: bg=-385:GOSUB 710
410 bg=-249:GOSUB 710
420 bg=-1340+sz:GOSUB 710
430RETURN
440REM     CALL PATTERN SN=SPRITE # UA=PATTTERN #       
450POKE ux+10, 127:POKE ux+6, sn*4+130:POKE ux+20, ua:POKE ux+3, 1:POKE ux+4, 0:POKE 17009, 0:CALL ux:RETURN
460REM     CALL LOCATE SN=SPRITE # YR(ROW) XC(COL)    
470POKE ux+10, 127:POKE ux+6, sn*4+128:POKE ux+20, yr:POKE ux+3, 1:POKE ux+4, 0:POKE 17009, 0:CALL ux
480POKE 17009, 0:POKE ux+20, xc:POKE ux+6, sn*4+129:CALL ux:RETURN
490REM     CALL HCHAR UB=ASCII UC= REPS UR=ROW U1=COL CALL CLEAR (UR=1:U1=1:UB=32:UC=768:GOSUB 55) 
500 ua=((ur-1)*32+u1-1)+2048:GOSUB 350: ua=ua+4096:GOSUB 350:RETURN
510REM     CALL CHAR US=ASCII US$=CHARACTER DEFINITION  
520FOR ui=1 TO 16 STEP 2:IF LEN(us$)<>16 THEN ? CHR$(7); "INCORRECT LENGTH IN PATTERN# "; us:RETURN
530 u1=ASC(MID$(us$, ui, 1))
540 u2=ASC(MID$(us$, ui+1, 1))
550IF u1<60 THEN  u1=u1-48:GOTO 570
560 u1=u1-55
570IF u2<60 THEN  u2=u2-48:GOTO 590
580 u2=u2-55
590 ub=u1*16+u2: ua=(ui+1)/2+us*8-1: uc=1:GOSUB 350:NEXT
600RETURN
610REM     CALL SPCHAR US=PATTERN # US$=CHARACTER DEFINITION 
620 ll=LEN(us$):IF ll<>64 THEN ? CHR$(7); "INCORRECT PATTERN LENGTH #s":RETURN
630 us=us+1792
640FOR ui=1 TO 64 STEP 2:GOSUB 530:RETURN
650REM     CALL COLOR US=CHARACTER SET # UF =FORE GROUND COLOR UB=BACKGROUND COLOR
660 ua=us+8191: ub=uf*16+ub: uc=1:GOSUB 350:RETURN
670POKE 17009, 0
680 uw=INT(ua/256): uy=ua-uw*256:POKE ux+33, uy:POKE ux+37, uw:CALL ux+31: ub=PEEK(ux+55):RETURN
690REM   CALL SPRITE SN=SPRITE # UA=PATTERN SC=SPRITE COLOR YR=ROW XC=COL               
700GOSUB 440:GOSUB 740:GOSUB 470:RETURN
710REM     CALL SCREEN  BG=COLOR CODE 
720 ua=18176+bg:POKE ux+16, 24:POKE ux+17, 10:GOSUB 350:POKE ux+16, 227:POKE ux+17, 227:RETURN
730REM     CALL SPCOLOR SN=SPRITE # SC=SPRITE COLOR  
740POKE ux+10, 127:POKE ux+6, sn*4+131:POKE ux+20, sc:POKE ux+3, 1:POKE ux+4, 0:POKE 17009, 0:CALL ux:RETURN
750REM     CALL GCHAR UR=ROW U1=COL UB=DATA    96 ua = ((ur-1)*32+u1-1)+6144: GOSUB 82: RETURN  
760 ua=((ur-1)*32+u1-1)+6144:GOSUB 670:RETURN
770GOTO 820
780FOR f=16 TO 18: us=f: uf=1: ub=0:GOSUB 650:NEXT f:RETURN
790FOR f=9 TO 15: bg=f:GOSUB 710:NEXT f: bg=1:GOSUB 710:RETURN
800RETURN:REM                 SOUND GOES HERE
810FOR ur=7 TO 2 STEP -1: u1=22: ub=32: uc=7:GOSUB 490:NEXT ur:GOSUB 1860:RETURN
820 ur=1: u1=1: ub=32: uc=768:GOSUB 490: us=1:GOSUB 710
830 us=16: uf=0: ub=0:GOSUB 650
840VTAB 5:?:? "     E L I M I N A T O R "
850HTAB 9:VTAB 23
860? "PRESS ANY KEY"; :GET a$: a=ASC(a$): s=RND(-a)
870HOME:HTAB 12:VTAB 13:FLASH:? "STAND-BY"
880FOR i=1 TO 200:NEXT:NORMAL
890DIM e$(13)
900GOSUB 1480:GOSUB 2140
910 ur=1: u1=1: ub=32: uc=768:GOSUB 490: bg=1:GOSUB 710
920FOR h=20 TO 6 STEP -1: us=h: uf=0: ub=0:GOSUB 650:NEXT
930HOME:HTAB 1:VTAB 13:FLASH:? "ENTERING BLACK HOLE"
940HTAB 1:VTAB 14:? "TOTAL DARKNESS":NORMAL
950 us=5: uf=0: ub=0:GOSUB 650
960FOR j=1 TO 4:FOR i=1 TO 11: ur=i: u1=INT(RND(1)*28)+3: ub=46: uc=1:GOSUB 490:NEXT i:NEXT j
970VTAB 13:HTAB 1:? "``````````a      b``````````"
980VTAB 14:HTAB 1:? "hhhhhhhhhi`      `jhhhhhhhhh"
990VTAB 15:HTAB 1:? "ppppppppqh`      `hrpppppppp"
1000VTAB 16:HTAB 1:? "pppppppqpha``````bhprppppppp"
1010VTAB 17:HTAB 1:? "``````appihhhhhhhhjppb``````"
1020VTAB 18:HTAB 1:? "`````a`pqpppppppppprp`b`````"
1030VTAB 19:HTAB 1:? "hhhhi``qppppppppppppr``jhhhh"
1040VTAB 20:HTAB 1:? "hhhih`a``````````````b`hjhhh"
1050VTAB 21:HTAB 1:? "hhihha````````````````bhhjhh"
1060VTAB 22:HTAB 1:? "pqhhihhhhhhhhhhhhhhhhhhjhhrp"
1070VTAB 23:HTAB 1:? "qphihhhhhhhhhhhhhhhhhhhhjhpr"; 
1080 r=24: c=1: m$="ppihhhhhhhhhhhhhhhhhhhhhhjpp":GOSUB 250
1090FOR j=1 TO 2:FOR i=11 TO 13: ur=i: u1=INT(RND(1)*6)+13: ub=46: uc=1:GOSUB 490:NEXT i:NEXT j
1100VTAB 2:HTAB 24:? CHR$(120)+CHR$(121)
1110VTAB 3:HTAB 23:? CHR$(122)+CHR$(136)+CHR$(137)+CHR$(123)
1120VTAB 4:HTAB 22:? CHR$(124)+CHR$(125)+CHR$(138)+CHR$(139)+CHR$(125)+CHR$(126)
1130VTAB 5:HTAB 22:? CHR$(145)+CHR$(125)+CHR$(140)+CHR$(141)+CHR$(125)+CHR$(144)
1140VTAB 6:HTAB 23:? CHR$(129)+CHR$(142)+CHR$(143)+CHR$(130)
1150VTAB 7:HTAB 24:? CHR$(131)+CHR$(132)
1160VTAB 1:HTAB 1
1170FOR f=6 TO 12: us=f: uf=15: ub=0:GOSUB 650:NEXT
1180 a=13: b=14: dd=15
1190 sz=lv:GOSUB 400: sd=24: ci=12: ri=12:IF lv=2 THEN  ci=20: ri=20
1200 sn=2: ua=108: sc=12: yr=80: xc=80:GOSUB 700
1210 sn=2: sc=14:GOSUB 740
1220 sn=1: ua=100: sc=11: yr=100: xc=110:GOSUB 700
1230 sn=1: sc=3:GOSUB 740
1240POKE 27102, yr:POKE 27103, xc
1250 ud=xc
1260 cc=INT(RND(1)*256): rr=INT(RND(1)*192)
1270 t=a: a=b: b=dd: dd=t
1280 xc=ud: yr=uq
1290 uq=yr: ps%=PDL(5)
1300IF ps%=1 THEN  xc=ud: yr=uq-sd:GOTO 1380
1310IF ps%=2 THEN  xc=ud+sd: yr=uq:GOTO 1380
1320IF ps%=4 THEN  xc=ud: yr=uq+sd:GOTO 1380
1330IF ps%=8 THEN  xc=ud-sd: yr=uq:GOTO 1380
1340IF ps%=3 THEN  xc=ud+sd: yr=uq-sd:GOTO 1380
1350IF ps%=6 THEN  xc=ud+sd: yr=uq+sd:GOTO 1380
1360IF ps%=9 THEN  xc=ud-sd: yr=uq-sd:GOTO 1380
1370IF ps%=12 THEN  xc=ud-sd: yr=uq+sd
1380 sn=1:GOSUB 2340: ud=xc: uq=yr
1390 us=a: uf=1: ub=4:GOSUB 650: us=b: uf=1: ub=13:GOSUB 650: us=dd: uf=1: ub=6:GOSUB 650
1400 us=16: uf=5: ub=0:GOSUB 650: us=17: uf=5: ub=0:GOSUB 650: us=18: uf=2: ub=5:GOSUB 650
1410 sn=2
1420 yr=rr+ri: xc=cc+ci:GOSUB 2410:GOSUB 460: cc=xc: rr=yr
1430GOSUB 2390
1440IF ds<15 THEN GOSUB 1740:GOTO 1260
1450 w=w+1:IF w>100 THEN 1840
1460GOTO 1270
1470END
1480 b$="0102040810204080": c$="8040201008040201"
1490 a$="0000000000000000"
1500 us=91: us$=b$:GOSUB 510
1510FOR i=96 TO 112 STEP 8: us=i+1: us$=b$:GOSUB 510
1520 us=i: us$=a$:GOSUB 510
1530 us=i+2: us$=c$:GOSUB 510:NEXT i
1540 jj=FRE(0)
1550FOR i=0 TO 13:READ e$(i): us=120+i: us$=e$(i):GOSUB 510:NEXT i
1560 jj=FRE(0)
1570FOR i=0 TO 7:READ e$(i): us=i+136: us$=e$(i):GOSUB 510:NEXT i
1580 us=144: us$="C0C0C0C080808000":GOSUB 510
1590 us=145: us$="0303030301010100":GOSUB 510
1600 us=95: us$="0000000000000000":GOSUB 510
1610 jj=FRE(0)
1620DATA       0000000000000F7F,000000000000F0FE,01030F1F3F7FFFFF,
1630DATA       80C0F0F8FCFEFFFF,0001010103030303,FFFFFFFFFFFFFFFF,
1640DATA       00808080C0C0C0C0,0000000000000000,0000000000000000,
1650DATA       FF7F3F3F1F0F0703,FFFEFCFCF8F0E0C0,7F0F000000000000,
1660DATA       FEF0000000000000,0800667C18666810,
1670DATA       E0F07F7F7FFFFFFF,0818F8F8F0F8F0F0,7F7F7FED1C0E0201,
1680DATA        F0F0908800180000,03070F0F0F070703,F0FFFFFEFCFCF8F0,
1690DATA       0303010101010101,E0C0C0C080808000,
1700 us=108: us$="00073FE2E2E2FFFF667F0C1C0000000000E0FC474747FFFF66FE303800000000":GOSUB 620
1710 us=100: us$="0000000003040808FF0808040300000080808080E0908888FF888890E0808080":GOSUB 620
1720 jj=FRE(0)
1730RETURN
1740 sn=2:GOSUB 210
1750 bg=14:GOSUB 710: bg=9:GOSUB 710: bg=15:GOSUB 710
1760 bg=1:GOSUB 710
1770GOSUB 2610:GOSUB 2630: ss=231:GOSUB 2620: ss=240:GOSUB 2620
1780FOR bb=0 TO 3:FOR aa=207 TO 212: ss=aa:GOSUB 2620: ss=bb:GOSUB 2620:NEXT: ss=240+bb:GOSUB 2620:NEXT
1790GOSUB 2630
1800POKE 27102, 0:POKE 27103, 0
1810 d=d+1: sn=2: ua=108: sc=14: yr=INT(RND(1)*192)+1: xc=INT(RND(1)*256)+1:GOSUB 700
1820 bg=1:GOSUB 710
1830RETURN
1840IF d<10 THEN 1890
1850GOTO 2060
1860GOSUB 2610:GOSUB 2630:FOR ss=240 TO 255:GOSUB 2620:FOR dy=0 TO 65:NEXT:NEXT:GOSUB 2630
1870RETURN
1880REM               
1890FOR i=8 TO 0 STEP -1: ur=7+i: u1=24-i: ub=91: uc=1:GOSUB 490: us=12: uf=INT(RND(1)*8)+8: ub=0
1900GOSUB 650:NEXT:GOSUB 1860
1910FOR j=1 TO 40:NEXT j
1920GOSUB 1860
1930FOR i=8 TO 0 STEP -1: ur=7+i: u1=24-i: ub=32: uc=1:GOSUB 490:NEXT i
1940GOSUB 790: d1=-100: f1=-6: f2=110:GOSUB 800:GOSUB 790:GOSUB 780:GOSUB 810
1950 j=0: i=0
1960VTAB 1:HTAB 23+i: m$=CHR$(133):? m$:VTAB 1:HTAB 26+j:? m$
1970VTAB 2:HTAB 22+i: m$=m$+CHR$(133):? m$:VTAB 2:HTAB 26+j:? m$
1980VTAB 3:HTAB 21+i: m$=m$+CHR$(133):? m$:VTAB 4:HTAB 25+j:? m$
1990VTAB 5:HTAB 22+i: m$=CHR$(133)+CHR$(133):? m$:VTAB 5:HTAB 25+j:? m$:GOSUB 790
2000GOSUB 230
2010VTAB 6:HTAB 25+j: m$=CHR$(133):? m$:VTAB 7:HTAB 23+i:? m$:VTAB 7:HTAB 27+j:? m$
2020VTAB 8:HTAB 22+i: m$=m$+CHR$(133):? m$:VTAB 9+j:HTAB 24:? m$
2030 us=17: uf=8: ub=0:GOSUB 650:GOSUB 790: d1=30: f1=-6: f2=110:GOSUB 800:IF j=1 THEN 2050
2040 i=-1: j=1:GOSUB 780:GOSUB 790:GOTO 1960
2050FOR f=1 TO 1000:NEXT f
2060GOSUB 230: w=0
2070 ur=1: u1=1: ub=32: uc=768:GOSUB 490: bg=1:GOSUB 710:VTAB 8:HTAB 4:? "ALIEN SHIPS DESTROYED:"+STR$(d)
2080IF d>hd THEN  hd=d
2090VTAB 13:HTAB 10:? "BEST ROUND: "+STR$(hd)
2100 d=0:VTAB 17:HTAB 4:? "PRESS * (REPLAY) OR 0 (QUIT)"
2110GOTO 2500
2120 uc=1: u1=1: ub=32: uc=768:GOSUB 490:GOTO 920
2130 r=21: c=6: m$="SO LONG!!!":GOSUB 250:FOR i=1 TO 500:NEXT i:HTAB 1:VTAB 23:END
2140FOR j=6 TO 20: us=j: uf=1: ub=1:GOSUB 650
2150 ur=1: u1=1: ub=32: uc=768:GOSUB 490:HOME:?
2160? "     E L I M I N A T O R":?:?
2170? "YOUR MISSION IS TO PROTECT THE":? "EARTH FROM THE APPROACHING"
2180? "ELIMINATOR. SHOOT DOWN AT LEAST10 ALIEN CRAFT TO ENABLE"
2190? "YOUR DEFENSE NET AND DESTROY":? "THE ELIMINATOR."
2200?:? "YOU ONLY HAVE LIMITED TIME IN ":? "WHICH TO COMPLETE YOUR MISSION."; 
2210? "POSITION YOUR CROSSHAIR WITH ":? "THE JOYSTICK."
2220FOR j=6 TO 12: us=j: uf=4: ub=0:GOSUB 650:NEXT
2230?:? "ENTER YOUR SKILL LEVEL CAPTAIN (1 OR 2)"; 
2240GET lv$: lv=VAL(lv$):IF lv<>1 AND lv<>2 THEN ? CHR$(7); :GOTO 2240
2250 lv=5-lv
2260GOSUB 1860
2270HOME:?:?:?:?:?
2280FOR j=6 TO 12: us=j: uf=11: ub=0:GOSUB 650:NEXT
2290?:? "THE ELIMINATOR IS APPROACHING"
2300? "READY PHASERS AND PREPARE TO ENGAGE THE ENEMY."
2310VTAB 23
2320FOR i=1 TO 2500:NEXT
2330RETURN
2340IF yr<0 THEN  yr=0:GOTO 2360
2350IF yr>160 THEN  yr=160
2360IF xc<0 THEN  xc=0:GOTO 2380
2370IF xc>210 THEN  xc=210
2380GOSUB 460:RETURN
2390 ds=((yr-uq)^2+(xc-ud)^2)^.5
2400RETURN
2410IF yr<80 AND xc>210 OR yr>160 AND xc>128 OR yr>80 AND xc<128 THEN  ci=-(ci)
2420IF yr<0 AND xc>210 OR yr<80 AND xc<0 OR yr>80 AND xc<0 THEN  ri=-(ri)
2430IF yr>80 AND xc>210 OR yr<80 AND xc<128 THEN  ri=-(ri): ci=-(ci)
2440IF yr>160 THEN  yr=0: ci=-(ci)
2450IF yr<0 THEN  yr=160: ci=-(ci)
2460IF xc<0 THEN  xc=210: ri=-(ri)
2470IF xc>210 THEN  xc=0: ri=-(ri)
2480ONERR  GOTO 2610
2490GOSUB 460:RETURN
2500GOSUB 2610
2510ONERR  GOTO 2640
2520GOSUB 2630
2530FOR aa=255 TO 45 STEP -2
2540 ss=244:GOSUB 2620: ss=231:GOSUB 2620
2550FOR qq=35 TO 225 STEP 3: ss=15+qq:GOSUB 2620: ss=aa:GOSUB 2620: ss=233:GOSUB 2620
2560IF PDL(13)=10 THEN GOSUB 2630:GOTO 2120
2570IF PDL(13)=0 THEN GOSUB 2630:GOTO 2130
2580NEXT
2590NEXT
2600GOTO 2500
2610POKE ff, 62:POKE ff+1, 0:POKE ff+2, 211:POKE ff+3, 255:POKE ff+4, 201:RETURN
2620POKE ff+1, ss:CALL ff:RETURN
2630POKE ff+1, 159:CALL ff:POKE ff+1, 191:CALL ff:POKE ff+1, 223:CALL ff:POKE ff+1, 255:CALL ff:RETURN
2640CLRERR:GOSUB 2630:END
65535REM  DO NOT DELETE THIS LINE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
