C64_Superchase/original_listings/superchase-VIC20.bas

109 lines
4.9 KiB
QBasic

40 gosub 14000
42 poke 1,0:poke 2,0
45 gosub 12000:clr:sk=peek(0):p=peek(1)*256+peek(2)
100 goto 10000
1000 m$=""
1110 poke dd,127:p1=peek(d1) and ad:p2=peek(d2) 'legge joystick
1120 if p1=59 then m$="+{left}{up}":print m$;:y=y-1:c$="{down}":cx=0:cy=1:goto 1160: 'rem bugfix changed 58 to 59 (rms)
1130 if p2=119 then m$="+{left}{rght}":print m$;:x=x+1:c$="{left}":cx=-1:cy=0:goto 1160
1140 if p1=47 then m$="+{left}{left}":print m$;:x=x-1:c$="{rght}":cx=1:cy=0:goto 1160: 'rem bugfix changed 46 to 47 (rms)
1150 if p1=55 then m$="+{left}{down}":print m$;:y=y+1:c$="{up}":cy=-1:cx=0:goto 1160: 'rem bugfix changed 54 to 55 (rms)
1155 goto 1300
1160 if fnch(s)=wl then print c$;:x=x+cx:y=y+cy:goto 1300
1170 f$=f$+right$(m$,1)
1180 if fnch(s)=di then p=p+100*(el-s):pc=pc+1
1190 if fnch(s)=sp then p=p+50*(el-s):pc=pc+1
1200 if fnch(s)=cl then p=p+30*(el-s):pc=pc+1
1210 if fnch(s)=he then p=p+20*(el-s):pc=pc+1
1220 if fnch(s)=ci then p=p+10*(el-s):pc=pc+1
1250 j$=str$(p*sk):for j=1 to len(j$):poke sc+j+489,asc(mid$(j$,j,1)):next
1300 print"Q{left}";
1310 if pc>=61 then print dn$"no more treasure.";:goto 7000
1900 return
2000 if len(f$)>=30 then gosub 3000
2005 fm=fm+1:if fm/s<>int(fm/s) then return
2006 for h=1 to skl:
2007 poke fnplot(0),32
2010 j$=left$(f$,1):f$=mid$(f$,2)
2030 poke v,15:poke s1,254-len(f$):for m=1 to 10:next:poke 36875,0
2100 if j$="{up}"then yf=yf-1:goto 2200
2110 if j$="{rght}"then xf=xf+1:goto 2200
2120 if j$="{down}"then yf=yf+1:goto 2200
2130 if j$="{left}"then xf=xf-1:goto 2200
2150 goto 2200
2200 poke fnpl(0),42
2205 next
2210 return
3000 poke fnpl(0),32
3007 s=s-1:if s<1 then s=1
3008 j$=str$(el-s):for j=1 to len(j$):poke sc+j+502,asc(mid$(j$,j,1)):next
3010 for c= 1 to 10:j$=mid$(f$,c,1):if j$="{up}"then yf=yf-1:goto 3100
3020 if j$="{down}" then yf=yf+1:goto 3100
3030 if j$="{rght}" then xf=xf+1:goto 3100
3040 if j$="{left}" then xf=xf-1:goto 3100
3100 poke fnpl(0),42
3150 if c/sk=int(c/sk) then gosub 1000
3310 for m=c to c+2:poke s2,m*3+130:for n=1 to 10:next:next:poke s2,0
3350 poke fnplot(0),32
3400 next
3500 f$=mid$(f$,el):return
4000 if x=xf and y=yf then print dn$"a tasty morsel indeed!";:gosub 6000:goto 11000
4500 return
6000 poke 36877,220:for l=15 to 0 step -1:poke 36878,l:for m=1 to 300:next:next:poke 36877,0:poke 36878,15
6010 return
7000 for k=1 to 30
7005 poke 36876,220:for l=1 to 5:next:poke 36876,0:for l=1 to 5:next:poke 36876,200:for l=1 to 5:next
7010 poke 36876,0:for l=1 to 5:next:next
7100 j=int(p/256):poke 1,j:poke 2,p-j*256
7200 sk=peek(0)+1:poke 0,sk:goto 45
7999 goto 7000
8000 for m=1 to 500:gosub 1000:if len(f$)<20 then next
8010 for j=8142 to 8142+20:poke j,32:next
8100 gosub 1000:gosub 2000:gosub 4000:goto 8100
10000 dn$="{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rvon}{wht}"
10030 s=10:pc=0:sc=7680:ro=22
10050 def fnpl(xx)=(yf*ro+xf)+sc
10060 def fnch(xx)=peek((y*ro+x)+sc)
10077 so=10:poke 36878,15
10100 dd=37154:d1=37151:d2=37152:ad=63
10110 wl=102:di=90:sp=65:cl=88:he=83:ci=87:el=11
10120 v=36878:s1=36875:s2=36876
10500 ti$="000000"
10600 print dn$" go !!!!!! "
10700 print dn$"{rvof}{down}{blk}score:{wht} {blk}speed:{wht} 1{home}"
10800 print"{home}{rght}{down}";:x=1:y=1:xf=1:yf=1
10900 goto 8000
11000 rem game over
11010 poke 37154,255 ' joystick, "rimette a posto la candela"
11105 print:print"{down}time was ";mid$(ti$,3,2);" minutes, ";right$(ti$,2);" seconds"
11110 print"play again ? {CBM-@}{left}";
11120 get j$:if j$="" then 11120
11130 print j$:if j$="n"then end
11140 if j$="y" then run
11150 print:print"{up}";:goto11110
12000 dim a(3):a(0)=2:a(1)=-44:a(2)=-2:a(3)=44:wl=102:hl=32:sc=7680:a=sc+23:j=rnd(-ti) ' sc:inizio schermo
12010 poke 36879,110 'colore
12100 print chr$(142)"{clr}{yel}{rvof}";:for i = 1 to 21:print"{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}":next:poke a,4
12200 j=int(rnd(1)*4):x=j
12205 b=a+a(j)
12210 if peek(b) = wl then poke b,j:poke a+a(j)/2,hl:a=b:goto 12200
12240 j=(j+1)*-(j<3):ifj<>xthen12205
12250 j=peek(a):poke a,hl:if j<4 then a=a-a(j):goto 12200
12300 print"{home}{down}{rght}V"
12305 read j,k,c:if j<0 then 12500
12310 for a=1 to j
12320 b=int(rnd(1)*410):if(b-21)/22=int((b-21)/22) then 12320
12330 if peek(b+7702)<>32 then 12320
12340 poke b+7702,k:poke b+38422,c
12350 next:goto 12305
12400 data 2,90,1,4,65,0,7,88,5,9,83,2,39,87,3,-1,0,0
12450 print"12450:p="p
12500 return
14000 poke 36879,46 'colore
14010 print chr$(14)"{clr}{wht}{down}{down}{down}{down}{down}{down}{rght}{rght} {CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@} {rvon}SuperChase{rvof}"
14050 print"{down}{down}{down}{down}{down} Skill Level (1-9):{rvon} {rvof}{left}{left}";
14060 get j$:if j$ = ""then 14060
14070 sk =val(j$):if sk<1 or sk>9 then 14060
14075 poke 0,sk ' jump to USR...?
14080 print sk:poke 0,sk:return