1 'Treasure Hunt
2 'By Benedict Garrett
3 'Amstrad Action September 1988
10 ' Variables, inks, graphics.
20 MODE 0:sc=0:lev=1:scr=0
30 INK 0,11:BORDER 11
40 INK 1,24:INK 2,6:INK 3,0:INK 4,15,3
50 RANDOMIZE TIME:SYMBOL AFTER 250
60 SYMBOL 250,255,171,213,171,213,171,213,255
70 SYMBOL 251,8,8,8,28,28,62,62,127
80 SYMBOL 252,60,126,219,255,129,195,126,195
90 SYMBOL 253,0,0,60,126,219,255,126,195
100 ' Machine code ( Thanks RpM ).
110 FOR t=&BF00 TO &BF06
120 READ a$
130 POKE t,VAL("&"+a$)
140 NEXT
150 DATA cd,60,bb,32,07,bf,c9
160 ' Game preparation
170 CLS
180 LOCATE 1,1:PEN 3:PRINT"TREASURE HUNT By Ben"
190 LOCATE 1,2:PRINT STRING$(20, "=")
200 LOCATE 5,12:PRINT"Q to Quit"
210 PEN 1
220 LOCATE 2,4:PRINT"** USE JOYSTICK **"
230 LOCATE 2,14:PRINT"L to change level."
240 LOCATE 1,24:PRINT"< Any key to start>"
250 PEN 2
260 LOCATE 3,6:PRINT CHR$(240);"....move up."
270 LOCATE 3,8:PRINT CHR$(242);"....move left."
280 LOCATE 3,10:PRINT CHR$(243);"....move right."
290 PEN 1:LOCATE 6,20:PRINT"Level :"lev
300 PEN 3:LOCATE 7,22:PRINT"Score"scr
310 x=2:y=2:a=0
320 CALL &BB03:CALL &BB18
330 IF INKEY(67)=0 THEN PEN 1:MODE 2:LIST
340 IF INKEY(36)=0 AND lev=1 THEN PEN 3:LOCATE 5,17:INPUT "Level:",lev:GOTO 350 ELSE 360
350 IF lev<1 OR lev>30 THEN lev=1:GOTO 170
360 CLS:PEN 1:FOR f=1 TO 20
370 LOCATE f,1:PRINT CHR$(250)
380 LOCATE f,24:PRINT CHR$(250)
390 NEXT
400 FOR f=1 TO 24
410 LOCATE 1,f:PRINT CHR$(250)
420 LOCATE 20,f:PRINT CHR$(250)
430 NEXT
440 FOR f=1 TO 90+(5*lev)
450 LOCATE INT(RND(1)*18+2),INT(RND(1)*22+3):PEN 1:PRINT CHR$(250):NEXT
460 FOR f=1 TO 5+5*lev:LOCATE INT(RND(1)*17+3),INT(RND(1)*21+2):PEN 3:PRINT CHR$(251):NEXT
470 PEN 4:FOR f=1 TO 10
480 LOCATE INT(RND(1)*17+3),INT(RND(1)*21+2):CALL &BF00:IF PEEK(&BF07)=227 THEN 480 ELSE PRINT CHR$ (227)
490 NEXT
500 ' Game start
510 IF a=0 THEN a$=CHR$(252)
520 IF a=-1 THEN a$=CHR$(253)
530 PEN 2:LOCATE x,y:PRINT a$
540 LOCATE x,y+1:CALL &BF00
550 IF PEEK(&BF07)=227 THEN SOUND 1,300,10,7:sc=sc+1:scr=scr+lev
560 IF PEEK(&BF07)<>250 AND INKEY(72)<>0 THEN LOCATE x,y:PRINT" ":y=y+1:LOCATE x,y:SOUND 2,500+25*y,5,7:PRINT a$
570 LOCATE x,y+1:CALL &BF00
580 ' Player dead ?
590 IF PEEK(&BF07)=251 THEN 930
600 IF INKEY(72)=0 OR INKEY(76)=0 THEN GOTO 690
610 IF INKEY(67)=0 THEN 930
620 IF INKEY(74)=0 THEN GOTO 780
630 IF INKEY(75)=0 THEN GOTO 860
640 ' Level complete ?
650 IF sc>=10 THEN LOCATE 3,12:PRINT"** WELL DONE **":FOR f=1 TO 300:NEXT f:CALL &BB03:CALL &BB18:lev=lev+1:LOCATE 1,24:FOR f=1 TO 30:PRINT"":NEXT:sc=0:GOTO 290
660 a=NOT a
670 GOTO 510
680 ' Move up
690 LOCATE x,y-1:CALL &BF00
700 IF PEEK(&BF07)=250 THEN GOTO 530
710 IF PEEK(&BF07)=227 THEN SOUND 1,300,10,7:sc=sc+1:scr=scr+lev
720 LOCATE x,y: PRINT" "
730 y=y-1
740 SOUND 2,500+25*y,5,7
750 LOCATE x,y:PRINT a$
760 GOTO 530
770 ' Move left
780 LOCATE x-1,y:CALL &BF00
790 IF PEEK(&BF07)=250 THEN GOTO 530
800 IF PEEK(&BF07)=227 THEN SOUND 1,300,10,7:sc=sc+1:scr=scr+lev
810 LOCATE x,y:PRINT" "
820 x=x-1
830 LOCATE x,y:PRINT a$
840 GOTO 530
850 ' Move right
860 LOCATE x+1,y:CALL &BF00
870 IF PEEK(&BF07)=250 THEN GOTO 530
880 IF PEEK(&BF07)=227 THEN SOUND 1,300,10,7:sc=sc+1:scr=scr+lev
890 LOCATE x,y:PRINT" "
900 x=x+1
910 LOCATE x,y:PRINT a$
920 GOTO 530
930 PEN 3:LOCATE 3,12:PRINT"** GAME OVER **"
940 LOCATE 3,14:PRINT"You scored.."scr
950 FOR f=1 TO 300:NEXT f
960 CALL &BB03:CALL &BB18
970 LOCATE 1,24:FOR f=1 TO 30:PRINT"":NEXT
980 lev=1:sc=0:scr=0:GOTO 170