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:
+1
-4
@@ -1,6 +1,3 @@
|
||||
wait until ship:unpacked.
|
||||
|
||||
runPath("0:/scripts/basic.ks").
|
||||
//if addons:RT:hasKSCConnection(ship) {
|
||||
//} else {
|
||||
// print "No connection to the KSC".
|
||||
//}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
wait until ship:unpacked.
|
||||
|
||||
runPath("0:/scripts/stayRunner.ks").
|
||||
@@ -1,2 +0,0 @@
|
||||
wait until ship:unpacked.
|
||||
runPath("0:/scripts/helo.ks").
|
||||
+5
-1
@@ -1,3 +1,7 @@
|
||||
wait until ship:unpacked.
|
||||
core:part:getmodule("kOSProcessor"):doevent("Open Terminal").
|
||||
runPath("0:/scripts/transfer.ks").
|
||||
|
||||
switch to 0.
|
||||
cd("scripts").
|
||||
runPath("transfer").
|
||||
runPath("doManeuver").
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
{
|
||||
"spec_version": "v1.6",
|
||||
"identifier": "installed-Kerbal-Space-Program",
|
||||
"name": "installed-Kerbal Space Program",
|
||||
"abstract": "A list of modules installed on the Kerbal Space Program KSP instance",
|
||||
"author": "Kyle",
|
||||
"version": "2026.06.27.12.43.24",
|
||||
"ksp_version_min": "1.8",
|
||||
"ksp_version_max": "1.12",
|
||||
"license": "unknown",
|
||||
"depends": [
|
||||
{
|
||||
"name": "ContractConfigurator",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ClickThroughBlocker",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ReStock",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "EnvironmentalVisualEnhancements",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "Kerbalism",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "AtmosphereAutopilot",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-CareerEvolution",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "Chatterer",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-CommNetRelays",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ConfigurableContainers",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-AnomalySurveyor",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-KerbinSpaceStation",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-CleverSats",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-ExplorationPlus",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-FieldResearch",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-KerbalAcademy",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-RoverMissionsRedux",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractConfigurator-Tourism",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ContractsWindowPlus",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "DecouplerShroud",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "Deferred",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "EnvironmentalVisualEnhancements-HR",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "HeatControl",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "HideEmptyTechNodes",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "KerbalAlarmClock",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "KerbalChangelog",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "KerbalEngineerRedux",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "KerbalismCompanionCalculator",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "kOS",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "KRASH",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "MinAmbLightUpd",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "NavballDockAlignIndCE",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "NearFutureElectrical",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "OPMAllinOneKSPediaDeltaVMap",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ParallaxContinued",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "PatchManager",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "PlanetInfoPlus",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ProbesBeforeCrew",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "RCSBuildAid",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "RestockWaterfallExpansion",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "ReStockPlus",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "SCANsat",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "Scatterer",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "SmartParts",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "Strategia",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "TextureReplacer",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "JanitorsCloset",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "Trajectories",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "TransferWindowPlannerFork",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "TriggerAu-Flags",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "TUFX",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "UtilityWeight",
|
||||
"suppress_recommendations": true
|
||||
},
|
||||
{
|
||||
"name": "WaypointManager",
|
||||
"suppress_recommendations": true
|
||||
}
|
||||
],
|
||||
"release_date": "2026-06-27T00:43:24.0386872Z",
|
||||
"kind": "metapackage"
|
||||
}
|
||||
+5
-4
@@ -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
|
||||
|
||||
@@ -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
@@ -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".
|
||||
@@ -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).
|
||||
@@ -0,0 +1,6 @@
|
||||
on ag10 {
|
||||
runpath("0:/scripts/runner.ks").
|
||||
preserve.
|
||||
}
|
||||
|
||||
wait until false.
|
||||
+21
-1
@@ -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).
|
||||
Reference in New Issue
Block a user