-
Notifications
You must be signed in to change notification settings - Fork 0
/
kerbin_landing.ks
143 lines (123 loc) · 3.53 KB
/
kerbin_landing.ks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
function moon_return
{
lock throttle to 0.
lock steering to prograde.
local pos_ang is vang(ship:position - ship:body:position, kerbin:position - ship:body:position).
local target_ang is 0.
if (ship:orbit:inclination > 90) set target_ang to 180.
local diff is abs(pos_ang - target_ang).
local warp_level is 0.
if (ship:body = Minmus)
{
until false
{
local lat_minmus is ship:body:latitude.
set warp_level to warp_at_level(0.229, 0.23, 0.27, abs(lat_minmus), 6).
if (warp_level = 0) break.
clearscreen.
print "Warping to 0 Latitude Kerbin".
print "Lat: " + round(lat_minmus, 2) + " Warp Level: " + warp_level.
}
}
until false
{
set pos_ang to vang(ship:position - ship:body:position, kerbin:position - ship:body:position).
set diff to abs(pos_ang - target_ang).
set warp_level to warp_at_level(5, 6, 12, diff).
if (warp_level = 0) break.
clearscreen.
print "Warping to Opposite Kerbin".
print "Current: " + round(pos_ang, 2) + " Diff: " + round(diff, 2) + " Warp Level: " + warp_level.
}
wait 10.
lock throttle to 1.
until false
{
if (ship:orbit:hasnextpatch)
{
if (ship:orbit:nextpatch:periapsis < 30000) break.
}
}
lock throttle to 0.
lock steering to retrograde.
wait 5.
print "Warping to Next Body".
local old_body is ship:body.
do_warp(ship:orbit:nextpatcheta).
wait until old_body <> ship:body.
wait 5.
reentry().
}
function kerbin_deorbit
{
lock steering to retrograde.
wait 10.
lock throttle to 1.
wait until ship:periapsis < 20000.
lock throttle to 0.
reentry().
}
function deploy_chutes {
print "Deploy Drogues".
for p in ship:parts {
if p:title:tolower:contains("drogue") {
local dp is p:getmodule("realchutemodule").
if dp:hasevent("deploy chute") dp:doevent("deploy chute").
}
}
wait until alt:radar < 1500.
print "Deploy Mains".
for p in ship:parts {
if p:title:tolower:contains("parachute") {
local dp is p:getmodule("realchutemodule").
if dp:hasevent("deploy chute") dp:doevent("deploy chute").
}
}
when (alt:radar < 650) then print "Inflate Mains".
}
function reentry
{
if (eta:periapsis > 20*60)
{
local wait_time is eta:periapsis - 20*60.
local wait_end is time:seconds + wait_time.
do_warp(wait_time-5).
wait until time:seconds > wait_end.
}
wait 2.
lock steering to vcrs(ship:velocity:orbit, -body:position).
wait 1.
deploy_dp_shield("close").
retract_solar_panels().
local check is false.
for p in ship:parts
{
if (p:tag = "reentry")
{
print "Decoupling for Reentry".
wait 5.
if (p:hasmodule("moduledecouple")) p:getmodule("moduledecouple"):doevent("decouple").
set check to true.
break.
}
}
if (check = false)
{
print "Set Decouple to AG 9".
lock inp to terminal:input:getchar().
print "Hit 'l' to continue".
wait until inp = "l".
AG9 on.
}
wait 5.
lock steering to retrograde.
wait 5.
set warp to 4.
wait until ship:altitude < 70000.
set warp to 0.
wait until alt:radar < 60000.
print "Steering Off".
unlock steering.
wait until alt:radar < 4000.
deploy_chutes().
}