100 CALL CLEAR :: REM *** GUNSMOKE 99s *** 103 CALL MAGNIFY(3)::CALL LINK("SCRN2"):: 150 input "DELAY:":DELAY :: INPUT "YVEL:":YV::INPUT "COORD.X:":X::INPUT "COORD.Y:":Y 155 INPUT "DELSPRITE:":W1::INPUT"COLOR:":C:: INPUT "CALL LOAD:":CL::INPUT "TIME:":CL1 160 call clear 170 IF CL=1 then CALL LOAD(-1,CL1) 111 XV=0::YV=9::DELAY=5::DELAY1=5::VX1=20::VY1=20::X=145::Y=20::SW=0::D=1::C=16::FT=0 112 ROWMIN=10::COLMIN=10::COLMAX=250::KILL=0::RST=1::TOLL=5 191 REM * SET INITIAL 195 CALL XSWAP(D,S1,S2,S3,S4,S5,S6,S7,W1) 200 CALL XCHAR(D,W1) 229 REM *** SPRITE SHOW BASED ON DIRECTION D=-1->LEFT , D=1->RIGHT 230 CALL XSHOW(FT,D,S1,S2,S3,S4,S5,S6,S7,X,Y,C) 240 FT=1 :: REM FIRST TIME 298 REM ********************* 299 REM * KEYBOARD SCAN 300 IF CL=1 THEN CALL LINK("SYNC") 301 CALL XSCAN(D,D1,K,S,FIRE) 329 REM * OTHER KEYS 330 IF K>=49 AND K<=57 THEN CALL XPOSI(K) 335 IF K=88 THEN CALL XEND::GOTO 900 338 REM ********************* 339 REM * NO KEY PRESS 340 IF S=0 THEN 300 358 REM ********************* 359 REM * TURN SPRITE LEFT/RIGHT 360 IF D<>D1 THEN CALL XSWAP(D,S1,S2,S3,S4,S5,S6,S7,W1):: CALL XSHOW(FT,D,S1,S2,S3,S4,S5,S6,S7,X,Y,C):: GOTO 300 368 REM ********************* 369 REM * MOVE SPRITE 370 CALL XMOVE(D,Y,YV)::CALL XSLIDE(D,DELAY):: 380 FRM=FRM+1::CALL XSYNC(FRM,RST,FT,D,S1,S2,S3,S4,S5,S6,S7,X,Y,C) 400 GOTO 300 900 END 1200 SUB XSYNC(FRM,RST,FT,D,S1,S2,S3,S4,S5,S6,S7,X,Y,C) 1210 IF D=1 THEN CALL POSITION(#1,H,Y) 1215 IF D=-1 THEN CALL POSITION(#2,H,Y) 1220 IF FRM10 THEN 4880 4840 CALL MOTION(#1,0,0,#2,0,0,#3,0,0,#4,0,0,#5,0,0,#6,0,0,#7,0,0) 4850 SUBEXIT 4880 IF D=1 AND YV>0 THEN YV=YV*D::GOTO 4889 4881 IF D=-1 AND YV<0 THEN YV=YV::GOTO 4889 4882 IF D=1 AND YV<0 THEN YV=YV*-1::GOTO 4889 4883 IF D=-1 AND YV>0 THEN YV=YV*D::GOTO 4889 4889 CALL MOTION(#1,0,YV,#2,0,YV,#3,0,YV,#4,0,YV,#5,0,YV,#6,0,YV,#7,0,YV) 4890 SUBEND 4500 SUB XSLIDE(D,DELAY) 4510 REM IF D=-1 THEN 4540 4515 REM *** RIGH 4520 CALL PATTERN(#5,136) 4525 CALL PATTERN(#6,140) 4530 CALL PATTERN(#5,128)::CALL PATTERN(#6,132) 4536 REM GOTO 4570 4537 REM *** LEFT 4540 REM CALL PATTERN(#5,136)::FOR DLY=1 TO DELAY:: NEXT DLY 4545 REM CALL PATTERN(#6,140)::FOR DLY=1 TO DELAY:: NEXT DLY 4550 REM CALL PATTERN(#5,128)::CALL PATTERN(#6,132)::FOR DLY=1 TO DELAY:: NEXT DLY 4570 CALL MOTION(#1,0,0,#2,0,0,#3,0,0,#4,0,0,#5,0,0,#6,0,0,#7,0,0) 4590 SUBEND 4600 SUB XSWAP(D,TSX,TDX,BSX,BDX,LSX,LDX,G0DX,W1) 4630 TSX=112::TDX=116::BSX=120::BDX=124::LSX=128::LDX=132::G0DX=108 4640 CALL XCHAR(D,W1) 4690 SUBEND 4700 SUB XSHOW(FT,D,S1,S2,S3,S4,S5,S6,S7,X,Y,C) 4702 IF FT=0 THEN 4710 4705 REM CALL POSITION(#1,H,Y) 4710 IF D=-1 THEN GOTO 4760 4720 REM *** SPRITE RIGHT 4730 CALL SPRITE(#1,S1,C,X,Y,#2,S2,C,X,Y+8) 4732 CALL SPRITE(#3,S3,C,X+16,Y,#4,S4,C,X+16,Y+8,#7,S7,C,X+16,Y+16) 4740 CALL SPRITE(#5,S5,C,X+32,Y,#6,S6,C,X+32,Y+8) 4745 SUBEXIT 4750 REM *** SPRITE LEFT 4760 CALL SPRITE(#1,S1,C,X,Y+8,#2,S2,C,X,Y) 4770 CALL SPRITE(#3,S3,C,X+16,Y+8,#4,S4,C,X+16,Y,#7,S7,C,X+16,Y-8) 4780 CALL SPRITE(#5,S5,C,X+32,Y+8,#6,S6,C,X+32,Y) 4790 SUBEND 1120 SUB XCHAR(D,W1) 1121 IF W1=1 THEN CALL DELSPRITE(#1,#2,#3,#4,#5,#6,#7) 1122 IF D=1 THEN RESTORE 1151 ELSE RESTORE 1164 1130 FOR A=1 TO 12::READ P,S$::CALL CHAR(P,S$)::NEXT A 1135 REM ** RIGHT : TSX=112::TDX=116::BSX=120::BDX=124::LSX=128::LDX=132::G0DX=108 1136 REM ** RIGHT : 96=G1DX 100=G2DX 104=G3DX 1137 REM ** RIGHT : 136=L1SX 140=L2DX 1150 REM CHARACTER DATA DIRECTION DX 1151 DATA 96,0000000000000000000003FFFFFFFCC0000000000000030C30F0F0C0C0000000 PISTOLA 1 1152 DATA 100,0000000000000000000303FFFFFFFCC0000000000C0C3030F0F0C0C0C0000000 PISTOLA 2 1153 DATA 104,000000000000000003030FFFFFFCF0C00000303030C0C0C0C0C0C00000000000 PISTOLA 3 1154 DATA 108,000000303C3C3C3C3C3C3F3F0F00000000000000000000000000F00000000000 PISTOLA 0 1155 DATA 112,000000000000000000003F00000000000000000000000000FCFCFCFCFCFCFC3C TESTA SX 1156 DATA 116,0000000000000000030303030303030300000000000000000000FC00C0000000 TESTA DX 1157 DATA 120,000000030F3F3FFFFFF3F3F3FF3F3F0F3C3CFFFFFFFFFFFFFFFFFFFFFFFFFFFF CORPO SX 1158 DATA 124,00000000000000000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0 CORPO DX 1159 DATA 128,03030303030303030303030303030000FCF0C0C0C0C0C0C0C0C0C0C0F0F0FCFC GAMBA SX 1160 DATA 132,03030303030303030303030303030000C0C0C0C0C0C0C0C0C0C0C0C0F0F0FCFC GAMBA DX 1161 DATA 136,03030303030F0F0F3F3C3CFCF0F03C3CFCF0C0C0C0C000000000000000000000 GAMBA SX RUN 1162 DATA 140,0F0F030000000003030F0F0F03030000F0F0FCFCFCF0F0F0C0C00000C0C00000 GAMBA DX RUN 1163 REM CHARACTER DATA DIRECTION SX 1164 DATA 96,000000000000C0300C0F0F030300000000000000000000000000C0FFFFFF3F03 PISTOLA 1 1165 DATA 100,0000000030300C0C0F0F030303000000000000000000000000C0C0FFFFFF3F03 PISTOLA 2 1166 DATA 104,00000C0C0C03030303030300000000000000000000000000C0C0F0FFFF3F0F03 PISTOLA 3 1167 DATA 108,000000000000000000000F00000000000000000C3C3C3C3C3C3CFCFCF0000000 PISTOLA 0 1168 DATA 112,00000000000000003F3F3F3F3F3F3F3C00000000000000000000FC0000000000 TESTA DX 1169 DATA 116,000000000000000000003F00030000000000000000000000C0C0C0C0C0C0C0C0 TESTA SX 1170 DATA 120,3C3CFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000C0F0FCFCFFFFCFCFCFFFFCFCF0 CORPO DX 1171 DATA 124,0000000303030303030303030303030300000000000000000000000000000000 CORPO SX 1172 DATA 128,3F0F030303030303030303030F0F3F3FC0C0C0C0C0C0C0C0C0C0C0C0C0C00000 GAMBA DX 1173 DATA 132,0303030303030303030303030F0F3F3FC0C0C0C0C0C0C0C0C0C0C0C0C0C00000 GAMBA SX 1174 DATA 136,3F0F0303030300000000000000000000C0C0C0C0C0F0F0F0FC3C3C3F0F0F3C3C GAMBA DX RUN 1175 DATA 140,0F0F3F3F3F0F0F0F0303000003030000F0F0C000000000C0C0F0F0F0C0C00000 GAMBA SX RUN 1190 SUBEND 4100 SUB XSCAN(D,D1,K,S,FIRE) 4105 CALL KEY(0,K,S) 4110 D1=D::FIRE=0 4120 IF K=ASC("S") THEN D=-1 4130 IF K=ASC("D") THEN D=1 4140 IF K=ASC("L") THEN FIRE=1 4160 IF K<>ASC("S") AND K<>ASC("D") AND K<>ASC("L") THEN S=0 4170 SUBEND 1700 SUB XPOSI(K) 1705 SP=K-48 1710 CALL POSITION(#SP,X,Y) 1720 DISPLAY AT(1,1):"SPRITE#";SP::DISPLAY AT(2,1):"X";X::DISPLAY AT(2,8):"Y";Y 1730 CALL LINK("DELAY",5) :: DISPLAY ERASE ALL 1740 SUBEND 1800 SUB XEND 1801 CALL CLEAR 1803 DISPLAY AT(12,3):"G A M E O V E R":: 1802 CALL DELSPRITE(ALL)::CALL LINK("DELAY",5) 1804 SUBEND