10 REM ------- Diamond Trap -------
20 REM By J.Pugh 30 REM (c)Computing with the Amstrad 40 REM ------------ CPC ------------ 50 ENV 1,1,0,10,1,0,10,1,0,5:ENT 2,5,1,1,1,0,10,5,-1,3:ENV 2,1,0,5,1,0,5,1,0,5 60 GOSUB 1510 :REM machine code 70 DEFINT a-z:k1=19:k2=22:k3=71:k4=63:k5=47 80 CLS:INPUT"Joystick or keyboard? (j/k)",kc$ 90 kc$=UPPER$(kc$):IF kc$="J" THEN k1=72:k2=73:k3=74:k4=75:k5=76 ELSE IF kc$<>"K" THEN 80 100 SYMBOL 255,96,144,144,159,149,149,144,96 110 BORDER 0:RESTORE 110:FOR t=0 TO 12:READ a:INK t,a:NEXT 120 DATA 0,26,1,2,18,9,14,3,6,24,13,0,8 130 FOR t=1 TO 6:hi(t)=100:READ hi$(t):NEXT 140 DATA AMSTRAD,NEMESIS,DIAMOND,RAYMOND,E.T. OK,ARNOLDS 150 MODE 0:WINDOW#1,1,20,1,20:WINDOW#2,1,20,21,25:WINDOW#3,2,19,22,24 160 WINDOW#4,3,9,23,23:WINDOW#5,10,12,22,22:PEN#5,9:PEN#3,1 170 PAPER#2,1:PEN#2,12:FOR t=1 TO 100:PRINT#2,CHR$(207);:NEXT 180 CLS#3:GOTO 1390 190 REM --------- New Game --------- 200 sc=0:li=3:le=1:keys=0:runn=1:dc=0 210 PEN#3,4:CLS#3:PRINT#3," SCORE HIGH":PRINT#3,SPC(11); 220 PEN#3,6:PRINT#3,USING"#######";hi(1);:PEN#3,8 230 PRINT#3,"LIVES";USING"###";li;:PRINT#3," LEVEL";USING"###";le; 240 CLS#5:FOR t=1 TO keys:PRINT#5,CHR$(255);:NEXT 250 GOTO 330 260 REM ------- Place Sprite ------- 270 k=x:l=y:x=(x*4)-4:y=(y*4)-4:CALL 29940,x,y,z 280 grid(k,l)=z:x=k:y=l:RETURN 290 REM -- Generate Random Square -- 300 q=INT(RND(1)*10+1):w=INT(RND(1)*10+1):IF grid(q,w)<>1 THEN 300 310 IF z=0 AND q=2 AND w=1 THEN 300 320 grid(q,w)=z:x=q:y=w:GOSUB 260:RETURN 330 REM ------- Set Up Screen ------ 340 z=1:FOR x=1 TO 10:FOR y=1 TO 10 350 grid (x,y)=1:GOSUB 260 360 NEXT:NEXT:grid(1,1)=7:grid(10,10)=8 370 z=2:FOR t=1 TO 4+runn:GOSUB 290:NEXT 380 z=3:FOR t=1 TO 5+le:GOSUB 290:NEXT 390 z=0:FOR t=1 TO 6+runn:GOSUB 290:NEXT 400 IF runn<4 THEN z=4:GOSUB 290 410 IF runn=4 THEN z=5:FOR t=1 TO 3:GOSUB 290:NEXT 420 IF runn=5 THEN z=6:GOSUB 290 430 px=1:py=1:mx=10:my=10:mm=2:tr=0:dc=0 440 CLS#4:PRINT#4,USING"#######";sc; 450 x=px:y=py:z=7:GOSUB 260 460 x=mx:y=my:z=0:GOSUB 260:z=8:GOSUB 260 470 IF px=mx AND py=my THEN 1080 480 REM --------- Keycheck --------- 490 q=(INKEY(k2))-(INKEY(k1)) 500 w=(INKEY(k4))-(INKEY(k3)) 510 WHILE INKEY(k5)=0:WEND 520 IF ABS(q)+ABS(w)=2 THEN q=0:w=0 530 IF q+w=0 THEN FOR t=1 TO 70:NEXT:GOTO 740 540 REM --------- Move Eye --------- 550 w=px+w:q=py+q:IF w=0 OR w=11 OR q=0 OR q=11 THEN w=0:q=0:GOTO 530 560 cu=grid(w,q):ON cu+1 GOTO 1040,570,590,640,600,670,700,1080,1040 570 z=0:x=px:y=py:GOSUB 260:px=w:py=q 580 GOTO 740 590 sc=sc+5:SOUND 3,60,-1,15,1,2:CLS#4:PRINT#4,USING"#######";sc;:GOTO 570 600 IF keys=3 THEN 570 610 keys=keys+1:CLS#5:FOR t=1 TO keys:PRINT#5,CHR$(255);:NEXT 620 SOUND 3,60,-1,15,2,2:SOUND 3,40,-1,15,2,2 630 GOTO 570 640 sc=sc+(10*le):CLS#4:PRINT#4,USING"#######";sc; 650 dc=dc+1:IF dc=le+5 THEN 1180 660 SOUND 3,60,-1,15,2,2:SOUND 3,40,-1,15,2,2:GOTO 570 670 IF keys=0 THEN 570 680 SOUND 3,71,-1,15,1,2:sc=sc+500:CLS#4:PRINT#4,USING"#######";sc; 690 keys=keys-1:CLS#5:FOR t=1 TO keys:PRINT#5,CHR$(255);:NEXT:GOTO 570 700 li=li+1 710 SOUND 3,119,-1,15,2,2:SOUND 3,80,-1,15,2,2:PEN#3,8:LOCATE#3,1,3 720 PRINT#3,"LIVES";USING"###";li;:PRINT#3," LEVEL";USING"###";le; 730 SOUND 3,60,-1,15,2,2:GOTO 570 740 REM ------- Move Monster ------- 750 tr=0:grid(px,py)=1 760 REM Random Path Change? 770 IF INT(RND(1)*10)+1 >2 THEN 810 780 GOTO 990 790 IF RND<0.5 THEN mm=mm-1:ELSE mm=mm+1 800 IF mm=5 THEN mm=1:ELSE IF mm=0 THEN mm=4 810 ON mm GOTO 840,880,930,960 820 x=mx:y=my:z=8:GOSUB 260 830 GOTO 450 840 q=my-1:IF q=0 THEN 790 850 IF grid(mx,q)<2 THEN 870 860 IF mx=10 AND my=10 THEN tr=tr+1:GOTO 920:ELSE 790 870 x=mx:y=my:z=1:GOSUB 260:my=q:GOTO 820 880 w=mx-1:IF w=0 THEN 790 890 IF grid(w,my)<3 THEN 910 900 IF mx=10 AND my=10 THEN tr=tr+1:GOTO 920:ELSE 790 910 x=mx:y=my:z=1:GOSUB 260:mx=w:GOTO 820 920 IF tr>1 THEN 450:ELSE 790 930 q=my+1:IF q=11 THEN 790 940 IF grid(mx,q)>2 THEN 790 950 x=mx:y=my:z=1:GOSUB 260:my=q:GOTO 820 960 w=mx+1:IF w=11 THEN 790 970 IF grid(w,my)>2 THEN 790 980 x=mx:y=my:z=1:GOSUB 260:mx=w:GOTO 820 990 IF py=my THEN 1020 1000 IF py<my THEN mm=1 ELSE mm=3 1010 GOTO 810 1020 IF px<mx THEN mm=2 ELSE IF px>mx THEN mm=4 1030 GOTO 810 1040 x=px:y=py:z=0:GOSUB 260 1050 x=w:y=q:z=7 1060 IF x<1 OR x>10 OR y<1 OR y>10 THEN 1080 1070 GOSUB 260 1080 REM ------- Lose a Life ------- 1090 RESTORE 1120 1100 GOSUB 1150 1110 GOTO 1130 1120 DATA 379,-2,402,-1,379,-3,253,-4,268,-1,253,-2,338,-2,319,-2,338,-2,379,-5,255 1130 li=li-1:IF li=0 THEN 1270 1140 GOTO 210 1150 REM -------- Play Tune -------- 1160 READ tn:IF tn=255 THEN RETURN:ELSE READ lg:SOUND 7,tn,lg,15,2,2 1170 GOTO 1160 1180 REM ----- Complete Screen ----- 1190 x=px:y=py:z=0:GOSUB 260 1200 x=w:y=q:z=7:GOSUB 260 1210 RESTORE 1240 1220 GOSUB 1150 1230 GOTO 1250 1240 DATA 338,-2,268,-1,358,-1,268,-2,213,-1,268,-1,213,-2,179,-6,358,-1,268,-4,255 1250 le=le+1:sc=sc+le*100:runn=runn+1:IF runn=6 THEN runn=1 1260 GOTO 210 1270 REM -------- Game Over -------- 1280 LOCATE 6,8:PEN 9:PRINT"GAME OVER" 1290 PRINT CHR$(22)+CHR$(0) 1300 FOR t=1 TO 600:NEXT 1310 CLS#1:PEN 1 1320 IF sc<=hi(6) THEN 1390:ELSE t=10 1330 IF t=0 THEN t=1:GOTO 1350 1340 IF sc<=hi(t) THEN t=t+1:GOTO 1350:ELSE t=t-1:GOTO 1330 1350 FOR r=6 TO t STEP -1:hi(r)=hi(r-1):hi$(r)=hi$(r-1):NEXT 1360 LOCATE 5,1:PRINT"High Score!!":WHILE INKEY$<>"":WEND 1370 PEN 3:PRINT:PRINT"Enter your name....":PEN 1:INPUT d$:IF LEN(d$)>10 THEN PRINT:PRINT"Up to 10 chars":GOTO 1370 1380 hi(t)=sc:hi$(t)=d$ 1390 REM Hall Of Fame 1400 CLS#1:LOCATE 1,1:PEN 6:PRINT" HIGH SCORERS" 1410 PEN 8:PRINT" ============" 1420 FOR t=1 TO 6:PRINT:PEN t+2:LOCATE 2,3+(t*2):PRINT hi(t) 1430 LOCATE 10,3+(t*2):s$=hi$(t) 1440 IF LEN(s$)< 10 THEN FOR q=1 TO 10-LEN(s$):s$=" "+s$:NEXT 1450 PRINT s$:NEXT 1460 PEN 1:LOCATE 1,20:PRINT"PRESS ";:IF kc$="J" THEN PRINT"FIRE"; ELSE PRINT"SPACE"; 1470 PRINT" TO PLAY" 1480 WHILE INKEY(k5)<0:WEND 1490 GOTO 190 1500 REM -------------------------- 1510 REM M/Code + Sprite Data Loader 1520 IF PEEK(&160)=255 THEN RETURN 1530 MODE 2:PRINT"Poking machine code, please wait" 1540 RESTORE 1640:MEMORY 29800:ln=1640 1550 FOR adr=&747C TO &79B8 STEP 13 1560 READ byte$:chk=0 1570 FOR i=0 TO 12 1580 v=VAL("&"+MID$(byte$,i*2+1,2)) 1590 POKE adr+i,v:chk=chk+v 1600 NEXT 1610 IF chk<>VAL("&"+RIGHT$(byte$,3)) THEN PRINT"ERROR in LINE";ln:STOP 1620 ln=ln+10:NEXT 1630 POKE &160,255:RETURN 1640 DATA 3E00F5D650ED444F26001E3016463 1650 DATA 7906082E04F1E5F5D5110000F555F 1660 DATA 7CFE303802D630CB3F3002162045C 1670 DATA 6F2600F1D529292929E5D12929507 1680 DATA 19D11916C05F19D13E04F5C5E5603 1690 DATA 1AFE00280C7EFE0028033DC6013F7 1700 DATA 1AE6FF7713230D2008D5AF11504C6 1710 DATA 00ED52D110E0E101000809C1F15A5 1720 DATA 3D20D3F1E1242D20A2C90000004DE 1730 DATA 000000DD7E00DD6E02DD6604E54D4 1740 DATA 26006F2929292929292911307526A 1750 DATA 19E5D1E1F57C8767F17C327D7479F 1760 DATA 7D3285747A3289747B328774C35BC 1770 DATA 7C74C92C322C332C342C35CFCF4D5 1780 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1790 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1800 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1810 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1820 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1830 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1840 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1850 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1860 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1870 DATA CFCFCFCFCFCFCFCFCFCFCFCFCFA83 1880 DATA CFCFCF8FCAC0C0C0C0C0C085CA995 1890 DATA C0C0C0C0C0C085CAC0C0C0C0C098F 1900 DATA C085CAC0C0C0C0C0C085CAC0C095E 1910 DATA C0C0C0C085CAC0C0C0C0C0C085954 1920 DATA CAC0C0C0C0C0C085CAC0C0C0C0999 1930 DATA C0C085CAC0C0C0C0C0C085CAC095E 1940 DATA C0C0C0C0C085CAC0C0C0C0C0C098F 1950 DATA 85CAC0C0C0C0C0C085CAC0C0C095E 1960 DATA C0C0C085CAC0C0C0C0C0C0850F8A3 1970 DATA 0F0F0F0F0F0F0FCFCFCFCFCFCF543 1980 DATA CFDE8B030303030303568B03C03EE 1990 DATA C0C00303568B034A0F0F8103563AC 2000 DATA 8B034203034A03568B0342030324F 2010 DATA 4203568B034203038503568B032DD 2020 DATA 42C0C00B03568B0342C0C0030347C 2030 DATA 568B03420F0F8103568B0342032F1 2040 DATA 034A03568B034203034203568B2A2 2050 DATA 034203038503568B03C0C0C00B402 2060 DATA 03568B030F0F0F030356FCFCFC464 2070 DATA FCFCFCFCFCCFCFCFCFCFCFCF8EB23 2080 DATA CECCCCC8C4CCCC8CCECCCC94C89D8 2090 DATA CCCC8CCECCC868C4C4CC8CCECC968 2100 DATA 9494C8C8CC8CCEC86868C484C4882 2110 DATA 8CCE949494C848488CCA6868686FC 2120 DATA 2C848484CA68682C84848484CE65C 2130 DATA C4C4C4C848488CCEC8C8C8848485E 2140 DATA C48CCECCC4C4C848CC8CCECCC893C 2150 DATA C884C4CC8CCECCCCC4C8CCCC8C97E 2160 DATA CECCCCC8C4CCCC8C0C0C0C0C0C652 2170 DATA 0C0C0CCFC3CFCFCFCFCFCFCBC381E 2180 DATA C7CFCFCFCFCFC3C3C3CFCFCFCFA57 2190 DATA CFC3CFC3CFCFCFCFCFC3CFC3CFA53 2200 DATA CFCFCFCFC3CFC3CFCFCFCFCFC3A5F 2210 DATA CFC3C3C3C3C3C7C3CFC3C3C3C3A03 2220 DATA C3C3C3CFC3C3C3C3C3C3C3CFC39FF 2230 DATA CBC7C3CBC3C3CFC3CBCFC3CFC3A27 2240 DATA C3CFC3CBCBC3C7C3C3CFC3CBCFA27 2250 DATA CFCFC3C3C3C3CBCFCFCFC3CBC3A33 2260 DATA C7CBC7CFCFC3CFC3CFCFCFCFCBA53 2270 DATA C3000000000000000000000041104 2280 DATA 82000000000041966982000000244 2290 DATA 41966C8C49820000966CCCCC8C5C0 2300 DATA 4900416CCCCCCCCC8C82C3C3C377D 2310 DATA 96C9C3C3C396CCCC96C96CCC498B6 2320 DATA 96CCCC96C96CCC4996CCCC96C989B 2330 DATA 6CCC4996CCCCC3C36CCC4996CC818 2340 DATA CC3C3C6CCC4996CCCCCCCCCCCC823 2350 DATA 4996CCCCCCCCCCCC49960C0C0C6AA 2360 DATA 0C0C0C49C3C3C3C3C3C3C3C3CF754 2370 DATA 0303CFCF0303CF8BC003478BC0559 2380 DATA 03474203030342030303420303128 2390 DATA 03810303030303030381030303123 2400 DATA 03030303810303038B0303030312D 2410 DATA 0303478B030303030356478B03212 2420 DATA 035603035647CF0303A90303A9329 2430 DATA CFCF8B0303035647CFCFCF0303542 2440 DATA 03A9CFCFCFCF8B030347CFCFCF72D 2450 DATA CFCF0303CFCFCFCFCFCF8B47CF81F 2460 DATA CFCFCFCFCF8B47CFCFCF00004478E 2470 DATA CCCC88000000449C3CCCCC880055C 2480 DATA 009C3C6CCCCCCC00443C6CCCCC62C 2490 DATA CCCC88146CC8C5CAC4CC889CCC877 2500 DATA C0CFCFC0CCCCCCC8C5CFCFCAC4A3B 2510 DATA CCCCC0C5CFCFCAC0CCCCC0C5CFA31 2520 DATA CFCAC0CCCCC8C5C5CFCAC4CCCCA38 2530 DATA CCC0CACFC0CC4C44CCC8C5CAC4928 2540 DATA 8C0844CCCCCCCCCC0C8800CCCC700 2550 DATA CCCC0C4C000044CCCC0C4C88004AC 2560 DATA 000044CCCC880000CF3065CFCF566 2570 DATA 9A30CF9AC590CFCF60CA6560CF7E4 2580 DATA CA659AC5CF9060CACA659AC5C586A 2590 DATA 909AC590659A60CA65CF30303066C 2600 DATA 303030CFCFCFCF6030CFCFCFCF798 2610 DATA CF60903030CFCFCF9AC0303030676 2620 DATA 65CFCF302103031230CF9A3003438 2630 DATA 8B470330659A2142CAC58112654EE 2640 DATA 9A3003428103F065CF3030030341D 2650 DATA 70B0CFCFCF30303030CFCFCFCF789 2660 DATA CF3030CFCFCFCFCFCFCFCFCFCF945 2670 DATA DE0000000000000000000000000DE |