--orange: #ff8c3c) and applied
consistent styling across all new HUD elements to match existing design language.
right: 16px, left: 16px).map-wrap had
position: fixed; inset: 0; — almost certainly a leftover from the v3.6.5 UI relocation work —
which made it span the entire browser window instead of just the space left after the sidebar. The 3D
scene itself was rendering correctly centered on its own camera target; what was visible was only the left
portion of a full-window-wide canvas, with the sidebar painting over the rest, so the Sun and planets
appeared shifted well right of the actual center of the visible map area. Restored
.map-wrap to position: relative; flex: 1 1 auto; min-width: 0; so it's a normal
flex child of .main again, sized to the space actually available. All other map overlays
(.zoom-controls, .legend, #labelContainer, .map-hud)
already used position: absolute and re-anchor correctly now that their positioned ancestor
is sized properly again — no other changes were needed.
camR < 75) or when focusing near a body.
<div> left over from an earlier edit (immediately after the version badge) was silently
closing .bottom-left-bar, then cascading to prematurely close .map-wrap and
.main one element too early. The net effect: the sidebar ended up as a sibling of
.main instead of nested inside it, so it rendered full-width below the map instead of beside it
on desktop widths. This was a pure HTML nesting bug, not a CSS/media-query issue — the responsive
breakpoints themselves were never at fault.
YEAR_DAYS corrected from 426 to 425, and m0Deg recalibrated for all six planets
using direct in-game Mean Anomaly readings taken ~15 years apart, cross-validated to within 0.01° per
planet. Orbital periods and orientDeg values were independently confirmed already correct (via Kepler's
third law and self-consistent Argument-of-Periapsis/LAN readings) and did not need to change. New m0Deg
values: Moho 124.90, Eve 314.44, Duna 348.60, Dres 110.74, Jool 334.08, Eeloo 158.80 (previously 108.64 /
165.54 / 350.99 / 116.10 / 339.25 / 163.48).
orientDeg value and applies inclination as a simple
tilt, which is exact only when LAN is 0. Real LAN values are nonzero for every planet, so there's a small
residual (constant, not growing over time) out-of-plane position error, largest for higher-inclination
bodies like Moho (7°) and Eeloo (6.15°), negligible for Jool (1.3°). A fully correct fix would track LAN
separately with proper 3-axis rotation.kerbalist_bridge.py) cannot connect to KSP2 because the required
server-side mod is not functional.planetMeshes[focusedPlanet] || moonMeshes[focusedPlanet].Math.max(rawOrbitRadius, parentPhysicalRadius * 1.3),
and the Dres ring's inner-radius calculation now reuses this same clamped function instead of its own
separate clamp.kerbalist_bridge.py) cannot connect to KSP2 because the required
server-side mod is not functional.planetMeshes[focusedPlanet] || moonMeshes[focusedPlanet].Math.max(rawOrbitRadius, parentPhysicalRadius * 1.3),
and the Dres ring's inner-radius calculation now reuses this same clamped function instead of its own
separate clamp.kerbalist_bridge.py) cannot connect to KSP2 because the required
server-side mod is not functional.v3.0-3.4 represents a major rewrite to match KSP2's true system proportions and interactivity model. Core architecture now separates exaggerated overview (for usability at full-system zoom) from true-scale near-view (for accurate planning when zoomed in). All interactive elements (labels, right-click, camera focus) now work reliably on both planets and moons. Orbital epoch synchronization ensures Kerbalist and KSP2 are in sync for mission planning.
theta = trueAnomaly + orientDeg, with true anomaly related to mean anomaly
through the eccentric anomaly via Kepler's equation). Verified numerically against the app's own
stateAt() function - all six planets reproduce their observed in-game phase angles exactly.
Verification: All six planets, when run through the app's own eccentric-orbit position formula, reproduce their observed KSP2 Target-panel phase angles to within 0.01°.
Verification: Computed phase angle (Eeloo relative to Kerbin) at the reference UT now equals -16.90°, matching the KSP2 Target panel reading exactly.
Synchronization Method:
n = 2π / periodm0 = θ_observed - (n × UT)Result:
When Kerbalist is set to the reference UT, all planets appear at their actual in-game positions:
✓ Perfect KSP2 alignment: Planet positions match game state at reference UT
✓ Accurate mission planning: Transfer calculations correspond to real in-game windows
✓ Consistent tool-game experience: Plan in Kerbalist, execute in KSP2, arrive as predicted
✓ Simplified workflow: No more manual adjustment for orbital desynchronization
lowOrbitVelocity × 1.2 (velocity matching + circularization). Removed complex
compensation factors.(lowOrbitVelocity - surfaceVelocity) × 1.5. Uses actual moon gravitational parameters instead
of escape velocity estimates.
Moon Gravitational Parameters (added to all moons):
Architecture Improvements:
All changes are fully backwards compatible:
1.5 × sqrt(μ / r_orbit) to
0.3 × escape_velocity, preventing unrealistic values for small moons.
0.4 × escape_velocity (moons) and
0.5 × escape_velocity (planets), providing more realistic estimates across gravity variations.
moonEscapeVelocity = sqrt(2 × μ_moon / moonRadius) with 0.3× factor for insertion, 0.4× for
moon landing.
planetEscapeVelocity = sqrt(2 × μ_planet / planetRadius) with 0.5× factor for
atmospheric/gravity losses.
V_insertion = 1.5 × sqrt(μ_moon / r_orbit)
where orbit altitude = max(20% of moon radius, 10km) to estimate capture and circularization burns.- Mun) to distinguish them from planets