CLEARSCREEN. SET turnOnEngine TO 1.0. SET turnOffEngine TO 0.0. SET turnReverseEngine TO -1.0. SET PARACHUTE_SPEED_START TO 500. SET PARACHUTE_SPEED_DELTA TO 40. SET CHUTES_DEPLOYED TO 0. SET CHUTES_NUMBER TO 10. SET FINAL_CHUTE_DEPLOY_DONE TO false. RCS ON. SAS OFF. PRINT "------------------------------------". PRINT "Initiating Mars landing". PRINT "------------------------------------". SET mysteer TO SHIP:PROGRADE. LOCK STEERING TO mysteer. LOCK height to ALT:RADAR. WAIT 3. SET Mars TO BODY("Mars"). WHEN ALT:RADAR < Mars:ATM:HEIGHT THEN{ PRINT "Action - sciencescan in high atmos". //run SingleScan. } WHEN SHIP:STATUS = "LANDED" THEN{ PRINT "Action - sciencescan on landing". //run SingleScan. } WHEN ALT:RADAR < 1000 THEN{ LEGS ON. DeployBalloon. //run SingleScan. PRINT "Action - sciencescan in low atmos". PRINT "Action - landing legs and ballons". } WHEN SHIP:GROUNDSPEED < 300 THEN{ DropHeatshield. } UNTIL ALT:RADAR < Mars:ATM:HEIGHT { SET mysteer TO SHIP:PROGRADE. WAIT 5. } PRINT "Situation - Entered atmosphere". UNTIL SHIP:STATUS = "LANDED" { SET mysteer TO SHIP:PROGRADE. DeployChutesStaggered. 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 > -5){ //PRINT "Descent4 - Ver:" + ROUND(SHIP:VERTICALSPEED,1). SET SHIP:CONTROL:FORE TO turnOffEngine. } //PRINT "ChuteSafe " + CHUTESSAFE AT (0,22). //PRINT "ALT:RADAR " + ALT:RADAR AT (0,23). WAIT 1. } PRINT "Deploying light, panels and antenna". LIGHTS ON. PANELS ON. DeployAntenna. PRINT "Landing successful". WAIT 5. DeflateBalloon. RCS OFF. //Failure Type 1 - leaving the atmosphere function DeployChutesStaggered{ IF (SHIP:GROUNDSPEED < PARACHUTE_SPEED_START) AND (CHUTES_DEPLOYED < CHUTES_NUMBER) { SET PARACHUTE_SPEED_START TO PARACHUTE_SPEED_START - PARACHUTE_SPEED_DELTA. DropSingleChute(CHUTES_DEPLOYED). SET CHUTES_DEPLOYED TO CHUTES_DEPLOYED+1. } IF (height < 10000 ) AND (FINAL_CHUTE_DEPLOY_DONE = false){ PRINT "Action - Panic deploy of all remaining chutes!". CHUTES ON. SET FINAL_CHUTE_DEPLOY_DONE TO true. } } function DeployChutesWhenSafe{ WHEN (NOT CHUTESSAFE) THEN { //PRINT "Action - Chutes deployed". CHUTESSAFE ON. WAIT 1. CHUTESSAFE OFF. } } function DropSingleChute{ PARAMETER chuteNr. SET MyPartList to SHIP:PARTSDUBBED("Parachute [Radial]"). SET chute TO MyPartList[chuteNr]. IF (chute:GETMODULE("RealChuteModule"):HASEVENT("Deploy Chute")){ chute:GETMODULE("RealChuteModule"):DOEVENT("Deploy Chute"). } PRINT "Action - Deployed single chute". } function DropHeatshield{ SET MyPartList to SHIP:PARTSDUBBED("Heat Shield (3m)"). SET heatshield TO MyPartList[0]. //nullpointer problem IF (heatshield:GETMODULE("ModuleDecouple"):HASEVENT("Jettison Heat Shield")){ heatshield:GETMODULE("ModuleDecouple"):DOEVENT("Jettison Heat Shield"). } PRINT "Action - Heatshield jettisoned". } function DeployAntenna{ SET listOfParts TO SHIP:PARTSDUBBED("Communotron 32"). FOR item IN listOfParts { IF (item:GETMODULE("ModuleRTAntenna"):HASEVENT("ACTIVATE")){ item:GETMODULE("ModuleRTAntenna"):DOEVENT("ACTIVATE"). } } PRINT "Action - Antenna deployed". } function DeployBalloon{ SET listOfParts TO SHIP:PARTSDUBBED("Mk-10 Inflatable Airbag"). FOR item IN listOfParts { IF (item:GETMODULE("ModuleAnimateGeneric"):HASEVENT("Inflate")){ item:GETMODULE("ModuleAnimateGeneric"):DOEVENT("Inflate"). } } } function DeflateBalloon{ SET listOfParts TO SHIP:PARTSDUBBED("Mk-10 Inflatable Airbag"). FOR item IN listOfParts { IF (item:GETMODULE("ModuleAnimateGeneric"):HASEVENT("Deflate")){ item:GETMODULE("ModuleAnimateGeneric"):DOEVENT("Deflate"). } } }