home *** CD-ROM | disk | FTP | other *** search
/ Ahoy 1985 October / Ahoy_Magazine_85-10_1985_Double_L.d64 / dragon (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  7KB  |  230 lines

  1. 1 rem    *** dragon ***
  2. 2 rem multi-color sprite animation
  3. 4 rem ** move top of memory to make room for video block at 32768
  4. 5 poke 55,255:poke 56,127:poke 643,255:poke 644,127
  5. 9 rem      *** set-up subroutines ***
  6. 10 gosub 600:rem (video memory)
  7. 12 gosub 1000:rem (sprite shapes)
  8. 13 gosub 900:rem (sprite positions)
  9. 15 goto 100
  10. 98 rem      *** action loop ***
  11. 100 for an=0 to 3
  12. 105 k=kp(peek(653)):if k>2 then 370
  13. 110 if (k>1)and(q=1) then an=0:q=0:poke lt(0),st(xk,an):goto 105
  14. 115 if k>1 then 105
  15. 120 q=1:hp=hp+k(k):if hp<0 then hp=hp+1
  16. 125 if hp>hz then hp=hp-1
  17. 130 if k<>xk then xk=k
  18. 135 poke ht(0),hh(hp):poke hr,hb(hp)
  19. 140 poke lt(0),st(xk,an)
  20. 196 next:goto 100
  21. 296 return
  22. 369 rem ** put video memory back to first block, and screen memory to 1024
  23. 370 poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 3
  24. 371 poke 53272,20:poke 648,4
  25. 379 rem ** reenable shift/commodore and run-stop/restore
  26. 380 poke 657,0:poke 792,71:poke 808,237
  27. 390 end
  28. 598 rem    *** arrange memory ***
  29. 599 rem use third video block (32768 to 49151), so rom character set is usable.
  30. 600 vb=32768:poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 1
  31. 601 rem ** tell vic-2 where screen is without changing character set location
  32. 602 sb=0:poke 53272,(sb*16)+4:sb=vb+1024*sb
  33. 603 rem ** tell basic where screen is
  34. 604 bb=sb/256:poke 648,bb
  35. 608 rem    *** register addresses ***
  36. 609 rem ** sprite shape location table
  37. 610 lt(0)=sb+1016:for i=1 to 7:lt(i)=lt(i-1)+1:next
  38. 611 rem ** sprite color table
  39. 612 ct(0)=53287:for i=1 to 7:ct(i)=ct(i-1)+1:next
  40. 613 rem ** sprite horizontal position table (low bytes)
  41. 614 ht(0)=53248:for i=1 to 7:ht(i)=ht(i-1)+2:next
  42. 615 rem ** sprite vertical position table
  43. 616 vt(0)=53249:for i=1 to 7:vt(i)=vt(i-1)+2:next
  44. 617 rem ** sprite horizontal high-bit register
  45. 618 hr=53264
  46. 619 rem ** sprite enable register
  47. 620 es=53269
  48. 621 rem ** vertical expansion register (1=double height)
  49. 622 ve=53271
  50. 623 rem ** horizontal expansion register (1=double width)
  51. 624 he=53277
  52. 625 rem ** sprite priority register (1=sprite is in front of foreground)
  53. 626 pr=53275
  54. 627 rem ** multicolor enable register (1=multi-color enabled)
  55. 628 em=53276
  56. 629 rem ** sprite multicolor color registers
  57. 630 mr=53285:rem ('01' register: add 1 to mr for '11' register)
  58. 631 rem ** sprite-sprite collision reg:sprite-foreground collision reg
  59. 632 cs=53278:cf=53279
  60. 633 rem ** set-bit and clear-bit values
  61. 634 bs(0)=1:for i=1 to 7:bs(i)=2*bs(i-1):next
  62. 635 for i=0 to 7:bc(i)=255-bs(i):next
  63. 636 rem ** multicolor set-bit values
  64. 637 fori=0to3:ms(0,i)=i:next:fori=1to3:forj=0to3:ms(i,j)=ms(i-1,j)*4:next:next
  65. 638 rem     *** initialize values ***
  66. 639 rem ** foreground color
  67. 640 poke 53281,9:print "[147][129]";:rem (brown)
  68. 641 rem ** background color
  69. 642 poke 53281,0 :rem (black)
  70. 643 rem ** border color
  71. 644 poke 53280,9:rem (brown)
  72. 645 rem ** sprite colors (defaults: whi,red,l-grn,pur,grn,blu,yel,m-gray)
  73. 646 poke ct(0),5:rem (the scales are green)
  74. 647 rem ** set priority
  75. 648 poke pr,0:rem (all in front)
  76. 649 rem ** set horizontal sizes
  77. 650 poke he,1:rem (spr 0=double)
  78. 651 rem ** set vertical sizes
  79. 652 poke ve,1:rem (spr 0=doublt)
  80. 653 rem ** enable sprites
  81. 654 poke es,bs(0):rem (sprite 0 only)
  82. 655 rem ** enable multicolor for spr 0
  83. 656 poke em,bs(0)
  84. 657 rem ** set multi-colors 1 and 3 (1=light grey, 3=flame yellow)
  85. 658 poke mr,15:poke mr+1,7
  86. 689 rem     *** safety procedures ***
  87. 690 poke 657,128:rem disable shift/commodore character set switch
  88. 691 poke 808,234:poke 792,193:rem disable stop and stop/restore
  89. 696 return
  90. 898 rem     *** sprite positions ***
  91. 899 rem ** possible positions dim'ed
  92. 900 vz=19:hz=102:dim hh(hz),vv(vz),hb(hz)
  93. 901 rem ** assign  horizontal values
  94. 902 x=8:b=0:for i=0 to hz:hh(i)=x:hb(i)=b
  95. 903 x=x+3:if x>255 then x=x-256:b=1
  96. 904 next
  97. 905 rem ** assign vertical values
  98. 906 x=53:for i=0 to vz:vv(i)=x:x=x+8:next
  99. 919 rem ** keypress matrix
  100. 920 dim kp(7),k(2)
  101. 921 for i=0 to 7:kp(i)=2:next:kp(1)=1:kp(2)=0:kp(7)=3
  102. 922 k(0)=-1:k(1)=1:k(2)=0
  103. 929 rem ** initial sprite positioning
  104. 930 hp=6:vp=vz:xk=1:an=0
  105. 931 poke vt(0),vv(vp):poke ht(0),hh(hp):poke hr,hb(hp)
  106. 939 rem ** tell vic-2 where to find sprite shape
  107. 940 poke lt(0),st(xk,an)
  108. 949 rem ** clear screen
  109. 950 print "[147]";
  110. 996 return
  111. 998 rem     *** sprite shapes ***
  112. 999 rem ** # spr shapes -1; # shapes/animation seq; # lines/shape -1
  113. 1000 ns=1:as=3:ts=11
  114. 1001 rem ** locate sprite shape memory
  115. 1002 st(0,0)=16:for i=1 to ns:st(i,0)=st(i-1,0)+as+1:next
  116. 1003 for i=0 to ns:for j=1 to as:st(i,j)=st(i,j-1)+1:next:next
  117. 1004 for i=0 to ns:for j=0 to as:for k=0 to ts:read ss$
  118. 1005 for l=0 to 2:x=0:y=vb+st(i,j)*64+k*3+l
  119. 1006 rem ** convert strings to shape bytes (use ms(0-3,0-3) to set bits)
  120. 1007 for m=1 to 4:n=asc(mid$(ss$,m+l*4,1))
  121. 1008 if(n>48)and(n<52)then x=x or ms(4-m,n-48)
  122. 1009 next:poke y,x:next:print ss$:next
  123. 1010 z=64-(ts*3+2):for k=y+1 to y+z:poke k,0:next:next:next
  124. 1017 rem ** sprite shape data
  125. 1018 rem .='off'   1=color 1   2=color 2   3=color 3
  126. 1019 rem ** 1st shape, first seq
  127. 1020 data "......2....."
  128. 1021 data "....22.2...."
  129. 1022 data "....2222...."
  130. 1023 data "......22...."
  131. 1024 data ".....1222..."
  132. 1025 data "....22122..."
  133. 1026 data ".....1122.2."
  134. 1027 data ".....1122..2"
  135. 1028 data "......122..2"
  136. 1029 data ".......22..2"
  137. 1030 data "......1222.2"
  138. 1031 data "......222.2."
  139. 1039 rem ** 2nd shape, 1st sequence
  140. 1040 data "......2....."
  141. 1041 data "....22.2...."
  142. 1042 data "...33322...."
  143. 1043 data "....2222...."
  144. 1044 data "....11222..."
  145. 1045 data ".....2212..."
  146. 1046 data ".....1112..2"
  147. 1047 data ".....1112..2"
  148. 1048 data "......112.2."
  149. 1049 data ".......12.2."
  150. 1050 data ".....111222."
  151. 1051 data "......222..."
  152. 1059 rem ** 3rd shape, 1st sequence
  153. 1060 data "......2....."
  154. 1061 data "..3.22.2...."
  155. 1062 data ".3.3..22...."
  156. 1063 data "..3.2222...."
  157. 1064 data ".....1222..."
  158. 1065 data "....22122..."
  159. 1066 data ".....1122..2"
  160. 1067 data ".....1122.2."
  161. 1068 data "......122.2."
  162. 1069 data ".......22..2"
  163. 1070 data "......122222"
  164. 1071 data "......222..."
  165. 1079 rem ** 4th shape, 1st sequence
  166. 1080 data "3.....2....."
  167. 1081 data ".3..22.2...."
  168. 1082 data "3.3.2222...."
  169. 1083 data ".3....22...."
  170. 1084 data "3.....222..."
  171. 1085 data "....22222..."
  172. 1086 data ".....1222.2."
  173. 1087 data ".....1222.2."
  174. 1088 data "......222..2"
  175. 1089 data ".......22..2"
  176. 1090 data ".......222.2"
  177. 1091 data ".....2222.2."
  178. 1119 rem ** 1st shape, 2nd sequence
  179. 1120 data ".....2......"
  180. 1121 data "....2.22...."
  181. 1122 data "....2222...."
  182. 1123 data "....22......"
  183. 1124 data "...2221....."
  184. 1125 data "...22122...."
  185. 1126 data ".2.2211....."
  186. 1127 data "2..2211....."
  187. 1128 data "2..221......"
  188. 1129 data "2..22......."
  189. 1130 data "2.2221......"
  190. 1131 data ".2.222......"
  191. 1139 rem ** 2nd shape, 3rd seq
  192. 1140 data ".....2......"
  193. 1141 data "....2.22...."
  194. 1142 data "....22333..."
  195. 1143 data "....2222...."
  196. 1144 data "...22211...."
  197. 1145 data "...2122....."
  198. 1146 data "2..2111....."
  199. 1147 data "2..2111....."
  200. 1148 data ".2.211......"
  201. 1149 data ".2.21......."
  202. 1150 data ".222111....."
  203. 1151 data "...222......"
  204. 1160 data ".....2......"
  205. 1161 data "....2.22.3.."
  206. 1162 data "....22..3.3."
  207. 1163 data "....2222.3.."
  208. 1164 data "...2221....."
  209. 1165 data "...22122...."
  210. 1166 data "2..2211....."
  211. 1167 data ".2.2211....."
  212. 1168 data ".2.2211....."
  213. 1169 data "2..22......."
  214. 1170 data "222221......"
  215. 1171 data "...222......"
  216. 1179 rem ** 4th shape, 2nd sequence
  217. 1180 data ".....2.....3"
  218. 1181 data "....2.22..3."
  219. 1182 data "....2222.3.3"
  220. 1183 data "....22....3."
  221. 1184 data "...222.....3"
  222. 1185 data "...22222...."
  223. 1186 data ".2.2221....."
  224. 1187 data ".2.2221....."
  225. 1188 data "2..222......"
  226. 1189 data "2..22......."
  227. 1190 data "2.22........"
  228. 1191 data ".2.2222....."
  229. 1990 return
  230.