100 LET T=INT(RND(0)*9)+1: REM...by Ralph Hopkins 4-10-79 110 LET K=0,K3=0,M=1,P=0 120 DIM A(80),C(80),D(80),F(80),H(80),I(40),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$=" Russian ",T$=" Tanks" 170 LET M$=" meters.",N$="Max move rate: " 200 PRINT "&K&J": PRINT TAB(31);".---." 210 PRINT TAB(25);",/'''''''''':" 220 PRINT TAB(9);"##============// T A N K Z \" 230 PRINT ," ,.../################===######]..." 240 PRINT ," ' ((*)' ' ' O ' ' O ' ' O ' '(*)) '" 250 PRINT TAB(19);"\";TAB(47);"/" 260 PRINT TAB(21);"\(+).(X).(+).(X).(+).(X)/&J" 300 DATA 9,76,12,90,500,50,50 320 DATA 9,76,12,90,600,50,50 330 DATA 12,85,14,110,800,35,65 340 DATA 10,85,15,110,800,40,75 350 DATA 13,85,15,100,800,40,70 360 DATA 12,122,18,80,800,25,125 370 DATA 15,122,17,70,1000,30,150 380 DATA 14,122,18,80,1200,25,170 390 DATA 15,100,16,80,800,30,100 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 " *=*=* GREETINGS COMRADE COMMANDER *=*=*&J" 610 PRINT " THIS IS A GAME OF TANK WARFARE ON THE EASTERN" 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,29,16,17,28,25,25,23,17,28,31,29,21,19,24 1420 DATA 26,21,22,29,27,28,13,21,26,23,28,33,21,32,16 1430 DATA 10,11,29,29,15,14,21,30,15,29,18,14,21,20,19 1440 DATA 29,19,20,33,22,10,23,11,34,28,21,25,10,11,12 1450 DATA 34,35,36,37,38,39,38,37,34,12 1460 FOR X=10 TO 79: READ T(X): NEXT X 1500 LET Z=INT(RND(0)*35)+15,Y=INT(RND(0)*3.3)+3 1520 FOR X=10 TO Z+10 1530 LET Z1=INT(RND(0)*69)+10 1540 LET Z2=INT(RND(0)*69)+10,T(Z1)=T(Z2) 1560 NEXT X 1570 LET Z=INT(RND(0)*29)+10,E=0 1580 FOR X=Z TO Y: LET T(X)=T(Z): NEXT X 1590 PRINT TAB(9);"*#* B E S T O F L U C K *#*": PRINT 1600 FOR X=10 TO 79 1610 LET S(X)=INT(RND(0)*30)+(5): IF T(X)<>Z THEN 1650 1620 LET E=E+1: PRINT " #ROVING CAVALRY# reports ...";E;" "; 1630 GOSUB 7000: IF E=1 THEN PRINT " unit." 1640 IF E>1 THEN PRINT " units." 1650 LET Y=T(X): LET Q=INT(Y/10) 1660 ON Q GOTO 1670,1680,1690 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=6: 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.075,B=12.1,C=80.025,D=8: GOTO 1950 1810 LET A=7.075,B=11.1,C=80.025,D=8: GOTO 1950 1820 LET A=12.105,B=14.2,C=80.075,D=12: GOTO 1950 1830 LET A=11.075,B=13.1,C=100.065,D=11: GOTO 1950 1840 LET A=15.088,B=20.1,C=90.125,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=18.122,B=22.1,C=50.2,D=12: 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=7.05,B=8.1,C=90.02,D=6: GOTO 1950 1941 LET A=3.05,B=8.1,C=1.02,D=5: GOTO 1950 1942 LET A=2.075,B=13.1,C=1.015,D=6: 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=1.060,B=20.1,C=180.01,D=.5 1950 LET A(X)=INT(A),C(X)=(A-INT(A))*1000 1960 LET F(X)=INT(B),J(X)=(B-INT(B))*10 1970 LET M(X)=INT(C),P(X)=(C-INT(C))*1000 1980 LET R(X)=D*100 1990 NEXT X 2000 PRINT "&J Your present terrain position is "; 2010 GOSUB 7700: LET Q=0 2200 FOR X=10 TO 79 2210 LET D(X)=INT(RND(0)*(R(T)/100))*100-INT(R(T)/10) 2220 LET D(X)=D(X)+(R(T)-100),W(X)=6 2230 LET H(X)=INT((RND(0)*10)*10),V(X)=INT(D(X)/2) 2240 LET Y(X)=D(X)-INT((RND(0)*30)*10) 2250 IF Y(X)>R(T) THEN LET Y(X)=INT(R(T)-(R(T)/10)) 2260 LET X(X)=INT((RND(0)*14)*10)-70 2270 NEXT X 3000 IF RND(0)>.6 THEN 3100 3010 IF N>0 THEN 3100 3020 LET Q=INT(RND(0)*62)+10,Q1=INT(RND(0)*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: LET 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=INT(RND(0)*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=INT(RND(0)*Z1),Z4=INT(RND(0)*H(X)) 3430 LET V(X)=INT(V(X)+(Z3)): LET 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 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: LET 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=INT(RND(0)*9) 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 LET D1=M(X)-INT(RND(0)*30): 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*.7)),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(20);" ";: 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 " Distant sounds...Wait again" 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 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=INT((RND(0)*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 STALIN'S 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 "* * * * * * * * * DAY # ";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 39 5950 IF K>20 THEN IF I=12 OR I=24 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 TO MOVE IN EACH 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): 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 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)-INT(RND(0)*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)=76 THEN PRINT ,"*** B O O M ***" 6420 IF C(T)=85 THEN PRINT ,"*#* B A O O O M *#*" 6425 IF C(T)=100 THEN PRINT ,"### B L A A A M M ###" 6430 IF C(T)>=122 THEN PRINT ,"<*> C A A R 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: LET 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=INT(RND(0)*6)+1: REM++++ COMBAT RESULTS TABLE ++++ 6610 LET Z2=5: LET 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>71 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 LET D(X)=R(T)+INT((RND(0)*50)*10) 6980 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 "WIRBELWIND";: 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 "MARDER GUN";: RETURN 7160 IF I=21 THEN PRINT "PZKW-IV";: RETURN 7170 IF I=22 THEN PRINT "STU 42 HOWITZER";: RETURN 7180 IF I=23 THEN PRINT "PANTHER";: RETURN 7190 IF I=24 THEN PRINT "JAG PZ V";: RETURN 7200 IF I=25 THEN PRINT "TIGER";: RETURN 7210 IF I=26 THEN PRINT "KING TIGER";: RETURN 7220 IF I=27 THEN PRINT "JAG-PZ 6";: RETURN 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 "PZKW-III"; 7300 IF I=35 THEN PRINT "50mm A.Tank gun"; 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 "Motor cycle"; 7390 RETURN 7500 REM-------- "YOUR TANK" --------- 7510 IF T=1 THEN PRINT "SU-76 TURRETLESS ";: RETURN 7520 IF T=2 THEN PRINT "T-34 C ";: RETURN 7530 IF T=3 THEN PRINT "SU-85 ";: RETURN 7540 IF T=4 THEN PRINT "T-34/85 ";: RETURN 7550 IF T=5 THEN PRINT "KV 85 ";: RETURN 7560 IF T=6 THEN PRINT "J STALIN II ";: RETURN 7570 IF T=7 THEN PRINT "JSU-122 TURRETLESS "; 7580 IF T=8 THEN PRINT "J STALIN-III "; 7590 IF T=9 THEN PRINT "SU-100 TURRETLESS "; 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 " Wide-open marsh-land.": RETURN 7720 IF L=2 THEN PRINT " Flat-open barren land.": RETURN 7730 IF L=3 THEN PRINT " Flat high-grassland.": RETURN 7740 IF L=4 THEN PRINT " HIDDEN IN A BRUSH PILE.": RETURN 7750 IF L=5 THEN PRINT " HIDDEN IN A WOODY AREA.": RETURN 7760 IF L=6 THEN PRINT " HIDDEN IN WRECKED BARN ": RETURN 7770 IF L=7 THEN PRINT " CAMOFLAGED ON A HILL-TOP.": RETURN 7780 IF L=8 THEN PRINT " IN SOME CITY RUBBLE.": RETURN 7790 IF L=9 THEN PRINT " ON A WOODED HILL-TOP." 7800 IF L=10 THEN PRINT " FORTIFIED IN A CITY." 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 ,"*#* STALIN'S BLESSING *#*&J": LET M=M+1 9120 PRINT "*#* ON THE END OF A SUCCESSFUL DAY # ";M 9130 GOSUB 7900 9140 IF M(T)=0 THEN PRINT "YOUR WRECKED TANK HAS BEEN REPLACED." 9150 PRINT "&JDo you want another mission with your "; 9155 IF M(T)=0 THEN PRINT "New "; 9160 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: PRINT 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 RESTORE : IF W(T)=0 THEN CLEAR : GOTO 100 9590 GOTO 300 9900 END