Jump to content

[WIN] the kOS IDE - Current version 0.33


SolarLiner

Recommended Posts

The following code


[COLOR="Blue"]print [/COLOR][COLOR="Red"]"I'm not commented !"[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]//print "I'm commented !".
// print "I'm commented alternate way !".[/COLOR]

Returns errors on lines 2 and 3. So I guess comments are not handled.

Link to comment
Share on other sites

I think comments in the IDE that are NOT in the kOS language might be useful. The idea is that when the IDE puts the code out into the archive directory it publishes an export version of the code that strips comments out. So they only exist in the source code inside the IDE but not in the KOS module. That also has the advantage of them not contributing to the 10k Volume limit.

The version I have in a little perl script does this (it uses Perl and Bash style comments ("#") rather than ("//") but it could be adapted to use // instead.

Original code in my text editor:


# header comment describing my program.
# this gives a long winded explanation.
# and could be many lines long

print "Welcome to myprog".
set sVel to 0. # surface velocity variable.
#... (etc)...

Which then turns into this after stripping:






print "Welcome to myprog".
set sVel to 0.

(It turns the comment lines into blank lines rather than deleting them so you still get error messages from KOS using the same line numbers.)

Link to comment
Share on other sites

Well, while this feature could be added very quickly, the downside will be that once saved you lose all your comments after a save. And I don't want to write an other file next to it to keep track of them, and show them the next time you open it. So yeah. Comments will not be saved if this feature is added.

Link to comment
Share on other sites

Well, while this feature could be added very quickly, the downside will be that once saved you lose all your comments after a save. And I don't want to write an other file next to it to keep track of them, and show them the next time you open it. So yeah. Comments will not be saved if this feature is added.

That wouldn't be true the way I was describing it to work (you'd edit in the IDE a file which is NOT the one KOS sees. You export the file you edit it over to KOS's archive, and only the exported version is missing the comments, not the original that you work on when you edit.).

But it's largely moot now since the 0.6 KOS update has its own comments anyway now.

Link to comment
Share on other sites

That wouldn't be true the way I was describing it to work (you'd edit in the IDE a file which is NOT the one KOS sees. You export the file you edit it over to KOS's archive, and only the exported version is missing the comments, not the original that you work on when you edit.).

But it's largely moot now since the 0.6 KOS update has its own comments anyway now.

Oh okauy. But still, it is an IDE for kOS, it would be kinda bizzare for the user to "export" to kOS rather than save directly. At least that's what I think.

Comments in 0.6? Might have misread it, but where?

Link to comment
Share on other sites

Oh okauy. But still, it is an IDE for kOS, it would be kinda bizzare for the user to "export" to kOS rather than save directly. At least that's what I think.

Comments in 0.6? Might have misread it, but where?

It was mentioned in Kevin Laity's video on his dev blog. They look like C++ comments:

// comment

Like that.

It's a bit frustrating that a lot of the information is available ONLY in the form of videos. As we discover things we're trying to update the wiki but for a brand new release the video is often the only way.

Link to comment
Share on other sites

Oh okauy. But still, it is an IDE for kOS, it would be kinda bizzare for the user to "export" to kOS rather than save directly. At least that's what I think.

It doesn't seem that odd to me. Think of the script KOS sees as the "compiled" version and the one in the IDE as the source. I may add that sort of functionality to my comment stripper by having it shorten variable names for the sake of the 10k limit.

Link to comment
Share on other sites

Looking good, this is very nice. I might take a stab at a logo if I get my rig working sometimes soon before Lifeâ„¢ kicks in again :D

Great thanks ! Looking forward to see the logo :)

Thanks Steven for the infos, I'll add that. And yeah, thinking "compiled" way, it's fine, but not everyone will instantaneously think of it as this too, especially the ones knowing that scripts are plain text. So yeah... My version of it :)

Link to comment
Share on other sites

Because of the 10k limit, I still run my code through my comment stripper anyway even though there's now support for them. I don't mind the challenge of having to write code that's compact enough to fit in 10k, but I don't think it's a fair challenge to be counting legibility against you in that calculation.

In the real space program when they had to deal with very tiny computers with very tiny storage they were sending compiled assembly code or machine code to the craft, not source code. Comments should cost nothing.

Link to comment
Share on other sites

I wasn't aware of that 10k limit before.

