,,:A$"VERSION 1.0" : Program : LANDER.BAS SEG @: EQUIP( )@ (EQUIP 0) 0 I1  : I1 g( SEG: WIDE (: JOY : PRT 2COLR : ADJUST <PROGNAME$ " LUNAR LANDER"F ,: : v P n :Get lander pictures from disk.Z  :Setup initial conditions8d  :Display Moving shipcn  :Test for Crash or Landingx  :Revise control parameters l :See if any keys pressed. d :CYCLE. $S2########## SETUP INITIAL CONDITIONS ##########Y X,Y=POSITION, F=FUEL, T=THRUST, SX,SY=SPEED, TILT=MODULE TILT,u GRAV=GRAVITY, S=SCORE $S1Z(A$):F(S):F0F:T :SX:SY:GRAV Sd:X:Y:ANG:TILT:C: F F XOLDX:YOLDY:TILTOLDTILT:TOLDTd: : ,:LAND: :A(d((,))): I :A$:: GRAV GRAV ADJUST  ,: ,+ GAUGE  ,: " SCORE=" S: ,: " FALL=" SY ,: "THRUST=" T: ,: "FUEL=" F: T) ,:"L L E": ,:" R"i ,:"F F P": ,:"U A O": ,:"E L W""(,)(,#),,BF:(,$)(,(),,BF :Fuel Gauge,(,)(!, ),,BF:(, )(!,(),,BF:(,)(!,),,BF :Fall GaugeY6(0,)(?,),,BF:(0,)(?,(),,BF:(0,)(?,),,BF :Power Gauge@G1: (,G1)(,G1),:G2 :(,G2)(!,G2),:G3:(0,G3)(?,G3),J $S2T########### lander picture ###########################^ $S14hLX():LY()(:(LX(),LY())(LX(),LY()),]rBOT : X-VALUE OF FIELD.l| I LPLY(I)LY()(LY())((H(SX)(LX(I)BOT)))LY(I)LY(I)(LY(I))() :add noise to land contour.7((LX(I)BOT)(LX(I)(BOT))) LY(I) : landing fieldo(LY(I)) LY(I) :prevent overflow of screen (LX(I),LY(I)),:(,),,: (BOT,)(BOT,),,BF SADLAND I :(BOTI,),: :Window for Advan.Lndr.>(X,Y),R1:ADVAN:: :ADVAN=1 FOR ADVANCED LANDER GAME.H $pa:############ Display moving Ship and Gauges #################### $S1  : MUSIC  : F  : Display picture.H "mb": TUNE(C,),TUNE(C,): TUNE(C,),TUNE(C,):CC: C C :Play "Blue DAnube Waltz" GAUGE & : ,#: (SY): ,#: (T) ,#: (F): F c,:&GG1(((FF0): GG1G1 0 : (,GG1)(,GG1),;0G1GG1:GG2(SY(333(SADLAND))): GG2 GG2 : GG2( GG2(: GG2G2 D : (,GG2)(!,GG2),: G2 G2 (,G2)(!,G2), : (,G2)(!,G2),0DG2GG2:GG3(((T): GG3G3 N : (0,GG3)(?,GG3),: G3 G3 (0,G3)(?,G3), : (0,G3)(?,G3),LNG3GG3: F c,:RX\b $S1l:######## Check KEYBOARD for commands ############################v $S1K$(,): (K$"") : (F) A$: : IF A$><"" GOTO 500.J("HPMK"(),K$): J ,,,,$4LTT: T TRhTT:(T) TnTILTTILT: (TILTNANG) TILTTILTTILT: (TILT) TILTNANG $S1:################ Revise CONTROL parameters ####################"  $S1SYSYGRAVT(HANG(TILT)):SXgffSXT(HANG(TILT)) : SX has air drag.  (SY ) SY *XXSXL|:YYSYL|: (Y) Y4 (YMY) YMY> (X) X H(XMX?) X?MXR(F) T:S\FFT:(F) F:T: ,:"OUT OF FUEL": pYfp J : K  : K,6^:~::::alarmz $s1:######## TEST FOR CRASH OR LANDING. ############################## $s1% YMY BOT(X) (BOT)(XMX) `9 YMY  I(X) ((XMX)): (YMY)LY(I) ::Each LX=4 unit SADLAND ADVAN  YMY BOT(X) (BOT)(XMX) SY  :  $pa,:################# END OF PROGRAM ########################6 $S1g I  : I,: J : J: I: , ,: ((,);: (,);: (,);: ((,);: : : : :: , : I : " CRASH !!! CRASH !!! CRASH !!!":#  ,:"YOU NEED MORE PRACTISE !!"A$: A$""  : ,:"PRESS ANY OTHER KEY TO CONTINUE":"PRESS `Q'= QUIT;`S'=SILENCE;`M'=MUSIC":" GAUGES `A'=ANALOG, `D'=DIGITAL"A$: A$"" $ ("Qq",A$) ,:   . ("Ss",A$) MUSIC: @ 8 ("Mm",A$) MUSIC: e B ("Aa",A$) GAUGE:  L ("Dd",A$) GAUGE:  V SADLAND ADVAN Z : ( ` SYADVAN !j c,: (TILT)  :Turn off "Blue Danube"!t :C:D:  : :C:D2:  :: , : "PERFECT LANDING !!":SS(F): I  ::C3:DR:  !~ SSCOREMAX SCOREMAXS: #"  ,:"YOUR EXTRA FUEL MAKES YOUR SCORE = " S ( ) ( ) " (MAX. SCORE TO DATE IS " SCOREMAX " BY " INIT$ ")": "  ,:"YOUR SCORE IS NOW " S " !!!!!!" ( ) "THIS IS THE HIGHEST SCORE UP TO NOW !!" ( ) "TYPE IN 3 INITIALS FOR POSTERITY :"# SEG: j,: "INITIALS: ",A$:INIT$(A$,): "lander.scr" OUTPUT AS #:#,SCOREMAX,INIT$:: :# : : :: ,:"ALMOST A GOOD LANDING BUT MUCH TOO FAST":  ,:"YOUR FALL RATE MUST BE LESS THAN "ADVAN: # : : : ,:"GOOD LANDING, BUT PLEASE LAND ON 2 FEET!":  $T: : : Show ship with no rocket blast.v$ c,: J : K  : K,6^:~:::S(S333): : Crash sound$ EX X(X ) :EXEX(EX5) :EYY (Y ) :EYEY(EY) :***explosion***!% I NE:(EXEXPL(I,),EYEXPL(I,))(EXEXPL(I,),EYEXPL(I,)),g% (EXEXPL(I,),EYEXPL(I,))(EXEXPL(I,),EYEXPL(I,)),::q% $S2%:############### Play MUSIC ##########################################% $S1(&  c,:"MB": JC D: TUNE1(J,),TUNE1(J,): TUNE1(J,) TUNE1(J,) ,.&S&:Above is "Stars and Stripes"&( ,: ADJUST  ,: ,+&2 ,,:: ,:"YOUR SCORE IS NOW : " S: ,H'< ,:"YOU WILL NOW BE IN ADVANCED LANDER ! !":  ,: : "IF YOU MANOUVER THE LANDER THROUGH THE RED DOTS ABOVE THE LANDING FIELD WITH A"(F"FALL RATE LESS THAN 10, YOU WILL END THE LANDING IN ADVANCED-LANDER. THE LANDWILL BE ENLARGED TO ALLOW YOU TO MAKE A PRECISION LANDING. YOUR FINAL FALL RATE MUST BE LESS THAN ";e(P :"-- 10 --",: :"FOR THE LANDING TO BE OK.": ,,: :"PRESS ANY KEY TO CONTINUE.";(ZA$: A$"" Z : Z(d $pa(n:###################### START PROGRAM #########################(x $S1") SEG: (m ( )) : go to color screen if on BwF) ,(( ) ) : ) : ,: ,,: (:: , ,: "IBM IBM IBM") ADJUST  ,: ,+) ,: , ,: "Personal Computer") ,: ,,: ()(,)()!*  ,,: ()(, )()V*  ,,: ()" ROCKET LANDER "()|*  ,,: ()(, )()*  ,,: ()" " A$ " "()* ,,: ()(, )()* ,,: ()(,)()++ ,: ,,:"PRESS ANY KEY FOR INSTRUCTIONS"B+A$: A$"" L+ $S2+:################ INSTRUCTIONS ################################+" $S1V,, ,:: ( ) "The object is to successfully land the space-craft on the landing pad. This is done by changing the rocket thrust and direction using the four position keys.",6 ,: : " " ();: :" Increases the rocket thrust." ( ),@ : " " ();: : " Decreases rocket thrust." ( )1-J : " " ();: : " Tilts the rocket to the right." ( )z-T : " " ();: : " Tilts the rocket to the left." ( )-^ : ,:"LOADING DISKETTE IMAGES ":-h $S2.r:########### Get Ship pictures from disk #######################O.|:####### M = Module; R = Small rocket; RR = Large rocket ########Y. $S1. M,R,P,X,T,L,B: SB: PDATA(). M1(S),M2(S),M3(S),M4(S),M5(S),M6(S),M7(S),M8(S),M9(S),M10(S),M11(S),M12(S),M13(S)0/ R1(S),R2(S),R3(S),R4(S),R5(S),R6(S),R7(S),R8(S),R9(S),R10(S),R11(S),R12(S),R13(S)/ RR1(S),RR2(S),RR3(S),RR4(S),RR5(S),RR6(S),RR7(S),RR8(S),RR9(S),RR10(S),RR11(S),RR12(S),RR13(S)/ SEG:A(PDATA())/ SEG:"LANDER.BIN",A0NANGPDATA():SIZEPDATA():MXPDATA():MYPDATA()20 ANG(NANG): I NANG:ANG(I)PDATA(I):m0 "lander.scr" AS # :Get maximum score to date.0#,SCOREMAX,INIT$:0 L: LPP: LX(LP),LY(LP),LAX(LP),LAY(LP) : LAND pictures.*1LX():LY()(:LAY():BOT: I LP :LAX(I)I?LP:LX(I)LAX(I):Adv-Lander Fieldj1LAY(I)LAY()(LAY())((H(LAX(I)BOT)))1LAY(I)LAY(I)(LAY(I))() :add noise to land contour.1((LAX(I)BOT)(LAX(I)(BOT))) LAY(I) : landing field2&(LAY(I)) LAY(I)20]2:NE : EXPL(NE,): I NE: EXPL(I,),EXPL(I,)::Explosion2D 0,10,1,7,2,8,3,3,4,2,5,8,6,7,7,1,8,6,9,2,10,02N IBMX(K),IBMY(K) : Get IBM Logo.2X I K: IBMX(I):3b I K : IBMY(I):IBMY(I)IBMY(I):3l 0,4,7,13.5,18,21.5,27,30,0,4,7,14.5,18,22.5,26,30,1,3,8,10,12.5,15,19,23,25.5,29,1,3,8,14.5,19,24,25,29,1,3,8,14.5,19,21,21.6,26.4,27,29,1,3,8,10,12.5,15,19,21,22.3,25.7,27,29,0,4,7,14.5,18,21,23,25,27,30,0,4,7,13.5,18,21,23.5,24.5,27,30M4v 0,0,0,0,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,74 MM(X),TUNE(,): I :MM(I): : Get success tune.4 I X: MM(I)(33(( ))(I)):4 I : A,TUNE(I,):TUNE(I,)MM(A):4 $s2%5:Blue Danube Waltz by J.S.Strauss/5 $s1{5 42,4,46,4,49,4,49,4,0,4,61,2,0,2,61,2,0,6,58,2,0,2,58,2,0,6,42,4,42,45 46,4,49,45 49,4,0,4,61,2,0,2,61,2,0,6,59,2,0,2,59,2,0,6,41,4,41,4,44,4,51,4,51,45 0,4,63,2,0,2,63,2,0,6,59,2,0,2H6 59,2,0,6,41,4,41,4,44,4,51,4,51,4,0,4,63,2,0,2,63,2,0,6,58,2,0,2,58,2W6 0,6,42,46 42,4,46,4,49,4,54,4,0,4,66,2,0,2,66,2,0,6,61,2,0,2,61,2,0,6,42,46 42,4,46,4,49,4,54,4,0,4,66,2,0,2 7  66,2,0,6,63,2,0,2,63,2,0,6,44,4,44,4,47,4,51,2,0,2,51,14,0,2,48,47 49,4,58,16g7  54,4,46,4,46,8,44,4,51,8,49,4,42,4,0,2,42,2,42,4,0,8,49,2,0,2,47,2z7* 0,6,49,2,0,274 47,2,0,6,49,4,58,16,56,4,49,2,0,2,46,2,0,6,49,2,0,2,46,2,0,6,49,48> 56,16,54,4,49,2,0,2,47,2,0,6,49,2,0,2,47,2,0,6,49,4,58,16L8H 56,4,49,4,54,4,56,4,58,4,61,8,59,4,58,2,58,2,58,4,56,2,0,2,54,4,0,88R TUNE1(R,): I R: A,TUNE1(I,):TUNE1(I,)MM(A):8\ $s28f:"STARS AND STRIPES FOREVER - SOUSA "8p $s19z 54,6,54,6,52,3,51,3,51,6,50,3,51,3,51,16,0,2,50,39 51,3,51,6,50,3,51,3U9 54,6,51,3,54,3,52,12,49,6,0,3,49,3,49,6,48,3,49,3j9 49,6,48,3,49,39 52,16,0,2,51,3,49,3,51,3,54,9,56,9,56,3,49,16,0,2,54,69 54,6,52,3,51,3,51,6,50,3,51,3,51,16,0,2,50,3,51,3,51,6,50,3 ,51,3;: 52,3,51,3,49,5,46,1,49,12,47,6,0,3,47,3,47,6,46,3,47,3,50,6,49,3,47,3: 59,15,0,3,47,3,49,3,51,3,54,1,0,2,47,3,49,3,51,3,54,1,0,2,42,3,44,5: 51,1,49,12,47,1:ADVAN:GAUGE: : ,";"Gravity = Vertical thrust of about 10.": ,: ,: " Press any key to start the game.";j; ,: ,:ADLANDd:"Advanced-Lander starts above 100 points.";;A$: A$"" ; S:; $S2; :############## Get New SHIP picture #########################;$ $S1"<. (gffTOLD ) V , ,n :Erase old picture.H<8 XOLDX:YOLDY:TILTOLDTILT:TOLDT (XOLD,YOLD),M13:M> TILTOLD  , , , , , ,( ,2 ,< ,F ,P ,Z ,d d> (XOLD,YOLD),R1:{> (XOLD,YOLD),R2:> (XOLD,YOLD),R3:> (XOLD,YOLD),R4:> (XOLD,YOLD),R5:> (XOLD,YOLD),R6:>( (XOLD,YOLD),R7:?2 (XOLD,YOLD),R8:?< (XOLD,YOLD),R9:4?F (XOLD,YOLD),R10:L?P (XOLD,YOLD),R11:d?Z (XOLD,YOLD),R12:|?d (XOLD,YOLD),R13:?n TILTOLD x , , , , , , , , , , , , ?x (XOLD,YOLD),RR1:? (XOLD,YOLD),RR2:@ (XOLD,YOLD),RR3: @ (XOLD,YOLD),RR4:8@ (XOLD,YOLD),RR5:P@ (XOLD,YOLD),RR6:h@ (XOLD,YOLD),RR7:@ (XOLD,YOLD),RR8:@ (XOLD,YOLD),RR9:@ (XOLD,YOLD),RR10:@ (XOLD,YOLD),RR11:@ (XOLD,YOLD),RR12:@ (XOLD,YOLD),RR13:A $s2WA :################ Advanced-Lander Landing Field ##########################aA $S1yA : ,::LY()A" ADJUST  ,: ,+A, : ,:"ADVANCED LANDER":"LANDING FALL":"LESS THAN -10-"B6 (LAX(),LAY())(LAX(),LAY()),,B@ BOT: I LP :LY(I)LAY(I)GBJ (LAX(I),LAY(I)),:vBT (,),,: (BOT,)(BOT,),,BFB^ (x,)(,),,BFBh I :(}, I)(, I),,BF:Br (,)(x,),,BF :bldgB| (#,n)(i,),,BFDC I : J :(I,J)((I,J),,BF::^C (A,)(K,),,BFxC (,)(,),,BFC I :( I,)( I,),,BF:C X(:Yq : Draw IBM LOGo on Bldg!D I K : (XIBMX(I),YIBMY(I))(XIBMX(I),YIBMY(I)): IxD XZ:Y:XOLDX:YOLDY:FF:F0F:T :TOLDT:TILT:TILTOLDTILT:SY :ADVAND GAUGE  D ,: " SCORE=" S: ,: " FALL=" SYD ,: "THRUST=" T: ,: "FUEL=" F: & ,E ,:"F F P": ,:"U A O": ,:"E L W"XE ,:"L L E": ,:" R"E (,)(,#),,BF:(,$)(,(),,BF :Fuel GaugeE (,)(!, ),,BF:(, )(!,(),,BF:(,)(!,),,BF :Fall GaugeHF (0,)(?,),,BF:(0,)(?,(),,BF:(0,)(?,),,BF :Power GaugeF G1: (,G1)(,G1),:G2 :(,G2)(!,G2),:G3:(0,G3)(?,G3),F& (X,Y),R1:: dF0 $paF: Subroutine to Provide a requirements list to GD execute this programGN =GX Switch I1 = 1 if on the COLOR monitoriGb Switch I1 = 0 if on the MONO monitorsGl $s2Gv (: I1  , : ,,G I1  , :text mode and color enabledG G ADJUST  ,: ,+H ,: "WELCOME TO THE PROGRAM"AH I1  , : ,,XH ,: PROGNAME$xH I1  , : ,,H ,: "THIS PROGRAM REQUIRES:"H : H WIDE P " 80 CHARACTER RESOLUTION" I WIDE ( " 40 CHARACTER RESOLUTION"HI COLR  BOTH  " COLOR/GRAPHICS SCREEN "zI BOTH  " OR THE "I COLR  BOTH  " MONOCHROME DISPLAY -IBM"I PRT  " A PRINTER "J JOY  " JOYSTICKS "4J BOTH  p lJ* (COLR  I1 ) (COLR  I1 ) p J4 I1  , : ,,J> SWIT  :signal need to switch monitorsJH : : " YOU MUST SWITCH SCREENS" KR " ENTER s TO SWITCH "0K\ " ANY OTHER WILL END RUN "PKf I1  , : ,,zKp ,: "PRESS ANY KEY TO GO ": Kz REP$ : REP$ "" z K SWIT (REP$"s" REP$"S") ~K K $s2L Subroutine to provide exit options from this programL $s1DL (: I1  , : ,,yL I1  , :text mode and color enabledL :allow use on either monitorL ADJUST  ,: ,+L ,: "PLEASE CHOOSE FROM FOLLOWING"M ,: "1 = RUN PROGRAM AGAIN "KM ,: "2 = EXIT BACK TO THE MENU "wM ,: "3 = RETURN TO BASIC PROGRAM "M  ,: "4 = RETURN TO DOS "M ,: "ENTER YOUR SELECTION NOW ": MREP$ : REP$ "" #N$ REP$ "1"  :RUN (PROGNAME$)@N. REP$ "2" "MENU"^N8 REP$ "3" P: : wNB REP$ "4" : NL ,: "INVALID SELECTION - TRY AGAIN"NV I   : I: :  N` $s2Oj Now switch between the monitors as required Ot $s1)O~ I1 : : 23O $s1UO Switch to the COLOR monitor_O $s1O: ,, :clear screen/turn off mono cursorOO SEG :switch to BIOS communications areaP set equipment determination flags for color 40 characters1P ,(( ) ) lP SEG :switch back to BASIC program segmentP ,: ,,P ( :init color adapter to 40 characters, clear screenP ,,,, :set cursor size for color modeQ ADJUST  ,: ,+.Q I1 : 8Q $s2dQ Switch to the Black and White monitornQ( $s1Q2: ,, :remove cursor from color screenQ< SEG :switch to BIOS communications area RF set equipment determination flags for monochrome display 80 chars8RP ,( ) 0nRZ SEG :revert to basic program segmentRd  :be sure next line is a change 02/23/82Rn  :put into text mode for sureRx ,: I1 &S ( :init 40 character mode and clear display\S ,,, , :turn on monochrome cursor positionbS &S ( :init 40 character mode and clear display\S ,,, , :turn