10 REM PATTN.ECB 20 REM ...PATTON...by Ralph Hopkins 4-15-79 (4-09-81) 30 LET R0=1: DEF FNR(R0)=INT(RND(0)*R0) 100 LET T=INT(RND(0)*9)+1 110 LET K=0: LET K3=0: LET M=1: LET P=0 120 DIM A(80),C(80),D(80),F(80),H(80),I(50),J(80),M(80),P(80) 130 DIM R(80),S(80),T(80),V(80),W(80),X(80),Y(80) 140 DIM I$(35),N$(15) 150 LET I$=" TYPE any letter to see more ---=>" 160 LET E$=" GERMAN",F$=" American ",T$=" Tanks" 170 LET M$=" yards.",N$="Max move rate: " 200 PRINT "&K&J": PRINT TAB(33);".-=-." 210 PRINT TAB(24);",./'''''''''''|;," 220 PRINT " ||||============{####<";CHR(16);"( P A T T O N ]:" 230 PRINT ," ,.../<"; 240 FOR X=1 TO 18: PRINT CHR(24);: NEXT X 250 PRINT ">====^^^^^\..," 260 PRINT ," / ((+)' ' @ ' ' ' ' @ ' ' ' ' @ ' (+)) \" 270 PRINT TAB(19);"\ II II II /" 280 PRINT TAB(21);"\"; 290 FOR X=1 TO 5: PRINT "(";CHR(15);")..";: NEXT X 295 PRINT "(";CHR(15);")/&J" 300 DATA 8,75,10,80,800,30,50 310 DATA 5,37,5,110,500,40,25 320 DATA 7,75,11,110,800,50,65 330 DATA 6,76,14,90,1000,25,75 340 DATA 6,90,15,90,1200,30,125 350 DATA 10,76,14,90,1000,30,75 360 DATA 7,105,40,80,3200,40,200 370 DATA 4,90,14,120,1000,40,100 380 DATA 12,90,12,90,1200,35,150 390 RESTORE 300 400 FOR X=1 TO 9 410 READ A(X),C(X),F(X),M(X),R(X),S(X),P(X): LET W(X)=4 420 NEXT X 430 LET N=0,K1=0,K2=0 440 LET L=INT(RND(0)*10)+1: PRINT 500 PRINT " DO YOU NEED INSTRUCTIONS ?": PRINT 510 INPUT (1,100)" YES or NO.....(Y or N) ---=>",Y$ 520 PRINT : IF Y$="N" THEN 1000 ELSE PRINT "&K" 600 PRINT " *=*=* BRIEFING FROM GENERAL PATTON *=*=*&J" 610 PRINT " THIS IS A GAME OF TANK WARFARE ON THE WESTERN" 620 PRINT " FRONT. Your main goal is to *SURVIVE* and also" 630 PRINT " destroy as many";E$;" units as possible.&J" 640 PRINT "&J You are commanding a";F$;: GOSUB 7500 650 PRINT 660 PRINT " tank which has ";A(T);" inches of armour and" 670 PRINT "carries a ";C(T);" mm. cannon as main armament." 680 PRINT " It's range is good to ";R(T);M$ 690 PRINT " You will have ";S(T);" shells to shoot with.&J" 700 PRINT I$;: INPUT (1,100)Y$ 710 PRINT "&K&J *POINTS* are given for each *KILL* and a" 720 PRINT " *LOG* is kept of total kills you make...." 730 PRINT " You will be able to MOVE and *BUY TIME*" 740 PRINT " if the";E$;" shots are getting TOO CLOSE.&J" 750 PRINT " Move rate of your";F$;: GOSUB 7500 760 PRINT " ": PRINT " tank is up tp ";M(T);M$;"&J" 770 PRINT "*#* NOTE *#*" 780 PRINT ,"FIREPOWER DOUBLES at less than 1/2 range." 790 PRINT ,"... You *CAN* run over TRUCKS.&J" 800 PRINT I$;: INPUT (1,100)Y$ 810 PRINT "&K&J": GOSUB 900: GOTO 1000 900 PRINT ,," +";E$;"S +" 910 PRINT " MOVEMENT can be in 4 3 2" 920 PRINT " 8 possible directions as \ I /" 930 PRINT " shown. (LEFT) 5 -- 0 -- 1 (RIGHT)" 940 PRINT " You MOVE * or * SHOOT; / I \" 950 PRINT " YOU CAN'T DO BOTH. 6 7 8" 960 PRINT TAB(32);"*YOU*" 970 PRINT " The";E$;"S will be in the 2,3, or 4 direction&J" 990 RETURN 1000 PRINT "&J TYPE any letter to print a summary of" 1010 PRINT " all the available commands for this game." 1100 PRINT 1400 REM ...TANK TYPES DATA 1410 DATA 10,11,17,15,29,12,14,27,16,19,17,18,13,20,10 1420 DATA 21,24,22,23,25,21,26,28,20,31,21,23,19,24,29 1430 DATA 11,17,32,33,18,29,29,22,29,28,28,30,36,28,25 1440 DATA 10,20,11,21,26,14,12,21,22,16,10,19,28,29,25 1450 DATA 36,35,34,39,38,21,38,37,32,12 1460 FOR X=10 TO 79: READ T(X): NEXT X 1470 IF RND(0)>.7 THEN LET T(54)=40: REM ...Petrol truck 1480 IF RND(0)<.1 THEN LET T(40)=50: REM ...Staff car 1500 LET Z=FNR(35)+15,Y=FNR(3.3)+3 1520 FOR X=10 TO Z+10 1530 LET Z1=FNR(69)+10 1540 LET Z2=FNR(69)+10 1550 IF T(Z2)<50 THEN LET T(Z1)=T(Z2) 1560 NEXT X 1570 LET Z=FNR(29)+10,E=0 1580 FOR X=Z TO Y: LET T(X)=T(Z): NEXT X 1590 PRINT TAB(9);"*#* G O O D L U C K *#*": PRINT 1600 FOR X=10 TO 79 1610 LET S(X)=FNR(30)+(5): IF T(X)<>Z THEN 1650 1620 LET E=E+1: PRINT " *Spotter Plane* reports ...";E;" "; 1630 GOSUB 7000: IF E=1 THEN PRINT " unit." 1640 IF E>1 THEN PRINT " units." 1650 LET Y=T(X),Q=INT(Y/10) 1660 ON Q GOTO 1670,1680,1690,1946,1947 1670 ON Y-9 GOTO 1700,1710,1720,1730,1740,1750,1760,1770,1780,1790 1680 ON Y-19 GOTO 1800,1810,1820,1830,1840,1850,1860,1870,1880,1890 1690 ON Y-29 GOTO 1900,1910,1920,1930,1940,1941,1942,1943,1944,1945 1700 LET A=3.02,B=2.2,C=160.005,D=2: GOTO 1950 1710 LET A=3.05,B=6.1,C=140.015,D=5: GOTO 1950 1720 LET A=5.105,B=40.2,C=80.175,D=30: GOTO 1950 1730 LET A=4.15,B=50.2,C=100.1,D=11: GOTO 1950 1740 LET A=6.15,B=60.2,C=80.15,D=24: GOTO 1950 1750 LET A=5.15,B=11.2,C=60.05,D=12: GOTO 1950 1760 LET A=6.02,B=9.2,C=100.03,D=9: GOTO 1950 1770 LET A=12.075,B=12.1,C=60.035,D=8: GOTO 1950 1780 LET A=12.075,B=12.1,C=80.04,D=8: GOTO 1950 1790 LET A=6.02,B=2.1,C=100.008,D=4: GOTO 1950 1800 LET A=7.05,B=8.1,C=90.02,D=6: GOTO 1950 1810 LET A=7.075,B=11.1,C=80.025,D=8: GOTO 1950 1820 LET A=8.075,B=14.1,C=80.045,D=9: GOTO 1950 1830 LET A=11.075,B=13.1,C=100.065,D=11: GOTO 1950 1840 LET A=12.075,B=16.1,C=100.08,D=12: GOTO 1950 1850 LET A=12.088,B=15.1,C=80.075,D=12: GOTO 1950 1860 LET A=16.088,B=20.1,C=60.125,D=12: GOTO 1950 1870 LET A=1.060,B=20.1,C=180.01,D=.5: GOTO 1950 1880 LET A=1.002,B=1.4,C=120.003,D=1.25: GOTO 1950 1890 LET A=4.01,B=2.3,C=100.005,D=1: GOTO 1950 1900 LET A=4.02,B=2.3,C=90.01,D=4: GOTO 1950 1910 LET A=3.075,B=13.1,C=140.03,D=8: GOTO 1950 1920 LET A=6.088,B=20.1,C=80.125,D=20: GOTO 1950 1930 LET A=9.075,B=15.1,C=80.07,D=11: GOTO 1950 1940 LET A=15.088,B=20.1,C=90.125,D=12: GOTO 1950 1941 LET A=18.122,B=22.1,C=50.2,D=12: GOTO 1950 1942 LET A=2.075,B=13.1,C=1.015,D=7: GOTO 1950 1943 LET A=1.088,B=20.1,C=1.05,D=20: GOTO 1950 1944 LET A=2.075,B=2.2,C=1.03,D=12: GOTO 1950 1945 LET A=3.020,B=2.2,C=160.01,D=4: GOTO 1950 1946 LET A=1.0022,B=1.4,C=80.04,D=.75: GOTO 1950 1947 LET A=1.0022,B=1.4,C=150.5,D=.75 1950 LET A(X)=INT(A),C(X)=(A-INT(A))*1E3 1960 LET F(X)=INT(B),J(X)=(B-INT(B))*10 1970 LET M(X)=INT(C),P(X)=(C-INT(C))*1E3 1980 LET R(X)=D*100 1990 NEXT X 2000 PRINT "&J Your present position is "; 2010 GOSUB 7700: LET Q=0 2200 FOR X=10 TO 79 2205 IF C(T)=37 THEN LET P(X)=INT(P(X)*2) 2210 IF T=7 THEN LET Y=1300 ELSE LET Y=R(T) 2220 LET D(X)=INT(RND(0)*(Y/100))*100-INT(Y/10) 2230 LET D(X)=D(X)+(Y-100) 2240 LET H(X)=FNR(20)*10-100 2250 LET V(X)=INT(D(X)/2)+INT(RND(0)*(D(X)/4)) 2260 LET Y(X)=D(X)-FNR(35)*10,W(X)=6 2270 IF Y(X)>Y THEN LET Y(X)=INT(Y-(Y/10)) 2280 LET X(X)=FNR(14)*10-70 2290 NEXT X 3000 IF RND(0)>.6 THEN 3100 3010 IF N>0 THEN 3100 3020 LET Q=FNR(62)+10,Q1=FNR(6.4)+1 3030 IF RND(0)>.3 THEN LET Q1=INT(((RND(0)*3.3)+.3)+.7) 3040 IF Q<10 THEN 3000 3050 FOR X=Q TO Q+(Q1-1) 3060 IF W(X)>0 THEN LET W(X)=6,N=N+1 3070 NEXT X 3100 IF N=0 THEN 3200 3110 PRINT : PRINT "+ + + + + + +";E$;"S "; 3115 IF C=3 THEN IF N>1 THEN SET DS=50 3120 PRINT "moving";: SET DS=0 3125 PRINT " + + + + + + +": PRINT 3130 FOR X=Q TO Q+(Q1-1) 3135 IF W(X)<3 THEN 3195 3140 LET Z=FNR(60)-30 3150 IF R(X)>=ABS(D(X)+Z) THEN LET W(X)=4 3155 IF R(X).7 THEN LET W(X)=5 3165 IF ABS(D(X)).6 THEN LET W(X)=6 3175 IF M(X)=.1 THEN LET W(X)=4: IF RND(0)>.6 THEN LET W(X)=3.5 3180 IF RND(0)>.9 THEN LET W(X)=5 3185 IF J(X)>2 THEN IF D(X).6 THEN LET W(X)=7 3190 IF J(X)<4 THEN IF S(X)<=INT(RND(0)*3.2) THEN LET W(X)=7 3195 NEXT X 3200 IF Q=0 THEN 4000: REM ...ENEMY MOVE OR SHOOT 3210 LET N=0: IF RND(0)>.9 THEN GOSUB 6900 3220 FOR X=Q TO Q+(Q1-1) 3230 IF W(X)<2 THEN 3290 3240 LET N=N+1 3250 IF W(X)=2 THEN GOSUB 3900: GOTO 3290 3260 IF W(X)=4 THEN GOSUB 3300 3270 IF W(X)>4 THEN GOSUB 3800 3280 IF W(T)=0 THEN 9000 3290 NEXT X 3295 GOTO 4000 3300 REM = = = + ENEMY SHOOT + = = = 3310 PRINT ,;"+BOOM+" 3320 GOSUB 7000: PRINT " Shooting from ";D(X);M$ 3330 GOSUB 3400: GOSUB 3600: RETURN 3400 LET Z1=D(X)-V(X): REM ...CALC. +ENEMY+ HIT 3420 LET Z3=FNR(Z1),Z4=INT(RND(0)*H(X)) 3430 LET V(X)=INT(V(X)+(Z3)),H(X)=INT(H(X)-(Z4)) 3440 LET Z1=INT(D(X)-V(X)),Z2=INT(H(X)) 3450 LET H=F(X)/A(T),S(X)=S(X)-1 3460 IF M(T)=0 THEN LET H=H+H 3470 IF J(X)=1 THEN IF ABS(D(X))<=R(X)/2 THEN LET H=H*2 3480 IF J(X)=2 THEN IF ABS(D(X))>R(X)/10 THEN LET H=H/2 3490 IF J(X)=3 THEN IF ABS(D(X))>50 THEN LET H=H+1 3500 REM ...TERRAIN ADJ. FOR HIT CALC. 3510 IF L>3 THEN IF L<7 THEN LET H=H-(RND(0)*(.1*L)) 3520 IF L>=7 THEN LET H=H/2 3530 IF L=10 THEN LET H=H-1 3595 RETURN 3600 LET H=INT(H): REM ...PRINT +GERMAN+ MISS RESULTS 3610 IF F(X)<3 THEN LET H=H-1 3620 IF V(X)>R(X) THEN LET H=0 3630 IF ABS(Z1)>12 THEN LET H=0 3640 IF ABS(Z2)>8 THEN LET H=0 3650 IF H>0 THEN 3700 3660 IF ABS(Z1)<13 THEN IF ABS(Z2)<9 THEN 3700 3670 PRINT ,"&J* B O O M *" 3680 PRINT "Shot on *YOU* ";: IF H<1 THEN PRINT "Inefective" 3690 GOSUB 6700: RETURN 3700 REM ...PRINT +GERMAN+ *HIT* RESULTS 3710 PRINT ,"&J*+#+* B L A M *+#+*&J" 3720 PRINT TAB(10);"Y O U ' V E B E E N H I T !" 3730 LET E=T,W=W(T) 3740 GOSUB 6600: PRINT " *YOU* ARE..."; 3750 IF Z2=2 THEN LET W(T)=2 3760 IF Z2=2 THEN IF RND(0)>.85 THEN LET W(T)=3,M(T)=0 3770 IF Z2=0 THEN LET W(T)=0: PRINT " *** YOUR DEAD ***&J" 3780 IF W(T)=2 THEN PRINT " $#! STUNNED !#$&J" 3785 IF W(T)=3 THEN PRINT " +++ DAMAGED --- CAN'T MOVE +++" 3790 IF W(T)>3 THEN PRINT " /^\ JUST DENTED \V/" 3795 RETURN 3800 GOSUB 7000: REM = = = + ENEMY MOVE + = = = 3805 IF M(X)=0 THEN PRINT "...+++Stalled+++": RETURN 3810 IF M(X)=1 THEN PRINT " .:. Visible .:.": RETURN 3815 IF W(X)=5 THEN PRINT " *** Halted ***": RETURN 3820 PRINT " ...moving.": IF W(X)=6 THEN LET D=INT((RND(0)*2)+2.5) 3830 IF RND(0)>.95 THEN LET D=FNR(9) 3835 IF RND(0)>.3 AND T=7 THEN LET D=FNR(5)+1 3840 IF W(X)=7 THEN LET D=7: PRINT ,,"+*+ RETREATING +*+" 3850 IF W(X)=7 AND RND(0)>.95 THEN LET M(X)=M(X)-10 3860 IF T=7 THEN LET D1=M(X)+FNR(30) 3861 IF T<>7 THEN LET D1=M(X)-FNR(30) 3865 GOSUB 6000: LET D(X)=INT(D(X)+(V1)) 3870 LET H(X)=INT(H(X)+(H1/2)),V(X)=INT(V(X)+(V1/2)) 3880 LET Y(X)=INT(Y(X)+(V1*.6)),D(X)=INT(D(X)/10)*10 3885 IF ABS(D(X)).6 THEN LET W(X)=4 3920 IF Z2>.9 THEN LET W(X)=7 3930 IF S(X)=0 THEN RETURN 3940 IF M(X)>0 THEN RETURN 3950 IF Z2>.15 THEN RETURN 3960 PRINT TAB(12);" ";: GOSUB 7000: LET S(X)=0 3970 PRINT " being... ### ABANDONED ###" 3990 RETURN 4000 PRINT 4010 IF W(T)<>2 THEN 4040 4020 PRINT "*YOU* ARE +*+STUNNED+*+ OUT OF 1 TURN.&J" 4030 LET W(T)=4: GOTO 3000 4040 IF S(T)<=0 THEN GOSUB 4600 4050 IF S(T)<=0 AND Z=0 THEN 9000: REM ...game over 4060 IF C=2 THEN IF N<1 THEN PRINT " See nothing...Hear nothing." 4070 INPUT (1,200)" NEXT COMMAND ? (0 TO 9) ---=>",C$ 4080 IF LEN(C$)=0 THEN LET C=2: GOTO 3000 4090 LET C=ASC(C$(1,1))-48: SET DS=0 4100 PRINT : IF C=0 THEN 5000: REM ...MOVE 4110 IF C=1 THEN 5100: REM ...SCAN 4120 IF C=2 THEN 3000: REM ...WAIT 4130 IF C=3 THEN 5300: REM ...SHOOT 4140 IF C=4 THEN 5400: REM ...WITHDRAW 4150 IF C=5 THEN 5500: REM ...RETREAT 4160 IF C=6 THEN 5600: REM ...STATUS 4170 IF C=7 THEN 5700: REM ...INFO 4180 IF C=8 THEN 5800: REM ...POINTS 4190 IF C=9 THEN 5900: REM ...LOG 4195 IF C=17 THEN LET D=3,D1=M(T): GOTO 5080 4200 PRINT "*=*=*=* C O M M A N D S U M M A R Y *=*=*=*" 4210 PRINT : PRINT "COMMAND 0 - MOVE 0 TO ";M(T);M$ 4220 PRINT "COMMAND 1 - SCAN OF VISIBLE";E$;T$ 4230 PRINT "COMMAND 2 - WAIT FOR GERMANS TO MOVE CLOSER." 4240 PRINT "COMMAND 3 - SHOOT AT ONLY *ONE* ENEMY UNIT." 4250 PRINT "COMMAND 4 - WITHDRAW FROM THE AREA. (not the game)" 4260 PRINT "COMMAND 5 - ABANDON YOUR CRIPPLED ";: GOSUB 7500 4265 PRINT " tank" 4270 PRINT "COMMAND 6 - GET A STATUS REPORT." 4280 PRINT "COMMAND 7 - GET INFO ON THE";E$;T$ 4290 PRINT "COMMAND 8 - POINT VALUES OF";E$;T$ 4300 PRINT "COMMAND 9 - LIST *LOG* OF KILLS SO FAR." 4310 PRINT "COMMAND A - *#* ADVANCE full speed forward *#*" 4320 GOTO 4000 4400 LET D=3,D1=M(T)*2: REM ...ATTEMPT SAFE WITHDRAWL 4410 GOSUB 6000: PRINT " *** WITHDRAWING ";D1;M$;" ***" 4420 FOR X=Q TO Q+(Q1-1) 4430 IF W(X)<2 THEN 4460 4440 LET D(X)=D(X)+D1,V(X)=V(X)+M(T) 4450 IF W(X)<7 THEN IF ABS(D(X))9 AND N>0 THEN GOSUB 4420 4640 RETURN 5000 IF M(T)=0 THEN 4500: REM ...CMD 0 --- MOVE 5010 INPUT (1,0)" Direction to move ? (1-8)---=>",D 5020 LET D=INT(D): IF D=0 THEN 4000 5030 IF D<0 THEN GOSUB 900: GOTO 4000 5040 IF D>8 THEN GOSUB 900: GOTO 4000 5050 PRINT : INPUT (3,0)" How many meters to move ? ---=>",D1 5060 SET DS=0: LET D1=INT(D1): IF D1=0 THEN 4000 5070 IF D1<0 OR D1>M(T) THEN PRINT N$;M(T): GOTO 5050 5080 GOSUB 6000: IF L>0 THEN IF RND(0)>.3 THEN LET L=L-1 5085 IF E=0 THEN 5090 5087 IF N>0 THEN IF W(E)=7 THEN IF RND(0)>.7 THEN GOSUB 6900 5090 GOSUB 6100: IF N>0 THEN GOSUB 6800 5095 GOTO 3000 5100 REM ...COMMAND 1 --- SCAN 5110 IF N<1 THEN 5700 5130 FOR X=Q TO Q+(Q1-1) 5140 IF W(X)<2 THEN 5190 5160 GOSUB 7000: PRINT " ";TAB(26);"distance: ";D(X); 5170 IF W(X)=2 THEN PRINT " *STUNNED*"; 5172 IF W(X)=5 THEN PRINT " *Halted*"; 5175 IF M(X)=0 THEN PRINT " +DAMAGED+": GOTO 5190 5180 IF W(X)=7 THEN PRINT " RETREATING": GOTO 5190 5185 PRINT " " 5190 NEXT X 5195 GOTO 4000 5300 REM ...COMMAND 3 --- SHOOT 5310 IF N<1 THEN 5700 5320 IF S(T)>0 THEN 5340 ELSE PRINT "&K&J&J&J" 5330 PRINT ,"-=<[ C L I C K ]>=-&J&J&J&J": PAUSE 25: GOTO 3100 5340 FOR Z=Q TO Q+(Q1-1) 5350 IF W(Z)>1 THEN LET E=Z 5360 NEXT Z 5370 IF N>1 THEN GOSUB 6200 5380 IF E=0 THEN 4000 5390 LET X=E: GOSUB 6300: GOSUB 6400: GOTO 3100 5400 LET Z=0: REM ...COMMAND 4 --- WITHDRAW 5410 IF M(T)=0 THEN 4500 5420 IF N<=0 THEN 5470 5430 IF Q>=10 THEN GOSUB 4400 5440 IF Z>0 THEN 3000 ELSE PRINT 5450 IF Z=0 THEN PRINT ,"### WITHDRAWL SUCCESSFUL ###" 5460 LET N=0: PRINT "&J WITHDRAWING from ";: GOSUB 7700 5470 LET L=FNR(10)+1: PRINT 5480 GOSUB 7600: PRINT ,"+++ YOUR NEW POSITION IS +++" 5490 GOSUB 7700: GOTO 4000 5500 REM ...COMMAND 5 --- ABANDON TANK 5510 IF M(T)=0 THEN PRINT "*** DAMAGED *** ";: GOSUB 7500 5520 IF M(T)=0 THEN PRINT " *** ABANDONED *** ": GOTO 9000 5530 PRINT "&J *YOU* ARE PENNALIZED ";P(T);" *POINTS*" 5540 PRINT " FOR ABANDONNING a perfectly GOOD" 5550 GOSUB 7500: LET P=P-P(T): GOTO 9000 5600 REM ...COMMAND 6 --- STATUS 5605 GOSUB 7500: PRINT " tank's *STATUS* is:"; 5610 IF M(T)=0 THEN PRINT " #*# DAMAGED #*#" 5615 IF M(T)>0 THEN PRINT " + UN-DAMAGED +" 5620 PRINT "&J* * * PRESENT TERRAIN: ";: GOSUB 7700: PRINT 5630 PRINT "=============== Mission #";M; 5635 FOR X=1 TO 14: PRINT "==";: NEXT X: PRINT 5640 GOSUB 7500: PRINT TAB(24);"max SHOOTING RANGE:";R(T);M$ 5650 PRINT N$;M(T);TAB(24);"cannon: ";C(T);" mm." 5660 PRINT "Armour Rating: ";A(T);TAB(24); 5670 PRINT "Firepower Rating: ";F(T) 5680 PRINT ,"*#* ";S(T);" Shells Left *#*" 5690 FOR X=1 TO 28: PRINT "==";: NEXT X 5695 PRINT : GOTO 4000 5700 LET Z=0: PRINT : REM ...COMMAND 7 --- INFO 5710 IF N<1 THEN PRINT " ### NO GERMANS VISIBLE ###": GOTO 4000 5720 PRINT "++++++++++++++++ DATA ON GERMANS +++++++++++++++++++++++++" 5730 FOR X=Q TO Q+(Q1-1) 5740 IF W(X)<2 THEN 5790 5750 GOSUB 7000: PRINT TAB(26);"max SHOOTING RANGE: ";R(X);M$ 5760 PRINT "max MOVE RATE: ";M(X);TAB(26);"cannon: ";C(X);" mm." 5765 PRINT "Armour Rating: ";A(X);TAB(26); 5767 LET Z=Z+1: PRINT "Firepower Rating: ";F(X) 5770 FOR Y=1 TO 58: PRINT "+";: NEXT Y 5775 PRINT : IF N=3 THEN IF Z=3 THEN 4000 5776 IF N=6 THEN IF Z=6 THEN 4000 5780 IF Z=3 OR Z=6 THEN PRINT I$;: INPUT (1,0)Y$ 5790 NEXT X 5795 GOTO 4000 5800 REM ...COMMAND 8 --- POINTS 5810 IF N<1 THEN PRINT " =#= NO VISBLE";E$;"S =#=": GOTO 5880 5830 PRINT "***************** POINT VALUES *****************" 5840 FOR X=Q TO Q+(Q1-1) 5845 IF W(X)<2 THEN 5870 5850 PRINT "<=- ";: GOSUB 7000: PRINT TAB(32);P(X); 5855 PRINT TAB(37);"POINTS -=>" 5860 FOR Z=1 TO 48: PRINT ".";: NEXT Z 5865 PRINT 5870 NEXT X 5880 PRINT ,"Your present score: [*#* ";P;" *#*]" 5890 GOTO 4000 5900 GOSUB 7900: REM ...COMMAND 9 --- BATTLE LOG 5910 INPUT (1,0)"Want a list of your types of units? ---=>",Y$ 5920 IF Y$="N" THEN 4000 ELSE PRINT "&K" 5930 GOSUB 7500: PRINT " LOG of";E$;" class of units eliminated.&J" 5940 FOR I=10 TO 50 5950 IF K>30 THEN IF I=21 OR I=32 THEN PRINT I$;: INPUT (1,100)Y$ 5960 IF I(I)<1 THEN 5980 5970 PRINT ,I(I);" ... ";: GOSUB 7050: PRINT 5980 NEXT I 5990 PRINT K3;T$;" and ";K-K3;E$;" unit(s)." 5995 GOTO 4070 6000 REM ...GOSUB FOR MOVE DIRECTION. 6005 IF D=0 THEN LET H1=0,V1=0: RETURN 6010 IF D=1 THEN LET H1=D1,V1=INT(D1*.2): RETURN 6020 IF D=2 THEN LET H1=INT(D1*(.8)),V1=INT(D1*(.8))*(-1): RETURN 6030 IF D=3 THEN LET H1=0,V1=D1*(-1): RETURN 6040 IF D=4 THEN LET H1=INT(D1*(.8))*(-1),V1=INT(D1*(.8))*(-1): RETURN 6050 IF D=5 THEN LET H1=D1*(-1),V1=INT(D1*.2): RETURN 6060 IF D=6 THEN LET H1=INT(D1*(.8))*(-1),V1=INT(D1*(.8)): RETURN 6070 IF D=7 THEN LET H1=0,V1=D1: RETURN 6080 IF D=8 THEN LET H1=INT(D1*(.8)),V1=INT(D1*(.8)) 6090 RETURN 6100 REM ...GOSUB TO CHANGE "DISTANCES". 6120 IF Q1=0 THEN RETURN 6130 IF N<=0 THEN RETURN 6140 FOR X=Q TO Q+(Q1-1) 6145 IF W(X)<2 THEN 6180 6150 LET D(X)=INT(D(X)+(V1)) 6160 LET H(X)=INT(H(X)+(H1/2)),V(X)=INT(V(X)+(V1/2)) 6170 LET Y(X)=INT(Y(X)+(V1*.3)),X(X)=INT(X(X)+(H1*.2)) 6175 IF W(X)=2 THEN LET H(X)=INT(H(X)+(H1/2)),V(X)=INT(V(X)+(V1/2)) 6180 NEXT X 6190 RETURN 6200 IF N<=0 THEN RETURN : REM ...SELECT WHICH ENEMY TO SHOOT 6220 IF Q<10 THEN RETURN 6230 FOR X=Q TO Q+(Q1-1) 6235 IF W(X)<2 THEN 6250 6240 PRINT X;: IF W(X)=2 THEN PRINT "*"; 6243 IF M(X)=0 THEN PRINT "+"; 6245 PRINT " ";: GOSUB 7000: PRINT TAB(23);"range: ";D(X); 6246 PRINT TAB(38);"it shoots to: ";R(X) 6250 NEXT X 6260 PRINT : INPUT (2,0)" INPUT which unit # to shoot at --->",E 6270 LET E=INT(E): SET DS=0 6275 IF E=0 THEN PRINT "SHOOTING ABORTED": RETURN 6280 IF EQ+Q1 THEN PRINT "NUMBER TOO HIGH": GOTO 6200 6290 IF W(E)=0 THEN PRINT "*** THAT UNIT IS DEAD ***": GOTO 6200 6295 RETURN 6300 LET S(T)=S(T)-1: REM ...GOSUB TO CALCULATE A "HIT". 6310 LET Z1=INT(D(E)-Y(E)),Z2=INT(X(E)) 6320 LET Z3=INT((RND(0)*(Z1/2))+(Z1/2)),Z4=INT((RND(0)*(Z2/2))+(Z2/2)) 6330 LET Y(E)=INT(Y(E)+Z3),X(E)=INT(X(E)-Z4),H=F(T)/A(E) 6335 IF ABS(D(E)).85 THEN LET H=H+1 6350 IF ABS(D(E))1 AND T<>7 THEN IF ABS(D(E))>R(T)/2 THEN LET H=H/2 6359 IF J(E)=1 AND T=7 THEN IF ABS(D(E))>R(T)/2 THEN LET H=H/2 6360 LET H=INT(H): IF ABS(Y(E))>R(T)+10 THEN LET H=0 6365 IF J(E)=4 THEN LET W(E)=7 6366 IF J(E)=3 THEN IF RND(0)>.8 THEN LET W(E)=7 6367 IF J(E)<3 THEN IF F(T)>F(E) THEN IF RND(0)>.9 THEN LET W(E)=7 6370 IF ABS(Y(E))>R(T)+10 THEN LET Y(E)=R(T)-FNR(25) 6380 IF ABS(Z1)>15 THEN LET H=0 6390 IF ABS(Z2)>10 THEN LET H=0 6395 RETURN 6400 PRINT : REM ...RESULT OF YOUR SHOT 6410 IF C(T)=37 THEN PRINT ,"*** B A N G ***" 6420 IF C(T)=75 THEN PRINT ,"*#+ B O O O M +#*" 6425 IF C(T)=76 THEN PRINT ,"[+] B L A A A M M [+]" 6430 IF C(T)>=90 THEN PRINT ,"[@$ K A V O O O M M $@]" 6435 IF ABS(Z1)<16 THEN IF ABS(Z2)<11 THEN IF H=0 THEN 6500 6450 PRINT : LET X=E: IF H>0 THEN 6500 6455 PRINT ,"* BOOM *&J": PRINT "shot on ";: GOSUB 7000 6470 IF ABS(D(E))>R(T)+15 THEN PRINT " is +*+ OUT OF RANGE +*+" 6480 IF ABS(D(E))>R(T)+15 THEN LET Y(E)=R(T),Z1=INT(ABS(D(E))-Y(E)) 6490 GOSUB 6700: LET W(E)=6: IF RND(0)>.2 THEN LET W(E)=4 6495 RETURN 6500 PRINT : REM ..."HIT" ON ENEMY MESSAGE DISPLAY 6510 PRINT ,"*+#+* B L A M *+#+*&J": GOSUB 7000 6520 PRINT " *HIT*": LET W=W(E): GOSUB 6600: PRINT TAB(10); 6530 GOSUB 7000: IF Z2=2 THEN LET W(E)=2 6540 IF M(E)>0 THEN IF RND(0)>.8 THEN LET W(E)=3,M(E)=0 6550 IF S(T)=0 THEN IF Z2=2 THEN LET Z2=0 6560 IF Z2=0 THEN LET W(E)=0,P=P+P(E),K=K+1,K1=K1+1 6565 IF Z2=0 THEN IF J(E)=1 THEN LET K2=K2+1,K3=K3+1 6570 IF W(E)=0 THEN PRINT " *** DESTROYED ***" 6575 IF W(E)=0 THEN LET I(T(E))=I(T(E))+1 6580 IF W(E)=2 THEN PRINT " $#! STUNNED !#$" 6585 IF W(E)=3 THEN PRINT " +++ DAMAGED --- CAN'T MOVE +++" 6590 IF W(E)>3 THEN PRINT " /^\ DENTED \V/" 6595 PRINT : RETURN 6600 LET Z=FNR(6)+1: REM++++ COMBAT RESULTS TABLE ++++ 6610 LET Z2=5,W=W(E) 6620 IF H=0 AND Z<3 THEN LET Z2=2: RETURN 6630 IF H=1 THEN IF Z<3 AND W=2 THEN LET Z2=0: RETURN 6635 IF H=1 THEN IF Z<4 AND W<>2 THEN LET Z2=2: RETURN 6640 IF H>1 THEN IF Z<2 THEN LET Z2=0: RETURN 6650 IF H>2 THEN IF Z<3 THEN LET Z2=0: RETURN 6660 IF H>3 THEN IF Z<6 THEN LET Z2=0: RETURN 6665 IF H>4 THEN LET Z2=0: RETURN 6670 IF H=2 THEN IF Z<4 AND W=2 THEN LET Z2=0: RETURN 6675 IF H=2 THEN IF Z<6 AND W<>2 THEN LET Z2=2: RETURN 6680 IF H=3 THEN IF Z<5 AND W=2 THEN LET Z2=0: RETURN 6685 IF H=3 THEN IF W<>2 THEN LET Z2=2: RETURN 6690 IF H=4 THEN IF W=2 THEN LET Z2=0 6695 RETURN 6700 IF Z1>15 THEN PRINT " SHORT by ";Z1;M$ 6710 IF Z1<-15 THEN PRINT " LONG by ";Z1;M$ 6720 IF ABS(Z2)>10 THEN PRINT " off to the ";: GOTO 6740 6730 RETURN 6740 IF Z2>0 THEN PRINT "LEFT by ";Z2;M$ 6750 IF Z2<0 THEN PRINT "RIGHT by ";Z2;M$ 6790 RETURN 6800 FOR X=Q TO Q+(Q1-1): REM ...COLLISION ? 6810 IF W(X)<2 THEN 6890 6820 IF ABS(D(X))<>0 THEN 6890 6830 IF J(X)=4 THEN PRINT ,,"#$# CRUNCH #$#" 6840 IF J(X)<4 THEN PRINT ,,"*#* WHAM ! *#*" 6850 PRINT " COLLISION with ";: GOSUB 7000 6860 IF (A(T)/A(X))<3.5 THEN EXIT 6895 6870 PRINT : PRINT ,"*** RUN OVER ***": LET Z2=0 6880 GOSUB 7000: LET E=X: GOSUB 6560: EXIT 6895 6890 NEXT X 6895 RETURN 6900 IF Q+Q1-1<80 THEN LET Q1=Q1+1 6910 LET X=Q+Q1-1: IF X>81 THEN 6995 6920 IF W(X)<=0 THEN 6995 6930 LET W(X)=6 6940 PRINT " ### ";: GOSUB 7000 6950 IF M(X)>1 THEN PRINT " COMMING OUT OF THE FIELDS ###" 6960 IF M(X)<=1 THEN PRINT " is now visible ###" 6970 IF R(T)<1501 THEN LET D(X)=R(T)+FNR(50)*10 6980 IF R(T)>1500 THEN LET D(X)=1500+FNR(50)*10 6990 LET V(X)=V(X)+INT(RND(0)*(D(X)/5)) 6995 RETURN 7000 REM *=*=* ENEMY NAME DISPLAY *=*=* 7010 LET I=T(X) 7050 IF I=10 THEN PRINT "RECON CAR";: RETURN 7060 IF I=11 THEN PRINT "ARMORED CAR";: RETURN 7070 IF I=12 THEN PRINT "MOBILE ARTILLERY";: RETURN 7080 IF I=13 THEN PRINT "ROCKET TRUCK";: RETURN 7090 IF I=14 THEN PRINT "MOBILE HOWITZER";: RETURN 7100 IF I=15 THEN PRINT "BIG ASSAULT GUN";: RETURN 7110 IF I=16 THEN PRINT "Flakpanzer";: RETURN 7120 IF I=17 THEN PRINT "HETZER ASSAULT GUN";: RETURN 7130 IF I=18 THEN PRINT "STUG-3 ASSAULT GUN";: RETURN 7140 IF I=19 THEN PRINT "LYNX";: RETURN 7150 IF I=20 THEN PRINT "Pzkw-III"; 7160 IF I=21 THEN PRINT "PZKW-IV";: RETURN 7170 IF I=22 THEN PRINT "Pzkw-IV(SS)";: RETURN 7180 IF I=23 THEN PRINT "PANTHER";: RETURN 7190 IF I=24 THEN PRINT "Panther(SS)";: RETURN 7200 IF I=25 THEN PRINT "TIGER";: RETURN 7210 IF I=26 THEN PRINT "KING TIGER";: RETURN 7220 IF I=27 THEN PRINT "Motor cycle"; 7230 IF I=28 THEN PRINT "TRUCK";: RETURN 7240 IF I=29 THEN PRINT "HALF-TRACK";: RETURN 7250 IF I=30 THEN PRINT "HALF-TRACK II.";: RETURN 7260 IF I=31 THEN PRINT "ARMORED CAR II.";: RETURN 7270 IF I=32 THEN PRINT "NASHORN GUN"; 7280 IF I=33 THEN PRINT "JGD PZ IV"; 7290 IF I=34 THEN PRINT "JAG PZ V";: RETURN 7300 IF I=35 THEN PRINT "JAG-PZ 6";: RETURN 7310 IF I=36 THEN PRINT "75mm A.Tank gun"; 7320 IF I=37 THEN PRINT "88mm A.Tank gun"; 7330 IF I=38 THEN PRINT "75mm Howitzer"; 7340 IF I=39 THEN PRINT "Armored car"; 7350 IF I=40 THEN PRINT "Petrol truck"; 7360 IF I=50 THEN PRINT "General Staff car"; 7390 RETURN 7500 REM ..."YOUR TANK"... 7510 IF T=1 THEN PRINT "SHERMAN ";: RETURN 7520 IF T=2 THEN PRINT "M-5 *Stuart* ";: RETURN 7530 IF T=3 THEN PRINT "M-24 *CHAFFE* ";: RETURN 7540 IF T=4 THEN PRINT "M-10 Tank-Destroyer ";: RETURN 7550 IF T=5 THEN PRINT "M-36 TANK-DESTROYER ";: RETURN 7560 IF T=6 THEN PRINT "Souped-up SHERMAN ";: RETURN 7570 IF T=7 THEN PRINT "M7 Priest Howitzer ";: RETURN 7580 IF T=8 THEN PRINT "M18 TANK-DESTROYER ";: RETURN 7590 IF T=9 THEN PRINT "M26 *PATTON* "; 7595 RETURN 7600 IF Q=0 THEN 7690: REM ...HIDE ENEMY UNITS 7620 IF Q1<=0 THEN 7690 7630 FOR X=Q TO Q+(Q1-1) 7640 IF W(X)>0 THEN LET W(X)=1 7680 NEXT X 7690 RETURN 7700 REM -=-=-=- YOUR TERRAIN -=-=-=- 7705 IF L<1 THEN PRINT " *flatland*": RETURN 7710 IF L=1 THEN PRINT " Flat-open grass-land.": RETURN 7720 IF L=2 THEN PRINT " Flat-open useless-land.": RETURN 7730 IF L=3 THEN PRINT " Flat high-grassland.": RETURN 7740 IF L=4 THEN PRINT " HIDDEN in a thicket.": RETURN 7750 IF L=5 THEN PRINT " HIDDEN in a wooded area.": RETURN 7760 IF L=6 THEN PRINT " DUG-IN on bushy earth. ": RETURN 7770 IF L=7 THEN PRINT " CAMOFLAGED on a hill-top.": RETURN 7780 IF L=8 THEN PRINT " DUG-IN on a hilltop. ": RETURN 7790 IF L=9 THEN PRINT " On a wooded hilltop. ": RETURN 7800 IF L=10 THEN PRINT " FORTIFIED on a ROCKY SLOPE. " 7890 RETURN 7900 PRINT : REM ...YOUR KILLS THIS GAME 7910 PRINT " YOU HAVE DESTROYED ";K1-K2;E$;" UNITS AND";K2 7915 PRINT E$;T$;" so for on DAY # ";M;" --Total: ";K1 7920 PRINT : LET Z=0 7925 INPUT (1,0)"Want a list of your kills ? ( Y=Yes N=No )-->",Y$ 7940 PRINT : IF Y$="N" THEN 7990 7950 PRINT " + + + + + ";K1;" GERMAN UNITS DESTROYED TODAY + + + + +" 7955 PRINT 7960 FOR X=10 TO 79 7970 IF W(X)=0 THEN GOSUB 7000: LET Z=Z+P(X) 7980 IF W(X)=0 THEN PRINT TAB(30);P(X);TAB(35);"*#* POINTS *#*" 7985 NEXT X 7990 PRINT TAB(7);"*** ";Z;" POINTS TODAY *** (";P;" TOTAL)" 7991 IF M=1 THEN 7995 7992 PRINT "###___*#* YOUR TOTALS ARE: ";K3;" TANKS AND ";K-K3;" OTHER UNITS." 7995 RETURN 9000 IF W(T)=0 THEN 9500: REM ...GAME OVER 9020 PRINT : IF C=5 THEN 9400 9100 PRINT ,":*: CONGRATULATIONS :*:&J": LET M=M+1 9120 PRINT "*#* ON THE END OF A SUCCESSFUL MISSION # ";M 9130 GOSUB 7900 9140 IF M(T)=0 THEN PRINT "Your damaged Tank has been fixed." 9150 PRINT "&JDo you want another mission with your "; 9160 IF M(T)=0 THEN PRINT "New "; 9170 GOSUB 7500: PRINT : PRINT 9200 INPUT (1,0)" (Type in: Y=yes N=no ) ---=>",Y$ 9210 IF Y$="N" THEN 9400 9230 GOTO 9570 9400 LET T=INT(RND(0)*9)+1 9430 PRINT "&J *YOU* have been issued a new ";: GOSUB 7500 9500 PRINT : REM ...PLAY AGAIN 9510 PRINT " You've Destroyed ";K3;E$;T$;" (Total)" 9520 IF W(T)=0 THEN GOSUB 7900: GOTO 9600 9530 PRINT " *#* DO YOU WANT TO TRY AGAIN ? *#*" 9540 INPUT (1,0)" Type in Y=yes N=no ----=>",Y$ 9550 IF Y$="N" THEN 9900 9570 IF W(T)<>0 THEN 300 9600 PRINT "Type 'RUN' to play again." 9900 END