So I'm in my way to code a comment stripper at save time if the file exceeds 10k bytes. It works pretty well, but sometime adds blank lines, so ...

I'm changing the way Loading/Save works, GUI side, because with the arrival of general options (that will be saved), I'll ask for the KSP folder and create file dialog to load/save files in the Archives directory.

You will still be able to "export" to the location you want (and without the comment stripper) using the "File > Export > Text ..." menu.

Link to comment
Share on other sites

Okay, the comment stripper is finally working like a charm and does not leave random blanks. Here I took the loonng Skycrane descent script you can find on the kOS Wiki.

Original Version:


[COLOR="Blue"]declare [/COLOR][COLOR="Black"]parameter descendType[/COLOR][COLOR="Black"]. [/COLOR][COLOR="ff000000"]// "hover", "lander", or "skycrane".
[/COLOR][COLOR="Blue"]declare [/COLOR][COLOR="Black"]parameter seekFlat[/COLOR][COLOR="Black"]. [/COLOR][COLOR="ff000000"]// Flatness slope level acceptable for landing.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]


[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// This will cause an error if descendType is
// undefined entirely when the code is run: I'd
// prefer to make an "if defined" test but KOS
// doesn't support that (yet?):
//
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"hover" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Hover Descent selected."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"skycrane" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"SkyCrane Descent selected."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.0 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]2.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"lander" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Lander Descent selected."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Unknown descendType " [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Red"]"."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Red"]"Deliberate error to cause program exit when no real exit was implemented yet."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]maxSeekSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]2.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// ===========PARABOLA CONSTANTS:=========.
// Originally I scaled the dresired speed .
// linearly with altitude. But this tends .
// waste a lot of fuel. So I've changed it .
// to scale it exponentially with a parabola .
// function. These values are the .
// constants of that parabola formula: .
// y = a*x^2 + b*x + c.
// where y is the altitude and x is the desired speed..
[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// slopeAtBot is the slope of the parabola at .
// the bottom of the descent envelope. (how .
// fast is the speed being reduced at the end .
// of the descent phase). It decides the shape .
// of the descent envelope. And it vaires by .
// how fast the craft is able to decelerate. .
// If the TWR is barely good enough to slow the .
// craft, then the slope should be higher to give .
// the craft more time to get slowed down. If the .
// TWR is quite high, then the code should wait .
// until later to slow down a lot. .
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]150 [/COLOR][COLOR="Black"]* [/COLOR][COLOR="Purple"]mass [/COLOR][COLOR="Black"]/ [/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]maxSaneSlopeAtBot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( ( [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]) /[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]descendTopSpeed [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"]) * [/COLOR][COLOR="Orange"]1.01 [/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Black"]maxSaneSlopeAtBot [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]maxSaneSlopeAtBot[/COLOR][COLOR="Black"]. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// This is the 'a' in the parabola speed formula: .
// y = a*x^2 + b*x + c.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]parabA [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]slopeAtBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendTopSpeed [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]slopeAtBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"]) /[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]descendTopSpeed[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendTopSpeed[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]) ) .[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// This is the 'b' in the parabola speed formula: .
// y = a*x^2 + b*x + c.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]parabB [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// This is the 'c' in the parabola speed formula: .
// y = a*x^2 + b*x + c.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]parabC [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]slopeAtBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]. [/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==============================================="[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" ABORT ABORT ABORT ABORT ABORT ABORT ABORT "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"ABORTING PROGRAM: No active engines right now."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"The program needs to see active engines to "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"calculate up front how to use the throttle."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Do not run until after some engines are active."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"PRESS CONTROL-C PLEASE. There is no way for "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"a program to exit itself in version 0.45 of kOS."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==============================================="[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Red"]"deliberate syntax error to cause exit. This langauge needs a real exit"[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Descend program initialised. "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"---------------------------- "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Program will start operations when "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"your AGL is under " [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Red"]" meters."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]wait until [/COLOR][COLOR="Black"]( [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]) .[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Taking over rotation control."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Purple"]sas [/COLOR][COLOR="Blue"]off[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Steer orbital retrograde for now. Will use surface further
// down. This is a quick starter to get KOS's rotation control
// mostly in the right direction before the thrusters kick in.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]retrograde[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]steering [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]mySteer[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// Wait until the aim has lined up before any engines will activate:
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]align [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]90.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]until [/COLOR][COLOR="Black"]align [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]5 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDiff [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]facing[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]pitch [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]mySteer[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]pitch[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]yDiff [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]facing[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]yaw [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]mySteer[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]yaw[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]align [/COLOR][COLOR="Blue"]to abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]pDiff[/COLOR][COLOR="Black"]) + [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]yDiff[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrotOffest [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]throttle [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]myThrot[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"ENTERING DESCENT MODE."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// dModes are as follows:
// dMode 0 = descending to descendBot AGL.
// dMode 1 = hovering at descendBot AGL.
// dMode 2 = skycrane drop payload and escape.
// dMode 3 = coming down for final touchdown from descendBot.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]landMsgPrinted [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]geared [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]hstart [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]9999999999.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// variables for slope seeking:
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slope [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0. [/COLOR][COLOR="ff000000"]// Slope detected under lander.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]gHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0. [/COLOR][COLOR="ff000000"]// Height of ground above sea level.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pGHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0. [/COLOR][COLOR="ff000000"]// previous Height of ground above sea.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pTime [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]missiontime[/COLOR][COLOR="Black"]. [/COLOR][COLOR="ff000000"]// Previous elapsed time.
[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]until [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vs [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]velocity[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]surface[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]run [/COLOR][COLOR="Black"]tfXYZtoENU[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]vs[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]x[/COLOR][COLOR="Black"], [/COLOR][COLOR="Black"]vs[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]y[/COLOR][COLOR="Black"], [/COLOR][COLOR="Black"]vs[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]z [/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]tfE[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]tfN[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]tfU[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]tfE[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]tfN[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]tfU[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]) ^ [/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]12.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]clearscreen[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" AGL Altitude = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Current Thrust = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Neutral Thrust = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Current Speed = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Preferred Speed = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Ground Slope Here= "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" ========= Descend Type: " [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Red"]" ===="[/COLOR][COLOR="Black"]. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Please ignore the 'Program ended.' messages."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== DESCENDING MODE ==== " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== HOVERING MODE ==== " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== DEPLOYED/ESCAPE MODE ====" [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]3 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== LANDING MODE ==== " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Purple"]break[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dTime [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]missiontime [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]pTime[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pTime [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]missiontime[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]alt[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]radar [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Radar is reading the ground under the ocean.
// Can't land using THAT.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]altitude[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]10000 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Pure guess if radar can't read AGL because we're too high:
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]- ([/COLOR][COLOR="Black"]bodyMaxElev[/COLOR][COLOR="Black"]/[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]10000 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]altitude[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]1[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]altAGL at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]1[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Blue"]to abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]vsUp[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]gHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Purple"]altitude[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]altAGL[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slope [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]gHeight[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]pgHeight[/COLOR][COLOR="Black"])/([/COLOR][COLOR="Black"]dTime[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Purple"]surfacespeed[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]slope at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]slope[/COLOR][COLOR="Black"]) > [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]seekFlat[/COLOR][COLOR="Black"]) {[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]32[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"(seeking flatter)" [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]32[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]4[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]mySpeed at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]4[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]12 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Check to see if we need to scope on further for
// flatter land. Only do this if landing has not
// alrady begun. Once it's begun commit to it:
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]and [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]slope[/COLOR][COLOR="Black"]) > [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]seekFlat[/COLOR][COLOR="Black"]) {[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// These ridiculous "old" variables are needed
// because there's a bug with using a variable
// in the expression to set itself:
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]oldEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]oldNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Pretend the centered direction is a bit off from
// what it really is, to make the code steer a bit
// off on purpose, to make it seek a different
// landing spot.
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldEast[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldEast[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldNorth[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldNorth[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// When near the bottom of the descent,
// and the vertical speed gets slow, never
// allow the sideways-pointing nature
// of the velocity vector to cause the vessel
// to steer too far off from upward. Put an
// upper limit on how much its allowed to tilt
// sideways:
[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]fakeSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]vsUp[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]) ^ [/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]oldAbsVsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]absVsUp[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]5[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]fakeSpeed[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]fakeSpeed[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]up [/COLOR][COLOR="Black"]* [/COLOR][COLOR="Black"]V[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"], [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"], [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="ff000000"]// How much throttle would maintain the vertical speed still,
// given the amount of the steering component that is straight
// up, and the thrust setting and mass and gravity of the body.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]stillThr [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Purple"]mass [/COLOR][COLOR="Black"]* [/COLOR][COLOR="Black"]bodySurfaceGrav [/COLOR][COLOR="Black"]) *[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( ( ([/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Black"]absVsUp[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"])^[/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"])/[/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Black"]) /[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]stillThr at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]geared [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]30[/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]geared [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Gear action group is broken - this part
// does not work and you have to deploy gear
// manually.
//gear on.
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Regardless of mode, go to hover mode first, and
// stay there until slope is acceptable before
// going to land or skycrane mode.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]brakes [/COLOR][COLOR="Blue"]on[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]lights [/COLOR][COLOR="Blue"]on[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]5 [/COLOR][COLOR="Black"]* ( [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]) / [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]on [/COLOR][COLOR="Purple"]AG9 [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// If we really aren't supposed to hover but instead
// are supposed to land or deploy, then only continue
// to hover as long as slope is unacceptable for landing:
[/COLOR][COLOR="Blue"]if abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]slope[/COLOR][COLOR="Black"]) < [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]seekFlat[/COLOR][COLOR="Black"]) {[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"skycrane" [/COLOR][COLOR="Black"]or descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"lander" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( ([/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]parabB[/COLOR][COLOR="Black"]) + ( ([/COLOR][COLOR="Black"]parabB[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]4[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]*([/COLOR][COLOR="Black"]parabC[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]altAGL[/COLOR][COLOR="Black"]))^[/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"]) ) / ([/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]) .[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// If in atmosphere and well above terminal velocty, then
// tell the software to act as if negative thrust is
// the center point so it probably won't use thrusters:
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]10000 [/COLOR][COLOR="Black"]and mySpeed [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Black"]bodyTVelTenKm[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]1.25 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]stillThr [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]30 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Using areobraking" [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Make darn sure the craft isn't still trying to
// compensate for horizontal motion when it
// drops the payload. It MUST be vertical and
// not lifting.
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]up[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]throttle [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]stillThr[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]wait [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]stage[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]clearscreen[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"=====ESCAPE MODE======"[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]throttle [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]up [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]R[/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]30[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="ff000000"]// Thrust away for 3 seconds.
[/COLOR][COLOR="Blue"]wait [/COLOR][COLOR="Orange"]3.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]3 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]bodyLandingSpeed[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]STATUS [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"LANDED" [/COLOR][COLOR="Black"]or [/COLOR][COLOR="Purple"]STATUS [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"SPLASHED" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"skycrane" [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]2. [/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"lander" [/COLOR][COLOR="Black"]or descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"hover" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]5[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]pDesSpd at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]5[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]signedSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]mySpeed[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]verticalspeed [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]signedSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]mySpeed[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]thOff [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]signedSpeed [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Black"]) / [/COLOR][COLOR="Black"]throttleGentle [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]stillThr [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]thOff[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]1.0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.0 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]myThrot at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pgHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]gHeight[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"DONE."[/COLOR][COLOR="Black"].[/COLOR]

Link to comment
Share on other sites

Here's the Stripped version:


[COLOR="Blue"]declare [/COLOR][COLOR="Black"]parameter descendType[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]declare [/COLOR][COLOR="Black"]parameter seekFlat[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]


[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"hover" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Hover Descent selected."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"skycrane" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"SkyCrane Descent selected."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.0 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]2.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"lander" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Lander Descent selected."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Unknown descendType " [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Red"]"."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]endMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Red"]"Deliberate error to cause program exit when no real exit was implemented yet."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]maxSeekSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]2.[/COLOR][COLOR="Black"]


[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]150 [/COLOR][COLOR="Black"]* [/COLOR][COLOR="Purple"]mass [/COLOR][COLOR="Black"]/ [/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]maxSaneSlopeAtBot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( ( [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]) /[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]descendTopSpeed [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"]) * [/COLOR][COLOR="Orange"]1.01 [/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Black"]maxSaneSlopeAtBot [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]maxSaneSlopeAtBot[/COLOR][COLOR="Black"]. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]parabA [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]slopeAtBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendTopSpeed [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]slopeAtBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"]) /[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]descendTopSpeed[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendTopSpeed[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]) ) .[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]parabB [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]slopeAtBot [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]parabC [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]slopeAtBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]descendBotSpeed[/COLOR][COLOR="Black"]. [/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==============================================="[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" ABORT ABORT ABORT ABORT ABORT ABORT ABORT "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"ABORTING PROGRAM: No active engines right now."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"The program needs to see active engines to "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"calculate up front how to use the throttle."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Do not run until after some engines are active."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"PRESS CONTROL-C PLEASE. There is no way for "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"a program to exit itself in version 0.45 of kOS."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==============================================="[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Red"]"deliberate syntax error to cause exit. This langauge needs a real exit"[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Descend program initialised. "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"---------------------------- "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Program will start operations when "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"your AGL is under " [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Red"]" meters."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]wait until [/COLOR][COLOR="Black"]( [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendTop [/COLOR][COLOR="Black"]) .[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Taking over rotation control."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Purple"]sas [/COLOR][COLOR="Blue"]off[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]retrograde[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]steering [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]mySteer[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]align [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]90.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]until [/COLOR][COLOR="Black"]align [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]5 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDiff [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]facing[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]pitch [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]mySteer[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]pitch[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]yDiff [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]facing[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]yaw [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]mySteer[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]yaw[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]align [/COLOR][COLOR="Blue"]to abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]pDiff[/COLOR][COLOR="Black"]) + [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]yDiff[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrotOffest [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]throttle [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]myThrot[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"ENTERING DESCENT MODE."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]landMsgPrinted [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]geared [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]hstart [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]9999999999.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slope [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]gHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pGHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pTime [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]missiontime[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]until [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vs [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]velocity[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]surface[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]run [/COLOR][COLOR="Black"]tfXYZtoENU[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]vs[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]x[/COLOR][COLOR="Black"], [/COLOR][COLOR="Black"]vs[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]y[/COLOR][COLOR="Black"], [/COLOR][COLOR="Black"]vs[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Black"]z [/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]tfE[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]tfN[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]tfU[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]tfE[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]tfN[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]tfU[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]) ^ [/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]12.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]clearscreen[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" AGL Altitude = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Current Thrust = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Neutral Thrust = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Current Speed = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" Preferred Speed = "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Ground Slope Here= "[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" ========= Descend Type: " [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Red"]" ===="[/COLOR][COLOR="Black"]. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Please ignore the 'Program ended.' messages."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]redrawCount [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== DESCENDING MODE ==== " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== HOVERING MODE ==== " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== DEPLOYED/ESCAPE MODE ====" [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]3 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"==== LANDING MODE ==== " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]). }.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Purple"]break[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dTime [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]missiontime [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]pTime[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pTime [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]missiontime[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]alt[/COLOR][COLOR="Black"]:[/COLOR][COLOR="Purple"]radar [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]altitude[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]10000 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]- ([/COLOR][COLOR="Black"]bodyMaxElev[/COLOR][COLOR="Black"]/[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]altitude [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]10000 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]altitude[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]1[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]altAGL at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]1[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Blue"]to abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]vsUp[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]gHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Purple"]altitude[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]altAGL[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]slope [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]gHeight[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]pgHeight[/COLOR][COLOR="Black"])/([/COLOR][COLOR="Black"]dTime[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Purple"]surfacespeed[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]slope at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]slope[/COLOR][COLOR="Black"]) > [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]seekFlat[/COLOR][COLOR="Black"]) {[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]32[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"(seeking flatter)" [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]32[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]6[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]4[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]mySpeed at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]4[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]12 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]and [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]slope[/COLOR][COLOR="Black"]) > [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]seekFlat[/COLOR][COLOR="Black"]) {[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]oldEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]oldNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldEast[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsEast [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldEast[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldNorth[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]vsNorth [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]oldNorth[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Orange"]10 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]fakeSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]vsUp[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]) ^ [/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]oldAbsVsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]absVsUp[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]5[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]fakeSpeed[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]fakeSpeed[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]up [/COLOR][COLOR="Black"]* [/COLOR][COLOR="Black"]V[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"], [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"], [/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]stillThr [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]([/COLOR][COLOR="Purple"]mass [/COLOR][COLOR="Black"]* [/COLOR][COLOR="Black"]bodySurfaceGrav [/COLOR][COLOR="Black"]) *[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( ( ([/COLOR][COLOR="Black"]vsEast[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Black"]vsNorth[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]+[/COLOR][COLOR="Black"]absVsUp[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"])^[/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"])/[/COLOR][COLOR="Black"]absVsUp [/COLOR][COLOR="Black"]) /[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]maxthrust [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]stillThr at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]geared [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendBot[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]30[/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]geared [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]brakes [/COLOR][COLOR="Blue"]on[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]lights [/COLOR][COLOR="Blue"]on[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]1 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]5 [/COLOR][COLOR="Black"]* ( [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]) / [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]on [/COLOR][COLOR="Purple"]AG9 [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]slope[/COLOR][COLOR="Black"]) < [/COLOR][COLOR="Blue"]abs[/COLOR][COLOR="Black"]([/COLOR][COLOR="Black"]seekFlat[/COLOR][COLOR="Black"]) {[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"skycrane" [/COLOR][COLOR="Black"]or descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"lander" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]3.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]and altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Black"]descendBot [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( ([/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]parabB[/COLOR][COLOR="Black"]) + ( ([/COLOR][COLOR="Black"]parabB[/COLOR][COLOR="Black"]^[/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Orange"]4[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]*([/COLOR][COLOR="Black"]parabC[/COLOR][COLOR="Black"]-[/COLOR][COLOR="Black"]altAGL[/COLOR][COLOR="Black"]))^[/COLOR][COLOR="Orange"]0.5 [/COLOR][COLOR="Black"]) ) / ([/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Black"]parabA[/COLOR][COLOR="Black"]) .[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]altAGL [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]10000 [/COLOR][COLOR="Black"]and mySpeed [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Black"]bodyTVelTenKm[/COLOR][COLOR="Black"]*[/COLOR][COLOR="Orange"]1.25 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]stillThr [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]-[/COLOR][COLOR="Orange"]30 [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"Using areobraking" [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]3[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]2 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]up[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]throttle [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]stillThr[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]wait [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]stage[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Purple"]clearscreen[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"=====ESCAPE MODE======"[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]lock [/COLOR][COLOR="Purple"]throttle [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]mySteer [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Purple"]up [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]R[/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]30[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]0[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]wait [/COLOR][COLOR="Orange"]3.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Orange"]3 [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]bodyLandingSpeed[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]STATUS [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"LANDED" [/COLOR][COLOR="Black"]or [/COLOR][COLOR="Purple"]STATUS [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"SPLASHED" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"skycrane" [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]dMode [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]2. [/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"lander" [/COLOR][COLOR="Black"]or descendType [/COLOR][COLOR="Black"]= [/COLOR][COLOR="Red"]"hover" [/COLOR][COLOR="Black"]{[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]beDone [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1. [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]5[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]pDesSpd at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]5[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]signedSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]mySpeed[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Purple"]verticalspeed [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]signedSpeed [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0 [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]mySpeed[/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]thOff [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]
[/COLOR][COLOR="Black"]( [/COLOR][COLOR="Black"]signedSpeed [/COLOR][COLOR="Black"]- [/COLOR][COLOR="Black"]pDesSpd [/COLOR][COLOR="Black"]) / [/COLOR][COLOR="Black"]throttleGentle [/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]stillThr [/COLOR][COLOR="Black"]+ [/COLOR][COLOR="Black"]thOff[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Black"]< [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]0.0 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]if [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Black"]> [/COLOR][COLOR="Orange"]1.0 [/COLOR][COLOR="Black"]{ [/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]myThrot [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Orange"]1.0 [/COLOR][COLOR="Black"]. }.[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]" " [/COLOR][COLOR="Black"]at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]
[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Black"]myThrot at [/COLOR][COLOR="Black"]([/COLOR][COLOR="Orange"]20[/COLOR][COLOR="Black"],[/COLOR][COLOR="Orange"]2[/COLOR][COLOR="Black"]).[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]set [/COLOR][COLOR="Black"]pgHeight [/COLOR][COLOR="Blue"]to [/COLOR][COLOR="Black"]gHeight[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Black"]}.[/COLOR][COLOR="Black"]

[/COLOR][COLOR="Blue"]print [/COLOR][COLOR="Red"]"DONE."[/COLOR][COLOR="Black"].[/COLOR][COLOR="Black"]
[/COLOR]

Link to comment
Share on other sites

Here's the Stripped version:

Your stripped version breaks line numbering so that when KOS reports errors and tells you your error is on "line 20" it's not really line 20 in your source.

My version preserved all block comments as still being a blank line. It still costs a bit of space but very little. (It only costs 1 character, or 2 depending on your OS's end-of-line convention, to store the existence of a blank line.)

So this:


//This is a comment[color=red]{EOLN}[/color]
//typed into the code that is[color=red]{EOLN}[/color]
//several lines long.[color=red]{EOLN}[/color]
set x to 1. // this is a comment on the same line.[color=red]{EOLN}[/color]

turns into this:


[color=red]{EOLN}[/color]
[color=red]{EOLN}[/color]
[color=red]{EOLN}[/color]
set x to 1.[color=red]{EOLN}[/color]

Similarly, you could also strip leading indentation whitespace so that people who

indent their code well aren't penalized for it, like this:

This:


// Countdown.[color=red]{EOLN}[/color]
set x to 10.[color=red]{EOLN}[/color]
until x < 1 {[color=red]{EOLN}[/color]
print "x'.[color=red]{EOLN}[/color]
set x to x - 1.[color=red]{EOLN}[/color]
}.[color=red]{EOLN}[/color]

Becomes this:


[color=red]{EOLN}[/color]
set x to 10.[color=red]{EOLN}[/color]
until x < 1 {[color=red]{EOLN}[/color]
print "x'.[color=red]{EOLN}[/color]
set x to x - 1.[color=red]{EOLN}[/color]
}.[color=red]{EOLN}[/color]

The only place where stripping leading space can cause problems and require more complex code is if there is such a thing as run-on literal strings in the language, like so:


set x to
" This is
a long string that
spans lines".

If the language allowed that, then stripping leading whitespace could be a problem, but it doesn't allow it so it's just a simple regular expression search-replace looking for "^\s*" and replacing it with nullstring.

Link to comment
Share on other sites

Looks clear and nice.

Oh and i want to know how the in-game kOS reload these scripts? by F5/F9 or what?

If the file is stored in the archive dir, then KOS automatically loads and runs it on the fly from there each time you do anything with it. If you do any of the following commands:

EDIT progname.

RUN progname.

it just uses the file it sees stored on the drive in the archive dir.

The only place where you have to do an extra step is if the program is off the archive and in the local volume instead. Then you have to copy it from the archive to the local volume after an edit - but then again that's true of any and all external editing of the file, whether it's with the IDE or with Notepad or vi or whatever.

Link to comment
Share on other sites

Nice catch Steven ! Never thought about that. I'll change it ASAP. We still have that 1 line offset because Scintilla starts counting at 1 and kOS at 0. Did not discovered how to change it yet...

Indent stripper is on the way to be implemented too.

Thanks for the suggestions !

Link to comment
Share on other sites

We still have that 1 line offset because Scintilla starts counting at 1 and kOS at 0. Did not discovered how to change it yet...

Rather than using Scintilla's Margin0 numbering, have you considered implementing your own line number margin? ScintillaNET doesn't expose the methods to do it, but you can still use the NativeInterface.

Here's a simple proof of concept:


const uint SCI_SETMARGINTYPEN = 0x08C0;
const uint SCI_MARGINSETTEXT = 0x09E2;

Editor.Margins.Margin1.Width = 30;
Editor.NativeInterface.SendMessageDirect(SCI_SETMARGINTYPEN, 1, 4);
for (int i = 0; i < Editor.Lines.Count; i++)
{
Editor.NativeInterface.SendMessageDirect(SCI_MARGINSETTEXT, i, i.ToString());
}

Link to comment
Share on other sites

  • 1 month later...
I finally have the chance to mess around with kOS, so I downloaded the IDE too. I was hoping it would help me punctuate every line properly and warn me if I don't. Is that something the kOS IDE does?

It's old. I'm not sure it necessarily has been kept up to date with the latest syntax changes in the language.

Link to comment
Share on other sites

It's old. I'm not sure it necessarily has been kept up to date with the latest syntax changes in the language.

I noticed, as some of the newer terms are not recognized. I have already grown attached to it, however, so I am curious what SolarLiners plans are :)

I see there is an XML that will probably allow me to add new terms myself, but that would be a last resort I guess.

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...