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) 110 REM CALL XINIT 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) 308 REM ********************* 309 REM * CHECK SPRITES SCREEN LIMIT 310 REM CALL XLIMI(D,KILL,80,COLMAX,COLMIN,TOLL) 318 REM ********************* 319 REM * CHECK SPRITES COINCIDENCE 320 REM CALL XDEAD(DEAD,SP6,SP7,SP8) 328 REM ********************* 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 348 REM ********************* 349 REM * FIRE PRESSED 350 REM IF FIRE=1 THEN CALL XSHOT(D,X,Y,C,DELAY1)::CALL XTAR(D,X,Y,C,VX1,VY1,KILL)::GOTO 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)::CALL LINK("DELAY",DELAY) 4525 CALL PATTERN(#6,140)::CALL LINK("DELAY",DELAY) 4530 CALL PATTERN(#5,128)::CALL PATTERN(#6,132)::CALL LINK("DELAY",DELAY) 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 4400 SUB XLIMI(D,KILL,ROWMIN,COLMAX,COLMIN,TOLL) 4410 IF D=-1 THEN 4430 4420 CALL COINC(#6,ROWMIN,COLMAX,TOLL,Q)::GOTO 4440 4430 CALL COINC(#6,ROWMIN,COLMIN,TOLL,Q) 4440 IF Q=-1 THEN CALL DELSPRITE(#6)::KILL=0 4450 SUBEND 4600 SUB XSWAP(D,TSX,TDX,BSX,BDX,LSX,LDX,G0DX,W1) 4610 REM IF D=1 THEN TSX=112::TDX=116::BSX=120::BDX=124::LSX=128::LDX=132::G0DX=108::CALL XCHAR(D,W1)::SUBEXIT 4620 REM IF D=-1 THEN TSX=116::TDX=112::BSX=124::BDX=120::LSX=132::LDX=128::G0DX=108::CALL XCHAR(D,W1)::SUBEXIT 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 8000 SUB XWAIT(SEC) 8010 CALL KEY(0,K,S):: REM display at(1,1):"PRESS ANY KEY TO CONTINUE" 8020 IF SEC=0 THEN IF S=0 THEN 8010 8025 FOR T=1 TO SEC::NEXT T 8030 SUBEND 5000 SUB XDEBUG(T1$,T2$,T3$,T4$,T5$) 5010 REM TRACE$="<"&T1$&">"&"<"&T2$&">"&"<"&T3$&">"&"<"&T4$&">"&"<"&T5$&">"& 5020 REM PRINT TRACE$ 5022 PRINT T1$;" ";T2$;" ";T3$;" ";T4$;" ";T5$ 5100 SUBEND 4200 SUB XSHOT(D,X,Y,C,DELAY1) 4205 CALL MOTION(#1,0,0,#2,0,0,#3,0,0,#4,0,0,#5,0,0,#6,0,0,#7,0,0) 4206 CALL POSITION(#2,H,Y) 4210 IF D=-1 THEN 4240 4215 REM *** RIGH 4220 CALL PATTERN(#2,124)::CALL DELSPRITE(#4)::CALL SPRITE(#5,120,C,X,Y+16) 4225 REM FOR DLY=1 TO DELAY1:: NEXT DLY 4230 CALL PATTERN(#2,100)::CALL DELSPRITE(#5)::CALL SPRITE(#4,108,C,X+16,Y+16) 4235 REM FOR DLY=1 TO DELAY1:: NEXT DLY 4236 SUBEXIT 4237 REM *** LEFT 4240 CALL PATTERN(#2,60)::CALL DELSPRITE(#4)::CALL SPRITE(#5,44,C,X,Y-16) 4245 REM FOR DLY=1 TO DELAY1:: NEXT DLY 4250 CALL PATTERN(#2,132)::CALL DELSPRITE(#5)::CALL SPRITE(#4,140,C,X+16,Y-16) 4255 REM FOR DLY=1 TO DELAY1:: NEXT DLY 4290 SUBEND 4300 SUB XTAR(D,X,Y,C,VX1,VY1,KILL) 4310 VX1=ABS(VX1)::VY1=ABS(VY1) 4315 CALL POSITION(#2,H,Y) 4320 IF D=-1 THEN 4340 4325 VX1=-VX1::CALL SPRITE(#6,64,C,X,Y+16,VX1,VY1)::GOTO 4350 4340 VX1=-VX1::VY1=-VY1::CALL SPRITE(#6,64,C,X,Y-16,VX1,VY1) 4350 KILL=1 4390 SUBEND 1000 SUB XINTRO 1001 CALL CLEAR::CALL SCREEN(13)::DISPLAY AT(12,6):" G U N E M O K E 99" 1010 D=-1::X=145::Y=250::C=6::YV=-15::SYNC=0 1020 CALL XSWAP(D,S1,S2,S3,S4,S5,S6,S7,W1) 1030 CALL XSHOW(FT,D,S1,S2,S3,S4,S5,S6,S7,X,Y,C) 1040 CALL MOTION(#1,0,YV,#2,0,YV,#3,0,YV,#4,0,YV) 1050 CALL XSLIDE(D,20) :: SYNC=SYNC+1 1055 CALL POSITION(#1,H,Y)::IF SYNC=3 THEN SYNC=0::GOTO 1030 1056 IF Y>=48 THEN GOTO 1040 1060 REM CALL MOTION(#1,0,0,#2,0,0,#3,0,0,#4,0,0,#5,0,0,#6,0,0,#7,0,0) 1065 D=1::X=145::Y=256::C=6::CALL XSWAP(D,S1,S2,S3,S4,S5,S6,S7,W1) 1068 CALL POSITION(#1,X,Y)::CALL XSHOW(FT,D,S1,S2,S3,S4,S5,S6,S7,X,Y,C) 1070 REM CALL XSHOT(D,X,Y,C,2) 1075 REM CALL XTAR(D,X,Y,C,5,5,KILL) 1077 REM CALL XLIMI(D,KILL,110,74,10,TOLL) 1078 REM CALL POSITION(#6,N,M)::DISPLAY AT(4,1):"X=";N::DISPLAY AT(4,10):"Y=";M 1079 REM IF KILL=1 THEN 1077 1080 DISPLAY AT(13,10):" S M O K E 99" 1085 DISPLAY AT(5,10):"R E A D Y"::CALL XWAIT(0) 1090 SUBEND