10 ' Combat
20 '       by K.Freeman
30 '
40 MODE 0
50 DEFINT a-z
60 SYMBOL AFTER 256:MEMORY &8FFF
70 SYMBOL AFTER 32
80 LOCATE 8,10:PRINT "COMBAT"
90 LOCATE 5,17:PRINT"please wait."
100 GOSUB 1330
110 DIM grid(20,12)
120 SOUND 4,2000,7,13:MODE 0
130 BORDER 0
140 RESTORE 840
150 'show screen
160 FOR y=1 TO 12
170 READ n$
180 FOR x=1 TO 20
190 s=(ASC(MID$(n$,x,1)))-97
200 —SPRITE,(x-1)*2,(y-1)*2,s
210 grid(x,y)=s
220 NEXT x
230 NEXT y
240 'variables
250 x(1)=2:y(1)=11:r(1)=0
260 a(1)=2:b(1)=11:o(1)=3
270 x(2)=19:y(2)=2:r(2)=0
280 a(2)=19:b(2)=2:o(2)=7
290 fire(1)=1:fire(2)=1
300 —SPRITE,2,20,3:grid(2,11)=3
310 —SPRITE,36,2,7:grid(19,2)=7
320 'keypress
330 ON fire(1) GOTO 350,970
340 'tank 1  keyboard
350 IF INKEY(62)=0 AND x(1)<19 THEN dx=1:dy=0:s=1:GOSUB 640:GOTO 400
360 IF INKEY(63)=0 AND x(1)>1 THEN dx=-1:dy=0:s=2:GOSUB 640:GOTO 400
370 IF INKEY(69)=0 AND y(1)>1 THEN dx=0:dy=-1:s=3:GOSUB 640:GOTO 400
380 IF INKEY(71)=0 AND y(1)<11 THEN dx=0:dy=1:s=4:GOSUB 640:GOTO 400
390 IF INKEY(47)=0 AND fire(1)=1 THEN f=1:GOSUB 1230
400 ON fire(2) GOTO 420,980
410 'tank 2  joystick
420 IF INKEY(75)=0 AND x(2)<19 THEN dx=1:dy=0:s=5:GOSUB 640:GOTO 470
430 IF INKEY(74)=0 AND x(2)>1 THEN dx=-1:dy=0:s=6:GOSUB 640:GOTO 470
440 IF INKEY(72)=0 AND y(2)>1 THEN dx=0:dy=-1:s=8:GOSUB 640:GOTO 470
450 IF INKEY(73)=0 AND y(2)<11 THEN dx=0:dy=1:s=7:GOSUB 640:GOTO 470
460 IF INKEY(76)=0 AND fire(2)=1 THEN f=2:GOSUB 1230
470 IF r(1)<10 AND r(2)<10 THEN 330
480 LOCATE 3,25:PRINT "tank      wins";
490 IF r(1)=10 THEN f=1 ELSE f=2
500 LOCATE 9,25:PRINT f;
510 FOR t=1 TO 2000:NEXT
520 LOCATE 1,25:PRINT"     p to play      ";
530 WHILE INKEY(27)<>0:WEND
540 FOR f=1 TO 2
550 —SPRITE,(a(f)-1)*2,(b(f)-1)*2,o(f)
560 grid(x(f),y(f))=31
570 NEXT
580 FOR f=1 TO 2
590 IF fire(f)=2 THEN —SPRITE,(g(f)-1)*2,(h(f)-1)*2,9
600 NEXT
610 LOCATE 1,25:PRINTSTRING$(20,32);
620 GOTO 250
630 'move tanks
640 IF s>4 THEN f=2 ELSE f=1
650 IF fire(3-f)=1 THEN 680
660 ff=f:IF f=1 THEN f=2 ELSE f=1
670 GOSUB 1110:f=ff
680 IF grid(x(f)+dx,y(f)+dy)<10 THEN RETURN
690 SOUND f,1000,5,11,,,5*f
700 dx(f)=dx:dy(f)=dy
710 x(f)=x(f)+dx(f):y(f)=y(f)+dy(f)
720 IF fire(3-f)=1 THEN 750
730 ff=f:IF f=1 THEN f=2 ELSE f=1
740 GOSUB 1110:f=ff
750 IF a(f)=x(f) AND b(f)=y(f) AND o(f)=s THEN RETURN
760 SOUND n,1000,5,10,,,5*f
770 —SPRITE,(a(f)-1)*2,(b(f)-1)*2,o(f)
780 —SPRITE,(x(f)-1)*2,(y(f)-1)*2,s
790 grid(a(f),b(f))=31
800 grid(x(f),y(f))=s
810 a(f)=x(f):b(f)=y(f):o(f)=s
820 RETURN
830 'screen layout
840 DATA aaaaaaaaaaaaaaaaaaaa
850 DATA arrrrrrrrrrrrrrrrara
860 DATA arrrarrrraarrarrrrra
870 DATA araarrrrrarrrarrrrra
880 DATA arrrrrrarrrrrraarrra
890 DATA arrrrrrraarrrrrrrrra
900 DATA araarrrarrrrrrrrrrra
910 DATA arrrarrarraaarrarrra
920 DATA arrrrraarrarrrrrarra
930 DATA arrrrrrrrrarrrraarra
940 DATA ararrrrrrrrrrrrrrrra
950 DATA aaaaaaaaaaaaaaaaaaaa
960 '  fire/move shot
970 f=1:GOTO 990
980 f=2
990 p=grid(z(f)+dz(f),v(f)+dv(f))
1000 IF p<10 AND w(f)=0 THEN fire(f)=1:GOTO 1090
1010 '
1020 IF p<10 THEN fire(f)=1:GOTO 1060
1030 IF w(f)=0 THEN SOUND f,2000,21,9,,,10:w(f)=1:GOTO 1050
1040 z(f)=z(f)+dz(f):v(f)=v(f)+dv(f)
1050 —SPRITE,(g(f)-1)*2,(h(f)-1)*2,9
1060 —SPRITE,(z(f)-1)*2,(v(f)-1)*2,9
1070 g(f)=z(f):h(f)=v(f)
1080 IF fire(f)=2 THEN GOSUB 1110
1090 ON f GOTO 400,470
1100 'possible hit
1110 IF x(3-f)<>z(f)+dz(f) AND a(3-f)<>g(f)+dz(f) THEN RETURN
1120 IF y(3-f)<>v(f)+dv(f) AND b(3-f)<>h(f)+dv(f) THEN RETURN
1130 BORDER 13+f
1140 SOUND f,1000,10,15,,,20
1150 r(f)=r(f)+1
1160 fire(f)=1
1170 —SPRITE,(z(f)-1)*2,(v(f)-1)*2,9
1180 LOCATE 5,25:PRINT r(1);
1190 LOCATE 14,25:PRINT r(2);
1200 BORDER 0
1210 RETURN
1220 'shot direction
1230 w(f)=0
1240 z(f)=x(f)
1250 dz(f)=dx(f)
1260 v(f)=y(f)
1270 dv(f)=dy(f)
1280 fire(f)=2
1290 g(f)=99:h(f)=99
1300 RETURN
1310 'poke code into memory
1320 '       à &9000-&9324
1330 RESTORE 1490:mem=&9000
1340 BORDER 12,24
1350 FOR dl=1 TO 67:READ d$,ck:rs=0
1360 FOR by=1 TO 24 STEP 2
1370 a=VAL("&"+MID$(d$,by,2))
1380 rs=rs+a
1390 POKE mem,a
1400 mem=mem+1
1410 NEXT by:IF rs<>ck THEN 1450
1420 NEXT dl:CALL &9000
1430 RESTORE 2170
1440 FOR t=0 TO 15:READ k:INK t,k:NEXT:RETURN
1450 SOUND 4,600,6,15:BORDER 6
1460 MODE 1:INK 0,1:INK 1,26
1470 PRINT"data error in line..";dl*10+1480
1480 END
1490 DATA 010E90210A90CDD1BCC90A90,1303
1500 DATA 0E901390C31A905350524954,1088
1510 DATA C500DD4602DD4E04DD7E00FE,1394
1520 DATA 10D0076F2600117090197E5F,899
1530 DATA 237EFEFFC85778FE19D0D504,1781
1540 DATA 11500021B0BF1910FDD179FE,1375
1550 DATA 28D007D55F160019D11A4713,935
1560 DATA 1A4F13C5E51AAE77231310F9,1188
1570 DATA E10100080930040150C009C1,770
1580 DATA 0D20E8C99090D29014915691,1516
1590 DATA 9891DA911C925E92A092E292,1752
1600 DATA FFFFFFFFFFFFFFFFFFFFFFFF,3060
1610 DATA 0410FCFC3C0C0CFCFC3C3C0C,1244
1620 DATA FCFCFC3C0CFCFCFC3C0C0CFC,1920
1630 DATA FC3C3C0CFCFCFC3C0CFCFCFC,1968
1640 DATA 3C0C0CFCFC3C3C0CFCFCFC3C,1536
1650 DATA 0CFCFCFC3C0C0CFCFC3C3C0C,1488
1660 DATA FCFCFC3C0CFC041000000000,1100
1670 DATA 0000000015458A0015458A00,456
1680 DATA 9FCF33339FCF3333DFBF6F00,1461
1690 DATA DFBF6F00DFBF6F00DFBF6F00,1575
1700 DATA 9FCF33339FCF333315458A00,1164
1710 DATA 15458A000000000000000000,228
1720 DATA 041000000000000000000045,89
1730 DATA 8A2A00458A2A3333CF6F3333,951
1740 DATA CF6F009F7FEF009F7FEF009F,1527
1750 DATA 7FEF009F7FEF3333CF6F3333,1413
1760 DATA CF6F00458A2A00458A2A0000,816
1770 DATA 000000000000041000221100,71
1780 DATA 002211000022110000221100,153
1790 DATA 00679B0000679B0045373B8A,837
1800 DATA 45373B8A459F6F8A459F6F8A,1275
1810 DATA 00DFEF0000DFEF00157FBF2A,1305
1820 DATA 157FBF2A00CFCF0000CFCF00,1209
1830 DATA 041000CFCF0000CFCF00157F,996
1840 DATA BF2A157FBF2A00DFEF0000DF,1299
1850 DATA EF00459F6F8A459F6F8A4537,1317
1860 DATA 3B8A45373B8A00679B000067,879
1870 DATA 9B0000221100002211000022,291
1880 DATA 110000221100041000000000,88
1890 DATA 000000004414280044142800,256
1900 DATA 443C0C0C443C0C0C7DEE9C00,823
1910 DATA 7DEE9C007DEE9C007DEE9C00,1557
1920 DATA 443C0C0C443C0C0C44142800,432
1930 DATA 441428000000000000000000,128
1940 DATA 041000000000000000000014,40
1950 DATA 2888001428880C0C3C9C0C0C,636
1960 DATA 3C9C006CDDBE006CDDBE006C,1362
1970 DATA DDBE006CDDBE0C0C3C9C0C0C,1194
1980 DATA 3C9C00142888001428880000,608
1990 DATA 0000000000000410003C3C00,140
2000 DATA 003C3C0044DDEE8844DDEE88,1446
2010 DATA 007DBE00007DBE00146C9C28,954
2020 DATA 146C9C28144C8C28144C8C28,876
2030 DATA 001C2C00001C2C0000080400,156
2040 DATA 000804000008040000080400,36
2050 DATA 041000080400000804000008,52
2060 DATA 040000080400001C2C00001C,116
2070 DATA 2C00144C8C28144C8C28146C,724
2080 DATA 9C28146C9C28007DBE00007D,960
2090 DATA BE0044DDEE8844DDEE88003C,1576
2100 DATA 3C00003C3C00041000000000,200
2110 DATA 000000000000000000000000,0
2120 DATA 000000000000000000040800,12
2130 DATA 000408000004080000040800,36
2140 DATA 000000000000000000000000,0
2150 DATA 000000000000000000000000,0
2160 DATA 000000000000000000000000,0
2170 DATA 12,24,19,21,7,3,6,15
2180 DATA 16,8,11,2,20,26,25,0