feat: overhaul lander suicide burn, add transfer GUI, improve ascent fairing logic

- lander.ks: Replace fixed suicide burn with dynamic throttle control using
  vertical fraction, gateRatio, and finalPhase logic; simplify post-land
  sequence to SAS stabilityassist
- transfer.ks: Replace hardcoded Mun target with GUI popup menu populated
  from body:orbitingchildren
- ascent.ks: Change fairing jettison trigger from dynamic pressure to
  altitude > atm height; guard antenna extension with hasmodule check
- basic.ks: Append stayRunner invocation at end of script
- boot/boot.ks: Remove commented RT connection block; add newline before runPath
- boot/testing.ks: Switch to volume 0 and use relative paths for transfer
  and doManeuver scripts
- boot/heloBoot.ks: Delete unused boot file
This commit is contained in:
2026-06-26 17:42:41 -07:00
parent 36fc515c23
commit dceeddfcf1
11 changed files with 335 additions and 56 deletions
+5 -4
View File
@@ -83,7 +83,7 @@ function basicAscent {
gravityTurn(targetHeading).
when ship:q < 0.01 then {
when ship:altitude > body:atm:height then {
for f in fairings {
// get the module and deploy it
set m to f:getmodule("ModuleProceduralFairing").
@@ -96,10 +96,11 @@ function basicAscent {
panels on.
radiators on.
for a in antennas {
set m to a:getmodule("ModuleDeployableAntenna").
if m:hasevent("extend antenna") m:doevent("extend antenna").
if a:hasmodule("ModuleDeployableAntenna") {
set m to a:getmodule("ModuleDeployableAntenna").
if m:hasevent("extend antenna") m:doevent("extend antenna").
}
}
}
// try to limit the throttle to get a good ascent
+3
View File
@@ -55,3 +55,6 @@ if ship:bounds:bottomaltradar > 5 {
// core:part:getmodule("kOSProcessor"):doevent("Close Terminal").
}
// wait for more input
runpath("0:/scripts/stayRunner.ks").
+40 -43
View File
@@ -1,3 +1,5 @@
run once maneuver.
function groundSlope {
parameter xOffset is 0, yOffset is 0.
local east is vCrs(north:vector, up:vector).
@@ -30,60 +32,55 @@ function groundSlope {
return slope.
}
wait until not hasNode.
lock h to ship:bounds:bottomaltradar.
lock velVec to ship:velocity:surface.
lock speed to velVec:mag.
lock vSpeed to ship:verticalspeed.
lock g to body:mu / ((body:radius + ship:altitude)^2).
lock maxA to ship:maxthrust / ship:mass.
lock vertFrac to max(abs(vSpeed) / max(speed, 0.001), 0.05).
set margin to 30. // safety buffer, meters
set gateRatio to 0.9. // start burn when required decel hits this fraction of max
set targetV to -3. // final drift speed, m/s
set burning to false.
set finalPhase to false.
lock maxDecel to max(maxA * vertFrac - g, 0.01).
lock requiredDecel to vSpeed^2 / (2 * max(h - margin, 0.1)).
lock neededA to (requiredDecel / vertFrac) + g.
lock hoverA to g / vertFrac. // accel needed to hold current vertical speed constant
// Suicide burn calcs
set tval to 0.
lock throttle to tval.
lock steering to ship:srfretrograde.
lock steering to srfretrograde.
lock h to ship:bounds:bottomaltradar.
lock v0 to ship:verticalspeed.
lock g to (body:mu / ((body:radius + ship:altitude)^2)).
lock a to ship:maxthrust / ship:mass.
lock d to (v0^2) / (2 * (a - g)).
// wait for burn
until h <= (1.1 * d) {
clearscreen.
print "Altitude AGL : " + round(h) at (4, 0).
print "Vertical Speed : " + round(v0, 1) at (4, 1).
print "Gravity : " + round(g, 2) at (4, 2).
print "Acceleration : " + round(a, 2) at (4, 3).
print "Distance : " + round(d, 2) at (4, 4).
wait 0.
}
unlock d.
unlock a.
set tval to 1.
set steeringLocked to false.
until h < 1 {
if v0 > -4 {
// equalize acceleration to stop downward velocity
set tval to max(0.001, ship:mass * g / ship:maxThrust).
if not burning and requiredDecel >= gateRatio * maxDecel {
set burning to true.
}
else if v0 > -6 and not steeringLocked {
// slow enough that we just want to kill vertical velocity
lock steering to up.
set steeringLocked to true.
if burning and not finalPhase and vSpeed >= targetV {
set finalPhase to true.
}
if finalPhase {
set tval to max(0, min(1, hoverA / maxA)).
} else if burning {
set tval to max(0, min(1, neededA / maxA)).
}
clearscreen.
print "Altitude AGL : " + round(h) at (4, 0).
print "Vertical Speed : " + round(v0, 1) at (4, 1).
print "Gravity : " + round(g, 2) at (4, 2).
print "Throttle : " + 100 * round(tval, 3) at (4, 3).
print "Alt AGL : " + round(h, 1) at (4, 0).
print "VSpeed : " + round(vSpeed, 1) at (4, 1).
print "Burning : " + burning at (4, 2).
print "Final phase : " + finalPhase at (4, 3).
print "Throttle : " + round(tval * 100) at (4, 4).
wait 0.
}
lock throttle to 0.
unlock throttle.
clearscreen.
print "Holding position".
lock steering to lookDirUp(groundSlope(), ship:facing:upvector).
wait until ship:angularvel:mag < 0.1.
wait 5.
print "Stable".
unlock steering.
sas on.
set sasMode to "STABILITYASSIST".
+23
View File
@@ -0,0 +1,23 @@
switch to 0.
cd("scripts").
local g is GUI(300).
set g:x to 100.
set g:y to 100.
local titleLabel is g:addlabel("Scripts").
set titleLabel:style:align to "center".
set titleLabel:style:hstretch to true.
local popup is g:addpopupmenu().
set popup:optionsuffix to "NAME".
list files in localFiles.
for f in localFiles popup:addoption(f).
popup:changed.
g:show().
wait until popup:changed.
g:dispose().
runpath(popup:value).
+6
View File
@@ -0,0 +1,6 @@
on ag10 {
runpath("0:/scripts/runner.ks").
preserve.
}
wait until false.
+21 -1
View File
@@ -66,4 +66,24 @@ function hohmannTransfer {
// print "Wait Time (s) : " + round(waitTime, 0).
}
hohmannTransfer(Mun).
local g is GUI(300).
set g:x to 100.
set g:y to 100.
local titleLabel is g:addlabel("Transfer to which body?").
set titleLabel:style:align to "center".
set titleLabel:style:hstretch to true.
local popup is g:addpopupmenu().
set popup:optionsuffix to "NAME".
for localMoon in body:orbitingchildren popup:addoption(localMoon).
popup:changed.
// print popup:options.
// print popup:changed.
g:show().
wait until popup:changed.
// print popup:value.
g:dispose().
hohmannTransfer(popup:value).