SET turnOnEngine TO 1.0. SET turnOffEngine TO 0.0. SET turnReverseEngine TO -1.0. SET suicideBurnDone TO FALSE. CLEARSCREEN. PRINT "Initiating landing code". RCS ON. SAS OFF. PRINT "Prepare to nullify horizontal speed". SET mysteer TO ship:retrograde. LOCK STEERING TO mysteer. PRINT "mysteer " + mysteer. SET SHIP:CONTROL:FORE TO turnOnEngine. WAIT 4. LOCK THROTTLE TO turnOnEngine. SET SHIP:CONTROL:FORE TO 0. //TODO detect of the groundspeed is rising. If it is, cut off the UNTIL SHIP:GROUNDSPEED < 10 { SET mysteer TO ship:retrograde. WAIT 0.3. } LOCK THROTTLE TO turnOffEngine. PRINT "Horizontal speed cancelled". //Acquire retrograde direction and hold LOCK steering TO SHIP:RETROGRADE. WAIT 3. PRINT "Lander realigned". PRINT "Descending". LEGS ON. //TODO remove excess horizontal speed using rcs LOCK height to ALT:RADAR. UNTIL height < 10 { PRINT "Altitude to start: " + altitude_to_start_suicide_burn AT(0,20). SET mysteer TO ship:retrograde. IF (height < (altitude_to_start_suicide_burn +1000) AND suicideBurnDone = FALSE) { SET SHIP:CONTROL:FORE TO turnOnEngine. WAIT 2. LOCK THROTTLE TO turnOnEngine. SET suicideBurnDone TO true. } IF (height < (altitude_to_start_suicide_burn +1000) AND SHIP:VERTICALSPEED > -1 AND suicideBurnDone = TRUE){ SET SHIP:CONTROL:FORE TO turnOffEngine. LOCK THROTTLE TO turnOffEngine. } IF (height < 1000 AND SHIP:VERTICALSPEED < -5){ PRINT "Descent3 - Ver:" + ROUND(SHIP:VERTICALSPEED,1). SET SHIP:CONTROL:FORE TO turnOnEngine. } IF (height < 1000 AND SHIP:VERTICALSPEED > -1){ PRINT "Descent4 - Ver:" + ROUND(SHIP:VERTICALSPEED,1). SET SHIP:CONTROL:FORE TO turnOffEngine. } IF (height < 50 AND SHIP:VERTICALSPEED < -2){ PRINT "Descent5 - Ver:" + ROUND(SHIP:VERTICALSPEED,1). SET SHIP:CONTROL:FORE TO turnOnEngine. } IF (height < 50 AND SHIP:VERTICALSPEED > -1){ PRINT "Descent6 - Ver:" + ROUND(SHIP:VERTICALSPEED,1). SET SHIP:CONTROL:FORE TO turnOffEngine. } }. LOCK THROTTLE TO turnOffEngine. SET SHIP:CONTROL:FORE TO turnOffEngine. RCS OFF. SAS OFF. function altitude_to_start_suicide_burn { //(altitude to start suicide burn) = [ (current altitude)(acceleration of gravity) + (1/2)(current velocity)2 ] / (acceleration of engines) declare local goal to (ALT:RADAR * -gravity_calculator + (1/2) * SHIP:VERTICALSPEED^2) / ship:maxthrust. return goal. }. function gravity_calculator { declare local GM to ship:body:mu. declare local R to (body:radius + ship:altitude). declare local g to GM/(R^2). return -g. }.