Dim scrAddrCache(25) as WORD @loc_scrAddrCache ' 0 -> 24 loc_scrAddrCache: DATA AS WORD 1024, 1064, 1104, 1144, 1184, 1224, 1264, 1304, 1344, 1384 DATA AS WORD 1424, 1464, 1504, 1544, 1584, 1624, 1664, 1704, 1744, 1784 DATA AS WORD 1824, 1864, 1904, 1944, 1984 Dim bTrailChar as BYTE : bTrailChar = 128 poke 53280, 13 : poke 53281, 13 '~ 100 CALL CLEAR sys $E544 FAST ' clear screen poke 646, 0 'black chars locate 0, 24 '~ 110 PRINT TAB(6);"**************" '~ 120 PRINT TAB(6);"* SUPERCHASE *" '~ 130 PRINT TAB(6);"**************" '~ 140 CALL CHAR(96,"00183C7E7E3C18") --- TREASURE! (rombo) '~ 150 CALL COLOR(9,14,12) --- 96-103 -> Magenta/ Light Yellow '~ 160 PRINT : : : :"USE THE ARROW KEYS TO MOVE." '~ 170 PRINT : :"TRY TO GATHER AS MANY" '~ 180 PRINT :"TREASURES (`) IN THE MAZE" '~ 190 PRINT :"AS POSSIBLE BEFORE THE" '~ 200 PRINT :"ENEMY CATCHES YOU!" '~ 210 CALL COLOR(10,5,5) --- 104-111 -> Dark Blue/ Dark Blue '~ 220 CALL COLOR(11,12,12) --- 112-119 -> Light Yellow/ Light Yellow '~ 230 CALL CHAR(120,"383810FE10387CFE") --- HERO! '~ 240 CALL COLOR(12,7,12) --- 120-127 -> Dark Red/ Light Yellow '~ 250 CALL CHAR(128,"383810FE10387CFE") --- Ghost/shadow '~ 260 CALL COLOR(13,16,12) --- 128-135 -> White/ Light Yellow '~ 270 PRINT : : :"PRESS ANY KEY TO BEGIN"; '~ 280 CALL KEY(0,K,S) '~ 290 IF S<1 THEN 280 dim charset_array(2048) as BYTE @LOC_charset_addr memcpy @charset_array, $3800, 2048 poke $D018, 31 'final character location: $3800 PRINT " **************" PRINT " * superchase *" PRINT " **************" PRINT "{13}{13}{13}{13} use the arrow keys to move." PRINT "{13}{13} try to gather as many" PRINT "{13} treasures ({160}) in the maze" PRINT "{13} as possible before the" PRINT "{13} enemy catches you!" PRINT "{13}{13}{13} press any key to begin"; poke 198, 0 : wait 198, 1 : poke 198, 0 line300: '~ 300 SC=0 '~ 310 LV=1 SC = 0 LV = 1 Dim FL as BYTE : FL = 0 Dim CX as INT : CX = 0 Dim CY as INT : CY = 0 Dim CCX as INT : CCX = 0 Dim CCY as INT : CCY = 0 Dim G as BYTE : G = 0 line320: '~ 320 CALL CLEAR sys $E544 FAST ' clear screen '~ 330 CALL SCREEN(4) --- light green poke 53280, 5 ' green poke 53281, 7 'yellow '~ 340 FOR X=3 TO 21 '~ 350 CALL HCHAR(X,3,104,27) '~ 360 NEXT X memset $0400, 1000, 104 'reverse space memset $D800, 1000, 6 'blue '~ 370 RANDOMIZE Randomize TI() '~ 380 FOR I=1 TO 65 '~ 390 X=2*(INT(9*RND))+4 '~ 400 Y=2*(INT(11*RND))+4 '~ 410 CALL HCHAR(X,Y,112,5) '~ 420 NEXT I For I AS BYTE = 1 to 65 X = 2 * (CBYTE(9*RND())) + 4 Y = 2 * (CBYTE(11*RND())) + 4 TEXTAT Y, X, "{176}{176}{176}{176}{176}" Next I '~ 430 FOR I=1 TO 60 '~ 440 X=2*(INT(7*RND))+4 '~ 450 Y=2*(INT(13*RND))+4 '~ 460 CALL VCHAR(X,Y,112,5) '~ 470 NEXT I For I AS BYTE = 1 to 60 X = 2 * (CBYTE(7*RND())) + 4 Y = 2 * (CBYTE(13*RND())) + 4 CHARAT Y, X , 112 CHARAT Y, X + 1, 112 CHARAT Y, X + 2, 112 CHARAT Y, X + 3, 112 CHARAT Y, X + 4, 112 Next I '~ 480 CALL HCHAR(4,4,112,5) '~ 490 CALL VCHAR(4,4,112,5) TEXTAT 4, 4, "{176}{176}{176}{176}{176}" CHARAT 4, 5, 112 CHARAT 4, 6, 112 CHARAT 4, 7, 112 CHARAT 4, 8, 112 '~ 500 FOR I=1 TO 80 '~ 510 X=2*(INT(9*RND))+4 '~ 520 Y=2*(INT(13*RND))+4 '~ 530 CALL HCHAR(X,Y,96) '~ 540 NEXT I For I AS BYTE = 1 to 80 X = 2 * (CBYTE(9*RND())) + 4 Y = 2 * (CBYTE(13*RND())) + 4 CHARAT Y, X, 96, 4 ' 4 = magenta Next I '~ 550 FOR I=1 TO 6 '~ 560 CALL HCHAR(23,2+I,ASC(SEG$("SCORE:",I,1))) '~ 570 NEXT I TEXTAT 3, 23, "score:", 0 'black '**************************************************************************** '~ 580 CALL SOUND(100,1497,2) '~ 590 T=0 T = 0 '~ 600 IF LV<8 THEN 620 '~ 610 LV=7 IF LV = 8 Then LV = 7 '~ 620 A=4 '~ 630 B=4 '~ 640 C=4 '~ 650 D=4 '~ 660 PG=112 A = 4 B = 4 C = 4 D = 4 PG = 112 '**************************************************************************** line670: '~ 670 CALL HCHAR(A,B,120) CHARAT B, A, 120, 2 ' 2 = Red '~ 680 IF T<8-LV THEN 1410 IF T < 8-LV THEN goto line1410 '~ 690 IF FL=0 THEN 740 IF FL = 0 THEN goto line740 '~ 700 IF FL/2=INT(FL/2)THEN 1140 IF (FL AND 1) = 0 THEN Goto line1140 '~ 710 CCX=CX '~ 720 CCY=CY '~ 730 FL=0 CCX = CX CCY = CY FL = 0 textat 0, 0, "-fl " + str$(FL) + " ccx " + str$(CCX) + " ccy " + str$(CCY) + " cx " + str$(cx) + " cy " + str$(cy) + " ", 12 : poke 198,0 : wait 198, 1 : poke 198,0 line740: 'PRIMO CHECK ------------------------------------------------- '~ 740 CALL GCHAR(C+1,D,GC) '~ 750 IF GC=120 THEN 1760 '~ 760 IF GC=104 THEN 810 '~ 770 IF GC<>128 THEN 810 '~ 780 CX=1 '~ 790 CY=0 '~ 800 GOTO 1340 GC = peek(scrAddrCache(C + 1) + D) IF GC = 120 THEN goto line1760 IF GC = 104 THEN goto line810 IF GC <> 128 THEN goto line810 CX = 1 CY = 0 GOTO line1340 line810: '~ 810 CALL GCHAR(C,D+1,GC) '~ 820 IF GC=120 THEN 1760 '~ 830 IF GC=104 THEN 880 '~ 840 IF GC<>128 THEN 880 '~ 850 CX=0 '~ 860 CY=1 '~ 870 GOTO 1340 GC = peek(scrAddrCache(C) + D + 1) IF GC = 120 THEN goto line1760 IF GC = 104 THEN goto line880 IF GC <> 128 THEN goto line880 CX = 0 CY = 1 GOTO line1340 line880: '~ 880 CALL GCHAR(C-1,D,GC) '~ 890 IF GC=120 THEN 1760 '~ 900 IF GC=104 THEN 950 '~ 910 IF GC<>128 THEN 950 '~ 920 CX=-1 '~ 930 CY=0 '~ 940 GOTO 1340 GC = peek(scrAddrCache(C - 1) + D) IF GC = 120 THEN goto line1760 IF GC = 104 THEN goto line950 IF GC <> 128 THEN goto line950 CX = -1 CY = 0 GOTO line1340 line950: '~ 950 CALL GCHAR(C,D-1,GC) '~ 960 IF GC=120 THEN 1760 '~ 970 IF GC=128 THEN 1320 '~ 980 IF GC=112 THEN 1320 GC = peek(scrAddrCache(C) + D - 1) IF GC = 120 THEN goto line1760 IF GC = 128 THEN goto line1320 IF GC = 112 THEN goto line1320 '~ 990 FL=FL+1 '~ 1000 IF FL/2=INT(FL/2)THEN 1040 FL = FL + 1 textat 0, 0, "fl " + str$(FL) + " ccx " + str$(CCX) + " ccy " + str$(CCY) + " cx " + str$(cx) + " cy " + str$(cy) + " ", 2 : poke 198,0 : wait 198, 1 : poke 198,0 IF (FL AND 1) = 0 then goto line1040 '~ 1010 CX=CCX '~ 1020 CY=CCY '~ 1030 GOTO 1160 CX = CCX CY = CCY GOTO line1160 line1040: '-----------CHECK con SGN! '~ 1040 CX=SGN(A-C) '~ 1050 CY=0 '~ 1060 IF CX<>0 THEN 1080 '~ 1070 CY=SGN(D-B) textat 0, 0, "SGN! fl " + str$(FL) + " ccx " + str$(CCX) + " ccy " + str$(CCY) + " cx " + str$(cx) + " cy " + str$(cy) + " ", 11 : poke 198,0 : wait 198, 1 : poke 198,0 CX = SGN(A - C) CY = 0 IF CX <> 0 THEN goto line1080 CY = SGN(D - B) line1080: '~ 1080 CALL GCHAR(C+CX,D+CY,GC) '~ 1090 IF GC=104 THEN 1110 '~ 1100 IF (GC=96)+(GC=112)THEN 1340 '~ 1110 CX=-1 '~ 1120 CY=0 '~ 1130 GOTO 1160 GC = peek(scrAddrCache(C + CX) + D + CY) IF GC = 104 THEN goto line1110 IF (GC = 96) OR (GC = 112) THEN goto line1340 line1110: CX = -1 CY = 0 GOTO line1160 line1140: '~ 1140 FL=FL+1 '~ 1150 IF FL>1 THEN 1300 FL = FL + 1 textat 0, 0, "!fl " + str$(FL) + " ccx " + str$(CCX) + " ccy " + str$(CCY) + " cx " + str$(cx) + " cy " + str$(cy) + " ", 4 : poke 198,0 : wait 198, 1 : poke 198,0 IF FL > 1 THEN goto line1300 line1160: '---------------SECONDO CHECK '~ 1160 CALL GCHAR(C+CX,D+CY,GC) '~ 1170 IF (GC=112)+(GC=96)+(GC=128)THEN 1340 '~ 1180 CX=1 '~ 1190 CY=0 '~ 1200 CALL GCHAR(C+CX,D,GC) '~ 1210 IF (GC=112)+(GC=96)+(GC=128)THEN 1340 '~ 1220 CX=-1 '~ 1230 CALL GCHAR(C+CX,D,GC) '~ 1240 IF (GC=112)+(GC=96)+(GC=128)THEN 1340 '~ 1250 CX=0 '~ 1260 CY=-1 '~ 1270 CALL GCHAR(C,D+CY,GC) '~ 1280 IF (GC=112)+(GC=96)+(GC=128)THEN 1340 '~ 1290 CY=1 textat 0, 0, "!fl " + str$(FL) + " ccx " + str$(CCX) + " ccy " + str$(CCY) + " cx " + str$(cx) + " cy " + str$(cy) + " ", 10 : poke 198,0 : wait 198, 1 : poke 198,0 GC = peek(scrAddrCache(C + CX) + D + CY) IF (GC = 112) OR (GC = 96) OR (GC = 128) THEN goto line1340 CX = 1 CY = 0 GC = peek(scrAddrCache(C + CX) + D) IF (GC = 112) OR (GC = 96) OR (GC = 128) THEN goto line1340 CX = -1 GC = peek(scrAddrCache(C + CX) + D) IF (GC = 112) OR (GC = 96) OR (GC = 128) THEN goto line1340 CX = 0 CY = -1 GC = peek(scrAddrCache(C) + D + CY) IF (GC = 112) OR (GC = 96) OR (GC = 128) THEN goto line1340 CY = 1 line1300: '~ 1300 CALL GCHAR(C+CX,D+CY,GC) '~ 1310 IF GC=104 THEN 1390 ELSE 1340 GC = peek(scrAddrCache(C + CX) + D + CY) IF GC = 104 THEN goto line1390 ELSE goto line1340 line1320: '~ 1320 CX=0 '~ 1330 CY=-1 CX = 0 CY = -1 line1340: '~ 1340 IF PG=96 THEN 1360 '~ 1350 PG=112+FL IF PG = 96 THEN goto line1360 PG = 112 + FL line1360: '~ 1360 CALL HCHAR(C,D,PG) '~ 1370 C=C+CX '~ 1380 D=D+CY CHARAT D, C, PG, 4 '4 = magenta C = C + CX D = D + CY line1390: '~ 1390 CALL HCHAR(C,D,42) '~ 1400 PG=GC textat 0, 0, "fl " + str$(FL) + " ccx " + str$(CCX) + " ccy " + str$(CCY) + " cx " + str$(cx) + " cy " + str$(cy) + " ", 0 CHARAT D, C, 42, 0 ' 0 = black PG = GC '**************************************************************************** line1410: '~ 1410 CALL KEY(1,K1,S) '~ 1420 IF (K1<0)+(K1>5)THEN 1410 '~ 1430 CALL HCHAR(A,B,128) '~ 1440 ON K1+1 GOTO 1540,1410,1590,1640,1410,1690 K1 = peek( $DC00) : K1 = 127 - K1 if K1 = 0 then goto line1410 IF K1 = 16 then 'fire if bTrailChar = 128 then bTrailChar = 112 else bTrailChar = 128 end if IF K1 > 8 then goto line1410 do loop until peek ( $DC00) = 127 CHARAT B, A, bTrailChar, 1 ' 1 = White on K1 goto line1410, line1690, line1540, line1410, line1590, line1410, line1410, line1410, line1640, line1410, line1410, line1410, line1410, line1410, line1410, line1410, line1410 'sopra 1 'sotto 2 'sinistra 4 'sinistrasopra 5 'sinistrasotto 6 'destra 8 'destrasopra 9 'destrasotto 10 'fuoco 16 line1450: '~ 1450 IF G<>96 THEN 670 '~ 1460 CALL SOUND(100,-1,4) '~ 1470 SC=SC+1 '~ 1480 SC$=STR$(SC) '~ 1490 FOR I=1 TO LEN(SC$) '~ 1500 CALL HCHAR(23,10+I,ASC(SEG$(SC$,I,1))) '~ 1510 NEXT I '~ 1520 T=T+1 '~ 1530 IF T<45 THEN 670 ELSE 320 + ALZA LV! 'wait $d011, 128: wait $d011, 128, 128: wait $d011, 128: wait $d011, 128, 128 IF G <> 96 then goto line670 poke 53280, 13 : wait $d011, 128 : wait $d011, 128, 128 : wait $d011, 128 : wait $d011, 128, 128 : poke 53280, 5 ' light green, green SC = SC + 1 textat 10, 23, str$(SC), 0 T = T + 1 IF T < 45 then goto line670 else Goto line320 '~ IF T < 45 then '~ goto line670 '~ Else '~ LV = LV + 1 '~ Goto line320 '~ End If line1540: '~ 1540 CALL GCHAR(A+1,B,G) '~ 1550 IF G=104 THEN 1740 '~ 1560 IF G=42 THEN 1760 '~ 1570 A=A+1 '~ 1580 GOTO 1450 G = peek(scrAddrCache(A + 1) + B) IF G = 104 then goto line1740 IF G = 42 then goto line1760 A = A + 1 Goto line1450 line1590: '~ 1590 CALL GCHAR(A,B-1,G) '~ 1600 IF G=104 THEN 1740 '~ 1610 IF G=42 THEN 1760 '~ 1620 B=B-1 '~ 1630 GOTO 1450 G = peek(scrAddrCache(A) + B - 1) IF G = 104 then goto line1740 IF G = 42 then goto line1760 B = B - 1 Goto line1450 line1640: '~ 1640 CALL GCHAR(A,B+1,G) '~ 1650 IF G=104 THEN 1740 '~ 1660 IF G=42 THEN 1760 '~ 1670 B=B+1 '~ 1680 GOTO 1450 G = peek(scrAddrCache(A) + B + 1) IF G = 104 then goto line1740 IF G = 42 then goto line1760 B = B + 1 Goto line1450 line1690: '~ 1690 CALL GCHAR(A-1,B,G) '~ 1700 IF G=104 THEN 1740 '~ 1710 IF G=42 THEN 1760 '~ 1720 A=A-1 '~ 1730 GOTO 1450 G = peek(scrAddrCache(A - 1) + B) IF G = 104 then goto line1740 IF G = 42 then goto line1760 A = A - 1 Goto line1450 line1740: '~ 1740 CALL SOUND(-100,-5,4) '~ 1750 GOTO 670 poke 53280, 2 : wait $d011, 128 : wait $d011, 128, 128 : poke 53280, 5 ' red, green goto line670 '**************************************************************************** line1760: '~ 1760 CALL SOUND(200,-6,4) '~ 1770 FOR I=1 TO 3 '~ 1780 CALL SCREEN(16) '~ 1790 CALL SCREEN(9) '~ 1800 CALL SCREEN(8) '~ 1810 NEXT I '~ 1820 PRINT "GOT CAUGHT!!!" '~ 1830 PRINT "TRY AGAIN? (Y/N)"; '~ 1840 CALL KEY(0,K,S) '~ 1850 IF K=89 THEN 300 '~ 1860 IF K<>78 THEN 1840 '~ 1870 CALL CLEAR '~ 1880 END Print "beccato!!!" poke 198, 0 : wait 198,1 : poke 198, 0 goto line300 LOC_charset_addr: incbin "charset-debug.chr"