1000 'Santa Claus Kidz
1001 'By Alastair Scott
1002 '
1010 POKE 300,0:POKE 301,0
1020 DEFINT a-z
1030 GOSUB 2060
1040 GOSUB 1660
1050 GOSUB 1770
1060 GOSUB 1840
1070 EVERY 50 GOSUB 1840
1080 EVERY 500,1 GOSUB 1660
1090 EVERY del,2 GOSUB 1770
1100 AFTER 6000,3 GOSUB 1910
1110 RANDOMIZE TIME
1120 high=PEEK(300)+256*PEEK(301)
1130 total=FNnum(RND*25*lev,25*lev)
1140 x=11:y=12:dir=1:ti=120:score=1
1150 PEN 2:PRINT CHR$(30)"SIGN  TOTAL  TARGET":PEN 1
1160 LOCATE 16,2:PRINT FNsc$(total,4)
1170 LOCATE 9,2:PRINT FNsc$(score,4)
1180 WHILE score<>total
1190 DI
1200 INK 11,FNhue:INK 12,FNhue
1210 INK 13,FNhue:INK 14,FNhue
1220 PEN 3:LOCATE x,y:PRINT CHR$(239+dir)
1230 IF INKEY(0)=0 OR INKEY(72)=0 THEN dir=1:dx=0:dy=-1
1240 IF INKEY(8)=0 OR INKEY(74)=0 THEN dir=2:dx=-1:dy=0
1250 IF INKEY(2)=0 OR INKEY(73)=0 THEN dir=3:dx=0:dy=1
1260 IF INKEY(1)=0 OR INKEY(75)=0 THEN dir=4:dx=1:dy=0
1270 IF dx=0 AND dy=0 OR MID$(maze$(y+dy),x+dx,1)="%"THEN 1310
1280 LOCATE x,y:PRINT" "
1290 x=x+dx:y=y+dy
1300 LOCATE x,y:PRINT CHR$(239+dir)
1310 EI
1320 FOR a=1 TO 8
1330 IF c(a)=0 OR x<>x(a)OR y<>y(a)THEN 1420
1340 target=c(a)
1350 SOUND 130,100,40,15,,2
1360 IF op$="-"THEN score=score-target
1370 IF op$="+"THEN score=score+target
1380 IF op$="/"THEN score=score/target
1390 IF op$="*"THEN score=score*target
1400 score=ROUND(MIN(MAX(score,0),999)):c(a)=0
1410 PEN 1:LOCATE 9,2:PRINT FNsc$(score,4)
1420 NEXT
1430 WEND
1440 CALL &BCA7
1450 FOR a=0 TO 3:re=REMAIN(a):NEXT
1460 RESTORE 2670
1470 FOR a=1 TO 14
1480 READ dur,note
1490 SOUND 1,note,dur*16,12
1500 SOUND 2,note+1,dur*16,12
1510 SOUND 1,0,2,0:SOUND 2,0,2,0
1520 NEXT
1530 WHILE SQ(1)XOR 4:WEND
1540 WINDOW SWAP 1
1550 WINDOW 1,20,6,18:PEN 1:PAPER 9:CLS
1560 bonus1=score*lev:bonus2=2*ti*lev:tscore=tscore+bonus1+bonus2
1570 LOCATE 2,2:a$="LEVEL BONUS "+FNsc$(bonus1,5):CALL &8000,àa$
1580 LOCATE 2,5:a$="TIME BONUS  "+FNsc$(bonus2,5):CALL &8000,àa$
1590 LOCATE 2,8:a$="TOTAL SCORE "+FNsc$(tscore,5):CALL &8000,àa$
1600 PEN 10:LOCATE 4,11:a$="PRESS ANY KEY!":CALL &8000,àa$
1610 WINDOW SWAP 1
1620 WHILE INKEY$<>"":WEND:CALL &BB18
1630 lev=lev+1
1640 GOSUB 2420
1650 GOTO 1040
1660 DI:SOUND 132,0,0,0,4,,FNnum(31,1)
1670 FOR a=1 TO 8
1680 xp=x(a):yp=y(a)
1690 IF RND>0.75 THEN 1750
1700 c(a)=INT(RND*9)+1
1710 LOCATE xp,yp:PEN FNnum(5,5):PRINT CHR$(244)
1720 CALL &BB9F,1
1730 LOCATE xp,yp:PEN FNnum(4,11):PRINT CHR$(244+c(a))
1740 CALL &BB9F
1750 NEXT
1760 EI:RETURN
1770 DI:SOUND 130,4*ti,0,0,3
1780 IF NOT flag THEN op=FNnum(10,1)ELSE op=1:flag=0
1790 op$=MID$(oper$,op,1)
1800 et=INSTR("+-*/",op$)+3
1810 SOUND 130,200,0,0,3,et
1820 PEN 1:LOCATE 2,2:PRINT op$
1830 EI:RETURN
1840 DI:ti=ti-1
1850 ORIGIN 0,0,600-5*(120-ti),640,6,6:CLG 0
1860 ORIGIN 0,0,0,5*ti,6,6:CLG 3
1870 CALL &BBBA:MOVE 5*ti-4,16
1880 TAG:PRINT CHR$(254)CHR$(255);:TAGOFF
1890 SOUND 129,4*ti,32767,3,,1
1900 EI:RETURN
1910 SOUND 135,0,0,15,2,,20
1920 FOR a=0 TO 3:re=REMAIN(a):NEXT
1930 WHILE SQ(1)XOR 4
1940 col=FNhue:CALL &BD19:BORDER col:INK 0,col
1950 WEND
1960 MODE 0:INK 0,0:INK 1,24:INK 2,18:INK 3,14:INK 4,6:BORDER 0
1970 PEN 1:LOCATE 3,6:a$="FINAL SCORE "+FNsc$(tscore,5):CALL &8000,àa$
1980 PEN 2:IF tscore>high THEN high=tscore:LOCATE 3,9:a$="A NEW HIGH SCORE!":CALL &8000,àa$:POKE 300,high MOD 256:POKE 301,high‡ 256
1990 PEN 3:LOCATE 3,12:a$="HIGH SCORE  "+FNsc$(high,5):CALL &8000,àa$
2000 PEN 4:LOCATE 2,16:a$="Another game? (Y/N)":CALL &8000,àa$
2010 WHILE INSTR("*YN",k$)<2
2020 k$=UPPER$(INKEY$):CALL &BD19:INK 2,FNhue
2030 WEND
2040 IF k$="N"THEN END
2050 RUN 1020
2060 SYMBOL AFTER 256:MEMORY &7FFF:SYMBOL AFTER 32
2070 ENT-1,3,3,3,3,-3,3:ENT-2,10,-2,1
2080 ENT-3,4,-20,1,4,10,1
2090 ENT-4,1,3,3,1,-6,3
2100 ENT-5,1,-3,3,1,6,3
2110 ENT-6,10,-4,1:ENT-7,10,4,1
2120 ENV 1,15,-1,1:ENV 2,15,-1,15
2130 ENV 3,10,-1,5:ENV 4,1,1,14,15,-1,1
2140 SYMBOL 240,24,60,24,60,126,126,36,102
2150 SYMBOL 241,12,30,12,62,127,62,18,102
2160 SYMBOL 242,24,36,24,60,126,126,36,102
2170 SYMBOL 243,48,120,48,124,254,124,72,102
2180 SYMBOL 244,1,14,62,127,255,255,126,56
2190 SYMBOL 245,0,0,24,8,8,8,28
2200 SYMBOL 246,0,0,28,4,28,16,28
2210 SYMBOL 247,0,0,28,4,28,4,28
2220 SYMBOL 248,0,0,20,20,28,4,4
2230 SYMBOL 249,0,0,28,16,28,4,28
2240 SYMBOL 250,0,0,28,16,28,20,28
2250 SYMBOL 251,0,0,28,4,4,4,4
2260 SYMBOL 252,0,0,28,20,28,20,28
2270 SYMBOL 253,0,0,28,20,28,4,28
2280 SYMBOL 254,0,0,0,0,16,95,72,63
2290 SYMBOL 255,0,12,28,60,124,252,16,252
2300 SYMBOL 37,238,0,221,0,187,0,119
2310 DEF FNsc$(a,b)=STRING$(b+1-LEN(STR$(a)),48)+MID$(STR$(a),2)
2320 DEF FNnum(a,b)=INT(RND*a)+b
2330 DEF FNhue=INT(RND*26)+1
2340 DIM maze$(25):oper$="++++---**/"
2350 tscore=0:lev=1
2360 RESTORE 2690
2370 FOR addr=&8000 TO &8045
2380 READ byte$:bt=VAL("&"+byte$)
2390 POKE addr,bt:ch=ch+bt
2400 NEXT
2410 IF ch<>7727 THEN PRINT"ERROR in lines 2690-2750":END
2420 MODE 0:BORDER 0:LOCATE 7,10:PEN FNnum(5,5)
2430 ti=120:flag=-1:del=200-15*lev
2440 RESTORE 2630
2450 FOR a=0 TO 12
2460 READ hue1,hue2:INK a,hue1,hue2
2470 NEXT
2480 a$="LEVEL"+STR$(lev):CALL &8000,àa$
2490 FOR a=1 TO 5000:NEXT
2500 CLS:PEN 4:LOCATE 1,3
2510 RESTORE 2650
2520 FOR a=1 TO 8
2530 READ x(a),y(a)
2540 NEXT
2550 RESTORE 2760
2560 FOR a=1 TO 22
2570 READ col$
2580 maze$(a+2)=col$
2590 PRINT col$;
2600 NEXT
2610 INK 4,15
2620 RETURN
2630 DATA 0,0,26,26,19,19,6,6,0,0,7,7
2640 DATA 24,24,18,18,10,10,2,2,26,9,0,0,0,0
2650 DATA 2,4,17,6,4,21,15,19
2660 DATA 10,12,13,17,19,23,6,8
2670 DATA 2,213,2,127,1,127,1,119,1,127,1,142,2,159
2680 DATA 2,190,1,213,1,213,2,190,2,142,2,169,4,159
2690 DATA eb,46,23,5e,23,56,eb,7e,c5,e5
2700 DATA cd,12,80,e1,c1,23,10,f5,cd,a5
2710 DATA bb,06,08,11,44,80,7e,12,13,12
2720 DATA 13,23,10,f8,3e,ee,21,44,80,cd
2730 DATA a8,bb,3e,ef,21,4c,80,cd,a8,bb
2740 DATA 06,05,21,3f,80,7e,cd,5a,bb,23
2750 DATA 10,f9,c9,ee,0a,08,ef,0b,00,00
2760 DATA %%%%%%%%%%%%%%%%%%%%
2770 DATA %                  %
2780 DATA % %%%%%%%  %%%%%%% %
2790 DATA % %              % %
2800 DATA % % %%%%%%%%%%%% % %
2810 DATA % % %          % % %
2820 DATA % % % %%%  %%% % % %
2830 DATA % % % %      % % % %
2840 DATA % % % % %%%% % % % %
2850 DATA % % % % %  % % % % %
2860 DATA % %   %      %   % %
2870 DATA % %   %      %   % %
2880 DATA % % % % %  % % % % %
2890 DATA % % % % %%%% % % % %
2900 DATA % % % %      % % % %
2910 DATA % % % %%%  %%% % % %
2920 DATA % % %          % % %
2930 DATA % % %%%%%%%%%%%% % %
2940 DATA % %              % %
2950 DATA % %%%%%%%  %%%%%%% %
2960 DATA %                  %
2970 DATA %%%%%%%%%%%%%%%%%%%%