home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1985 October
/
Ahoy_Magazine_85-10_1985_Double_L.d64
/
dragon
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
7KB
|
230 lines
1 rem *** dragon ***
2 rem multi-color sprite animation
4 rem ** move top of memory to make room for video block at 32768
5 poke 55,255:poke 56,127:poke 643,255:poke 644,127
9 rem *** set-up subroutines ***
10 gosub 600:rem (video memory)
12 gosub 1000:rem (sprite shapes)
13 gosub 900:rem (sprite positions)
15 goto 100
98 rem *** action loop ***
100 for an=0 to 3
105 k=kp(peek(653)):if k>2 then 370
110 if (k>1)and(q=1) then an=0:q=0:poke lt(0),st(xk,an):goto 105
115 if k>1 then 105
120 q=1:hp=hp+k(k):if hp<0 then hp=hp+1
125 if hp>hz then hp=hp-1
130 if k<>xk then xk=k
135 poke ht(0),hh(hp):poke hr,hb(hp)
140 poke lt(0),st(xk,an)
196 next:goto 100
296 return
369 rem ** put video memory back to first block, and screen memory to 1024
370 poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 3
371 poke 53272,20:poke 648,4
379 rem ** reenable shift/commodore and run-stop/restore
380 poke 657,0:poke 792,71:poke 808,237
390 end
598 rem *** arrange memory ***
599 rem use third video block (32768 to 49151), so rom character set is usable.
600 vb=32768:poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 1
601 rem ** tell vic-2 where screen is without changing character set location
602 sb=0:poke 53272,(sb*16)+4:sb=vb+1024*sb
603 rem ** tell basic where screen is
604 bb=sb/256:poke 648,bb
608 rem *** register addresses ***
609 rem ** sprite shape location table
610 lt(0)=sb+1016:for i=1 to 7:lt(i)=lt(i-1)+1:next
611 rem ** sprite color table
612 ct(0)=53287:for i=1 to 7:ct(i)=ct(i-1)+1:next
613 rem ** sprite horizontal position table (low bytes)
614 ht(0)=53248:for i=1 to 7:ht(i)=ht(i-1)+2:next
615 rem ** sprite vertical position table
616 vt(0)=53249:for i=1 to 7:vt(i)=vt(i-1)+2:next
617 rem ** sprite horizontal high-bit register
618 hr=53264
619 rem ** sprite enable register
620 es=53269
621 rem ** vertical expansion register (1=double height)
622 ve=53271
623 rem ** horizontal expansion register (1=double width)
624 he=53277
625 rem ** sprite priority register (1=sprite is in front of foreground)
626 pr=53275
627 rem ** multicolor enable register (1=multi-color enabled)
628 em=53276
629 rem ** sprite multicolor color registers
630 mr=53285:rem ('01' register: add 1 to mr for '11' register)
631 rem ** sprite-sprite collision reg:sprite-foreground collision reg
632 cs=53278:cf=53279
633 rem ** set-bit and clear-bit values
634 bs(0)=1:for i=1 to 7:bs(i)=2*bs(i-1):next
635 for i=0 to 7:bc(i)=255-bs(i):next
636 rem ** multicolor set-bit values
637 fori=0to3:ms(0,i)=i:next:fori=1to3:forj=0to3:ms(i,j)=ms(i-1,j)*4:next:next
638 rem *** initialize values ***
639 rem ** foreground color
640 poke 53281,9:print "[147][129]";:rem (brown)
641 rem ** background color
642 poke 53281,0 :rem (black)
643 rem ** border color
644 poke 53280,9:rem (brown)
645 rem ** sprite colors (defaults: whi,red,l-grn,pur,grn,blu,yel,m-gray)
646 poke ct(0),5:rem (the scales are green)
647 rem ** set priority
648 poke pr,0:rem (all in front)
649 rem ** set horizontal sizes
650 poke he,1:rem (spr 0=double)
651 rem ** set vertical sizes
652 poke ve,1:rem (spr 0=doublt)
653 rem ** enable sprites
654 poke es,bs(0):rem (sprite 0 only)
655 rem ** enable multicolor for spr 0
656 poke em,bs(0)
657 rem ** set multi-colors 1 and 3 (1=light grey, 3=flame yellow)
658 poke mr,15:poke mr+1,7
689 rem *** safety procedures ***
690 poke 657,128:rem disable shift/commodore character set switch
691 poke 808,234:poke 792,193:rem disable stop and stop/restore
696 return
898 rem *** sprite positions ***
899 rem ** possible positions dim'ed
900 vz=19:hz=102:dim hh(hz),vv(vz),hb(hz)
901 rem ** assign horizontal values
902 x=8:b=0:for i=0 to hz:hh(i)=x:hb(i)=b
903 x=x+3:if x>255 then x=x-256:b=1
904 next
905 rem ** assign vertical values
906 x=53:for i=0 to vz:vv(i)=x:x=x+8:next
919 rem ** keypress matrix
920 dim kp(7),k(2)
921 for i=0 to 7:kp(i)=2:next:kp(1)=1:kp(2)=0:kp(7)=3
922 k(0)=-1:k(1)=1:k(2)=0
929 rem ** initial sprite positioning
930 hp=6:vp=vz:xk=1:an=0
931 poke vt(0),vv(vp):poke ht(0),hh(hp):poke hr,hb(hp)
939 rem ** tell vic-2 where to find sprite shape
940 poke lt(0),st(xk,an)
949 rem ** clear screen
950 print "[147]";
996 return
998 rem *** sprite shapes ***
999 rem ** # spr shapes -1; # shapes/animation seq; # lines/shape -1
1000 ns=1:as=3:ts=11
1001 rem ** locate sprite shape memory
1002 st(0,0)=16:for i=1 to ns:st(i,0)=st(i-1,0)+as+1:next
1003 for i=0 to ns:for j=1 to as:st(i,j)=st(i,j-1)+1:next:next
1004 for i=0 to ns:for j=0 to as:for k=0 to ts:read ss$
1005 for l=0 to 2:x=0:y=vb+st(i,j)*64+k*3+l
1006 rem ** convert strings to shape bytes (use ms(0-3,0-3) to set bits)
1007 for m=1 to 4:n=asc(mid$(ss$,m+l*4,1))
1008 if(n>48)and(n<52)then x=x or ms(4-m,n-48)
1009 next:poke y,x:next:print ss$:next
1010 z=64-(ts*3+2):for k=y+1 to y+z:poke k,0:next:next:next
1017 rem ** sprite shape data
1018 rem .='off' 1=color 1 2=color 2 3=color 3
1019 rem ** 1st shape, first seq
1020 data "......2....."
1021 data "....22.2...."
1022 data "....2222...."
1023 data "......22...."
1024 data ".....1222..."
1025 data "....22122..."
1026 data ".....1122.2."
1027 data ".....1122..2"
1028 data "......122..2"
1029 data ".......22..2"
1030 data "......1222.2"
1031 data "......222.2."
1039 rem ** 2nd shape, 1st sequence
1040 data "......2....."
1041 data "....22.2...."
1042 data "...33322...."
1043 data "....2222...."
1044 data "....11222..."
1045 data ".....2212..."
1046 data ".....1112..2"
1047 data ".....1112..2"
1048 data "......112.2."
1049 data ".......12.2."
1050 data ".....111222."
1051 data "......222..."
1059 rem ** 3rd shape, 1st sequence
1060 data "......2....."
1061 data "..3.22.2...."
1062 data ".3.3..22...."
1063 data "..3.2222...."
1064 data ".....1222..."
1065 data "....22122..."
1066 data ".....1122..2"
1067 data ".....1122.2."
1068 data "......122.2."
1069 data ".......22..2"
1070 data "......122222"
1071 data "......222..."
1079 rem ** 4th shape, 1st sequence
1080 data "3.....2....."
1081 data ".3..22.2...."
1082 data "3.3.2222...."
1083 data ".3....22...."
1084 data "3.....222..."
1085 data "....22222..."
1086 data ".....1222.2."
1087 data ".....1222.2."
1088 data "......222..2"
1089 data ".......22..2"
1090 data ".......222.2"
1091 data ".....2222.2."
1119 rem ** 1st shape, 2nd sequence
1120 data ".....2......"
1121 data "....2.22...."
1122 data "....2222...."
1123 data "....22......"
1124 data "...2221....."
1125 data "...22122...."
1126 data ".2.2211....."
1127 data "2..2211....."
1128 data "2..221......"
1129 data "2..22......."
1130 data "2.2221......"
1131 data ".2.222......"
1139 rem ** 2nd shape, 3rd seq
1140 data ".....2......"
1141 data "....2.22...."
1142 data "....22333..."
1143 data "....2222...."
1144 data "...22211...."
1145 data "...2122....."
1146 data "2..2111....."
1147 data "2..2111....."
1148 data ".2.211......"
1149 data ".2.21......."
1150 data ".222111....."
1151 data "...222......"
1160 data ".....2......"
1161 data "....2.22.3.."
1162 data "....22..3.3."
1163 data "....2222.3.."
1164 data "...2221....."
1165 data "...22122...."
1166 data "2..2211....."
1167 data ".2.2211....."
1168 data ".2.2211....."
1169 data "2..22......."
1170 data "222221......"
1171 data "...222......"
1179 rem ** 4th shape, 2nd sequence
1180 data ".....2.....3"
1181 data "....2.22..3."
1182 data "....2222.3.3"
1183 data "....22....3."
1184 data "...222.....3"
1185 data "...22222...."
1186 data ".2.2221....."
1187 data ".2.2221....."
1188 data "2..222......"
1189 data "2..22......."
1190 data "2.22........"
1191 data ".2.2222....."
1990 return