diff --git a/ksp/Makefile b/ksp/Makefile index 7ad757db..48259343 100644 --- a/ksp/Makefile +++ b/ksp/Makefile @@ -13,6 +13,9 @@ CONTRACT.BAS: contract.bas FLIGHT.BAS: flight.bas $(TXT2BAS) < flight.bas > FLIGHT.BAS +KSP.BAS: ksp.bas + $(TXT2BAS) < ksp.bas > KSP.BAS + LAUNCH.BAS: launch.bas $(TXT2BAS) < launch.bas > LAUNCH.BAS @@ -30,6 +33,7 @@ VAB.BAS: vab.bas ksp.dsk: ACMPLX.BAS \ CONTRACT.BAS \ FLIGHT.BAS \ + KSP.BAS \ LAUNCH.BAS GLOBE.HGR LAUNCHPAD.HGR ORBIT_TOP.HGR ORBIT_RIGHT.HGR \ LOADING.BAS LOADING.HGR SQUAD.HGR TITLE.HGR \ PHYSICS.BAS \ @@ -49,6 +53,7 @@ ksp.dsk: ACMPLX.BAS \ $(DOS33) -y ksp.dsk SAVE A PHYSICS.BAS $(DOS33) -y ksp.dsk SAVE A FLIGHT.BAS $(DOS33) -y ksp.dsk SAVE A CONTRACT.BAS + $(DOS33) -y ksp.dsk SAVE A KSP.BAS LAUNCHPAD.HGR: launchpad.pcx diff --git a/ksp/ksp.bas b/ksp/ksp.bas new file mode 100644 index 00000000..0a694807 --- /dev/null +++ b/ksp/ksp.bas @@ -0,0 +1,83 @@ +7 HOME +10 REM PRINT CHR$(4);"BLOAD GLOBE.HGR,A$2000" +20 AN$="ZURGTROYD" +90 S=3 +95 G=-9.8 +100 EN(1)=1:ST(1)=1:FT(1)=1 +101 EN(2)=2:ST(2)=2:FT(2)=1 +102 EN(3)=3:ST(3)=3:FT(3)=1 +1000 PRINT "ROCKET SUMMARY:":PRINT +1005 FOR I=1 TO S +1010 EM(I)=EN(I)*1.5+ST(I)*FT(I)*0.5 +1012 IF I=1 THEN EM(I)=EM(I)+1.0 +1014 FM(I)=ST(I)*FT(I)*4.0 +1015 SF(I)=FM(I) +1016 SM(I)=EM(I)+FM(I) +1020 TM(I)=0 +1022 FOR J=1 TO I +1025 TM(I)=TM(I)+SM(J) +1030 NEXT J +1035 TH(I)=EN(I)*168 +1040 DV(I)=270*-G*LOG(TM(I)/(TM(I)-FM(I))) +1050 TW(I)=TH(I)/(TM(I)*-G) +1055 FF(I)=TH(I)/(270*-G) +1990 PRINT "STAGE: ";I +1991 PRINT " TANKS=";ST(I)*FT(I);" ENGINES=";EN(I) +1992 PRINT " STAGE MASS=";SM(I);" TOTAL MASS=";TM(I) +1993 PRINT " DELTAV=";DV(I) +1995 PRINT " TWR=";TW(I) +2000 NEXT I +2999 GET A$ +3000 AN=0 +3012 GX=0:GY=-9.8:GA=0 +3013 V=0:VX=0:VY=0 +3014 AX=0:AY=0 +3015 KR=600000 +3016 RX=0:RY=KR+10 +3017 RA=KR +3018 TR=1:T=0 +4000 REM +4010 FL=FM(S)*100/SF(S) +4020 IF TR<>1 THEN GOTO 4050 +4025 IF FM(S)<0.1 THEN FM(S)=0:AX=0:AY=0:GOTO 4050 +4030 AX=(TH(S)/TM(S))*SIN(AN) +4035 AY=(TH(S)/TM(S))*COS(AN) +4040 FM(S)=FM(S)-FF(S) +4045 TM(S)=TM(S)-FF(S) +4047 GOTO 4060 +4050 REM NOT THRUSTING +4055 AX=0:AY=0 +4060 GA=ATN(RX/RY) +4062 REM PRINT "GA=";GA;" AY=";AY +4065 IF RY<0 THEN GA=GA+3.14 +4070 GY=COS(GA)*G +4075 GX=SIN(GA)*G +4080 AY=AY+GY +4085 AX=AX+GX +4090 ZX=VX +4095 ZY=VY +5000 VY=ZY+AY +5005 VX=ZX+AX +5010 V=SQR(VX*VX+VY*VY) +5012 RY=RY+0.5*(ZY+VY) +5014 RX=RX+0.5*(ZX+VX) +5018 RA=SQR(RX*RX+RY*RY) +5020 IF RA