From a2b47980a7db371f33b87b10cd3f2ce395473879 Mon Sep 17 00:00:00 2001
From: archaegeo
Date: Sun, 14 Mar 2021 09:22:09 -0400
Subject: [PATCH 1/2] Remove all user variable comments
---
ButtonHUD.conf | 176 +++++++++++++++++++++++-----------------------
ChangeLog.md | 3 +
README.md | 150 +++++++++++++++++++++++----------------
src/ButtonHUD.lua | 174 ++++++++++++++++++++++-----------------------
4 files changed, 267 insertions(+), 236 deletions(-)
diff --git a/ButtonHUD.conf b/ButtonHUD.conf
index 99ec855..4dd1c0e 100644
--- a/ButtonHUD.conf
+++ b/ButtonHUD.conf
@@ -1,4 +1,4 @@
-name: ButtonsHud - Dimencia and Archaegeo v5.42 (Minified)
+name: ButtonsHud - Dimencia and Archaegeo v5.43 (Minified)
slots:
core:
class: CoreUnit
@@ -102,93 +102,93 @@ handlers:
-- script code
useTheseSettings = false --export: (Default: false) Toggle on to use the below preferences. Toggle off to use saved preferences. Preferences will save regardless when exiting seat.
- freeLookToggle = true --export: (Default: true) Set to false for vanilla DU free look behavior.
- BrakeToggleDefault = true --export: (Default: true) Whether your brake toggle is on/off by default. Can be adjusted in the button menu. Of is vanilla DU brakes.
- RemoteFreeze = false --export: (Default: false) Whether or not to freeze you when using a remote controller. Breaks some things, only freeze on surfboards
- RemoteHud = false --export: (Default: false) Whether you want full HUD while in remote mode, experimental, might not look right.
- brightHud = false --export: (Default: false) Enable to prevent hud dimming when in freelook.
- VanillaRockets = false --export: (Default: false) If on, rockets behave like vanilla
- InvertMouse = false --export: (Default: false) If true, then when controlling flight mouse Y axis is inverted (pushing up noses plane down) Does not affect selecting buttons or camera.
+ freeLookToggle = true --export: (Default: true)
+ BrakeToggleDefault = true --export: (Default: true)
+ RemoteFreeze = false --export: (Default: false)
+ RemoteHud = false --export: (Default: false)
+ brightHud = false --export: (Default: false)
+ VanillaRockets = false --export: (Default: false)
+ InvertMouse = false --export: (Default: false)
userControlScheme = "virtual joystick" --export: (Default: "virtual joystick") Set to "virtual joystick", "mouse", or "keyboard"
- ResolutionX = 1920 --export: (Default: 1920) Does not need to be set to same as game resolution. You can set 1920 on a 2560 to get larger resolution
- ResolutionY = 1080 --export: (Default: 1080) Does not need to be set to same as game resolution. You can set 1080 on a 1440 to get larger resolution
- SafeR = 130 --export: (Default: 130) Primary HUD color
- SafeG = 224 --export: (Default: 224) Primary HUD color
- SafeB = 255 --export: (Default: 255) Primary HUD color
- PvPR = 255 --export: (Default: 255) PvP HUD color
- PvPG = 0 --export: (Default: 0) PvP HUD color
- PvPB = 0 --export: (Default: 0) PvP HUD color
- centerX = 960 --export: (Default: 960) X postion of Artifical Horizon (KSP Navball), Default 960. Use centerX=700 and centerY=880 for lower left placement.
- centerY = 540 --export: (Default: 540) Y postion of Artifical Horizon (KSP Navball), Default 540. Use centerX=700 and centerY=880 for lower left placement.
- throtPosX = 1300 --export: (Default: 1300) X position of Throttle Indicator, default 1300 to put it to right of default AH centerX parameter.
- throtPosY = 540 --export: (Default: 540) Y position of Throttle indicator, default is 540 to place it centered on default AH centerY parameter.
- vSpdMeterX = 1525 --export: (Default: 1525) X postion of Vertical Speed Meter. Default 1525 (use 1920x1080, it will scale)
- vSpdMeterY = 250 --export: (Default: 250) Y postion of Vertical Speed Meter. Default 250 (use 1920x1080, it will scale)
- altMeterX = 550 --export: (Default: 550) X postion of Altimeter. Default 550 (use 1920x1080, it will scale)
- altMeterY = 540 --export: (Default: 540) Y postion of Altimeter. Default 500 (use 1920x1080, it will scale)
- fuelX = 100 --export: (Default: 100) X position of fuel tanks, default is 100 for left side, set both fuelX and fuelY to 0 to hide fuel
- fuelY = 350 --export: (Default: 350) Y position of fuel tanks, default 350 for left side, set both fuelX and fuelY to 0 to hide fuel
- circleRad = 400 --export: (Default: 400) The size of the artifical horizon circle, recommended minimum 100, maximum 400. Looks different > 200. Set to 0 to remove.
- DeadZone = 50 --export: (Default: 50) Number of pixels of deadzone at the center of the screen
- DisplayOrbit = true --export: (Default: true) Show Orbit display when valid or not. May be toggled with shift Buttons
- OrbitMapSize = 250 --export: (Default: 250) Size of the orbit map, make sure it is divisible by 4
- OrbitMapX = 75 --export: (Default: 75) X postion of Orbit Display Disabled
- OrbitMapY = 0 --export: (Default: 0) Y position of Orbit Display
- showHud = true --export: (Default: true) Uncheck to hide the HUD and only use autopilot features via ALT+# keys.
- ShowOdometer = true --export: (Default: true) Uncheck to hide the odometer panel up top.
- hideHudOnToggleWidgets = true --export: (Default: true) Uncheck to keep showing HUD when you toggle on the widgets via ALT+3.
- ShiftShowsRemoteButtons = true --export: (Default: true) Whether or not pressing Shift in remote controller mode shows you the buttons (otherwise no access to them)
- YawStallAngle = 35 --export: (Default: 35) Angle at which the ship stalls when yawing (Stabilizers: 70, Wings: 55, Ailerons: 30)
- PitchStallAngle = 35 --export: (Default: 35) Angle at which the ship stalls when pitching (Stabilizers: 70, Wings: 55, Ailerons: 30)
- speedChangeLarge = 5 --export: (Default: 5) The speed change that occurs when you tap speed up/down, default is 5 (25% throttle change).
- speedChangeSmall = 1 --export: (Default: 1) the speed change that occurs while you hold speed up/down, default is 1 (5% throttle change).
- brakeLandingRate = 30 --export: (Default: 30) Max loss of altitude speed in m/s when doing a brake landing, default 30. This is to prevent "bouncing" as hover/boosters catch you. Do not use negative number.
- MaxPitch = 30 --export: (Default: 30) Maximum allowed pitch during takeoff and altitude changes while in altitude hold. You can set higher or lower depending on your ships capabilities.
- ReentrySpeed = 1050 --export: (Default: 1050) Target re-entry speed once in atmosphere in km/h.
- AtmoSpeedLimit = 1050 --export: (Default: 1050) Speed limit in Atmosphere in km/h. If you exceed this limit the ship will attempt to break till below this limit.
- SpaceSpeedLimit = 30000 --export: (Default: 30000) Space speed limit in KM/H. If you hit this speed but are not in active autopilot, engines will turn off.
- ReentryAltitude = 2500 --export: (Default: 2500) Target alititude when using re-entry.
- AutoTakeoffAltitude = 1000 --export: (Default: 1000) How high above your ground starting position AutoTakeoff tries to put you
- TargetHoverHeight = 50 --export: (Default: 50) Hover height when retracting landing gear
- LandingGearGroundHeight = 0 --export: (Default: 0) Set to AGL-1 when on ground (or 0)
- MaxGameVelocity = 8333.00 --export: (Default: 8333.00) Max speed for your autopilot in m/s, do not go above 8333.055 (30000 km/hr), can be reduced to safe fuel, use 6944.4444 for 25000km/hr
- TargetOrbitRadius = 1.4 --export: (Default: 1.4) How tight you want to orbit the planet at end of autopilot. The smaller the value the tighter the orbit. 1.4 sets an Alioth orbit of 56699m.
- AutopilotInterplanetaryThrottle = 1.0 --export: (Default: 1.0) How much throttle, 0.0 to 1.0, you want it to use when in autopilot to another planet to reach MaxGameVelocity
- warmup = 32 --export: (Default: 32) How long it takes your engines to warmup. Basic Space Engines, from XS to XL: 0.25,1,4,16,32
- MouseYSensitivity = 0.003 --export: (Default: 0.003) For virtual joystick only
- MouseXSensitivity = 0.003 --export: (Default: 0.003) For virtual joystick only
- autoRollPreference = false --export: (Default: false) [Only in atmosphere] When the pilot stops rolling, flight model will try to get back to horizontal (no roll)
- autoRollFactor = 2 --export: (Default: 2) [Only in atmosphere] When autoRoll is engaged, this factor will increase to strength of the roll back to 0 Valid values: Superior or equal to 0.01
- rollSpeedFactor = 1.5 --export: (Default: 1.5) This factor will increase/decrease the player input along the roll axis (higher value may be unstable) Valid values: Superior or equal to 0.01
- turnAssist = true --export: (Default: true) [Only in atmosphere] When the pilot is rolling, the flight model will try to add yaw and pitch to make the construct turn better The flight model will start by adding more yaw the more horizontal the construct is and more pitch the more vertical it is
- turnAssistFactor = 2 --export: (Default: 2) [Only in atmosphere] This factor will increase/decrease the turnAssist effect (higher value may be unstable) Valid values: Superior or equal to 0.01
- TrajectoryAlignmentStrength = 0.002 --export: (Default: 0.002) How strongly AP tries to align your velocity vector to the target when not in orbit, recommend 0.002
- torqueFactor = 2 --export: (Default: 2) Force factor applied to reach rotationSpeed (higher value may be unstable) Valid values: Superior or equal to 0.01
- pitchSpeedFactor = 0.8 --export: (Default: 0.8) For keyboard control
- yawSpeedFactor = 1 --export: (Default: 1) For keyboard control
- brakeSpeedFactor = 3 --export: (Default: 3) When braking, this factor will increase the brake force by brakeSpeedFactor * velocity Valid values: Superior or equal to 0.01
- brakeFlatFactor = 1 --export: (Default: 1) When braking, this factor will increase the brake force by a flat brakeFlatFactor * velocity direction> (higher value may be unstable) Valid values: Superior or equal to 0.01
- DampingMultiplier = 40 --export: (Default: 40) How strongly autopilot dampens when nearing the correct orientation
- fuelTankHandlingAtmo = 0 --export: (Default: 0) For accurate estimates, set this to the fuel tank handling level of the person who placed the element. Ignored for slotted tanks.
- fuelTankHandlingSpace = 0 --export: (Default: 0) For accurate estimates, set this to the fuel tank handling level of the person who placed the element. Ignored for slotted tanks.
- fuelTankHandlingRocket = 0 --export: (Default: 0) For accurate estimates, set this to the fuel tank handling level of the person who placed the element. Ignored for slotted tanks.
- ContainerOptimization = 0 --export: (Default: 0) For accurate estimates, set this to the Container Optimization level of the person who placed the tanks. Ignored for slotted tanks.
- FuelTankOptimization = 0 --export: (Default: 0) For accurate unslotted fuel tank calculation, set this to the fuel tank optimization skill level of the person who placed the tank. Ignored for slotted tanks.
- ExtraLongitudeTags = "none" --export: (Default: "none") Enter any extra longitudinal tags you use inside '' seperated by space, i.e. "forward faster major" These will be added to the engines that are control by longitude.
- ExtraLateralTags = "none" --export: (Default: "none") Enter any extra lateral tags you use inside '' seperated by space, i.e. "left right" These will be added to the engines that are control by lateral.
- ExtraVerticalTags = "none" --export: (Default: "none") Enter any extra longitudinal tags you use inside '' seperated by space, i.e. "up down" These will be added to the engines that are control by vertical.
- ExternalAGG = false --export: (Default: false) Toggle On if using an external AGG system. If on will prevent this HUD from doing anything with AGG.
- UseSatNav = false --export: (Default: false) Toggle on if using Trog SatNav script. This will provide SatNav support.
- apTickRate = 0.0166667 --export: (Default: 0.0166667) Set the Tick Rate for your autopilot features. 0.016667 is effectively 60 fps and the default value. 0.03333333 is 30 fps.
- hudTickRate = 0.0666667 --export: (Default: 0.0666667) Set the tick rate for your HUD. Default is 4 times slower than apTickRate
- ShouldCheckDamage = true --export: (Default: true) Whether or not damage checks are performed. Disabled for performance on very large ships
- CalculateBrakeLandingSpeed = false --export: (Default: false) Whether BrakeLanding speed at non-waypoints should be calculated or use the brakeLandingRate user setting. Only set to true for ships with low mass to lift capability.
- autoRollRollThreshold = 0 --export: (Default: 0) The minimum amount of roll before autoRoll kicks in and stabilizes (if active)
- AtmoSpeedAssist = true --export: (Default: true) Whether or not atmospheric speeds should be limited to a maximum of AtmoSpeedLimit
- ForceAlignment = false --export: (Default: false) Whether velocity vector alignment should be forced when in Altitude Hold
- minRollVelocity = 150 --export: (Default: 150) Min velocity, in m/s, over which advanced rolling can occur
- VertTakeOffEngine = false --export: (Default: false) Set this to true if you have VTOL engines on your construct. Changes Auto Takeoff to Vertical Takeoff.
- VertTakeOffMode = "Orbit" --export: (Default: "Orbit") Set to: "AGG" = turn on AGG when above 1km and near AGG activation height, "Orbit" = go directly to orbit based off of TargetOrbitRadius. Must keep quotes. Any case is fine.
+ ResolutionX = 1920 --export: (Default: 1920)
+ ResolutionY = 1080 --export: (Default: 1080)
+ SafeR = 130 --export: (Default: 130)
+ SafeG = 224 --export: (Default: 224)
+ SafeB = 255 --export: (Default: 255)
+ PvPR = 255 --export: (Default: 255)
+ PvPG = 0 --export: (Default: 0)
+ PvPB = 0 --export: (Default: 0)
+ centerX = 960 --export: (Default: 960)
+ centerY = 540 --export: (Default: 540)
+ throtPosX = 1300 --export: (Default: 1300)
+ throtPosY = 540 --export: (Default: 540)
+ vSpdMeterX = 1525 --export: (Default: 1525)
+ vSpdMeterY = 250 --export: (Default: 250)
+ altMeterX = 550 --export: (Default: 550)
+ altMeterY = 540 --export: (Default: 540)
+ fuelX = 100 --export: (Default: 100)
+ fuelY = 350 --export: (Default: 350)
+ circleRad = 400 --export: (Default: 400)
+ DeadZone = 50 --export: (Default: 50)
+ DisplayOrbit = true --export: (Default: true)
+ OrbitMapSize = 250 --export: (Default: 250)
+ OrbitMapX = 75 --export: (Default: 75)
+ OrbitMapY = 0 --export: (Default: 0)
+ showHud = true --export: (Default: true)
+ ShowOdometer = true --export: (Default: true)
+ hideHudOnToggleWidgets = true --export: (Default: true)
+ ShiftShowsRemoteButtons = true --export: (Default: true)
+ YawStallAngle = 35 --export: (Default: 35)
+ PitchStallAngle = 35 --export: (Default: 35)
+ speedChangeLarge = 5 --export: (Default: 5)
+ speedChangeSmall = 1 --export: (Default: 1)
+ brakeLandingRate = 30 --export: (Default: 30)
+ MaxPitch = 30 --export: (Default: 30)
+ ReentrySpeed = 1050 --export: (Default: 1050)
+ AtmoSpeedLimit = 1050 --export: (Default: 1050)
+ SpaceSpeedLimit = 30000 --export: (Default: 30000).
+ ReentryAltitude = 2500 --export: (Default: 2500)
+ AutoTakeoffAltitude = 1000 --export: (Default: 1000)
+ TargetHoverHeight = 50 --export: (Default: 50)
+ LandingGearGroundHeight = 0 --export: (Default: 0)
+ MaxGameVelocity = 8333.00 --export: (Default: 8333.00)
+ TargetOrbitRadius = 1.4 --export: (Default: 1.4)
+ AutopilotInterplanetaryThrottle = 1.0 --export: (Default: 1.0)
+ warmup = 32 --export: (Default: 32)
+ MouseYSensitivity = 0.003 --export: (Default: 0.003)
+ MouseXSensitivity = 0.003 --export: (Default: 0.003)
+ autoRollPreference = false --export: (Default: false)
+ autoRollFactor = 2 --export: (Default: 2)
+ rollSpeedFactor = 1.5 --export: (Default: 1.5)
+ turnAssist = true --export: (Default: true)
+ turnAssistFactor = 2 --export: (Default: 2)
+ TrajectoryAlignmentStrength = 0.002 --export: (Default: 0.002)
+ torqueFactor = 2 --export: (Default: 2)
+ pitchSpeedFactor = 0.8 --export: (Default: 0.8)
+ yawSpeedFactor = 1 --export: (Default: 1)
+ brakeSpeedFactor = 3 --export: (Default: 3)
+ brakeFlatFactor = 1 --export: (Default: 1)
+ DampingMultiplier = 40 --export: (Default: 40)
+ fuelTankHandlingAtmo = 0 --export: (Default: 0)
+ fuelTankHandlingSpace = 0 --export: (Default: 0)
+ fuelTankHandlingRocket = 0 --export: (Default: 0)
+ ContainerOptimization = 0 --export: (Default: 0)
+ FuelTankOptimization = 0 --export: (Default: 0)
+ ExtraLongitudeTags = "none" --export: (Default: "none")
+ ExtraLateralTags = "none" --export: (Default: "none")
+ ExtraVerticalTags = "none" --export: (Default: "none")
+ ExternalAGG = false --export: (Default: false)
+ UseSatNav = false --export: (Default: false)
+ apTickRate = 0.0166667 --export: (Default: 0.0166667)
+ hudTickRate = 0.0666667 --export: (Default: 0.0666667)
+ ShouldCheckDamage = true --export: (Default: true)
+ CalculateBrakeLandingSpeed = false --export: (Default: false)
+ autoRollRollThreshold = 0 --export: (Default: 0)
+ AtmoSpeedAssist = true --export: (Default: true)
+ ForceAlignment = false --export: (Default: false)
+ minRollVelocity = 150 --export: (Default: 150)
+ VertTakeOffEngine = false --export: (Default: false)
+ VertTakeOffMode = "Orbit" --export: (Default: "Orbit")
Nav=Navigator.new(system,core,unit)script={}BrakeToggleStatus=BrakeToggleDefault;BrakeIsOn=false;RetrogradeIsOn=false;ProgradeIsOn=false;Autopilot=false;TurnBurn=false;AltitudeHold=false;BrakeLanding=false;AutoTakeoff=false;Reentry=false;VertTakeOff=false;HoldAltitude=1000;AutopilotAccelerating=false;AutopilotRealigned=false;AutopilotBraking=false;AutopilotCruising=false;AutopilotEndSpeed=0;AutopilotStatus="Aligning"AutopilotPlanetGravity=0;PrevViewLock=1;AutopilotTargetName="None"AutopilotTargetCoords=nil;AutopilotTargetIndex=0;GearExtended=nil;TotalDistanceTravelled=0.0;TotalFlightTime=0;SavedLocations={}VectorToTarget=false;LocationIndex=0;LastMaxBrake=0;LockPitch=nil;LastMaxBrakeInAtmo=0;AntigravTargetAltitude=core.getAltitude()LastStartTime=0;SpaceTarget=false;LeftAmount=0;IntoOrbit=false;local a={"userControlScheme","TargetOrbitRadius","apTickRate","freeLookToggle","turnAssist","SafeR","SafeG","SafeB","warmup","DeadZone","circleRad","MouseXSensitivity","MouseYSensitivity","MaxGameVelocity","showHud","autoRollPreference","InvertMouse","pitchSpeedFactor","yawSpeedFactor","rollSpeedFactor","brakeSpeedFactor","brakeFlatFactor","autoRollFactor","turnAssistFactor","torqueFactor","AutoTakeoffAltitude","TargetHoverHeight","AutopilotInterplanetaryThrottle","hideHudOnToggleWidgets","DampingMultiplier","fuelTankHandlingAtmo","ExternalAGG","ShouldCheckDamage","fuelTankHandlingSpace","fuelTankHandlingRocket","RemoteFreeze","hudTickRate","speedChangeLarge","speedChangeSmall","brightHud","brakeLandingRate","MaxPitch","ReentrySpeed","AtmoSpeedLimit","ReentryAltitude","centerX","centerY","SpaceSpeedLimit","AtmoSpeedAssist","vSpdMeterX","vSpdMeterY","altMeterX","altMeterY","fuelX","fuelY","LandingGearGroundHeight","TrajectoryAlignmentStrength","RemoteHud","YawStallAngle","PitchStallAngle","ResolutionX","ResolutionY","UseSatNav","FuelTankOptimization","ContainerOptimization","ExtraLongitudeTags","ExtraLateralTags","ExtraVerticalTags","OrbitMapSize","OrbitMapX","OrbitMapY","DisplayOrbit","CalculateBrakeLandingSpeed","ForceAlignment","autoRollRollThreshold","minRollVelocity","VertTakeOffEngine","VertTakeOffMode","PvPR","PvPG","PvPB"}local b={"SpaceTarget","BrakeToggleStatus","BrakeIsOn","RetrogradeIsOn","ProgradeIsOn","Autopilot","TurnBurn","AltitudeHold","BrakeLanding","Reentry","AutoTakeoff","HoldAltitude","AutopilotAccelerating","AutopilotBraking","AutopilotCruising","AutopilotRealigned","AutopilotEndSpeed","AutopilotStatus","AutopilotPlanetGravity","PrevViewLock","AutopilotTargetName","AutopilotTargetCoords","AutopilotTargetIndex","TotalDistanceTravelled","TotalFlightTime","SavedLocations","VectorToTarget","LocationIndex","LastMaxBrake","LockPitch","LastMaxBrakeInAtmo","AntigravTargetAltitude","LastStartTime"}local c=system.print;local d=math.floor;local e=string.format;local f=json.decode;local g=json.encode;local h=core.getElementMaxHitPointsById;local j=unit.getAtmosphereDensity;local k=core.getElementHitPointsById;local l=core.getElementTypeById;local m=core.getElementMassById;local n=core.getConstructMass;local o=Nav.control.isRemoteControlled;local p=math.atan;function round(q,r)local s=10^(r or 0)return d(q*s+0.5)/s end;local t=SafeR;local u=SafeB;local v=SafeG;local w=false;local x=0;local y=""local z=0;local A=0;local B=false;local C=0;local D=false;local E=round(ResolutionX/2,0)local F=round(ResolutionY/2,0)local G=false;local H=true;local I=55;local J=false;local K=1;local L=1;local M=false;local N=0;local O=0;local P=0;local Q=0;local R=0;local S=0;local T=0;local U=false;local V=false;local W="empty"local X=5;local Y=5;local Z=false;local a0,a1=0;local a2,a3=0;local a4=nil;local a5=0;local a6=0;local a7=false;local a8=0;local a9=0;local aa=0;local ab=3;local ac=0;local ad=""local ae=""local af=0;local ag=false;local ah=false;local ai=false;local aj=-1;local ak=false;local al=""local am=j()>0;local an=core.getAltitude()local ao=core.getElementIdList()local ap=system.getTime()local aq=nil;local ar=false;local as=[[rgb(]]..d(t+0.5)..","..d(v+0.5)..","..d(u+0.5)..[[)]]local at=[[rgb(]]..d(t*0.9+0.5)..","..d(v*0.9+0.5)..","..d(u*0.9+0.5)..[[)]]local au={}local av=0;local aw=0;local ax=""local ay=true;local az={}local aA=1;local aB=0.001;local aC=ResolutionX;local aD=ResolutionY;local aE=nil;local aF=nil;local aG=nil;local aH=nil;local aI=false;local aJ=false;local aK=0;local aL=nil;local aM={}local aN={}local aO={}local aP=0;local aQ=false;local aR={}local aS={}local aT=d(1/apTickRate)*2;local aU={}local aV={}local aW={}local aX={}local aY=false;local aZ=16;local a_=0;local b0=nil;local b1=""local b2=nil;local b3=nil;local b4=nil;local b5=nil;local b6=nil;local b7=nil;local b8=nil;local b9=nil;local ba=false;local bb=false;local bc=autoRollPreference;local bd=vec3(core.getWorldVelocity())local be=vec3(bd):len()local bf=LandingGearGroundHeight;local bg=system.getMouseDeltaX()local bh=system.getMouseDeltaY()local bi=false;local bj=system.getTime()local bk=0;local bl=0;local bm=AtmoSpeedLimit;local bn=0;local bo=nil;local bp=0;local bq=0;local br=false;local bs=false;local bt=false;local bu=false;local bv=0;local bw=nil;local bx=false;local by=false;local bz=false;function LoadVariables()if dbHud_1 then local bA=dbHud_1.hasKey;if not useTheseSettings then for bB,bC in pairs(a)do if bA(bC)then local bD=f(dbHud_1.getStringValue(bC))if bD~=nil then c(bC.." "..dbHud_1.getStringValue(bC))_G[bC]=bD;aI=true end end end end;coroutine.yield()for bB,bC in pairs(b)do if bA(bC)then local bD=f(dbHud_1.getStringValue(bC))if bD~=nil then c(bC.." "..dbHud_1.getStringValue(bC))_G[bC]=bD;aI=true end end end;if useTheseSettings then W="Updated user preferences used. Will be saved when you exit seat.\nToggle off useTheseSettings to use saved values"ab=5 elseif aI then W="Loaded Saved Variables (see Lua Chat Tab for list)"else W="No Saved Variables Found - Stand up / leave remote to save settings"end else W="No databank found, install one anywhere and rerun the autoconfigure to save variables"end;local bE=system.getTime()if LastStartTime+180bG then bG=bF end;if ContainerOptimization>0 then bG=bG-bG*ContainerOptimization*0.05 end;if FuelTankOptimization>0 then bG=bG-bG*FuelTankOptimization*0.05 end;return bG end;function ProcessElements()local bH=fuelX~=0 and fuelY~=0;for bB in pairs(ao)do local type=l(ao[bB])if string.match(type,'^.*Space Engine$')then if string.match(tostring(core.getElementTagsById(ao[bB])),'^.*vertical.*$')then local bI=core.getElementRotationById(ao[bB])if bI[4]<0 then if utils.round(-bI[4],0.1)==0.5 then by=true;system.print("Space Engine Up detected")end else if utils.round(bI[4],0.1)==0.5 then bz=true;system.print("Space Engine Down detected")end end end end;if type=="Landing Gear"then M=true end;if type=="Dynamic Core Unit"then local bJ=h(ao[bB])if bJ>10000 then aZ=128 elseif bJ>1000 then aZ=64 elseif bJ>150 then aZ=32 end end;aP=aP+h(ao[bB])if bH and(type=="Atmospheric Fuel Tank"or type=="Space Fuel Tank"or type=="Rocket Fuel Tank")then local bJ=h(ao[bB])local bK=m(ao[bB])local bF=0;local bL=system.getTime()if type=="Atmospheric Fuel Tank"then local bG=400;local bM=35.03;if bJ>10000 then bG=51200;bM=5480 elseif bJ>1300 then bG=6400;bM=988.67 elseif bJ>150 then bG=1600;bM=182.67 end;bF=bK-bM;if fuelTankHandlingAtmo>0 then bG=bG+bG*fuelTankHandlingAtmo*0.2 end;bG=CalculateFuelVolume(bF,bG)aM[#aM+1]={ao[bB],core.getElementNameById(ao[bB]),bG,bM,bF,bL}end;if type=="Rocket Fuel Tank"then local bG=320;local bM=173.42;if bJ>65000 then bG=40000;bM=25740 elseif bJ>6000 then bG=5120;bM=4720 elseif bJ>700 then bG=640;bM=886.72 end;bF=bK-bM;if fuelTankHandlingRocket>0 then bG=bG+bG*fuelTankHandlingRocket*0.1 end;bG=CalculateFuelVolume(bF,bG)aO[#aO+1]={ao[bB],core.getElementNameById(ao[bB]),bG,bM,bF,bL}end;if type=="Space Fuel Tank"then local bG=2400;local bM=182.67;if bJ>10000 then bG=76800;bM=5480 elseif bJ>1300 then bG=9600;bM=988.67 end;bF=bK-bM;if fuelTankHandlingSpace>0 then bG=bG+bG*fuelTankHandlingSpace*0.2 end;bG=CalculateFuelVolume(bF,bG)aN[#aN+1]={ao[bB],core.getElementNameById(ao[bB]),bG,bM,bF,bL}end end end end;function SetupChecks()if gyro~=nil then aq=gyro.getState()==1 end;if userControlScheme~="keyboard"then system.lockView(1)else system.lockView(0)end;if radar_1 then if l(radar_1.getId())=="Space Radar"then hasSpaceRadar=true else hasAtmoRadar=true end end;local bN=j()if door and(bN>0 or bN==0 and an<10000)then for _,bC in pairs(door)do bC.toggle()end end;if switch then for _,bC in pairs(switch)do bC.toggle()end end;if forcefield and(bN>0 or bN==0 and an<10000)then for _,bC in pairs(forcefield)do bC.toggle()end end;if antigrav~=nil and not ExternalAGG then if antigrav.getState()==1 then antigrav.show()end end;if o()==1 and RemoteFreeze then system.freeze(1)else system.freeze(0)end;if M then GearExtended=Nav.control.isAnyLandingGearExtended()==1;if GearExtended then Nav.control.extendLandingGears()else Nav.control.retractLandingGears()end end;local bO=AboveGroundLevel()if bO~=-1 or not am and vec3(core.getVelocity()):len()<50 then BrakeIsOn=true;if not M then GearExtended=true end else BrakeIsOn=false end;if bf~=nil then Nav.axisCommandManager:setTargetGroundAltitude(bf)if bf==0 and not M then GearExtended=true;BrakeIsOn=true end else bf=Nav:getTargetGroundAltitude()if GearExtended then Nav.axisCommandManager:setTargetGroundAltitude(LandingGearGroundHeight)else Nav.axisCommandManager:setTargetGroundAltitude(TargetHoverHeight)end end;if am and bO~=-1 then b8=core.getMaxKinematicsParametersAlongAxis("ground",core.getConstructOrientationUp())[1]end;userControlScheme=string.lower(userControlScheme)WasInAtmo=am end;function ConvertResolutionX(bC)if ResolutionX==1920 then return bC else return round(ResolutionX*bC/1920,0)end end;function ConvertResolutionY(bC)if ResolutionY==1080 then return bC else return round(ResolutionY*bC/1080,0)end end;function RefreshLastMaxBrake(bP,bQ)if bP==nil then bP=core.g()end;bP=round(bP,5)local bR=j()if bQ~=nil and bQ or(aL==nil or aL~=bP)then local bd=core.getVelocity()local bS=vec3(bd):len()local bT=f(unit.getData()).maxBrake;if bT~=nil and bT>0 and am then bT=bT/utils.clamp(bS/100,0.1,1)bT=bT/bR;if bR>0.10 then if LastMaxBrakeInAtmo then LastMaxBrakeInAtmo=(LastMaxBrakeInAtmo+bT)/2 else LastMaxBrakeInAtmo=bT end end end;if bT~=nil and bT>0 then LastMaxBrake=bT end;aL=bP end end;function MakeButton(bU,bV,bW,bX,bY,bZ,b_,c0,c1)local c2={enableName=bU,disableName=bV,width=bW,height=bX,x=bY,y=bZ,toggleVar=b_,toggleFunction=c0,drawCondition=c1,hovered=false}table.insert(az,c2)return c2 end;function UpdateAtlasLocationsList()AtlasOrdered={}for bB,bC in pairs(b0[0])do table.insert(AtlasOrdered,{name=bC.name,index=bB})end;local function c3(c4,c5)return c4.name=0 and cf or 2*math.pi+cf;cd=math.pi/2-math.acos(cb.z/ac)end;return setmetatable({latitude=math.deg(cd),longitude=math.deg(ce),altitude=cc,bodyId=c8.bodyId,systemId=c8.planetarySystemId},MapPosition)end;function zeroConvertToWorldCoordinates(cg)local q=' *([+-]?%d+%.?%d*e?[+-]?%d*)'local ch='::pos{'..q..','..q..','..q..','..q..','..q..'}'local ci,cj,cd,ce,cc=string.match(cg,ch)if ci=="0"and cj=="0"then return vec3(tonumber(cd),tonumber(ce),tonumber(cc))end;ce=math.rad(ce)cd=math.rad(cd)local planet=b0[tonumber(ci)][tonumber(cj)]local ck=math.cos(cd)local cl=vec3(ck*math.cos(ce),ck*math.sin(ce),math.sin(cd))return planet.center+(planet.radius+cc)*cl end;function AddNewLocationByWaypoint(cm,planet,cg)if dbHud_1 then local cn={}local position=zeroConvertToWorldCoordinates(cg)if planet.name=="Space"then cn={position=position,name=cm,atmosphere=false,planetname=planet.name,gravity=planet.gravity}else local bN=false;if planet.hasAtmosphere then bN=true else bN=false end;cn={position=position,name=cm,atmosphere=bN,planetname=planet.name,gravity=planet.gravity}end;SavedLocations[#SavedLocations+1]=cn;table.insert(b0[0],cn)UpdateAtlasLocationsList()else W="Databank must be installed to save locations"end end;function AddNewLocation()if dbHud_1 then local position=vec3(core.getConstructWorldPos())local co=planet.name..". "..#SavedLocations;if radar_1 then local cp,_=radar_1.getData():match('"constructId":"([0-9]*)","distance":([%d%.]*)')if cp~=nil and cp~=""then co=co.." "..radar_1.getConstructName(cp)end end;local cn={}local bN=false;if planet.hasAtmosphere then bN=true end;cn={position=position,name=co,atmosphere=bN,planetname=planet.name,gravity=planet.gravity,safe=true}SavedLocations[#SavedLocations+1]=cn;table.insert(b0[0],cn)UpdateAtlasLocationsList()W="Location saved as "..co else W="Databank must be installed to save locations"end end;function UpdatePosition(cq)local cr=-1;local cn;for bB,bC in pairs(SavedLocations)do if bC.name and bC.name==CustomTarget.name then cr=bB;break end end;if cr~=-1 then local cs;if cq~=nil then cn={position=SavedLocations[cr].position,name=cq,atmosphere=SavedLocations[cr].atmosphere,planetname=SavedLocations[cr].planetname,gravity=SavedLocations[cr].gravity}else cn={position=vec3(core.getConstructWorldPos()),name=SavedLocations[cr].name,atmosphere=j(),planetname=planet.name,gravity=unit.getClosestPlanetInfluence(),safe=true}end;SavedLocations[cr]=cn;cr=-1;for bB,bC in pairs(b0[0])do if bC.name and bC.name==CustomTarget.name then cr=bB end end;if cr>-1 then b0[0][cr]=cn end;UpdateAtlasLocationsList()W=CustomTarget.name.." position updated"AutopilotTargetIndex=0;UpdateAutopilotTarget()else W="Name Not Found"end end;function ClearCurrentPosition()local cr=-1;for bB,bC in pairs(b0[0])do if bC.name and bC.name==CustomTarget.name then cr=bB end end;if cr>-1 then table.remove(b0[0],cr)end;cr=-1;for bB,bC in pairs(SavedLocations)do if bC.name and bC.name==CustomTarget.name then W=bC.name.." saved location cleared"cr=bB;break end end;if cr~=-1 then table.remove(SavedLocations,cr)end;DecrementAutopilotTargetIndex()UpdateAtlasLocationsList()end;function DrawDeadZone(ct)ct[#ct+1]=e([[]],DeadZone)end;function ToggleRadarPanel()if radarPanelID~=nil and af==0 then system.destroyWidgetPanel(radarPanelID)radarPanelID=nil;if perisPanelID~=nil then system.destroyWidgetPanel(perisPanelID)perisPanelID=nil end else if af==1 then system.destroyWidgetPanel(radarPanelID)radarPanelID=nil;_autoconf.displayCategoryPanel(radar,radar_size,L_TEXT("ui_lua_widget_periscope", "Periscope"),"periscope")perisPanelID=_autoconf.panels[_autoconf.panels_size]end;placeRadar=true;if radarPanelID==nil and placeRadar then _autoconf.displayCategoryPanel(radar,radar_size,L_TEXT("ui_lua_widget_radar", "Radar"),"radar")radarPanelID=_autoconf.panels[_autoconf.panels_size]placeRadar=false end;af=0 end end;function ToggleWidgets()if ay then unit.show()core.show()if atmofueltank_size>0 then _autoconf.displayCategoryPanel(atmofueltank,atmofueltank_size,L_TEXT("ui_lua_widget_atmofuel", "Atmo Fuel"),"fuel_container")fuelPanelID=_autoconf.panels[_autoconf.panels_size]end;if spacefueltank_size>0 then _autoconf.displayCategoryPanel(spacefueltank,spacefueltank_size,L_TEXT("ui_lua_widget_spacefuel", "Space Fuel"),"fuel_container")spacefuelPanelID=_autoconf.panels[_autoconf.panels_size]end;if rocketfueltank_size>0 then _autoconf.displayCategoryPanel(rocketfueltank,rocketfueltank_size,L_TEXT("ui_lua_widget_rocketfuel", "Rocket Fuel"),"fuel_container")rocketfuelPanelID=_autoconf.panels[_autoconf.panels_size]end;ay=false else unit.hide()core.hide()if fuelPanelID~=nil then system.destroyWidgetPanel(fuelPanelID)fuelPanelID=nil end;if spacefuelPanelID~=nil then system.destroyWidgetPanel(spacefuelPanelID)spacefuelPanelID=nil end;if rocketfuelPanelID~=nil then system.destroyWidgetPanel(rocketfuelPanelID)rocketfuelPanelID=nil end;ay=true end end;function SetupInterplanetaryPanel()panelInterplanetary=system.createWidgetPanel("Interplanetary Helper")interplanetaryHeader=system.createWidget(panelInterplanetary,"value")interplanetaryHeaderText=system.createData('{"label": "Target Planet", "value": "N/A", "unit":""}')system.addDataToWidget(interplanetaryHeaderText,interplanetaryHeader)widgetDistance=system.createWidget(panelInterplanetary,"value")widgetDistanceText=system.createData('{"label": "distance", "value": "N/A", "unit":""}')system.addDataToWidget(widgetDistanceText,widgetDistance)widgetTravelTime=system.createWidget(panelInterplanetary,"value")widgetTravelTimeText=system.createData('{"label": "Travel Time", "value": "N/A", "unit":""}')system.addDataToWidget(widgetTravelTimeText,widgetTravelTime)widgetMaxMass=system.createWidget(panelInterplanetary,"value")widgetMaxMassText=system.createData('{"label": "Maximum Mass", "value": "N/A", "unit":""}')system.addDataToWidget(widgetMaxMassText,widgetMaxMass)widgetCurBrakeDistance=system.createWidget(panelInterplanetary,"value")widgetCurBrakeDistanceText=system.createData('{"label": "Cur Brake distance", "value": "N/A", "unit":""}')if not am then system.addDataToWidget(widgetCurBrakeDistanceText,widgetCurBrakeDistance)end;widgetCurBrakeTime=system.createWidget(panelInterplanetary,"value")widgetCurBrakeTimeText=system.createData('{"label": "Cur Brake Time", "value": "N/A", "unit":""}')if not am then system.addDataToWidget(widgetCurBrakeTimeText,widgetCurBrakeTime)end;widgetMaxBrakeDistance=system.createWidget(panelInterplanetary,"value")widgetMaxBrakeDistanceText=system.createData('{"label": "Max Brake distance", "value": "N/A", "unit":""}')if not am then system.addDataToWidget(widgetMaxBrakeDistanceText,widgetMaxBrakeDistance)end;widgetMaxBrakeTime=system.createWidget(panelInterplanetary,"value")widgetMaxBrakeTimeText=system.createData('{"label": "Max Brake Time", "value": "N/A", "unit":""}')if not am then system.addDataToWidget(widgetMaxBrakeTimeText,widgetMaxBrakeTime)end;widgetTrajectoryAltitude=system.createWidget(panelInterplanetary,"value")widgetTrajectoryAltitudeText=system.createData('{"label": "Projected Altitude", "value": "N/A", "unit":""}')if not am then system.addDataToWidget(widgetTrajectoryAltitudeText,widgetTrajectoryAltitude)end;widgetTargetOrbit=system.createWidget(panelInterplanetary,"value")widgetTargetOrbitText=system.createData('{"label": "Target Altitude", "value": "N/A", "unit":""}')system.addDataToWidget(widgetTargetOrbitText,widgetTargetOrbit)end;function Contains(cu,cv,bY,bZ,bW,bX)if cu>bY and cubZ and cv0 then IntoOrbit=true;bx=false;CancelIntoOrbit=false;br=false;bp=nil;bq=nil;if bw==nil then bw=planet end else W="Unable to engage orbiting, not near planet"end end end;function ToggleLockPitch()if LockPitch==nil then local cw=vec3(core.getConstructWorldOrientationForward())local cx=vec3(core.getConstructWorldOrientationRight())local cy=vec3(core.getWorldVertical())local cz=getPitch(cy,cw,cx)LockPitch=cz;AutoTakeoff=false;AltitudeHold=false;BrakeLanding=false else LockPitch=nil end end;function ToggleAltitudeHold()local bE=system.getTime()if bE-bl<1.5 then if planet.hasAtmosphere then HoldAltitude=planet.spaceEngineMinAltitude-50;bl=-1;if AltitudeHold then return end end else bl=bE end;AltitudeHold=not AltitudeHold;if AltitudeHold then Autopilot=false;ProgradeIsOn=false;RetrogradeIsOn=false;U=false;BrakeLanding=false;Reentry=false;bc=true;LockPitch=nil;if hoverDetectGround()==-1 or not am then AutoTakeoff=false;if bl>-1 then HoldAltitude=an end;if not ah and Nav.axisCommandManager:getAxisCommandType(0)==0 and not AtmoSpeedAssist then Nav.control.cancelCurrentControlMasterMode()end else AutoTakeoff=true;if bl>-1 then HoldAltitude=an+AutoTakeoffAltitude end;GearExtended=false;Nav.control.retractLandingGears()BrakeIsOn=true;Nav.axisCommandManager:setTargetGroundAltitude(TargetHoverHeight)end;if ah then HoldAltitude=100000 end else bc=autoRollPreference;AutoTakeoff=false;BrakeLanding=false;Reentry=false;AutoTakeoff=false;VectorToTarget=false end end;function ToggleFollowMode()if o()==1 then U=not U;if U then Autopilot=false;RetrogradeIsOn=false;ProgradeIsOn=false;AltitudeHold=false;Reentry=false;BrakeLanding=false;AutoTakeoff=false;OldGearExtended=GearExtended;GearExtended=false;Nav.control.retractLandingGears()Nav.axisCommandManager:setTargetGroundAltitude(TargetHoverHeight)else BrakeIsOn=true;bc=autoRollPreference;GearExtended=OldGearExtended;if GearExtended then Nav.control.extendLandingGears()Nav.axisCommandManager:setTargetGroundAltitude(LandingGearGroundHeight)end end else W="Follow Mode only works with Remote controller"U=false end end;function ToggleAutopilot()TargetSet=false;if AutopilotTargetIndex>0 and not Autopilot and not VectorToTarget and not ah then UpdateAutopilotTarget()local cA=zeroConvertToMapPosition(a4,AutopilotTargetCoords)cA="::pos{"..cA.systemId..","..cA.bodyId..","..cA.latitude..","..cA.longitude..","..cA.altitude.."}"system.setWaypoint(cA)if CustomTarget~=nil then LockPitch=nil;SpaceTarget=CustomTarget.planetname=="Space"if SpaceTarget then if j()~=0 then ah=true;ToggleAltitudeHold()else Autopilot=true end elseif planet.name==CustomTarget.planetname then StrongBrakes=true;if j()>0 then bx=false;if not VectorToTarget then ToggleVectorToTarget(SpaceTarget)end else if an>100000 or an==0 then bx=false;Autopilot=true else ag=true;ProgradeIsOn=true;if AltitudeHold then ToggleAltitudeHold()end end end else RetrogradeIsOn=false;ProgradeIsOn=false;if j()~=0 then ah=true;ToggleAltitudeHold()else Autopilot=true end end elseif j()==0 then local cB=unit.getClosestPlanetInfluence()>0;if CustomTarget==nil and(a4.name==planet.name and cB)then ToggleIntoOrbit()else Autopilot=true;RetrogradeIsOn=false;ProgradeIsOn=false;AutopilotRealigned=false;U=false;AltitudeHold=false;BrakeLanding=false;Reentry=false;AutoTakeoff=false;G=false;LockPitch=nil;WaypointSet=false end else ah=true;ToggleAltitudeHold()end else ah=false;Autopilot=false;AutopilotRealigned=false;VectorToTarget=false;G=false;AutoTakeoff=false;AltitudeHold=false;VectorToTarget=false;HoldAltitude=an;TargetSet=false end end;function ProgradeToggle()ProgradeIsOn=not ProgradeIsOn;RetrogradeIsOn=false;Autopilot=false;AltitudeHold=false;U=false;BrakeLanding=false;LockPitch=nil;Reentry=false;AutoTakeoff=false end;function RetrogradeToggle()RetrogradeIsOn=not RetrogradeIsOn;ProgradeIsOn=false;Autopilot=false;AltitudeHold=false;U=false;BrakeLanding=false;LockPitch=nil;Reentry=false;AutoTakeoff=false end;function BrakeToggle()BrakeIsOn=not BrakeIsOn;if BrakeLanding then BrakeLanding=false;bc=autoRollPreference end;if BrakeIsOn then AltitudeHold=false;VectorToTarget=false;AutoTakeoff=false;VertTakeOff=false;Reentry=false;ProgradeIsOn=false;BrakeLanding=false;AutoLanding=false;AltitudeHold=false;IntoOrbit=false;LockPitch=nil;bc=autoRollPreference;ag=false;ai=false;a8=0 end end;function CheckDamage(ct)local cC=0;ax=""local cD=aP;local cE=0;local cF=0;local cG=0;local cH=0;local cI=""for bB in pairs(ao)do local bJ=0;local cJ=0;cJ=h(ao[bB])bJ=k(ao[bB])cE=cE+bJ;if bJ0 and au[11]==ao[bB]then for cL in pairs(au)do core.deleteSticker(au[cL])end;au={}end end;cC=d(cE/cD*100)if cC<100 then ct[#ct+1]=[[]]cH=d(cC*2.55)cI=e("rgb(%d,%d,%d)",255-cH,cH,0)if cC<100 then ct[#ct+1]=e([[Elemental Integrity: %i %%]],cI,cC)if cG>0 then ct[#ct+1]=e([[Disabled Modules: %i Damaged Modules: %i]],cI,cG,cF)elseif cF>0 then ct[#ct+1]=e([[Damaged Modules: %i]],cI,cF)end end;ct[#ct+1]=[[<\g>]]end end;function DrawCursorLine(ct)local cM=d(utils.clamp(ac/(aC/4)*255,0,255))ct[#ct+1]=e("",a9,aa,d(t+0.5)+cM,d(v+0.5)-cM,d(u+0.5)-cM)end;function getPitch(cN,cO,c5)local cP=cN:cross(c5):normalize_inplace()local cz=math.acos(utils.clamp(cP:dot(-cO),-1,1))*constants.rad2deg;if cP:cross(-cO):dot(c5)<0 then cz=-cz end;return cz end;local function cQ(cR,cS,cT)cS=cS:project_on_plane(cR)cT=cT:project_on_plane(cR)return p(cS:cross(cT):dot(cR),cS:dot(cT))end;function clearAll()if ak then ak=false;AutopilotAccelerating=false;AutopilotBraking=false;AutopilotCruising=false;Autopilot=false;AutopilotRealigned=false;AutopilotStatus="Aligning"RetrogradeIsOn=false;ProgradeIsOn=false;AltitudeHold=false;Reentry=false;BrakeLanding=false;BrakeIsOn=false;AutoTakeoff=false;VertTakeOff=false;U=false;G=false;ag=false;ah=false;J=false;bc=autoRollPreference;VectorToTarget=false;TurnBurn=false;aq=false;LockPitch=nil else ak=true end end;function wipeSaveVariables()if not dbHud_1 then W="No Databank Found, unable to wipe. \nYou must have a Databank attached to ship prior to running the HUD autoconfigure"ab=5 else if aJ then for bB,bC in pairs(a)do dbHud_1.setStringValue(bC,g(nil))end;for bB,bC in pairs(b)do if bC~="SavedLocations"then dbHud_1.setStringValue(bC,g(nil))end end;W="Databank wiped. New variables will save after re-enter seat and exit"ab=5;aJ=false;aI=false;a7=true else W="Press ALT-7 again to confirm wipe of ALL data"aJ=true end end end;function CheckButtons()for _,bC in pairs(az)do if bC.hovered then if not bC.drawCondition or bC.drawCondition()then bC.toggleFunction()end;bC.hovered=false end end end;function SetButtonContains()local bY=a9+aC/2;local bZ=aa+aD/2;for _,bC in pairs(az)do bC.hovered=Contains(bY,bZ,bC.x,bC.y,bC.width,bC.height)end end;function DrawButton(ct,cU,hover,bY,bZ,cV,cW,cX,cY,cZ,c_)if type(cZ)=="function"then cZ=cZ()end;if type(c_)=="function"then c_=c_()end;ct[#ct+1]=e(""ct[#ct+1]=e(""if cU then ct[#ct+1]=e("%s",cZ)else ct[#ct+1]=e("%s",c_)end end;function DrawButtons(ct)local d0="rgb(50,50,50)'"local d1="rgb(210,200,200)"local d2=DrawButton;for _,bC in pairs(az)do local bV=bC.disableName;local bU=bC.enableName;if type(bV)=="function"then bV=bV()end;if type(bU)=="function"then bU=bU()end;if not bC.drawCondition or bC.drawCondition()then d2(ct,bC.toggleVar(),bC.hovered,bC.x,bC.y,bC.width,bC.height,d1,d0,bV,bU)end end end;function DrawTank(ct,aY,bY,d3,d4,d5,d6,d7)local d8=1;local d9=2;local da=3;local db=4;local dc=5;local dd=6;local de=""local df=0;local dg=fuelY;local dh=fuelY+10;if o()==1 and not RemoteHud then dg=dg-50;dh=dh-50 end;ct[#ct+1]=[[]]if d4=="ATMO"then de="atmofueltank"elseif d4=="SPACE"then de="spacefueltank"else de="rocketfueltank"end;df=_G[de.."_size"]if#d5>0 then for i=1,#d5 do local co=string.sub(d5[i][d9],1,12)local di=0;for cL=1,df do if d5[i][d9]==f(unit[de.."_"..cL].getData()).name then di=cL;break end end;if aY or d6[i]==nil or d7[i]==nil then local dj=0;local dk=0;local dl=0;local dm=0;local bL=system.getTime()if di~=0 then d7[i]=f(unit[de.."_"..di].getData()).percentage;d6[i]=f(unit[de.."_"..di].getData()).timeLeft;if d6[i]=="n/a"then d6[i]=0 end else dl=m(d5[i][d8])-d5[i][db]dj=d5[i][da]d7[i]=d(0.5+dl*100/dj)dk=d5[i][dc]dm=d5[i][dd]if dk<=dl then d6[i]=0 else d6[i]=d(0.5+dl/((dk-dl)/(bL-dm)))end;d5[i][dc]=dl;d5[i][dd]=bL end end;if co==d3 then co=e("%s %d",d4,i)end;if di==0 then co=co.." *"end;local dn;if d6[i]==0 then dn="n/a"else dn=FormatTimeString(d6[i])end;if d7[i]~=nil then local cH=d(d7[i]*2.55)local cI=e("rgb(%d,%d,%d)",255-cH,cH,0)local dp=""if dn~="n/a"and d6[i]<120 or d7[i]<5 then if aY then dp=[[class="red"]]end end;ct[#ct+1]=e([[
%s%d%% %s
@@ -385,7 +385,7 @@ handlers:
Keyboard Scheme must be selected]],ConvertResolutionX(960),ConvertResolutionY(600))ct[#ct+1]=e([[
Set your preferred scheme in Lua Parameters instead]],ConvertResolutionX(960),ConvertResolutionY(650))end;local f7=ConvertResolutionX(960)local f8=ConvertResolutionY(860)local f9=ConvertResolutionY(880)local fa=ConvertResolutionY(900)local fb=ConvertResolutionY(960)local fc=ConvertResolutionY(200)local fd=ConvertResolutionY(150)local fe=ConvertResolutionY(960)if o()==1 and not RemoteHud then f8=ConvertResolutionY(135)f9=ConvertResolutionY(155)fa=ConvertResolutionY(175)fc=ConvertResolutionY(115)fd=ConvertResolutionY(95)end;if BrakeIsOn then ct[#ct+1]=e([[Brake Engaged]],f7,f8)elseif A>0 then ct[#ct+1]=e([[Auto-Brake Engaged]],f7,f8,A)end;if am and bi and hoverDetectGround()==-1 then ct[#ct+1]=e([[** STALL WARNING **]],f7,fc+50)end;if aq then ct[#ct+1]=e([[Gyro Enabled]],f7,fe)end;if GearExtended then if M then ct[#ct+1]=e([[Gear Extended]],f7,f9)else ct[#ct+1]=e([[Landed (G: Takeoff)]],f7,f9)end;local dy,dz=getDistanceDisplayString(Nav:getTargetGroundAltitude())ct[#ct+1]=e([[Hover Height: %s]],f7,fa,dy..dz)end;if Z then ct[#ct+1]=e([[ROCKET BOOST ENABLED]],f7,fb+20)end;if antigrav and not ExternalAGG and antigrav.getState()==1 and AntigravTargetAltitude~=nil then if math.abs(an-antigrav.getBaseAltitude())<501 then ct[#ct+1]=e([[AGG On - Target Altitude: %d Singluarity Altitude: %d]],f7,fc+20,d(AntigravTargetAltitude),d(antigrav.getBaseAltitude()))else ct[#ct+1]=e([[AGG On - Target Altitude: %d Singluarity Altitude: %d]],f7,fc+20,d(AntigravTargetAltitude),d(antigrav.getBaseAltitude()))end elseif Autopilot and AutopilotTargetName~="None"then ct[#ct+1]=e([[Autopilot %s]],f7,fc+20,AutopilotStatus)elseif LockPitch~=nil then ct[#ct+1]=e([[LockedPitch: %d]],f7,fc+20,d(LockPitch))elseif U then ct[#ct+1]=e([[Follow Mode Engaged]],f7,fc+20)elseif Reentry then ct[#ct+1]=e([[Re-entry in Progress]],f7,fc+20)end;local ff,fg,fh=b6:getPlanetarySystem(0):castIntersections(vec3(core.getConstructWorldPos()),bd:normalize(),function(fi)if fi.noAtmosphericDensityAltitude>0 then return fi.radius+fi.noAtmosphericDensityAltitude else return fi.radius+fi.surfaceMaxAltitude*1.5 end end)local fj=fg;if fh~=nil and fg~=nil then fj=math.min(fh,fg)end;if AltitudeHold then if AutoTakeoff and not IntoOrbit then local dy,dz=getDistanceDisplayString(HoldAltitude)ct[#ct+1]=e([[Ascent to %s]],f7,fc,dy..dz)if BrakeIsOn then ct[#ct+1]=e([[Throttle Up and Disengage Brake For Takeoff]],f7,fc+50)end else local dy,dz=getDistanceDisplayString2(HoldAltitude)ct[#ct+1]=e([[Altitude Hold: %s]],f7,fc,dy..dz)end end;if VertTakeOff and(antigrav~=nil and antigrav)then if j()>0.1 then ct[#ct+1]=e([[Beginning ascent]],f7,fc)elseif j()<0.09 and j()>0.05 then ct[#ct+1]=e([[Aligning trajectory]],f7,fc)elseif j()<0.05 then ct[#ct+1]=e([[Leaving atmosphere]],f7,fc)end end;if IntoOrbit then if bo~=nil then ct[#ct+1]=e([[%s]],f7,fc,bo)end end;if BrakeLanding then if StrongBrakes then ct[#ct+1]=e([[Brake-Landing]],f7,fc)else ct[#ct+1]=e([[Coast-Landing]],f7,fc)end end;if ProgradeIsOn then ct[#ct+1]=e([[Prograde Alignment]],f7,fc)end;if RetrogradeIsOn then ct[#ct+1]=e([[Retrograde Alignment]],f7,fc)end;if TurnBurn then ct[#ct+1]=e([[Turn & Burn Braking]],f7,fd)elseif fj~=nil and j()==0 then local dy,dz=getDistanceDisplayString(fj)local travelTime=b7.computeTravelTime(be,0,fj)local fk="Collision"if ff.noAtmosphericDensityAltitude>0 then fk="Atmosphere"end;ct[#ct+1]=e([[%s %s In %s (%s)]],f7,fd,ff.name,fk,FormatTimeString(travelTime),dy..dz)end;if VectorToTarget and not IntoOrbit then ct[#ct+1]=e([[%s]],f7,fc+30,VectorStatus)end;ct[#ct+1]=""end;function DisplayOrbitScreen(ct)if orbit~=nil and j()<0.2 and planet~=nil and orbit.apoapsis~=nil and orbit.periapsis~=nil and orbit.period~=nil and orbit.apoapsis.speed>5 and DisplayOrbit then local fl=OrbitMapX;local fm=OrbitMapY;local fn=OrbitMapSize;local fo=4;fm=fm+fo;local fp=15;local bY=fl+fn+fl/2+fo;local bZ=fm+fn/2+5+fo;local fq,fr,fs,ft;fq=fn/4;ft=0;ct[#ct+1]=[[]]ct[#ct+1]=e('',fn+fl*2,fn+fm,fo,fo)if orbit.periapsis~=nil and orbit.apoapsis~=nil then fs=(orbit.apoapsis.altitude+orbit.periapsis.altitude+planet.radius*2)/(fq*2)fr=(planet.radius+orbit.periapsis.altitude+(orbit.apoapsis.altitude-orbit.periapsis.altitude)/2)/fs*(1-orbit.eccentricity)ft=fq-orbit.periapsis.altitude/fs-planet.radius/fs;local fu=""if orbit.periapsis.altitude<=0 then fu='redout'end;ct[#ct+1]=e([[]],fu,fl+fn/2+ft+fo,fm+fn/2+fo,fq,fr)ct[#ct+1]=e('',fl+fn/2+fo,fm+fn/2+fo,planet.radius/fs)end;if orbit.apoapsis~=nil and orbit.apoapsis.speed1 then ct[#ct+1]=e([[]],bY-35,bZ-5,fl+fn/2+fq+ft,bZ-5)ct[#ct+1]=e([[Apoapsis]],bY,bZ)bZ=bZ+fp;local dy,dz=getDistanceDisplayString(orbit.apoapsis.altitude)ct[#ct+1]=e([[%s]],bY,bZ,dy..dz)bZ=bZ+fp;ct[#ct+1]=e([[%s]],bY,bZ,FormatTimeString(orbit.timeToApoapsis))bZ=bZ+fp;ct[#ct+1]=e([[%s]],bY,bZ,getSpeedDisplayString(orbit.apoapsis.speed))end;bZ=fm+fn/2+5+fo;bY=fl-fl/2+10+fo;if orbit.periapsis~=nil and orbit.periapsis.speed1 then ct[#ct+1]=e([[]],bY+35,bZ-5,fl+fn/2-fq+ft,bZ-5)ct[#ct+1]=e([[Periapsis]],bY,bZ)bZ=bZ+fp;local dy,dz=getDistanceDisplayString(orbit.periapsis.altitude)ct[#ct+1]=e([[%s]],bY,bZ,dy..dz)bZ=bZ+fp;ct[#ct+1]=e([[%s]],bY,bZ,FormatTimeString(orbit.timeToPeriapsis))bZ=bZ+fp;ct[#ct+1]=e([[%s]],bY,bZ,getSpeedDisplayString(orbit.periapsis.speed))end;ct[#ct+1]=e([[%s]],fl+fn/2+fo,20+fo,planet.name)if orbit.period~=nil and orbit.periapsis~=nil and orbit.apoapsis~=nil and orbit.apoapsis.speed>1 then local fv=orbit.timeToApoapsis/orbit.period*2*math.pi;local fw=fq*math.cos(fv)local fx=fr*math.sin(fv)ct[#ct+1]=e('',fl+fn/2+fw+ft+fo,fm+fn/2+fx+fo)end;ct[#ct+1]=[[]]end end;function getDistanceDisplayString(ac)local fy=ac>100000;local bD,dz=""if fy then bD,dz=round(ac/1000/200,1),"SU"elseif ac<1000 then bD,dz=round(ac,1),"m"else bD,dz=round(ac/1000,1),"Km"end;return bD,dz end;function getDistanceDisplayString2(ac)local fy=ac>100000;local bD,dz=""if fy then bD,dz=round(ac/1000/200,2)," SU"elseif ac<1000 then bD,dz=round(ac,2)," M"else bD,dz=round(ac/1000,2)," KM"end;return bD,dz end;function getSpeedDisplayString(bS)return d(round(bS*3.6,0)+0.5).." km/h"end;function FormatTimeString(fz)local fA=0;local fB=0;local fC=0;if fz<60 then fz=d(fz)elseif fz<3600 then fA=d(fz/60)fz=d(fz%60)elseif fz<86400 then fB=d(fz/3600)fA=d(fz%3600/60)else fC=d(fz/86400)fB=d(fz%86400/3600)end;if fC>0 then return fC.."d "..fB.."h "elseif fB>0 then return fB.."h "..fA.."m "elseif fA>0 then return fA.."m "..fz.."s"elseif fz>0 then return fz.."s"else return"0s"end end;function getMagnitudeInDirection(dr,fD)dr=vec3(dr)fD=vec3(fD):normalize()local bD=dr*fD;return bD.x+bD.y+bD.z end;function UpdateAutopilotTarget()if AutopilotTargetIndex==0 then AutopilotTargetName="None"a4=nil;CustomTarget=nil;return true end;local fE=AtlasOrdered[AutopilotTargetIndex].index;local fF=b0[0][fE]if fF.center then AutopilotTargetName=fF.name;a4=b6[0][fE]if CustomTarget~=nil then if j()==0 then if system.updateData(widgetMaxBrakeTimeText,widgetMaxBrakeTime)~=1 then system.addDataToWidget(widgetMaxBrakeTimeText,widgetMaxBrakeTime)end;if system.updateData(widgetMaxBrakeDistanceText,widgetMaxBrakeDistance)~=1 then system.addDataToWidget(widgetMaxBrakeDistanceText,widgetMaxBrakeDistance)end;if system.updateData(widgetCurBrakeTimeText,widgetCurBrakeTime)~=1 then system.addDataToWidget(widgetCurBrakeTimeText,widgetCurBrakeTime)end;if system.updateData(widgetCurBrakeDistanceText,widgetCurBrakeDistance)~=1 then system.addDataToWidget(widgetCurBrakeDistanceText,widgetCurBrakeDistance)end;if system.updateData(widgetTrajectoryAltitudeText,widgetTrajectoryAltitude)~=1 then system.addDataToWidget(widgetTrajectoryAltitudeText,widgetTrajectoryAltitude)end end;if system.updateData(widgetMaxMassText,widgetMaxMass)~=1 then system.addDataToWidget(widgetMaxMassText,widgetMaxMass)end;if system.updateData(widgetTravelTimeText,widgetTravelTime)~=1 then system.addDataToWidget(widgetTravelTimeText,widgetTravelTime)end;if system.updateData(widgetTargetOrbitText,widgetTargetOrbit)~=1 then system.addDataToWidget(widgetTargetOrbitText,widgetTargetOrbit)end end;CustomTarget=nil else CustomTarget=fF;for _,bC in pairs(b6[0])do if bC.name==CustomTarget.planetname then a4=bC;AutopilotTargetName=CustomTarget.name;break end end;if system.updateData(widgetMaxMassText,widgetMaxMass)~=1 then system.addDataToWidget(widgetMaxMassText,widgetMaxMass)end;if system.updateData(widgetTravelTimeText,widgetTravelTime)~=1 then system.addDataToWidget(widgetTravelTimeText,widgetTravelTime)end end;if CustomTarget==nil then AutopilotTargetCoords=vec3(a4.center)else AutopilotTargetCoords=CustomTarget.position end;if a4.planetname~="Space"then if a4.hasAtmosphere then AutopilotTargetOrbit=math.floor(a4.radius*(TargetOrbitRadius-1)+a4.noAtmosphericDensityAltitude)else AutopilotTargetOrbit=math.floor(a4.radius*(TargetOrbitRadius-1)+a4.surfaceMaxAltitude)end else AutopilotTargetOrbit=1000 end;if CustomTarget~=nil and CustomTarget.planetname=="Space"then AutopilotEndSpeed=0 else _,AutopilotEndSpeed=b9(a4):escapeAndOrbitalSpeed(AutopilotTargetOrbit)end;AutopilotPlanetGravity=0;AutopilotAccelerating=false;AutopilotBraking=false;AutopilotCruising=false;Autopilot=false;AutopilotRealigned=false;AutopilotStatus="Aligning"return true end;function IncrementAutopilotTargetIndex()AutopilotTargetIndex=AutopilotTargetIndex+1;if AutopilotTargetIndex>#AtlasOrdered then AutopilotTargetIndex=0 end;if AutopilotTargetIndex==0 then UpdateAutopilotTarget()else local fE=AtlasOrdered[AutopilotTargetIndex].index;local fF=b0[0][fE]if fF.name=="Space"then IncrementAutopilotTargetIndex()else UpdateAutopilotTarget()end end end;function DecrementAutopilotTargetIndex()AutopilotTargetIndex=AutopilotTargetIndex-1;if AutopilotTargetIndex<0 then AutopilotTargetIndex=#AtlasOrdered end;if AutopilotTargetIndex==0 then UpdateAutopilotTarget()else local fE=AtlasOrdered[AutopilotTargetIndex].index;local fF=b0[0][fE]if fF.name=="Space"then DecrementAutopilotTargetIndex()else UpdateAutopilotTarget()end end end;function GetAutopilotMaxMass()local fG=LastMaxBrakeInAtmo/a4:getGravity(a4.center+vec3(0,0,1)*a4.radius):len()return fG end;function GetAutopilotTravelTime()if not Autopilot then if CustomTarget==nil or CustomTarget.planetname~=planet.name then AutopilotDistance=(a4.center-vec3(core.getConstructWorldPos())):len()else AutopilotDistance=(CustomTarget.position-vec3(core.getConstructWorldPos())):len()end end;local bd=core.getWorldVelocity()local bS=vec3(bd):len()local fH=unit.getThrottle()/100;if AtmoSpeedAssist then fH=z end;local fI,fJ=b7.computeDistanceAndTime(vec3(bd):len(),MaxGameVelocity,n(),Nav:maxForceForward()*fH,warmup,0)local a0,a1;if not TurnBurn then a0,a1=GetAutopilotBrakeDistanceAndTime(MaxGameVelocity)else a0,a1=GetAutopilotTBBrakeDistanceAndTime(MaxGameVelocity)end;local _,fK;if not TurnBurn and bS>0 then _,fK=GetAutopilotBrakeDistanceAndTime(bS)else _,fK=GetAutopilotTBBrakeDistanceAndTime(bS)end;local fL=0;local fM=0;if AutopilotCruising or not Autopilot and bS>5 then fM=b7.computeTravelTime(bS,0,AutopilotDistance)elseif a0+fI0 then return b7.computeDistanceAndTime(bS,AutopilotEndSpeed,n(),0,0,LastMaxBrakeInAtmo-AutopilotPlanetGravity*n())else return 0,0 end end end;function GetAutopilotTBBrakeDistanceAndTime(bS)RefreshLastMaxBrake()return b7.computeDistanceAndTime(bS,AutopilotEndSpeed,n(),Nav:maxForceForward(),warmup,LastMaxBrake-AutopilotPlanetGravity*n())end;function hoverDetectGround()local fO=-1;local fP=-1;if vBooster then fO=vBooster.distance()end;if hover then fP=hover.distance()end;if fO~=-1 and fP~=-1 then if fOProfileTimeMax then ProfileTimeMax=fV end;if fV0 then local g4=g1:find('identifiedConstructs":%[%]')if g4==nil and perisPanelID==nil then af=1;ToggleRadarPanel()end;if g4~=nil and perisPanelID~=nil then ToggleRadarPanel()end;if radarPanelID==nil then ToggleRadarPanel()end;ad=e([[Radar: %i contacts]],g2,g3,#g0)local g5={}for bB,bC in pairs(g0)do if radar_1.hasMatchingTransponder(bC)==1 then table.insert(g5,bC)end end;if#g5>0 then local bZ=ConvertResolutionY(15)local bY=ConvertResolutionX(1370)ad=e([[%sFriendlies In Range]],ad,bY,bZ)for bB,bC in pairs(g5)do bZ=bZ+20;ad=e([[%s%s]],ad,bY,bZ,radar_1.getConstructName(bC))end end else local g6;g6=g1:find('worksInEnvironment":false')if g6 then ad=e([[
Radar: Jammed]],g2,g3)else ad=e([[
- Radar: No Contacts]],g2,g3)end;if radarPanelID~=nil then af=0;ToggleRadarPanel()end end end end;function DisplayMessage(ct,dy)if dy~="empty"then ct[#ct+1]=[[]]for g7 in string.gmatch(dy,"([^\n]+)")do ct[#ct+1]=e([[%s]],g7)end;ct[#ct+1]=[[]]end;if ab~=0 then unit.setTimer("msgTick",ab)ab=0 end end;function updateDistance()local bL=system.getTime()local bd=vec3(core.getWorldVelocity())local dU=vec3(bd):len()local g8=bL-ap;if dU>1.38889 then dU=dU/1000;local g9=dU*(bL-ap)TotalDistanceTravelled=TotalDistanceTravelled+g9;a5=a5+g9 end;a6=a6+g8;TotalFlightTime=TotalFlightTime+g8;ap=bL end;function composeAxisAccelerationFromTargetSpeedV(ga,gb)local gc=vec3()local gd=vec3()if ga==axisCommandId.longitudinal then gc=vec3(core.getConstructOrientationForward())gd=vec3(core.getConstructWorldOrientationForward())elseif ga==axisCommandId.vertical then gc=vec3(core.getConstructOrientationUp())gd=vec3(core.getConstructWorldOrientationUp())elseif ga==axisCommandId.lateral then gc=vec3(core.getConstructOrientationRight())gd=vec3(core.getConstructWorldOrientationRight())else return vec3()end;local ge=vec3(core.getWorldGravity())local gf=ge:dot(gd)local gg=vec3(core.getWorldAirFrictionAcceleration())local gh=gg:dot(gd)local gi=vec3(core.getVelocity())local gj=gi:dot(gc)local gk=gb*constants.kph2m;if targetSpeedPID2==nil then targetSpeedPID2=pid.new(10,0,10.0)end;targetSpeedPID2:inject(gk-gj)local gl=targetSpeedPID2:get()local gm=(gl-gh-gf)*gd;return gm end;function composeAxisAccelerationFromTargetSpeed(ga,gb)local gc=vec3()local gd=vec3()if ga==axisCommandId.longitudinal then gc=vec3(core.getConstructOrientationForward())gd=vec3(core.getConstructWorldOrientationForward())elseif ga==axisCommandId.vertical then gc=vec3(core.getConstructOrientationUp())gd=vec3(core.getConstructWorldOrientationUp())elseif ga==axisCommandId.lateral then gc=vec3(core.getConstructOrientationRight())gd=vec3(core.getConstructWorldOrientationRight())else return vec3()end;local ge=vec3(core.getWorldGravity())local gf=ge:dot(gd)local gg=vec3(core.getWorldAirFrictionAcceleration())local gh=gg:dot(gd)local gi=vec3(core.getVelocity())local gj=gi:dot(gc)local gk=gb*constants.kph2m;if targetSpeedPID==nil then targetSpeedPID=pid.new(10,0,10.0)end;targetSpeedPID:inject(gk-gj)local gl=targetSpeedPID:get()local gm=(gl-gh-gf)*gd;return gm end;function Atlas()return{[0]={[0]={GM=0,bodyId=0,center={x=0,y=0,z=0},name='Space',planetarySystemId=0,radius=0,hasAtmosphere=false,gravity=0,noAtmosphericDensityAltitude=0,surfaceMaxAltitude=0},[2]={name="Alioth",description="Alioth is the planet selected by the arkship for landfall; it is a typical goldilocks planet where humanity may rebuild in the coming decades. The arkship geological survey reports mountainous regions alongside deep seas and lush forests. This is where it all starts.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.9401,atmosphericEngineMaxAltitude=5580,biosphere="Forest",classification="Mesoplanet",bodyId=2,GM=157470826617,gravity=1.0082568597356114,fullAtmosphericDensityMaxAltitude=-10,habitability="High",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=6272,numSatellites=2,positionFromSun=2,center={x=-8,y=-8,z=-126303},radius=126067.8984375,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=3410,surfaceArea=199718780928,surfaceAverageAltitude=200,surfaceMaxAltitude=1100,surfaceMinAltitude=-330,systemZone="High",territories=259472,type="Planet",waterLevel=0,planetarySystemId=0},[21]={name="Alioth Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=21,GM=2118960000,gravity=0.24006116402380084,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=457933,y=-1509011,z=115524},radius=30000,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=0,surfaceArea=11309733888,surfaceAverageAltitude=140,surfaceMaxAltitude=200,surfaceMinAltitude=10,systemZone=nil,territories=14522,type="",waterLevel=nil,planetarySystemId=0},[22]={name="Alioth Moon 4",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=22,GM=2165833514,gravity=0.2427018259886451,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=-1692694,y=729681,z=-411464},radius=30330,safeAreaEdgeAltitude=500000,size="L",spaceEngineMinAltitude=0,surfaceArea=11559916544,surfaceAverageAltitude=-15,surfaceMaxAltitude=-5,surfaceMinAltitude=-50,systemZone=nil,territories=14522,type="",waterLevel=nil,planetarySystemId=0},[5]={name="Feli",description="Feli is easily identified by its massive and deep crater. Outside of the crater, the arkship geological survey reports a fairly bland and uniform planet, it also cannot explain the existence of the crater. Feli is particular for having an extremely small atmosphere, allowing life to develop in the deeper areas of its crater but limiting it drastically on the actual surface.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.5488,atmosphericEngineMaxAltitude=66725,biosphere="Barren",classification="Mesoplanet",bodyId=5,GM=16951680000,gravity=0.4801223280476017,fullAtmosphericDensityMaxAltitude=30,habitability="Low",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=78500,numSatellites=1,positionFromSun=5,center={x=-43534464,y=22565536,z=-48934464},radius=41800,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=42800,surfaceArea=21956466688,surfaceAverageAltitude=18300,surfaceMaxAltitude=18500,surfaceMinAltitude=46,systemZone="Low",territories=27002,type="Planet",waterLevel=nil,planetarySystemId=0},[50]={name="Feli Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=50,GM=499917600,gravity=0.11202853997062348,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=-43902841.78,y=22261034.7,z=-48862386},radius=14000,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=0,surfaceArea=2463008768,surfaceAverageAltitude=800,surfaceMaxAltitude=900,surfaceMinAltitude=0,systemZone=nil,territories=3002,type="",waterLevel=nil,planetarySystemId=0},[120]={name="Ion",description="Ion is nothing more than an oversized ice cube frozen through and through. It is a largely inhospitable planet due to its extremely low temperatures. The arkship geological survey reports extremely rough mountainous terrain with little habitable land.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.9522,atmosphericEngineMaxAltitude=10480,biosphere="Ice",classification="Hypopsychroplanet",bodyId=120,GM=7135606629,gravity=0.36009174603570127,fullAtmosphericDensityMaxAltitude=-30,habitability="Average",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=17700,numSatellites=2,positionFromSun=12,center={x=2865536.7,y=-99034464,z=-934462.02},radius=44950,safeAreaEdgeAltitude=500000,size="XS",spaceEngineMinAltitude=6410,surfaceArea=25390383104,surfaceAverageAltitude=500,surfaceMaxAltitude=1300,surfaceMinAltitude=250,systemZone="Average",territories=32672,type="Planet",waterLevel=nil,planetarySystemId=0},[121]={name="Ion Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=121,GM=106830900,gravity=0.08802242599860607,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=2472916.8,y=-99133747,z=-1133582.8},radius=11000,safeAreaEdgeAltitude=500000,size="XS",spaceEngineMinAltitude=0,surfaceArea=1520530944,surfaceAverageAltitude=100,surfaceMaxAltitude=200,surfaceMinAltitude=3,systemZone=nil,territories=1922,type="",waterLevel=nil,planetarySystemId=0},[122]={name="Ion Moon 2",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=122,GM=176580000,gravity=0.12003058201190042,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=2995424.5,y=-99275010,z=-1378480.7},radius=15000,safeAreaEdgeAltitude=500000,size="XS",spaceEngineMinAltitude=0,surfaceArea=2827433472,surfaceAverageAltitude=-1900,surfaceMaxAltitude=-1400,surfaceMinAltitude=-2100,systemZone=nil,territories=3632,type="",waterLevel=nil,planetarySystemId=0},[9]={name="Jago",description="Jago is a water planet. The large majority of the planet's surface is covered by large oceans dotted by small areas of landmass across the planet. The arkship geological survey reports deep seas across the majority of the planet with sub 15 percent coverage of solid ground.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.9835,atmosphericEngineMaxAltitude=9695,biosphere="Water",classification="Mesoplanet",bodyId=9,GM=18606274330,gravity=0.5041284298678057,fullAtmosphericDensityMaxAltitude=-90,habitability="Very High",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=10900,numSatellites=0,positionFromSun=9,center={x=-94134462,y=12765534,z=-3634464},radius=61590,safeAreaEdgeAltitude=500000,size="XL",spaceEngineMinAltitude=5900,surfaceArea=47668367360,surfaceAverageAltitude=0,surfaceMaxAltitude=1200,surfaceMinAltitude=-500,systemZone="Very High",territories=60752,type="Planet",waterLevel=0,planetarySystemId=0},[100]={name="Lacobus",description="Lacobus is an ice planet that also features large bodies of water. The arkship geological survey reports deep oceans alongside a frozen and rough mountainous environment. Lacobus seems to feature regional geothermal activity allowing for the presence of water on the surface.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.7571,atmosphericEngineMaxAltitude=11120,biosphere="Ice",classification="Psychroplanet",bodyId=100,GM=13975172474,gravity=0.45611622622739767,fullAtmosphericDensityMaxAltitude=-20,habitability="Average",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=12510,numSatellites=3,positionFromSun=10,center={x=98865536,y=-13534464,z=-934461.99},radius=55650,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=6790,surfaceArea=38917074944,surfaceAverageAltitude=800,surfaceMaxAltitude=1660,surfaceMinAltitude=250,systemZone="Average",territories=50432,type="Planet",waterLevel=0,planetarySystemId=0},[102]={name="Lacobus Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=102,GM=444981600,gravity=0.14403669598391783,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=99180968,y=-13783862,z=-926156.4},radius=18000,safeAreaEdgeAltitude=500000,size="XL",spaceEngineMinAltitude=0,surfaceArea=4071504128,surfaceAverageAltitude=150,surfaceMaxAltitude=300,surfaceMinAltitude=10,systemZone=nil,territories=5072,type="",waterLevel=nil,planetarySystemId=0},[103]={name="Lacobus Moon 2",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=103,GM=211503600,gravity=0.11202853997062348,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=99250052,y=-13629215,z=-1059341.4},radius=14000,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=0,surfaceArea=2463008768,surfaceAverageAltitude=-1380,surfaceMaxAltitude=-1280,surfaceMinAltitude=-1880,systemZone=nil,territories=3002,type="",waterLevel=nil,planetarySystemId=0},[101]={name="Lacobus Moon 3",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=101,GM=264870000,gravity=0.12003058201190042,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=98905288.17,y=-13950921.1,z=-647589.53},radius=15000,safeAreaEdgeAltitude=500000,size="L",spaceEngineMinAltitude=0,surfaceArea=2827433472,surfaceAverageAltitude=500,surfaceMaxAltitude=820,surfaceMinAltitude=3,systemZone=nil,territories=3632,type="",waterLevel=nil,planetarySystemId=0},[1]={name="Madis",description="Madis is a barren wasteland of a rock; it sits closest to the sun and temperatures reach extreme highs during the day. The arkship geological survey reports long rocky valleys intermittently separated by small ravines.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.8629,atmosphericEngineMaxAltitude=7165,biosphere="Barren",classification="hyperthermoplanet",bodyId=1,GM=6930729684,gravity=0.36009174603570127,fullAtmosphericDensityMaxAltitude=220,habitability="Low",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=8050,numSatellites=3,positionFromSun=1,center={x=17465536,y=22665536,z=-34464},radius=44300,safeAreaEdgeAltitude=500000,size="XS",spaceEngineMinAltitude=4480,surfaceArea=24661377024,surfaceAverageAltitude=750,surfaceMaxAltitude=850,surfaceMinAltitude=670,systemZone="Low",territories=30722,type="Planet",waterLevel=nil,planetarySystemId=0},[10]={name="Madis Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=10,GM=78480000,gravity=0.08002039003323584,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=17448118.224,y=22966846.286,z=143078.82},radius=10000,safeAreaEdgeAltitude=500000,size="XL",spaceEngineMinAltitude=0,surfaceArea=1256637056,surfaceAverageAltitude=210,surfaceMaxAltitude=420,surfaceMinAltitude=0,systemZone=nil,territories=1472,type="",waterLevel=nil,planetarySystemId=0},[11]={name="Madis Moon 2",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=11,GM=237402000,gravity=0.09602446196397631,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=17194626,y=22243633.88,z=-214962.81},radius=12000,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=0,surfaceArea=1809557376,surfaceAverageAltitude=-700,surfaceMaxAltitude=300,surfaceMinAltitude=-2900,systemZone=nil,territories=1922,type="",waterLevel=nil,planetarySystemId=0},[12]={name="Madis Moon 3",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=12,GM=265046609,gravity=0.12003058201190042,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=17520614,y=22184730,z=-309989.99},radius=15000,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=0,surfaceArea=2827433472,surfaceAverageAltitude=700,surfaceMaxAltitude=1100,surfaceMinAltitude=0,systemZone=nil,territories=3632,type="",waterLevel=nil,planetarySystemId=0},[26]={name="Sanctuary",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.9666,atmosphericEngineMaxAltitude=6935,biosphere="",classification="",bodyId=26,GM=68234043600,gravity=1.0000000427743831,fullAtmosphericDensityMaxAltitude=-30,habitability="",hasAtmosphere=true,isSanctuary=true,noAtmosphericDensityAltitude=7800,numSatellites=0,positionFromSun=0,center={x=-1404835,y=562655,z=-285074},radius=83400,safeAreaEdgeAltitude=0,size="L",spaceEngineMinAltitude=4230,surfaceArea=87406149632,surfaceAverageAltitude=80,surfaceMaxAltitude=500,surfaceMinAltitude=-60,systemZone=nil,territories=111632,type="",waterLevel=0,planetarySystemId=0},[6]={name="Sicari",description="Sicari is a typical desert planet; it has survived for millenniums and will continue to endure. While not the most habitable of environments it remains a relatively untouched and livable planet of the Alioth sector. The arkship geological survey reports large flatlands alongside steep plateaus.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.897,atmosphericEngineMaxAltitude=7725,biosphere="Desert",classification="Mesoplanet",bodyId=6,GM=10502547741,gravity=0.4081039739797361,fullAtmosphericDensityMaxAltitude=-625,habitability="Average",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=8770,numSatellites=0,positionFromSun=6,center={x=52765536,y=27165538,z=52065535},radius=51100,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=4480,surfaceArea=32813432832,surfaceAverageAltitude=130,surfaceMaxAltitude=220,surfaceMinAltitude=50,systemZone="Average",territories=41072,type="Planet",waterLevel=nil,planetarySystemId=0},[7]={name="Sinnen",description="Sinnen is a an empty and rocky hell. With no atmosphere to speak of it is one of the least hospitable planets in the sector. The arkship geological survey reports mostly flatlands alongside deep ravines which look to have once been riverbeds. This planet simply looks to have dried up and died, likely from solar winds.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.9226,atmosphericEngineMaxAltitude=10335,biosphere="Desert",classification="Mesoplanet",bodyId=7,GM=13033380591,gravity=0.4401121421448438,fullAtmosphericDensityMaxAltitude=-120,habitability="Average",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=11620,numSatellites=1,positionFromSun=7,center={x=58665538,y=29665535,z=58165535},radius=54950,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=6270,surfaceArea=37944188928,surfaceAverageAltitude=317,surfaceMaxAltitude=360,surfaceMinAltitude=23,systemZone="Average",territories=48002,type="Planet",waterLevel=nil,planetarySystemId=0},[70]={name="Sinnen Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=70,GM=396912600,gravity=0.1360346539426409,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=58969616,y=29797945,z=57969449},radius=17000,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=0,surfaceArea=3631681280,surfaceAverageAltitude=-2050,surfaceMaxAltitude=-1950,surfaceMinAltitude=-2150,systemZone=nil,territories=4322,type="",waterLevel=nil,planetarySystemId=0},[110]={name="Symeon",description="Symeon is an ice planet mysteriously split at the equator by a band of solid desert. Exactly how this phenomenon is possible is unclear but some sort of weather anomaly may be responsible. The arkship geological survey reports a fairly diverse mix of flat-lands alongside mountainous formations.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.9559,atmosphericEngineMaxAltitude=6920,biosphere="Ice, Desert",classification="Hybrid",bodyId=110,GM=9204742375,gravity=0.3920998898971822,fullAtmosphericDensityMaxAltitude=-30,habitability="High",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=7800,numSatellites=0,positionFromSun=11,center={x=14165536,y=-85634465,z=-934464.3},radius=49050,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=4230,surfaceArea=30233462784,surfaceAverageAltitude=39,surfaceMaxAltitude=450,surfaceMinAltitude=126,systemZone="High",territories=38882,type="Planet",waterLevel=nil,planetarySystemId=0},[4]={name="Talemai",description="Talemai is a planet in the final stages of an Ice Age. It seems likely that the planet was thrown into tumult by a cataclysmic volcanic event which resulted in its current state. The arkship geological survey reports large mountainous regions across the entire planet.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.8776,atmosphericEngineMaxAltitude=9685,biosphere="Barren",classification="Psychroplanet",bodyId=4,GM=14893847582,gravity=0.4641182439650478,fullAtmosphericDensityMaxAltitude=-78,habitability="Average",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=10890,numSatellites=3,positionFromSun=4,center={x=-13234464,y=55765536,z=465536},radius=57500,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=5890,surfaceArea=41547563008,surfaceAverageAltitude=580,surfaceMaxAltitude=610,surfaceMinAltitude=520,systemZone="Average",territories=52922,type="Planet",waterLevel=nil,planetarySystemId=0},[42]={name="Talemai Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=42,GM=264870000,gravity=0.12003058201190042,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=-13058408,y=55781856,z=740177.76},radius=15000,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=0,surfaceArea=2827433472,surfaceAverageAltitude=720,surfaceMaxAltitude=850,surfaceMinAltitude=0,systemZone=nil,territories=3632,type="",waterLevel=nil,planetarySystemId=0},[40]={name="Talemai Moon 2",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=40,GM=141264000,gravity=0.09602446196397631,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=-13503090,y=55594325,z=769838.64},radius=12000,safeAreaEdgeAltitude=500000,size="S",spaceEngineMinAltitude=0,surfaceArea=1809557376,surfaceAverageAltitude=250,surfaceMaxAltitude=450,surfaceMinAltitude=0,systemZone=nil,territories=1922,type="",waterLevel=nil,planetarySystemId=0},[41]={name="Talemai Moon 3",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=41,GM=106830900,gravity=0.08802242599860607,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=-12800515,y=55700259,z=325207.84},radius=11000,safeAreaEdgeAltitude=500000,size="XS",spaceEngineMinAltitude=0,surfaceArea=1520530944,surfaceAverageAltitude=190,surfaceMaxAltitude=400,surfaceMinAltitude=0,systemZone=nil,territories=1922,type="",waterLevel=nil,planetarySystemId=0},[8]={name="Teoma",description="[REDACTED] The arkship geological survey [REDACTED]. This planet should not be here.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.7834,atmosphericEngineMaxAltitude=5580,biosphere="Forest",classification="Mesoplanet",bodyId=8,GM=18477723600,gravity=0.48812434578525177,fullAtmosphericDensityMaxAltitude=15,habitability="High",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=6280,numSatellites=0,positionFromSun=8,center={x=80865538,y=54665536,z=-934463.94},radius=62000,safeAreaEdgeAltitude=500000,size="L",spaceEngineMinAltitude=3420,surfaceArea=48305131520,surfaceAverageAltitude=700,surfaceMaxAltitude=1100,surfaceMinAltitude=-200,systemZone="High",territories=60752,type="Planet",waterLevel=0,planetarySystemId=0},[3]={name="Thades",description="Thades is a scorched desert planet. Perhaps it was once teaming with life but now all that remains is ash and dust. The arkship geological survey reports a rocky mountainous planet bisected by a massive unnatural ravine; something happened to this planet.",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0.03552,atmosphericEngineMaxAltitude=32180,biosphere="Desert",classification="Thermoplanet",bodyId=3,GM=11776905000,gravity=0.49612641213015557,fullAtmosphericDensityMaxAltitude=150,habitability="Low",hasAtmosphere=true,isSanctuary=false,noAtmosphericDensityAltitude=32800,numSatellites=2,positionFromSun=3,center={x=29165536,y=10865536,z=65536},radius=49000,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=21400,surfaceArea=30171856896,surfaceAverageAltitude=13640,surfaceMaxAltitude=13690,surfaceMinAltitude=370,systemZone="Low",territories=38882,type="Planet",waterLevel=nil,planetarySystemId=0},[30]={name="Thades Moon 1",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=30,GM=211564034,gravity=0.11202853997062348,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=29214402,y=10907080.695,z=433858.2},radius=14000,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=0,surfaceArea=2463008768,surfaceAverageAltitude=60,surfaceMaxAltitude=300,surfaceMinAltitude=0,systemZone=nil,territories=3002,type="",waterLevel=nil,planetarySystemId=0},[31]={name="Thades Moon 2",description="",antiGravMinAltitude=1000,atmosphericDensityAboveSurface=0,atmosphericEngineMaxAltitude=0,biosphere="",classification="",bodyId=31,GM=264870000,gravity=0.12003058201190042,fullAtmosphericDensityMaxAltitude=0,habitability="",hasAtmosphere=false,isSanctuary=false,noAtmosphericDensityAltitude=0,numSatellites=0,positionFromSun=0,center={x=29404193,y=10432768,z=19554.131},radius=15000,safeAreaEdgeAltitude=500000,size="M",spaceEngineMinAltitude=0,surfaceArea=2827433472,surfaceAverageAltitude=70,surfaceMaxAltitude=350,surfaceMinAltitude=0,systemZone=nil,territories=3632,type="",waterLevel=nil,planetarySystemId=0}}}end;function SetupAtlas()b0=Atlas()for bB,bC in pairs(b0[0])do if aE==nil or bC.center.xaF then aF=bC.center.x end;if aG==nil or bC.center.yaH then aH=bC.center.y end end;b1=""local gn=1.1*(aF-aE)/1920;local go=1.4*(aH-aG)/1080;for bB,bC in pairs(b0[0])do local bY=960+bC.center.x/gn;local bZ=540+bC.center.y/go;b1=b1 ..''if not string.match(bC.name,"Moon")and not string.match(bC.name,"Sanctuary")and not string.match(bC.name,"Space")then b1=b1 ..""..bC.name..""end end;local cg=vec3(core.getConstructWorldPos())local bY=960+cg.x/gn;local bZ=540+cg.y/go;b1=b1 ..''b1=b1 .."You Are Here"b1=b1 ..[[]]b2=gn;b3=go;if screen_2 then screen_2.setHTML('