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