BG 1 BG COPY 0,0,20,16 TO 0,0 SPRITE.A 1,(1,,,,) SPRITE.A 2,(2,,,,) SPRITE.A 11,(1,,,,) SPRITE.A 12,(2,,,,) SPRITE 11,200,200,15 SPRITE 12,200,200,15 SPRITE 0,200,200,17 SPRITE.A 0,(1,,,,) RANDOMIZE TIMER REM WASHAW GAMES FOR I=20 TO 40 SPRITE.A I,(0,,,,) SPRITE I,0,0,9 NEXT I SPRITE 20,3*8,5*8, FOR I=1 TO 6 IY=4+I SPRITE 20+I,4*8,IY*8, NEXT I SPRITE 27,3*8,10*8, SPRITE 30,16*8,5*8, FOR I=1 TO 6 IY=4+I SPRITE 30+I,15*8,IY*8, NEXT I SPRITE 37,16*8,10*8, DIM GLOBAL DX(8) DIM GLOBAL DY(8) FOR I=1 TO 8 READ DX(I),DY(I) NEXT I DATA 0,-1, -1,-1, -1,0, -1,1, 0,1, 1,1, 1,0, 1,-1 DIM GLOBAL REVD(2,2) FOR IX=0 TO 2 FOR IY=0 TO 2 READ REVD(IX,IY) NEXT IY NEXT IX DATA 2,3,4,1,0,5,8,7,6 DIM X(2),Y(2),A(2),M(2),BX(2),BY(2),BL(2),BT(2),BA(2) DIM GLOBAL CC(2) X(1)=2*8 Y(1)=7*8 X(2)=17*8 Y(2)=7*8 A(1)=8 A(2)=2 M(1)=0 M(2)=0 SPRITE 1,X(1),Y(1),A(1) SPRITE 2,X(2),Y(2),A(2) DIM T(2),MD(2) T1=0 MD1=0 IMOVE=0 DIM GLOBAL SCORE(2) GAMEPAD 2 IP=1 PLAY 0,50,60 WAIT 60 ITIME=TIMER+9999 GLOBAL IROUND IROUND=1 CALL EDITSCORE(1,0) DO BG 0 ATTR(6,,,,) NUMBER 8,0,ITIME-TIMER,4 IF ITIME-TIMER<=0 THEN PLAY 0,20,240 IROUND=IROUND+1 IF IROUND=2 THEN SS=40 ELSE SS=30 PLAY 0,SS,60 WAIT 60 IF IROUND<=3 THEN ITIME=TIMER+9999 ELSE PLAY 0,20,240 END END IF END IF BG 1 FOR IP=1 TO 2 PP=IP-1 IF T(IP)>0 THEN T(IP)=T(IP)-1 ELSE IF CC(IP) THEN GOSUB CC_LR ELSE UD=UP(PP) AND DOWN(PP) IF LEFT(PP) AND NOT UD THEN CALL TURNLEFT(X(IP),Y(IP),A(IP),IP,T(IP)) IF RIGHT(PP) AND NOT UD THEN CALL TURNRIGHT(X(IP),Y(IP),A(IP),IP,T(IP)) END IF END IF IF MD(IP)>0 THEN MD(IP)=MD(IP)-1 ELSE IF CC(IP) THEN GOSUB CC_UD ELSE LR=LEFT(PP) AND RIGHT(PP) IF UP(PP) AND NOT LR THEN CALL ADJM(MD(IP),M(IP),1) IF DOWN(PP) AND NOT LR THEN CALL ADJM(MD(IP),M(IP),-1) END IF END IF IF BUTTON(PP,1) THEN IF CC(IP)=0 THEN CC(IP)=1 FOR SI=10 TO 90 STEP 5 PLAY 0,SI,1 WAIT VBL NEXT SI SPRITE.A IP,(IP+3,,,,) ELSE CC(IP)=0 FOR SI=90 TO 10 STEP -5 PLAY 0,SI,1 WAIT VBL NEXT SI SPRITE.A IP,(IP,,,,) END IF END IF IF BL(IP)=0 THEN IF CC(IP) THEN GOSUB CC_BB ELSE IF BUTTON(PP,0) THEN BL(IP)=1000 BA(IP)=A(IP) BX(IP)=X(IP)+DX(A(IP))*8 BY(IP)=Y(IP)+DY(A(IP))*8 IF BX(IP)<8 THEN BX(IP)=8 IF BY(IP)<8 THEN BY(IP)=8 IF BY(IP)>8*14 THEN BY(IP)=8*14 IF BX(IP)>8*18 THEN BX(IP)=8*18 PLAY 0,55,1 WAIT VBL PLAY 0,40,1 END IF END IF IF BL(IP)>0 THEN IF IROUND=2 THEN CALL MOVEBULLET(BX(IP),BY(IP),A(IP),10+IP,BL(IP)) ELSE CALL MOVEBULLET(BX(IP),BY(IP),BA(IP),10+IP,BL(IP)) END IF IF SPRITE HIT(10+IP) THEN IHIT=HIT IF IHIT=1 OR IHIT=2 THEN M(IHIT)=0 SPRITE IHIT,200,200, SPRITE 10+IP,200,200, WAIT VBL PLAY 3,30,6 ATTR(IHIT,,,,) CELL X(IHIT)\8,Y(IHIT)\8,13 WAIT 6 CELL X(IHIT)\8,Y(IHIT)\8,14 WAIT 6 CELL X(IHIT)\8,Y(IHIT)\8,0 WAIT VBL CALL PLACETANK(X(IHIT),Y(IHIT),A(IHIT),IHIT) BX(IP)=200 BY(IP)=200 SPRITE IHIT,200,200, SPRITE IP+10,200,200, BL(IP)=0 IF IHIT=1 THEN S=2 ELSE S=1 CALL EDITSCORE(S,1) END IF END IF END IF NEXT IP IMOVE=(IMOVE+1) MOD 2 IF IMOVE=0 THEN CALL MOVEPLAYER(X(1),Y(1),A(1),M(1),1) CALL MOVEPLAYER(X(2),Y(2),A(2),M(2),2) END IF WAIT VBL LOOP CC_LR: IRND=INT(RND*33) IF IRND<=1 THEN CALL TURNLEFT(X(IP),Y(IP),A(IP),IP,T(IP)) ELSE IF IRND=2 THEN CALL TURNRIGHT(X(IP),Y(IP),A(IP),IP,T(IP)) END IF RETURN CC_UD: IRND=INT(RND*33) IF IRND<=2 THEN CALL ADJM(MD(IP),M(IP),1) ELSE IF IRND=3 THEN CALL ADJM(MD(IP),M(IP),-1) END IF RETURN CC_BB: IF INT(RND*10)=0 THEN BL(IP)=1000 BA(IP)=A(IP) BX(IP)=X(IP)+DX(A(IP))*8 BY(IP)=Y(IP)+DY(A(IP))*8 IF BX(IP)<8 THEN BX(IP)=8 IF BY(IP)<8 THEN BY(IP)=8 IF BY(IP)>8*14 THEN BY(IP)=8*14 IF BX(IP)>8*18 THEN BX(IP)=8*18 PLAY 0,55,1 WAIT VBL PLAY 0,40,1 END IF RETURN SUB PLACETANK(X,Y,A,P) IF P=1 THEN P2=2 ELSE P2=1 I=0 WHILE I=0 CX=INT(RND*20)*8 CY=INT(RND*16)*8 A=INT(RND*8)+1 IF CELL.C(CX\8,CY\8)=0 THEN SPRITE P,CX,CY,A IF NOT SPRITE HIT(P) THEN I=1 END IF WEND X=CX Y=CY END SUB SUB EDITSCORE(P,I) BG 0 SCORE(P)=SCORE(P)+(I+(IROUND-1)*2) ATTR(4,,,,) NUMBER 1,0,SCORE(1),3 ATTR(5,,,,) NUMBER 16,0,SCORE(2),3 BG 1 END SUB SUB MOVEBULLET(X,Y,A,P,B) IF B>0 THEN CX=X+DX(A) CY=Y+DY(A) BX=0 BY=0 IF CX<8 THEN BX=1 ELSE IF CX>18*8 THEN BX=-1 ELSE IF CY<8 THEN BY=1 ELSE IF CY>14*8 THEN BY=-1 END IF BP=P-10 IF SPRITE HIT(P) AND HIT>15 AND CC(BP)=0 THEN PLAY 0,40,1 SX= SPRITE.X(P)+4-SPRITE.X(HIT) SY= SPRITE.Y(P)+4-SPRITE.Y(HIT) IF HIT<>20 AND HIT<>30 AND HIT<>27 AND HIT<>37 AND HIT<>21 AND HIT<>31 AND HIT<>26 AND HIT<>36 THEN IF SX<0 THEN BX=-1 ELSE BX=1 SPRITE P,SPRITE.X(P)+(BX*2),, X=X+(BX*2) ELSE RB1=INT(RND*2) RB2=1-RB1 IF HIT=20 OR HIT=30 THEN CALL TBOUNCE(X,Y,BX,BY,P,0,-1) ELSE IF HIT=27 OR HIT=37 THEN CALL TBOUNCE(X,Y,BX,BY,P,0,1) ELSE IF HIT=21 THEN CALL TBOUNCE(X,Y,BX,BY,P,RB1,-RB2) ELSE IF HIT=31 THEN CALL TBOUNCE(X,Y,BX,BY,P,-RB1,-RB2) ELSE IF HIT=26 THEN CALL TBOUNCE(X,Y,BX,BY,P,RB1,RB2) ELSE IF HIT=36 THEN CALL TBOUNCE(X,Y,BX,BY,P,-RB1,RB2) END IF END IF END IF IF (BY=0 AND BX=0) THEN B=B-1 IF B>0 THEN X=CX Y=CY SPRITE P,X,Y, ELSE B=0 SPRITE P,200,200, END IF ELSE IF IROUND=3 THEN PLAY 0,95,1 IF BX=0 THEN BX=DX(A) IF BY=0 THEN BY=DY(A) A=REVD(BX+1,BY+1) ELSE B=0 SPRITE P,200,200, END IF END IF END IF END SUB SUB TBOUNCE(X,Y,BX,BY,P,IX,IY) X=X+IX*2 Y=Y+IY*2 BX=IX BY=IY SPRITE P,SPRITE.X(P)+IX*2,SPRITE.Y(P)+IY*2, END SUB SUB MOVEPLAYER(X,Y,A,M,P) IF SPRITE HIT(P) AND HIT>15 AND CC(P)=0 AND M>0 THEN X=X-DX(A) Y=Y-DY(A) END IF IF DX(A)*M=1 THEN CCX=7 ELSE CCX=0 IF DY(A)*M=1 THEN CCY=7 ELSE CCY=0 CX=X+(DX(A)*M)+CCX CY=Y+(DY(A)*M)+CCY IF CELL.C(CX\8,CY\8)=0 THEN X=CX-CCX Y=CY-CCY SPRITE P,X,Y, END IF IF M>0 THEN PLAY P,30+10*P,1 END SUB SUB ADJM(MD,M,D) MD=10 M=M+D IF M<0 THEN M=0 IF M>1 THEN M=1 END SUB SUB TURNRIGHT(X,Y,A,P,T) T=10 A=A-1 IF A<1 THEN A=8 SPRITE P,X,Y,A END SUB SUB TURNLEFT(X,Y,A,P,T) T=10 A=A+1 IF A>8 THEN A=1 SPRITE P,X,Y,A END SUB #1:MAIN PALETTES 003F2A1500302010000C0804003F3C00 0030303F0008083F0000003F003F3F00 #2:MAIN CHARACTERS 00000000000000000000000000000000 0000425A5A424200183C3C3C3C3C0000 000412391040201060F8FC7E7C381000 003E001818003E0000007CFCFC7C0000 10204010391204000010387C7EFCF860 0042425A5A42000000003C3C3C3C3C18 080402089C48200000081C3E7E3F1F06 007C001818007C0000003E3F3F3E0000 0020489C08020408061F3F7E3E1C0800 6B00D6006B00D60094FFFFFF94FFFFFF 0000281428140000007E567A5E6A7E00 0000182424180000007E665A7E7E7E00 0000240000240000007E7E7E7E5A7E00 00040220800204000020020480001400 20024002001008002000080204004800 0018245A5A24180000183C66663C1800 FFFFFFFFFFFFFFFF0000000000000000 A04080000000000060C0800000000000 #3:MAIN BG 00001410090010001000100009000900 09000900100010001000100009000900 09000900100010001000090009000000 00000000000000000000000000000000 00000000000000000000000000000000 00000900090000000000000000000000 00000000000000000000000000000000 00000000000000000000090009000000 00000000000000000000000000000000 00000000000000000000000000000000 00000900090000000000000000000000 00000000000000000000000000000000 00000000000000000000090009000000 00000000000000000000000000000000 00000000000000000000000000000000 00000900090000000000000000000000 00000000000000000000000000000000 00000000000000000000090009000000 00000000000000000000000000000000 00000000000000000000000000000000 00000900090000000000000000000000 00000000000000000000000000000000 00000000000000000000090009000000 00000000000000000000000000000000 00000000000000000000000000000000 00000900090000000000000000000000 00000000000000000000000000000000 00000000000000000000090009000000 00000000000000000000000000000000 00000000000000000000000000000000 00000900090000000000000000000000 00000000000000000000000000000000 00000000000000000000090009000000 00000000000000000000000000000000 00000000000000000000000000000000 00000900090000000000000000000000 00000000000000000000000000000000 00000000000000000000090009000900 09000900090009000900090009000900 09000900090009000900090009000900 09000900