-
Notifications
You must be signed in to change notification settings - Fork 70
Change Log
-
Principia would crash when deleting a flight plan immediately after creating it; this has been fixed by not creating a flight optimizer on deletion (#3819).
-
The flight plan orbit analyzer would sometimes disappear or show an empty window; this has been fixed by correctly sharing flight plans among optimizers (#3821).
-
Principia would sometimes crash when computing the point where the prediction collides with a celestial; this was due to a confusion between latitude and longitude in the evaluation of the terrain altitude, and has been fixed (#3826).
For more details see all 15 pull requests between Julia and Jordan.
-
Principia used to consume lots of CPU when vessels with a high part count were loaded. This has been improved by optimizing code and data structures in both the C++ and the C# code. Notably, disabling Unity's
autoSyncTransforms
resulted in huge savings. Thanks to @gotmachine for suggesting this and other improvements. (#3230.) -
In some limited circumstances, Principia now displays collisions between the prediction and the surface of a celestial at the right location, when seen in the surface frame. This is still work-in-progress, so the collision marker is sometimes at an odd place (e.g., when "exiting" a mountain) or completely missing.
-
Principia used to crash if, during a rendezvous, the target vessel disappeared (e.g., because it was destroyed); this has been fixed by being more defensive in the computation of the closest approach markers (#3636).
-
Flight plan rebasing was broken when optimization was introduced; also, the
Inertially fixed
toggle was not obeyed during optimization; this has been fixed by rebuilding the optimizer object whenever the flight plan is changed by a user action (#3806).
For more details see all 15 pull requests between Jordan and 賈憲.
- Principia now includes a mechanism for local optimization of manœuvres that helps with tuning flybys. The user can specify in the flight planner the desired altitude and (optionally) inclination of a flyby. Starting from a reasonably good trajectory, the optimizer then attempts to tune the manœuvre to reach (or approach) the target altitude and inclination, while minimizing Δv. This is entirely best-effort and the optimizer may not be able to do anything useful, but when it does it saves the work of tweaking the manœuvre by hand. See the documentation for details. (#3681.)
-
In circumstances where the position of celestials was not computed far enough in the future, Principia could display in the flight planner the unhelpful "error 4" message, or the barely more helpful message "try repeatedly increasing and shortening the flight plan a bit". This has been fixed by asynchronously computing the future position of celestials, and asking the user to "wait for a few moments" while that computation happens. (#3483.)
-
Principia would sometimes crash when deleting a duplicated flight plan; this has been fixed by properly isolating the coast analysers between the flight plans (#3782).
-
For orbits that are very smooth, the
+1 nodal revolution
button of the flight planner would sometimes move the manœuvre towards the past because it would compute a negative value for the nodal period; this has been fixed by ensuring that the adaptive integrator's step does not get so long that it skips multiple periods (#3569). -
When using stock aerodynamics (as opposed to FAR/FARc) vessels would sometimes spin out of control during reentry. This was first reported in May 2020 but we were never able to determine the root cause. It was reported again recently on a simpler test case, and we finally discovered that we were missing the application of the
angularDrag
computed by KSP. Properly applying it fixes wild spins. (#2519, #3697.)
For more details see all 15 pull requests between 賈憲 and 𓇹𓄟𓋴𓏲.
- Principia used to emit an
error 4
in cases where the flight plan could not be computed to the desired length; the error message has been improved (this time for real) (#3778).
The release name, being in Ancient Egyptian, is written using hieroglyphs. KSP doesn't know how to do such an advanced thing, so the name completely disappears from the UI. Apologies to the speakers of Ancient Egyptian.
For more details see all 12 pull requests between 𓇹𓄟𓋴𓏲 and Jensen.
No user-visible changes in this version as we have been laying the groundwork for a mechanism that would help optimize burns to meet certain criteria.
For more details see all 16 pull requests between Jensen and Jacobi.
-
A pinnable hover tooltip is displayed when the cursor is hovered over a manœuvre marker, emulating the stock KSP node markers; when manœuvre markers overlap stock node markers, manœuvre markers take precedence for hovering (#3716). Thanks to @al2me6 for this contribution and the next two items.
-
When a manœuvre marker is single-clicked, the flight planner opens to the corresponding burn editor (#3716).
- The Frenet trihedron for a manœuvre used to remain visible when switching from the map view to the flight view; this has been fixed by removing these markers when not in map view (#3729).
For more details see all 17 pull requests between Jacobi and 岩澤.
- The manœuvre markers (specifically their Frenet trihedra) are now draggable; this makes it possible to quickly move them in time to some position along the orbit and is more consistent with the stock behaviour; fine-tuning should be done as usual with the burn editor (#3692). Thanks to @al2me6 for this contribution.
- The
Max history length
slider used to have a large "dead zone" where moving the slider had no effect; this has been improved by reducing the size of that dead zone (#3710).
For more details see all 27 pull requests between 岩澤 and 伊藤.
-
When computing equipotentials, Principia now includes in the primary celestials all those that are inside the orbit of the secondary; this yields much better results for the outer planets (#3646).
-
When computing equipotentials, Principia used to repeatedly compute, at the same point in time, the position, velocity, acceleration, and jerk of the barycentre of the primary and secondary celestial; this is now avoided by using a cache, resulting in a speed-up of 6× for the Earth-Moon frame and 100× for the Sun-Neptune frame (#3675).
-
Principia used to emit an
error 4
in cases where the flight plan could not be computed to the desired length; the error message has been improved (#3658).
For more details see all 24 pull requests between 伊藤 and ابن الهيثم.
-
After about a year of development, a new reference frame, the rotating-pulsating reference frame, has been added. In this frame, the direction and distance between a pair of bodies is kept constant. In addition, the equipotentials around the Lagrange points are drawn. This makes it possible to plan trajectories to reach these points, or to effect low-energy transfers. (#3358)
The following animation by @al2me6 demonstrates this: with only a tiny course correction, the trajectory goes from entering through L₂ and exiting through L₁ to a ballistic capture into the Moon’s potential well:
- The computation of the angular velocity and angular acceleration of vessels in some reference frames has been incorrect since the inception of Principia, due to a confusion between spin and orbital motion; as a consequence, the laws of physics would not work the same in these frames as in inertial frames; this would manifest itself in small errors in trajectory plotting and in the Frenet frame (#3615).
- The release name, being in Arabic, is written right-to-left. KSP doesn't know how to do such an advanced thing, so it shows up inverted in the UI. Apologies to Arabic speakers. (We had the same problem with release names in Hebrew and Farsi in the past.)
For more details see all 39 pull requests between ابن الهيثم and Ὑπατία.
-
Creating a flight plan would sometimes throw a
NullReferenceException
; while this didn't cause trouble, it would confuse users who look at logs or trace exceptions; this has been fixed by properly handling flight plans without burns (#3593). -
When extending the prediction of the target vessel during a rendezvous, Principia could trigger an integer overflow that would result in a prediction of length 0 and a crash; this has been fixed by limiting the prediction of the target vessels to 2²⁴ steps (#3593).
For more details see all 36 pull requests between Ὑπατία and Hurwitz.
- Building on foundational work done in Householder, the orbit analyser now displays the local time of the nodes, and is now capable of identifying sun-synchronous orbits. For performance reasons, this analysis is only performed for celestials that have a period less than 20 years (don't try to be sun-synchronous around Pluto).
- Principia would sometimes become unresponsive on scene changes because of a deadlock triggered by a complex race condition between recomputing the past (so-called reanimation) and responding to user actions; this has been fixed by properly completing the pending reanimations instead of cancelling them (3520).
For more details see all 37 pull requests between Hurwitz and Householder.
No user-visible changes in this version as we have been laying the groundwork for future improvements. In particular, the orbit analyser has been completely rewritten with the goal of making it work with celestials (3493). Please report any bug or oddity that you may encounter with orbit analysis.
For more details see all 15 pull requests between Householder and Horner.
-
Support for KSP 1.12.5 has been added: this version supports 1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.11.1, 1.11.2, 1.12.2, 1.12.3, 1.12.4, and 1.12.5.
-
The manœvre editor used to reject an input that had a figure space to the left of a sign; this made it inconvenient to enter a negative Δv; this has been fixed by ignoring leading figure spaces when parsing numbers (3480).
For more details see all 21 pull requests between Horner and l’Hôpital.
-
Double-clicking digits in the
t initial
field of the manœvre editor used to select both digits and their unit, so typing would delete the unit along with the digits, which had to be retyped to pass validation; this has been fixed so that only the digits are selected (3475). -
While attempting rendezvous in a target reference frame, the flight plan would only render a limited time into the future despite setting the plan length to a large value; this has been fixed by extended the (hidden) prediction of the target vessel when the flight plan is extended (3477).
-
The manœvre editor used to show the
+
sign in the Δv fields when their value was 0; this made it inconvenient to enter a negative Δv since the sign had to be edited separately from the value; this has been improved by not showing a sign when the value is 0 (3480).
For more details see all 13 pull requests between l’Hôpital and Ἱπποκράτης.
- Support for KSP 1.12.4 has been added: this version supports 1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.11.1, 1.11.2, 1.12.2, 1.12.3, and 1.12.4.
- The orbit analyzer used to throw an exception when computing a recurrence of 0; this has been fixed by detecting this case and showing in the UI that the recurrence could not be computed (3273).
For more details see all 11 pull requests between Ἱπποκράτης and Ἱππίας.
- When patched conics are set to be displayed, which allows for comparison of the Principia trajectories with the stock trajectories, the conics are suppressed in some reference frames wherein they would then be misleading (3441).
For more details see all 5 pull requests between Ἱππίας and Ἵππασος.
-
A memory leak identified by the developers of KSPCommunityFixes has been fixed by properly unregistering C# delegates (3387).
-
The initialization of graphic meshes used to cause Unity to emit errors in debug mode; this has been fixed by initializing the meshes lazily the first time they are used (3436).
-
When using Principia with the stock game, it would sometimes fail to stabilize the Jool system, resulting in an "apocalypse"; this has been fixed by retaining the initial rotations of celestials and using it when fingerprinting the solar system (3438).
For more details see all 8 pull requests between Ἵππασος and Ἵππαρχος.
-
Inactive thrusters were sometimes considered in the force computation, leading to overestimations of the thrust; this has been fixed by only considering the thrusters that are active (3419). Thanks to @RCrockford for this contribution.
-
The tolerance and number of steps in the flight plan UI have been fixed to be consistent with those of the main window: the tolerance is now a power of 10 metres, and the number of steps is always a power of 4 (3395).
-
The various axes used by Principia have been made consistent: if the active vessel is in a sufficiently Keplerian orbit, the osculating elements given by the stock game (and surfaced, e.g., by MechJeb) will roughly be consistent with the elements given by the orbit analyser (3424). Thanks to @rnlahaye for spotting a bug in that change shortly before the release.
For more details see all 21 pull requests between Ἵππαρχος and Hilbert.
-
Many changes have been made to the flight plan:
- When editing or hovering over the Δv or manœuvre timing text fields, arrows are now shown on a digit to indicate that it can be adjusted either by using the scroll wheel or by using the
↑
or↓
keys. - More decimal digits have been added to these fields, to make it easier to fine-tune burns. The number of digits shown is the maximum that can be accurately represented by the Principia flight plan; since the flight plan integrates burns over time, fewer digits are available at higher accelerations. (#3382.)
- Buttons have been added to move manœuvres in orbit forward or backward in time by one nodal revolution (#2517).
- Support for managing multiple flight plans for a single vessel has been added. This makes it possible to explore multiple alternatives, or to retain a copy of the original plan when rebasing to account for errors in execution. (#3382).
- When editing or hovering over the Δv or manœuvre timing text fields, arrows are now shown on a digit to indicate that it can be adjusted either by using the scroll wheel or by using the
-
A
Declutter
button has been added in map view to hide uninteresting markers and celestial trajectories (#2578)(#3394). This button hides:- any markers (apsides, nodes, etc.) that have not been pinned (markers can be pinned by right-clicking on them);
- the trajectories of any celestials that are not pinned in the plotting frame selector.
-
The UI elements that control the predictions settings have been made a bit more compact: they now fit on a single line, and the tolerance is more readable (#3396).
Thanks to @Al2Me6 for testing several iterations leading up to this release and reporting bugs therein.
-
A longstanding problem where the camera was spinning wildly when hovering over the UI of other mods has been fixed by properly applying camera rotations when the camera controls are locked (#3390).
-
The management of markers (periapsides, apoapsides, nodes, etc.) in the map view has been improved to fix glitches in their naming (#2196) and to avoid pinned markers from disappearing as the trajectory changes (#3157).
For more details see all 14 pull requests between Hilbert and Hesse.
- All Principia windows now have a close button (a cross at the top-right corner of the window); note that closing the main window also closes all the auxiliary windows (#2295).
- Principia would sometimes generate a save that it would later refuse to reload with the error
A protocol message was rejected because it was too big (more than 536870912 bytes)
. This has been fixed by (1) increasing the size limit to 2 GiB, and (2) changing the way that vessel trajectories are structured so that frequent small burns (e.g., due to the RCS) do not result in numerous trajectory segments. (#3375.)
For more details see all 12 pull requests between Hesse and Ἥρων.
No user-visible changes in this version as we have been investigating the possibility to compute and display the equipotential lines (#3358).
For more details see all 14 pull requests between Ἥρων and Hermite.
(The build of this release for MacOS has been quite a pain; thanks to @rnlahaye for his assistance when testing the build.)
-
The rotation of vessels is now based on Davenport's Q method instead of a heuristic; this is invisible in most circumstances, but might yield more realistic physical effects for vessels on which large forces (notably, aerodynamic) are exerted (#3344).
-
The computations related to the trajectories of celestials have been improved to reduce the need for locking and to use faster numerical methods; this should yield a speed improvement of roughly 5% (#3346, #3347).
- Principia would sometimes crash when two parts were colliding; this was fixed by skipping collision processing for parts that are about to be destroyed by KSP (#3219).
For more details see all 7 pull requests between Hermite and Heine.
- The checkpointing code, which is used to record data used for rebuilding history, has been significantly optimized, notably by eliminating unneeded memory copies (#3340). Thanks to @rnlahaye for this contribution.
- Principia would sometimes crash when switching to map view or when selecting a vessel in the tracking station. This was due to some missing data in the saves in situations involving frequent collisions. This has been fixed, so the bug won't recur in new saves, but existing saves will remain faulty (#3332, #3341).
For more details see all 4 pull requests between Heine and Hausdorff.
- The performance of operations on trajectories on macOS was improved similarly to what had been done in Goldbach in #2899: #3336. Thanks to @rnlahaye for this contribution.
No other user-visible changes in this version as we have been working on some cleanups and investigating bugs.
For more details see all 15 pull requests between Hausdorff and हरीश चंद्र.
-
Support for KSP 1.12.3 has been added: this version supports 1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.11.1, 1.11.2, 1.12.2 and 1.12.3.
-
The trajectories of vessels are now stored in a compact manner to reduce the time taken by scene changes. Specifically, the recent past of the trajectory is explicitly stored in the save, up to about 2 MiB per vessel. The more distant past is reconstructed asynchronously by segment if the user chooses a long history length: burns are explicitly stored, and coasts are recomputed. Note that this optimization does not apply to trajectories present in existing saves: while their future will use the compact representation, their past is not "compactified" because it doesn't contain enough information to do so. (#2400.)
-
The flight plans are now reconstructed lazily, and orbit analyzers for the flight plan coasts are only started if necessary. This means that, in a game with many vessels, only the vessels which are made active (by clicking on them) have their flight plan recomputed. This speeds up scene changes as there is no longer a need to do expensive computations to reanalyze all the flight plans immediately after a scene change. (#2979, #3211.)
-
The set of celestials whose trajectory is plotted is now determined more cleverly: there is no point in plotting the orbit of Phobos (or of the Moon, for that matter) if the camera is near Neptune. The orbits of natural satellites are only plotted if they would be actually visible, i.e., would be more than 1 pixel away from the orbit of their parent body. (#3035.)
-
Trajectories are now plotted using Unity meshes on the GPU. This is faster than using the CPU and it has the benefit that trajectories are properly hidden by mountains. (#3035.)
-
Some operations on vessel trajectories have been optimized. Thanks to @rnlahaye for another valuable contribution.
- The release name is incorrectly rendered in the UI by Unity’s text framework, with चंद्र appearing as चंद्र. Apologies to users of the Devanagari script.
Thanks to @Al2Me6, @lpgagnon, @TwistedGiraffe aka Quadrupole, and @scimas for testing numerous pre-releases and reporting bugs.
For more details see all 33 pull requests between हरीश चंद्र and Hardy.
- Russian localization has been added. Thanks to @von-Kerman for contributing the translation and answering an endless stream of questions on the grammar of Russian.
-
There was a long-standing issue with the camera orientation introduced in Fréchet: the camera would rotate in the plotting frame if the active vessel was at a low enough altitude: this has been fixed by compensating for KSP’s compensation of its planetarium rotation (#3235).
-
The UI of the reference frame selector was garbled in languages not supported by Principia (labels would show up as
_Selector_
); this has been fixed by using the localized celestial names (#3245). -
The description of the GSE (Geocentric Solar Ecliptic) reference frame in English was garbled; this has been fixed (#3236).
-
Principia would sometimes crash when trying to create styles outside the
OnGUI
method; this would only happen if the main Principia window was not visible; it has been fixed by creating the styles lazily (#3239).
For more details see all 36 pull requests between Hardy and Hamilton.
-
The way that some parts of the UI (notably the flight planner) were drawn was causing Unity to leak memory, leading to unpleasant visual anomalies and crashes; this has been fixed by changing the way that Unity styles are constructed (#3064).
-
The game would slow down noticeably when some of the more text-heavy windows were visible; this has been fixed by caching the result of calling the KSP/Lingoona localization libraries (#3149).
- The implementation of vessel trajectories has been completely rewritten in this release. This is foundational work for future improvements. We also expect that it should slightly improve performance and memory usage. Thanks to @lpgagnon for testing this part of the release ahead of time and reporting what would have been a major bug therein (#3203).
For more details see all 31 pull requests between Hamilton and Halley.
No user-visible changes in this version as we have been focused on rewriting the implementation of vessel trajectories to make them more efficient and more flexible (#3136).
For more details see all 44 pull requests between Halley and Hadamard.
-
The parsing of time spans in the UI (history length, flight plan length, etc.) has been made more flexible and now accepts input where only some elements are present: it is for instance possible to write
7 d
,3h 17 s
, or5 min
(#2984). -
A mechanism has been added to inform users who download the source code of Principia instead of the binary that they are holding it wrong and to direct them to the README to download the binary (#3037).
-
In the celestial targeting UI, the name of celestials was unconditionally shown in English instead of the chosen UI language, and was preceded by an article in some cases where it should not have been; this has been fixed by using the proper localized form (#3131).
-
Principia used to use the icon colour to draw the orbits instead of the colour used by the stock game and Real Solar System; this has been fixed by picking the correct colour (#3078).
For more details see all 11 pull requests between Hadamard and Haar.
-
The reference frame selector has been revamped. It is now possible to switch between arbitrary frames in one click, and by pinning celestials and collapsing the tree, to significantly reduce the footprint of the selector window. A hovertext describes the purpose of each reference frame. Thanks to @Al2Me6 for translating the new UI to zh-CN and to @Zaikarion for linguistic help.
-
In order to better match standard terminology, the reference frame formerly known as X-Centred, Y-Aligned frame (XCYA) has been renamed to X-Y-Orbit (XYO). The X Y Barycentric frame has been removed; use X-Y-Orbit instead.
-
Celestial-specific terminology has been added; Principia will now use the term perigee for a periapsis in Earth orbit, lunar orbit for an orbit about the moon, etc.
-
The sun lens flare toggle has been removed; it had long ceased to function, and Scatterer provides eclipses that work.
-
French localization has been added.
For more details see all 37 pull requests between Haar and Grothendieck.
- Support for KSP 1.12.2 has been added: this version supports 1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.11.1, 1.11.2 and 1.12.2.
-
The Grossmann version was unable to read some ancient (pre-Cauchy) saves. This has been fixed: saves created with Cardano or later should now be readable (#3039).
-
A number of memory management problems that could lead to tiny memory leaks or inefficiencies have been fixed.
-
The Chinese localization was incorrectly using Earth-specific terms for apoapsis and periapsis; this has been corrected by using a more general terminology (#3074).
For more details see all 21 pull requests between Grothendieck and Grossmann.
- On Windows, polynomial evaluation now uses fused multiply-add instructions on processors that support it (Haswell and later, Piledriver and later). This speeds up some computations related to the trajectories of celestials by a factor of 1.5× to 2×. This change will be ported to *nix in a later version, see #3019.
-
The game used to stutter when a vessel changed state from landed to in-flight or vice-versa; this has been fixed by making the fitting of Hermite polynomials interruptible (#3033).
-
The progress bar of the orbit analyser used to be stuck at 0% until the end of the analysis, at which point it would flash to 100%; this has been fixed by using floating-point arithmetic instead of integer arithmetic for setting the progress bar (duh!) (#3041).
For more details see all 26 pull requests between Grossmann and Gröbner.
-
Progress has been made on the problem of long scene changes. Consider a game that takes place in 2020 with RealSolarSystem. Because the origin of time in RealSolarSystem is 1950, prior to this version every scene change was involving a complete re-integration of the celestials from 1950 to 2020, which took 2-3 minutes and was blocking the UI thread.
Starting with this version, Principia performs the re-integration of celestials asynchronously. Furthermore, this computation is done backwards by segments of 180 days. This approach has two benefits:
- After a scene change, the UI becomes available quickly (seconds) and the trajectories of the celestials reappears progressively (about 1 segment per second). This make the game much more responsive at the expense of some flickering.
- It is virtually never necessary to recompute the trajectories all the way back to 1950: a user playing around 2020 will probably only display a few months of history, which should reconstruct in seconds.
Note that long vessel trajectories are still expensive to save/restore. This will be addressed in a future version. (#2400.)
-
Some operations on vessel trajectories have been optimized, with speed-ups of 3× to 5×. While the overall speed improvement is going to be smaller than that, it should make Principia measurably faster when processing long trajectories. Thanks to @rnlahaye for another valuable contribution.
- Principia would sometimes crash when decoupling vessels with FARc Mader installed. This has been traced to a vessel being close to destruction and having parts whose degrees of freedom were meaningless. This was fixed by ignoring such vessels. (#2922.)
For more details see all 42 pull requests between Gröbner and Green.
-
Principia used to crash in hard-to-reproduce scenarios involving staging, decoupling or collisions. Procedural Fairings seemed to make these crashes more frequent, but Principia was the real culprit. This had been reported several times, but could only be tracked once we had a journal: it boiled down to a bug when constructing the history of a vessel whose parts were subject to an intrinsic acceleration (#2641, #2931, #2967).
-
Switching to a vessel that didn't have a flight plan when the orbit analyser window was open would sometimes cause a crash; this has been fixed by properly destroying the orbit analyser in that case (#2974).
-
Some operations that involved the destruction of the orbit analyser took a very long time. This is a regression that was introduced in Grassmann and was visible, for instance when destroying the last manœuvre of a flight plan, when changing the duration of the orbit analyser, or simply when changing scenes. This has been fixed by making the integrators interruptible (#2957).
For more details see all 22 pull requests between Green and Grassmann.
-
Support for KSP 1.11.2 has been added: this version supports 1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.11.1 and 1.11.2.
-
The mechanism for overriding the version check (for users who want to experiment with a new version of KSP before we officially support it) has been improved and documented. As usual, we won't support installations that override the version check.
-
Some strings were missing a Chinese translation, and would consequently appear in English in a Chinese installation; this has been fixed: thanks to @WC12366 for this contribution.
- The trajectory produced by the orbit analyzer for long flight plans was previously not downsampled. This would lead to excessive (and ever-increasing) memory use. This has been fixed by downsampling them like is done for the history (#2919).
For more details see all 30 pull requests between Grassmann and Goldbach.
-
Some changes have been made to the Chinese translations to make them more idiomatic.
-
The computation of the prediction of vessels would sometimes do busy waiting and burn CPU for no good reason. Thanks to @rnlahaye for finding and fixing this issue.
-
@rnlahaye discovered that Unity installs its own handlers for storage allocation and deallocation, which involves serialization through a mutex. On macOS, mutexes are known to be very expensive, so over 80% of the CPU ended up being spent in synchronization code. This was fixed by bypassing the Unity allocator and using the system allocator directly when creating STL containers on macOS. This resulted in a 3× speedup when the game is idle, and a 50× speedup at high warp. Kudos to @rnlahaye for an amazing contribution (#2899).
- Some airplanes which behaved properly in stock were hard to fly or unstable with Principia; this has tracked to improper handling of the lever arm of the parts whose centre of mass is offset (#2808).
For more details see all 9 pull requests between Goldbach and Gödel.
-
Support for KSP 1.11.1 has been added: this version supports 1.8.1, 1.9.1, 1.10.1, 1.11.0, and 1.11.1.
-
Principia is now localizable, and supports English and Simplified Chinese. Thanks to @CindyRIng for going through our code and putting in place all the localization calls and the basis translations, and to @Zaikarion for helping with matters of linguistics. We welcome feedback on the localization or contributions regarding other languages.
-
Principia used to crash in some cases involving explosion of a nearby vessel or vessel separation; this was due to numerical instabilities in the diagonalization of the inertia tensor and has been fixed by rewriting that code to use a well-conditioned algorithm (#2853, #2866).
-
Principia used to crash when deleting a flight plan with the flight plan's orbital analyzer window opened; this has been fixed (#2862).
-
Principia would sometimes crash when editing a flight plan whose last coast was very short; this has been fixed (#2867).
For more details see all 30 pull requests between Gödel and Germain.
-
Support for KSP 1.11.0 has been added: this version supports 1.8.1, 1.9.1, 1.10.1, and 1.11.0. Please note that the behaviour of Principia in the presence of EVA construction may be unphysical and lead to reactionless motion because of the way KSP represents part changes. We will try to improve this in the future, but may be limited by the APIs exposed by KSP.
-
The orbit analyser is now integrated with the flight plan, and may be used to determine the shape of the trajectory at the end of the plan. This makes it possible to create flight plans which, if executed correctly, will put the vessel in an orbit with the desired characteristics.
-
The predicted trajectory, and also the flight plan in map view, did not update whilst a target was selected, but plotting frame was not target-centred; this has been fixed by updating all predictions simultaneously (#2824).
-
The vessel would jump a bit when Kerbals started doing an EVA. This was hardly visible, but with the introduction of EVA construction much larger mass changes are possible which made the problem more prominent. This has been fixed by correctly adjusting the position based on the Krakensbane velocity.
For more details see all 30 pull requests between Germain and Гельфонд.
-
The orbit analyzer is now always active in the background and displays a summary of its latest analysis in the
Analysis
button. To do so, it automatically detects the primary celestial body. When the orbit analysis window is open, changing the mission duration restarts the analysis, avoiding situations where the window is stuck analysing an unwanted trajectory for a long period of time. This is a step towards having ±1 revolution buttons in the flight plan. -
The colours and styles used to display the trajectories may now be configured using a ModuleManager patch. Thanks to @RCrockford for this contribution (#2816).
- Principia would occasionally crash while descending towards the surface of a body. This has been fixed by detecting trajectories that get too close to the gravitational singularity and have absurd orbital elements (#2811).
For more details see all 30 pull requests between Гельфонд and Гельфанд.
- The implementation of vessel trajectories has been optimized to make iterations cheaper by reducing heap allocations/deallocations. This brings a 5×-10× speedup on computations for which iteration is critical (drawing, finding apsides, etc.). Thanks to @rnlahaye for a very valuable contribution (#2776).
- Principia would sometimes try to compute the closest approaches between a vessel and itself, and would crash when doing so. This has been fixed by detecting this situation and exiting the computation early (#2640).
For more details see all 16 pull requests between Гельфанд and Gauss.
- Principia would sometimes crash when decoupling or destroying parts with the error
other != nullptr
. This has been fixed by properly performing inertia tensor diagonalizations for parts having near exact symmetries (#2716).
For more details see all 41 pull requests between Gauss and Gateaux.
- Support for KSP 1.10.1 has been added: this version supports 1.8.1, 1.9.1, and 1.10.1. Please note that the behaviour of Principia in the presence of comets is hard to test, so users who encounter problems when comets are present are invited to report bugs.
- Principia used to save the prediction on scene changes. However, the prediction could be quite large for interplanetary travel, and this could cause scene changes to take several minutes. This has been fixed by not saving the prediction and recomputing it after a scene change. This should make the game more responsive and should alleviate user discomfort (#2685).
For more details see all 37 pull requests between Gateaux and Galois.
-
In the flight planner, the RCS burns for multi-port thrusters are now computed using the sum of the individual thrusts rather than the average since multi-port thrusters appear to be able to deliver full thrust down any single port. Thanks to @RCrockford for this contribution (#2571).
-
It is now possible to remove manœuvres other than the last in the flight plan.
-
It is now possible to insert manœuvres at any place in the flight plan.
-
Manœuvres may now be collapsed/expanded (hidden/shown) in the flight plan. This makes it easier to edit long flight plans.
-
Rebasing a flight plan when past the end of the plan would crash Principia; this has been fixed (#2658).
-
Rebasing a flight plan would preserve the flight plan duration instead of its end time, which was inconvenient; this has been fixed by preserving the end time whenever possible (#2665).
-
When the periapsis of a trajectory was below the surface of an ocean, Principia would report a collision risk. This has been fixed to report a bona fide collision.
For more details see all 19 pull requests between Galois and Gallai.
-
Support for KSP 1.5.x, 1.6.x and 1.7.x has been removed: this version of Principia requires at least KSP 1.8.1.
-
A
Rebase
button has been added to the flight plan. This button discards past manœuvres, and sets the flight plan initial state to the current state (in terms of mass as well as position and velocity). -
The navball guidance node has been changed so that, at the end of the burn, the SAS switches to holding attitude, and MechJeb (if used) ceases burn execution and shuts down the engines.
-
A number of features have been added to the orbit analysis window:
- a warning if any of the following occur over the course of the mission:
- dropping below the nominal atmosphere height: reentry,
- dropping below the highest terrain altitude: collision risk,
- dropping below the lowest terrain altitude or, on a planet with oceans, sea level, whichever one is higher: collision;
- lowest altitude: the lowest altitude reached over the course of the mission;
- altitude of mean periapsis: the altitude corresponding to the periapsis distance itself corresponding to the mean semimajor axis and mean eccentricity;
- altitude of mean apoapsis: the altitude corresponding to the apoapsis distance itself corresponding to the mean semimajor axis and mean eccentricity;
- a warning if any of the following occur over the course of the mission:
-
The message emitted on Linux and macOS if an error is encountered while loading the Principia DLL has been made more precise.
-
Vessels would sometimes vibrate, disintegrate and send pieces flying off at absurd speeds. That has been fixed by refining the computation of the eigenvectors of the inertia tensor when two eigenvalues are very close (#2611).
-
Due to bugs in the KSP management of collisions, a Kerbal performing an EVA would sometimes still be considered part of the vessel it had just left, leading to non-physical effects. This has been fixed by changing Principia to manage the collisions itself instead of trusting KSP (#2607).
-
Parachutes were interacting poorly with Principia's handling of rotational physics, causing Kerbals to spin wildly while parachuting and to end up head down (and parachute down). This has been fixed by recomputing the angular momentum change from the angular velocity change applied by KSP (#2607).
-
Root parts with an offset centre of mass (notably the making history Mk2 capsule) would lead to jumpiness when coming out of warp, or, under some circumstances, to permanent deformation of the vessel. This has been fixed by properly taking the offset into account when the root part is at the origin (#2560).
For more details see all 32 pull requests between Gallai and Galileo.
-
Contrary to what had been announced previously, this version still supports KSP 1.5.x, 1.6.x and 1.7.x.
-
This is the last version to support KSP 1.5.x, 1.6.x and 1.7.x. The next version will only support 1.8.1 and up.
-
The flight plan window would sometimes emit the unhelpful message "The computation failed, try changing the flight plan". This has been fixed by propagating a more detailed status message from the flight plan computation to the UI (2583).
-
When a Kerbal started EVA, it would sometimes cause the vessel to jump to a different location tens of meters away (this was particularly visible if there was a second vessel in close proximity). This has been fixed by ignoring any collision between the Kerbal and the vessel until the Kerbal is ready (one or two frames). There have been reports in the past of the flight plan disappearing when a Kerbal starts EVA; this is the same underlying bug (2590).
-
Starting with Frobenius, some airplanes would be extremely hard to fly. This would happen if the vessel contained parts the centre of mass of which does not coincide with the KSP centre of the part. This has been fixed by properly taking into account the difference between these two points (2560).
- The external APIs that throw an exception in case of error now include in the exception, in addition to the status code, a short message in English detailing the circumstances of the error (2585).
For more details see all 14 pull requests between Galileo and Fuchs.
- 2607: parachuting EVA Kerbals behave unphysically (this issue was already present in Fuchs).
-
This is the last version to support KSP 1.5.x, 1.6.x and 1.7.x. The next version will only support 1.8.1 and up.
-
Principia used to only support days of 6 hours (for stock KSP) or 24 hours (for Real Solar System). It now uses the correct KSP APIs to figure out the length of the day. This makes it compatible with Kronometer and with Je Ne Sais Quoi which embeds Kronometer and has days of 12 hours (2520).
-
The manœuvre node marker on the navball used to follow the Frenet frame prior to ignition, which was not very useful for manual burns and confused MechJeb. It now shows the initial ignition orientation prior to ignition and then follows the Frenet frame during the burn. Combined with MechJeb change MuMech/MechJeb2#1264 (present in MechJeb dev builds ≥ 958), this makes it possible to execute all Principia manœuvres with MechJeb (2577).
-
The rotational bugs that were introduced in Frobenius and Fubini (uncontrolled spin-up, jerky motion, oscillations, etc.) have been traced to incorrect physics simulation by PhysX and mostly fixed. We are still aware of one contrived example where after a vessel explodes a part starts rotating wildly, and are investigating it (2519).
-
Principia would fail to start with a mysterious error message if installed in a path that includes non-ASCII characters on a system where the code page is not compatible with UTF-8. The root of the problem appears to be a Mono bug so there is not much that we can do to fix it, but we are now emitting the more understandable error message
<path> contains the non-ASCII character <c>; this is known to confuse Mono
(2548).
- Three new APIs,
CelestialGetPosition
,CelestialGetSurfacePosition
, andVesselGetPosition
have been added to allow third-party mods to access the position of celestials and vessels computed by Principia. This will be used by KerbalismContracts to correctly check the fulfilment of mission requirements in the presence of n-body physics and axial tilt (2542).
For more details see all 28 pull requests between Fuchs and Fubini.
-
Support for KSP 1.9.1 has been added: this version supports 1.5.1, 1.6.1, 1.7.x, 1.8.1 and 1.9.1. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
-
The flight plan is now automatically extended when moving forward the start time of the last manœuvre or increasing its Δv; note that for engines that have very low thrust, this may result in a very long flight plan, in which case the length will effectively be limited by the number of steps of the integrator (852).
-
The flight planner and the orbit analyser can now be displayed in the tracking station (2531).
-
The angular momentum correction introduced in Frobenius was found to create non-physical oscillations or rotations, especially when reentering the atmosphere, where large forces apply to the vessel; this has been improved by adjusting the orientation of the vessel instead of its angular velocity, which causes less disruption to the PhysX integrator, but it doesn't completely fix the bug, see below (2519).
-
Undocking two vessels would sometimes cause Principia to crash. This is a bug that has been with us for a long time, and suddenly started to bite many users in March, maybe because of changes in some other mod. It was probably triggered by large forces being applied to the vessel at the time of the uncoupling, and has been fixed by skipping the points computed by the adaptive step integrator that turn out to be in the past (2490, 2507).
-
Principia would sometimes crash when parts were about to be destroyed by KSP; this has been fixed by ignoring the parts whose positions, velocities, angular velocities, forces or torques are
NaN
s (2532).
- 2519 is still known to cause wobble or jerky movements.
For more details see all 23 pull requests between Fubini and Frobenius.
-
After nearly a year of work, Principia now implements the rotational motion of vessels. This makes the physical simulation more correct in the following areas:
- Angular momentum is now preserved and the vessel obeys Euler's equations for the motion of rigid bodies. This remains true if the geometry or the distribution of mass in a vessel changes over time.
- Vessels properly rotate during warp, and rotation is continuous when warping/unwarping.
- Vessels remain properly oriented when crossing the sphere of influence of a celestial; this fixes a longstanding bug (1639).
Rotational motion brings more realism to the game: please take a moment to watch two short videos which illustrate interesting phenomena:
- The figure skater effect: Transferring fuel from one tank to another causes the angular velocity to change in the same manner that figure skaters control their speed.
- The Джанибеков effect: Rotational motion around the second axis of inertia exhibits a surprising instability (compare with a real experiment in zero-G).
Note that the implementation uses closed-form formulæ so its CPU cost is virtually zero even at the highest warp speed, and there is no accumulation of errors or drifts.
If you have been using PersistentRotation, we recommend that you uninstall it as the two mods would fight each other and PersistentRotation is not physically correct anyway.
-
Saves now use zfp to compress the trajectories of vessels. This makes them about 4x smaller, and may significantly reduce the time needed to switch scenes.
- KSP gives us no indication of how angular momentum is lost when an engine burns. In this version we assume that solid rocket boosters lose all their angular momentum and other engines don't lose any. We will probably want to have better heuristics/models in future versions.
- Games which are very far from the origin of time (e.g., if you are around year 2020 in a RealSolarSystem game) may take a long time to save, load, or switch scene. We are looking into better representations of the trajectories of celestial over long periods to address this problem (2400).
For more details see all 20 pull requests between Frobenius and Frenet.
No new features in this version. We have spent a fair amount of time implementing the rotational motion of vessels, and hope to be able to release it in the next version (Frobenius). This release has quite a few (invisible) changes to the management of parts and vessels, so we invite users to upgrade to help us find any problems/bugs that we could have introduced.
For more details see all 16 pull requests between Frenet and Frege.
- The celestial histories are now displayed before the beginning of the history of the active vessel. Long celestial histories can now be seen in map view, along with the shorter history of a vessel. Predictions still end where the active vessel's does.
-
As mentioned in the Known issues for Fréchet, the camera would spin wildly when the game was paused in map view. This has been fixed by not adjusting the camera when the game is paused. It also fixes a more subtle issue whereby changing the plotting frame when the game was paused would fail to preserve the orientation of the camera.
-
If some prerequisite of Principia (e.g., the Microsoft Visual C++ 2015-2019 Redistributable) was missing, the problem would only be detected after loading a save, and the Principia data would be lost from the save; this has been fixed by activating Principia when the KSP main menu is shown, i.e., before touching any save (2385).
-
The
reference_radius
in theprincipia_gravity_model
configuration was documented as defaulting toradius
but in reality it did not default to anything; this has been fixed by making the code consistent with the documentation (2429). -
When a vessel touched the ground, its prediction parameters (tolerance and steps) would be lost, which was annoying when biome hopping; this has been fixed by retaining the prediction parameters of all the vessels, even if they are not managed by Principia (2443).
For more details see all 39 pull requests between Frege and Fréchet.
-
Support for KSP 1.8.1 has been added: this version supports 1.5.1, 1.6.1, 1.7.x and 1.8.1. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
-
The camera is now positioned so that the horizontal in map view is the reference plane of the selected plotting frame. Further, the camera rotates with the plotting frame (in particular, if the camera is looking at a body which is fixed in the plotting frame, the camera is fixed in the plotting frame). This mean that the plotted trajectories do not rotate as time passes, a behaviour which was somewhat confusing and annoying.
- When bringing up the game menu in map view, the camera will rotate in the background. We will try to address this problem in a future version.
For more details see all 26 pull requests between Fréchet and פרנקל.
-
Principia now plots the trajectories of celestials, instead of relying on KSP to do so. This plotting obey the settings of the current frame, so trajectories can have rather interesting shapes; for instance, here is an example of the motion of the Jool system (including its satellites) around the Sun. We use KSP to decide which bodies to show exactly (so that, at a sufficient distance from Jool, its satellites won't be displayed). We only plot the trajectories of the celestial bodies since
- the beginning of the mission when there is an active vessel, or
- the beginning of the game otherwise,
so for distant planets (e.g., Pluto) you will only see one arc of the ellipse (unless you are very patient).
-
The setting for the history length in the main Principia window now hides the histories (for both vessels and celestials) instead of forgetting them. This means that it is possible to shorten and then extend again the histories without losing any information. The length is now controlled by a slider which display the duration of the histories in a human-readable manner.
- Support has been added to represent the inertia tensor of a solid and its transforms. This is another step towards properly handling the rotation of vessels around their centre of mass.
- The release name, being in Hebrew, is written right-to-left. KSP doesn't know how to do such an advanced thing, so it shows up inverted in the UI. Apologies to Hebrew speakers. (We had the same problem with release بوژگانی, around June 2016...)
For more details see all 11 pull requests between פרנקל and Fourier.
-
Changing the flight plan in a way that would cause the last burn to end after the end of the flight plan would sometimes cause Principia to crash; this has been fixed by automatically extending the flight plan in that case (2357).
-
If the upcoming manœuvre was anomalous (i.e., happened at a point before which the integrator had encountered a singularity, maybe because it timed out), Principia would crash when trying to display it on the navball; this has been fixed by not displaying the upcoming manœuvre node in that case (2358).
- A solver has been added for Arnold's equations. This is another step towards properly handling the rotation of vessels around their centre of mass.
For more details see all 15 pull requests between Fourier and Fibonacci.
- Support has been added for analysis of orbits. The main Principia window has a new button
Orbit analysis...
which brings up a separate window showing the mean orbital elements of the predicted trajectory, as well as the properties of its ground track cycle. This computation is done asynchronously and makes it easier to put a satellite on a particular orbit (geosynchronous, geostationary, Молния, etc.).
-
The use of the Switch To button to switch to another vessel used to crash Principia; this has been fixed by avoiding accesses to the Principia plugin during scene switches (2313).
-
Many users reported that Principia would fail to load on Windows machines which had some Nvidia software (GeForce Experience?) installed because we would try to load Nvidia's
libproto.dll
instead of our own; this has been fixed by using embedded manifests to unambiguously locate our DLLs (2297, 2334).
For more details see all 28 pull requests between Fibonacci and del Ferro.
-
The Principia UI is no longer shown in the space center in the buildings where it is not relevant: administration, astronaut complex, mission control, and research and development (2262).
-
The log files produced by Principia now have the extension
.log
which makes them easier to open on Windows. -
In RealSolarSystem, geopotentials have been added for Mercury, Venus, Mars, Jupiter, Saturn, Uranus, and Neptune. This makes the motion of the satellites of these planets more realistic. This change only takes effect on new saves.
-
Principia used to compute all the apsides and nodes for the prediction and flight plan, even though it only displayed 64. This led to poor performance for long trajectories. This has been fixed by limiting the number of computed apsides and nodes to 64. In addition, the computations have been optimized slightly.
-
Detection of bad installations has been improved somewhat. We now recommend that users install the unified C++ 2015-2019 Redistributable.
-
The apsides displayed on the prediction would sometimes have an incorrect text that would not reflect what they represented (e.g., "Kerbin Apoapsis" when the selected body is Minmus). This has been fixed (2257).
-
The minimal radius of celestials is propagated from the game and used (instead of the mean radius) when detecting collisions. This matters when orbiting or landing on potato-shaped celestials like Phobos, as collisions would improperly be detected above the surface. This change only takes effect on new saves (2237).
For more details see all 31 pull requests between del Ferro and Ferrari.
- Support for KSP 1.7.3 has been added. This version supports 1.5.1, 1.6.1 and 1.7.x.
- The "new release" message used to make the main Principia window very wide. It also improperly detected if KSP was a pre-1.5 version. This has been fixed so that the message is displayed on multiple lines and the version is correctly determined (2249).
- The prediction parameters (tolerance, number of steps) were not always properly persisted after being changed in the UI. Also, when no vessel was selected, the default values were displayed, which was confusing. This has been fixed by persisting the parameter directly in the UI, and by leaving the fields empty when no vessel is selected (2239).
-
A solver has been added for Euler's equations. This is another step towards properly handling the rotation of vessels around their centre of mass.
-
Support for finding the recurrence of orbits has been added. This is the first step towards computing and displaying orbital elements of vessels.
For more details see all 17 pull requests between Ferrari and Fermat.
- Support for KSP 1.7.1 and 1.7.2 has been added, and support for 1.3.1 and 1.4.x has been removed: this version of Principia requires at least KSP 1.5.1.
- All manœuvres in a flight plan can now be edited. This addresses a long-standing inconvenience where, if you wanted to edit an earlier manœuvre after planning many manœuvres, you had to delete the manœuvres after it. Also, more precise error messages are emitted to guide the user when formulating the flight plan (1936).
- The duration of manœuvres now takes into account the thrust limiter, just like stock manœuvres do (2128).
- Elliptic integrals and functions have been added. This is the first step towards properly solving Euler's equations and correctly handling the rotation of vessels around their centre of mass, something which KSP does very badly. This is going to be a multi-month effort.
For more details see all 41 pull requests between Fermat and Fatou.
-
Support for KSP 1.7.0 has been added: this version supports 1.3.1, 1.4.x, 1.5.1, 1.6.1 and 1.7.0. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise). Note that we don't use the new widget for editing manœuvres: trying to edit manœuvre parameters in that widget will probably lead to unexpected results.
-
This is the last version to support KSP 1.3.1 and 1.4.x. The next version will only support 1.5.1 and up.
-
The nodes of a trajectory with respect to the equator of the closest celestial are now displayed when the trajectory is "sufficiently close" to that celestial; this helps adjusting orbits with respect to the equator and addresses a longstanding feature request (#1841).
-
The flight plan window would reduce to size 0 when a flight plan had no manœuvres at the time of a scene switch; this has been fixed by properly redisplaying the flight plan final time (#2158).
-
The Ap/Pe/AN/DN nodes shown on the trajectories where sometimes displayed without a name or in the wrong color; this was due to improper reuse of nodes and has been fixed by correctly tracking the celestial to which a node refers (#2162).
-
Performance was significantly degraded when the flight planning window was displayed compared to when it was hidden; this was due to the UI improperly thinking that the flight plan had been changed at each frame and needed to be recomputed, and has been fixed by properly tracking manœuvre changes (#2157).
-
Manœuvres would sometimes move to the future (instead of being fixed in time) when the history was short; this problem was introduced in Fáry where we started to use the beginning of the flight plan as a time base for the manœuvres, and that time base would move in this situation; this was fixed by properly anchoring the manœuvres in time (#2166).
-
The description of the "Target Local Vertical/Horizontal" frame in the frame selector was garbled and unreadable; this has been fixed by properly displaying multiline text (#2169).
For more details see all 25 pull requests between Fatou and Fáry.
- The Principia UI now scales with the KSP "UI Scale" and "Apps Scale". This should make the UI easier to use on 4k/8k screens. Note that changes to the scale only take effect on save load or scene changes.
- The parameters of manœuvres may now be edited using a text field in addition to a slider. The input is taken into account when return is typed. The text turns orange if the syntax of the input is incorrect. (#2121).
- The Principia UI has been made slightly more compact by rearranging the fields and the controls. Informational messages are now displayed in grey and warnings in orange.
- The “Trappist-1 for Principia” mini-mod has been updated to work with versions 0.7.x of the SLIPPIST-1 mod.
- A longstanding bug has been fixed whereby the upcoming manœuvre was not always properly shown on the navball (#1565).
For more details see all 19 pull requests between Fáry and Fano.
- Predictions are now computed asynchronously without blocking the UI thread. This means that it's possible to have long predictions while retaining good playability: this is especially important close to celestials like the Earth or the Moon that have a complex geopotential. Long predictions just refresh infrequently, which in practice is mostly invisible. Note however that some computations (e.g., rendering) are still computed on the UI thread, so extremely long predictions still reduce the frame rate.
- As a consequence of the previous change, we limit the number of nodes that are displayed in map view to 64 by type (apsides, approaches, etc.). That's because KSP is extremely inefficient at displaying large numbers of nodes, and while Principia could easily compute thousands of nodes there is no way that KSP could display them.
- The UI code has been extensively restructured and rewritten. While it doesn't change the UI much, this rewrite fixes a few minor bugs and improves usability a bit, for instance by properly persisting the state of windows between scene changes. More importantly, it provides a sound foundation for future improvements.
-
The map nodes (apsis markers, ascending and descending node markers, etc.) no longer lag behind when the camera is moved in map view.
-
The ascending and descending nodes of the flight plan were incorrectly labeled as “Predicted Ascending Node” (or “Predicted Descending Node”), as if they were nodes of the prediction. They now are now correctly labeled as “Planned Ascending Node” (or “Planned Descending Node”).
Some bugs have been fixed in the APIs provided for accessing our geopotential models.
For more details see all 32 pull requests between Fano and Euler.
In RealSolarSystem, the intrinsic forces (parachutes, engines, etc.) used to be ignored below an altitude of 8.4 m on Earth. This manifested itself, for instance, by a brutal drop when landing a vessel with a parachute. This has been fixed by properly accounting for intrinsic forces close to the surface (#2072).
APIs have been added to make it possible for third-party mods to access our geopotential models (#2074).
For more details see all 9 pull requests between Euler and Εὐκλείδης.
- Support for KSP 1.6.1 has been added: this version supports 1.3.1, 1.4.x, 1.5.1 and 1.6.1. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
-
A longstanding bug has been fixed where the prograde/retrograde/etc. directions in SAS were inconsistent with the actual Frenet frame of the trajectory (#1868).
-
Principia would crash when a vessel (or a fragment thereof) was getting close to the centre of a celestial. This could happen during atmospheric reentry followed by rapid unscheduled disassembly: fragments ejected very fast could go below ground without KSP noticing. This has been fixed by killing the fragment when this situation was detected by Principia (#2056).
For more details see all 9 pull requests between Εὐκλείδης and Εὔδοξος.
-
We have added a selenopotential (lunar gravity model) complete to degree and order 30 to the Moon for RealSolarSystem, truncated from the GRAIL gravity model GRGM1200A. This configuration reproduces the complex (and sometimes unstable) orbits caused by mass concentrations on the Moon. It should now be significantly harder to have stable low-altitude orbits around the Moon. Note that this change will only take effect if you create a new save; existing saves will retain the simpler gravity model.
-
Saves are now encoded in base64 instead of hexadecimal. This makes them more compact by 30%, but more importantly they load about twice as fast.
-
The “Trappist-1 for Principia” mini-mod has been updated to use a configuration of the Trappist-1 system that correctly fits the observations. The previous version used an integrator that was not converged for planet b (#1999). You’ll need to start a new game to see the changes. Also, we are now including a configuration for RSSTimeFormatter that properly displays the (Earth) date and time.
- Switching between scenes (or loading a save) was very long if there ever was in the game a very long (years) flight plan or prediction, even if it had been shortened/deleted. This was because the solar system was recomputed up to the most distant time ever reached. This has been fixed by only recomputing the solar system as far as needed by the current flight plan and prediction (#2038).
For more details see all 40 pull requests between Εὔδοξος and Erdős.
- Support for realistic geopotential modeling at arbitrary degrees is finally available, with appropriate damping to ensure that the computations are not overly costly: our benchmarks indicate that this should not have any significant impact on the performance of the game. We have added a 10th-degree model of the Earth geopotential to our RealSolarSystem configuration, and we'll have more advanced modelling for other bodies (Moon, Mars, etc.) in future versions.
-
Parallel integration has been changed to use
absl::Mutex
instead ofstd::mutex
; this has no effect on Windows or Linux, but it speeds things up considerably on macOS (#1955). -
The
numerics_blueprint.cfg
file releases with the “Trappist-1 for Principia” mini-mod was incorrect, resulting in large errors in the transit times of theb
planet. An updated configuration is included in the Erdős version of the mini-mod (#1999) but this is only a stopgap measure. We'll redo the full Trappist-1 optimization and deliver another update in a future version.
- Our physical units are now compliant with the recent redefinition of the SI base units.
For more details see all 29 pull requests between Erdős and Ἐρατοσθένης.
- Support for KSP 1.5.1 has been added: this version supports 1.3.1, 1.4.x and 1.5.1. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
- We have been working on damping the effect of the geopotential to make it possible to have complex gravitational fields without performance degradation.
For more details see all 13 pull requests between Ἐρατοσθένης and Διόφαντος.
No new features in this version. We have spent a fair amount of time improving geopotential modeling, but that feature is not fast enough yet.
We now have realistic geopotential modeling at arbitrary degrees, we have validated the correctness of our code and we have done quite a bit of optimization. We have also added a more realistic model of the rotation of the Earth. Still, the performance is not yet sufficient to be used in the game. We will have to implement some screening so as to avoid computing the effect of the Himalayas on Pluto.
For more details see all 17 pull requests between Διόφαντος and Descartes.
-
Principia no longer supports macOS El Capitan, as that version is no longer supported by Apple. We now require macOS Sierra or later. As a consequence of this change we were able to upgrade to a newer version of the C++ standard library. This brings macOS to parity with the other platform in terms of multithreaded integration of vessels. Users should see a significant speed-up, especially at high warp (#1908).
-
The integration of burns in the flight plan has been rewritten to use an embedded explicit generalized Runge-Kutta-Nyström method. This is significantly more precise that the previous hacky technique of doing 100 small integrations. It makes a difference for long burns (e.g., with ion engines) as they are more accurately predicted.
- We started work on improving geopotential modeling. This should make it possible in future versions to have more realistic orbits around celestials with large mass concentrations such as Mars and the Moon.
For more details see all 30 pull requests between Descartes and Desargues.
- Support for KSP 1.4.5 has been added: this version supports 1.3.1 and 1.4.x. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
No new features in this version as we have been on vacation.
For more details see all 6 pull requests between Desargues and Δημόκριτος.
-
Support for KSP 1.4.4 has been added: this version supports 1.3.1 and 1.4.x. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
-
Vessels are now managed by Principia when they are in the atmosphere. This means that it's possible to see the history and prediction and to prepare flight plans immediately after launch. This works both with stock KSP and with Ferram Aerospace Research.
-
The “Trappist-1 for Principia” mini-mod has been improved to better reflect the physical properties of the celestials. It works fine with the latest version of SLIPPIST-1 (0.5) but will be more aesthetically pleasing with the upcoming version (0.6?).
-
Subtle inaccuracies in the adaptive-step integrators would sometimes result in crashes because of attempts to integrate backwards in time or beyond the end of the ephemeris (#1839, #1864). This has been fixed by ensuring that the adaptative-step integrators never undershoot or overshoot the final time.
-
The “Trappist-1 for Principia” mini-mod would crash when used with 1.4.3 or later because of an incompatibility with Kopernicus. This has been fixed.
For more details see all 24 pull requests between Δημόκριτος and Dedekind.
We have added a simulation of the TRAPPIST-1 extrasolar planetary system as a mini-mod, “Trappist-1 for Principia”. TRAPPIST-1 is a system of seven tightly coupled Earth-like planets orbiting close to an ultracool dwarf star where n-body gravitation plays an important role, so it's an interesting application of Principia. For example, this picture shows a low-energy transfer from Trappist-1e to Trappist-1f with ballistic capture where the final orbit exhibits resonance with the rest of the system. And just for eye candy, this picture shows a double transit.
We used the most recently published observational data (from K2 and Spitzer) and ran a transit-timing variation optimization to build a configuration that accurately models the real-life behavior of the planetary system (the transits are accurate to within a minute).
Our mini-mod comes as a patch on top of @GregroxMun's SLIPPIST-1 mod. See the FAQs for details on installing it and its prerequisites.
- A number of bugs have been fixed in the C# code which resulted in memory leaks. In particular, displaying a long flight plan could leak memory at the rate of 1 GiB/minute, quickly making the machine unusable (#1797). These issues have been addressed by better management of memory across the C++/C# interface, notably using the Dispose pattern.
For more details see all 16 pull requests between Dedekind and Darboux.
- The saves are now compressed using Gipfeli, which makes saves about 2.5× smaller. Also, the protocol buffers used for saving are allocated in an arena. Together, these changes make large saves about twice as fast to read and write.
- We have implemented our own cube root for orbital element computations because the ones provided by the platforms are often slow and/or imprecise.
For more details see all 32 pull requests between Darboux and Cramer.
No new features in this version. We have spent a fair amount of time upgrading to newer compilers (Visual Studio 2017, Clang 5.0) and to C++17.
Very importantly, these upgrades mean that you need to upgrade your C++ runtime. On Windows you must install the Visual C++ Redistributable Packages for Visual Studio 2017 on x64. On Linux you need to install version 6.0-2 of libc++abi (if using Ubuntu, this comes natively with Bionic Beaver). On Mac there are no changes, we still support El Capitan or later.
This is the last version to support KSP 1.2.2. The next version will only support KSP 1.3.1 and 1.4.x.
- A bug has been fixed where the manœuvre marker would jump at the time of ignition. This stemmed from a confusion between the vessel's current osculating orbit and the conic patch for the manœuvre node. This this was particularly noticeable when changes of sphere of influence were involved (#1728).
For more details see all 36 pull requests between Cramer and Coxeter.
- The performance of all the code having to do with numerical analysis (including some of the integrators) has been significantly improved, with benchmarks demonstrating a speed-up of up to 2×. In particular:
- operations involving 3-dimensional vectors, linear algebra and square roots are now implemented using the Intel SSE2 intrinsics to take advantage of SIMD instructions;
- some costly usages of heap storage and of
std::pow
have been removed.
- The velocities for symmetric linear multistep integrators (used with Real Solar System) are now computed from the accelerations and two positions, instead of being purely computed by a difference formula on the positions. This is more accurate, and it is also significantly cheaper, since it can be done without double-double precision.
- KSP 1.2.2, 1.3.1 and 1.4.1 are supported by this version. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise). Thanks to @aw1621107 for the 1.4.1 support.
- A bug has been fixed where trajectories in frames tied to Pol and Bop would appear horribly wiggly and Pol and Bop would exhibit hourly oscillations (#1741). This has been addressed by using a different integrator (Blanes-Moan) for the KSP system, which is more resilient to the instabilities present in the Jool system. For the real solar system we are still using a Quinlan-Tremaine integrator as there are no stability issues and this integrator yields more accurate results. Note that the benefits of the Blanes-Moan integrator will only be visible if you create a new save.
- An entry point named
ExternalGetNearestPlannedCoastDegreesOfFreedom
has been added to our API to help mods which want to implement closed-loop guidance (#1659 and #1729).
For more details see all 30 pull requests between Cohen and Coxeter.
- The computation of the positions and velocities of the celestials has been changed. We used to use the Clenshaw method for polynomials expressed in the Чебышёв basis, we are now using the Estrin method for polynomials expressed in the monomial basis. This brings up a 30% speed-up at a modest cost in interpolation accuracy (centimetres).
-
A bug has been fixed where the Principia main window would sometimes be saved off-screen and would be impossible to bring back on screen (#1677). This has been addressed by making sure that all Principia windows stay on screen by 50 pixels.
-
A bug has been fixed where Principia would crash when a vessel collides with a celestial at high warp (#1703). We now properly detect the collision and refrain from compressing the trajectory as it may be chaotic.
- On Windows, Principia is now distributed as a set of fives DLLs instead of one. While we don't expect that this will have any effect on users (you'll still install Principia by dropping the
Principia
folder in theGameData
folder) we anticipate that it will make it easier to optimize the code using profile-guided optimization.
For more details see all 36 pull requests between Clifford and Cohen.
No new features in this version. We have been on vacation, and have focused on some deep restructuring for future changes.
- A bug has been fixed in double precision subtraction of
Point
s which could have led to small inaccuracies in some computations (#1624).
- When building a gravity model, it is now possible to specify the integrator to use and its time step. The default integrator has been tuned for our solar system, but is not guaranteed to be conservative, especially for systems that are not very stable. By specifying a different integrator or time step, it is possible to ensure energy conservation at the expense of more costly computations.
- We started looking into the possibility of building a model of the extrasolar system TRAPPIST-1. More work is required, but we expect to be able to include this in a future release.
- We are investigating switching from the Clenshaw method of evaluating polynomials expressed in the Чебышёв basis to the Estrin method for polynomials expressed in the monomial basis, as the latter seems significantly faster. This might show up in a future release.
For more details see all 17 pull requests between Christoffel and Clifford.
- Vessels going through a celestial body will now correctly be destroyed, even at high time warp.
- The capability to start and stop the Principia plugin has been removed. While it was useful at the beginning of the development of Principia when the code was unstable, it had overlived its usefulness and was causing crashes. It is nowadays critical for Principia and KSP to stay in sync so Principia must be constantly running.
- As announced previously, KSP 1.3.0 is no longer supported. Principia only works with KSP 1.2.2 and 1.3.1.
- Principia used to show, when in the tracking station, the trajectory of the last targetted vessel in addition to the trajectory of the active vessel. This has been fixed by removing the trajectory of the target in this situation (#1620).
- Principia would sometimes crash when timewarping in the space centre (#1628). The root cause was that the vessel would go through a celestial and KSP would not detect the collision because of timewarping. Our integrator would however fail to conserve energy and start to oscillate because the vessel was temporarily too close to the gravitational singularity at the centre of the celestial. To fix this rather complex bug we had to:
- replace the Adams-Moulton integrator by a finite difference computation to evaluate the velocities;
- determine during the force computation if a vessel moves inside a celestial and propagate this information all the way to KSP to kill the vessel;
- change the downsampling of histories to make it more resilient to failures to downsample.
- When using EditorTime in conjunction with Principia, a crash could occur when waiting more than the maximum history length before launching. This has been fixed by managing the histories based on the actual time of the Principia plugin (#1641).
For more details see all 25 pull requests between 陈景润 and Christoffel.
- A longstanding problem has been fixed, making the saves smaller and the histories smoother. Previously, one point was retained every 10 seconds in the history, which would cause the saves to become uncomfortably large after playing for some time. When warping, we could not afford to retain one point every 10 seconds (the history would have grown to gigabytes) so we opted for only retaining a point "once in a while"; the unfortunate consequence was that the history produced by warp would be drawn incorrectly, with spikes and loops and other nonphysical artifacts. All these issues have been fixed by intelligently downsampling the history to make its size much smaller while retaining the accuracy necessary to draw it (#228).
- This is the last version to support KSP 1.3.0. The next version will only support KSP 1.2.2 and 1.3.1.
-
Principia would sometimes crash when switching the camera from the Sun to a vessel when the velocity or altitude were extremely large. This was due to a subtle bug in the integrator used to compute the prediction, which caused it to lose a small amount of accuracy when computing the times at which the integration takes place (#1595).
-
Principia would sometimes crash when a vessel was trying to leave the surface. This was fixed by properly detecting the case where KSP does not have a collider yet (#1618).
-
Deleting the last manœuvre in the flight planner sometimes caused the bottom of the flight planning window to vanish off the top of the screen. The window was no longer accessible and there was no way for the user to drag it back on-screen. This has been fixed by making sure that some part of the window always remains on-screen (#1609). (Thanks to @aw1621107 for the fix.)
For more details see all 12 pull requests between Chasles and 陈景润.
-
On celestials that don't have an atmosphere, Principia is now able to manage the vessels even when KSP uses a rotating reference frame, all the way down to the ground. This is the final resolution of issues that has been annoying players for some time as it was virtually impossible to land on mountains (see for example #1413, #1440, and #1591). As soon as a vessel touches the ground, Principia hands it over to KSP. As soon as it leaves the ground, Principia takes control again. This means that if, for instance, you have a Kerbal frolicking on Minmus, when she jumps and leaves the ground Principia will apply full N-body gravitation until she hits the ground again.
We plan to do this for celestials that have an atmosphere in a future release, but this requires some synchronization with the releases of Ferram Aerospace Research.
-
KSP 1.2.2, 1.3.0 and 1.3.1 are supported by this version. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
-
With KSP 1.3, the trajectory markers (apsides, nodes, target approaches) would sometimes get nonsensical multiple labels, e.g. an apoapsis marker labelled all of "Ap", "AN", and "DN". Principia no longer attempts to reuse the
MapNode
objects if the marker type changes, which fixes this. -
Principia would sometimes crash when starting to warp. While the problem has not been completely elucidated, this is believed to be caused by a violated invariant in predictions. The management of predictions has been extensively rewritten to enforce stronger invariants (#1561).
-
Pressing a non-expanding button on the plotting frame UI would raise (and log) an exception. This has been fixed by properly handling the celestials that don't have satellites (#1532).
-
A number of compilation warnings emitted by Clang have been fixed, which should make the code easier to port and more correct. (Thanks to @aw1621107 for numerous pull requests.)
For more details see all 35 pull requests between Cesàro and Chasles.
- The history of the vessels is now integrated on multiple threads, one per vessel. This brings significant performance gains on multi-core processors. This is particularly visible when warping at 1 000 000× and above with multiple vessels. Note that the asteroids are vessels from the perspective of KSP, so most game situations actually have many vessels. (This improvement does not apply to macOS because Apple did not support
shared_mutex
prior to 10.12.)
-
Principia might die when crashing a vessel into another. This has been fixed by detecting that some parts are in the process of being destroyed and ignoring them in the physics computations (#1553).
-
An incompatibility between Principia and Kerbal Inventory System (KIS) which caused Principia to crash has been fixed in KIS, thanks to @ihsoft (#1549 and KIS #221).
For more details see all 24 pull requests between Чебышёв and Cesàro.
-
The speed of trajectory plotting (the main performance issue in previous versions of Principia) has been increased considerably (of the order of 5× to 10× faster) by implementing our own plotting of trajectories. By cleverly choosing the segments to draw we are able to spend less time drawing or processing the trajectory, while at the same time making the trajectories much smoother (no more angles in the prediction, in particular). This addresses numerous user complaints, for instance #1487.
-
Support for tracking burns has been added. These are burns where the force stays tangent to the trajectory instead of being applied in a fixed direction (#876). This is a significant improvement in usability for long, low-thrust burns, which are frequent in RealSolarSystem.
-
Both KSP 1.2.2 and KSP 1.3 are supported by this version. Make sure you download the correct binary for your favourite version of KSP (the game will crash otherwise).
-
The plotting frame would revert to 'body-centred inertial' when reverting to launch. This has been fixed by correctly keeping track of the display mode (#1453).
-
The performance in the space centre view was very poor. This was a regression introduced in Cayley and it has been fixed by avoiding frequent calls to find the tracking station (#1486).
For more details see all 40 pull requests between Cayley and Чебышёв.
-
Vessel trajectories are now displayed for the selected vessel in the tracking station (#1457).
-
The colour of the horizon in the inertial frame navball has been changed to use "horizon blue" instead of "dark dark blue". This makes the manœuvre marker more readable, as it happened to have the same colour as the horizon band, see #1449.
-
A reminder has been added in the UI when it's time to update Principia because a new moon has passed.
-
The release we distribute now includes the Macintosh version.
-
Since KSP 1.2, the parts of unpacked vessels are lagging behind the current time (and the parts of loaded packed vessels), instead of the orbits being ahead of the current time. This challenged some assumptions made by Principia, and was the root cause of many bugs (including bugs worked around in previous versions), such as #1272, #1416, #1441, and #1473, as well as mysterious and worrying errors in the logs. This was fixed by advancing vessels in time when KSP expects them to be advanced.
-
In some circumstances KSP would report a collision with a null collider, which confused Principia and caused a crash (#1447). This has been fixed by ignoring such collisions.
-
A Kerbal in EVA would sometimes be spawned several metres away from the vessel. This is because in this case the Kerbal ignores collisions with the ship for a little while, and is nudged back to the airlock. This nudging conflicted with the nudging done by Principia (#1452).
-
A crash would occur when a Kerbal on EVA was unloaded. This has been fixed by better checking the state of the EVA controller (#1466). This issue was not in Cauchy, since it was introduced in pull request #1459, but it affected at least one user who built from master between releases.
- Support has been added for efficiently computing the parts of a segment hidden by a sphere. This is a significant step towards the goal of making the rendering of trajectories faster and smoother.
For more details see all 16 pull requests between Cauchy and Cayley.
-
The speed of the vessel in the plotting frame is now shown on the periapsis, apoapsis, and locally closest approach markers. The speed normal to the reference plane is shown on the ascending/descending node markers. This helps in particular when tuning approaches and rendezvous.
-
The speed display mode (surface vs. orbit) has been unified with our reference frame selection: the speed display is in surface mode if and only if the surface frame (Body-Centred Body-Fixed) is selected.
-
The speed displayed on the navball is always the speed of the vessel in the plotting frame, even when the vessel is not being managed by Principia.
-
The nodes—intersections with the reference (orbit) plane—are now displayed in the body-centred parent-aligned and barycentric rotating frames; this should make interplanetary flight planning easier.
-
The trajectory of the target vessel is now rendered in reference frames where the target is not fixed. Its history is goldenrod, and its prediction is pig pink.
-
The UI has been make a bit simpler and smaller by removing useless information about the state of the plugin.
-
For compatibility with 3rd party mods that require celestial targeting for some of their features, it is now possible to target a celestial. This has no interaction with Principia, in particular it is independent from reference frame selection: it exists solely for compatibility.
-
Vessels would sometimes slowly rotate away from the closest celestial, even if no torque had been previously applied. This has been fixed by making the positions and transforms passed to Unity consistent (#1307).
-
Switching vessels via the Principia UI would sometimes lock the menu and the map view. This has been fixed by clearing the lock at the proper place (#1402).
-
A spurious change of velocity would sometimes show up as a result of quick-loading. For instance, when quick-loading in atmospheric flight around Kerbin, the speed would jump by 200 m/s, which is the surface speed of Kerbin. This was due to vessels being temporarily registered as in orbit on rails, and thus managed by Principia, which would set speeds in the nonrotating frame which were then interpreted in the rotating frame when KSP picked them up as flying. Principia now keeps managing these vessels to avoid the problem (#1410).
-
A vessel would sometimes accelerate when a Kerbal was performing an EVA. This boils down to ladders being magic in KSP, as illustrated by this hilarious video. When a Kerbal holds a ladder, that ladder exerts on the Kerbal a force equal to its weight, even if the Kerbal is in weightlessness. When the Kerbal lets go of the ladder, that force goes down to zero. This was fixed by ignoring the magic ladder force (#1415).
-
Some parts would sometimes be offset from their expected position on the launch pad. This was due to the vessel being in the "prelaunch" state for a few frames, and has been fixed by having Principia wait until it exits that state (#1421).
-
Reading saves that had long trajectories would sometimes crash because data structures for the oldest parts of the trajectories would become corrupted. This has been fixed, and the saves that had this problem in Catalan should be loadable again in Cauchy (#1422).
-
Principia would sometimes crash if a save was happening at the same time as exiting physical time warp. This has been fixed by making sure that the plugin doesn't do any integration if its time is before that of the vessel trajectories (#1441).
-
Markers, in particular for apoapsides and periapsides, would sometimes be drawn in the middle of nowhere (i.e., not on the trajectory). This was due to a data corruption in the vessel trajectories (#1395).
-
Landing on the Moon with RealSolarSystem was sometime problematic. This has been fixed in RealSolarSystem by raising the minimum timewarp altitude (#1440).
- Some support has been added for projective geometry and pinhole camera perspective. This will allow us in the future to make the rendering of trajectories faster and smoother.
For more details see all 40 pull requests between Catalan and Cauchy.
No new features in this version, we have focused on fixing bugs, repaying technical debt and doing code restructuring that will be necessary for implementing new features in the future.
-
When using BetterTimeWarp, the game would crash when trying to do an EVA after landing on a celestial with no atmosphere (such as Mün). This has been fixed by tweaking the manageability altitude of the vessel (#1345).
-
When using BetterTimeWarp, and trying to land on a celestial with no atmosphere, the vessel would sink below the ground, or the celestial surface would jitter, making it hard or impossible to land. This has been fixed by the same change as the previous bug (#1346).
-
When transitioning from space to the atmosphere of a planet (such as Kerbin) the velocity would sometimes increase by the velocity of the surface (200 m/s on Kerbin). This has been fixed by setting the degrees of freedom in the proper frame during the transition (#1366).
-
The planets would sometimes be moving back and forth along their trajectory, or even leave it. This seemed more likely to happen with a custom solar system that has a double planet. This has been fixed by asking KSP to properly update the positions (#1369).
-
The radial-in and radial-out direction of the autopilot were inverted when in space. This boiled down to a confusion in KSP where the radial-in icon sets the autopilot to radial-out and vice-versa. Principia has been modified to compensate for this (#1370).
-
The Apocalypse window would freeze the UI. This problem had been reported in Cardano but we couldn't reproduce it at the time. We have now been able to reproduce it and to fix it (#1319, #1376).
-
A
NullReferenceException
would sometimes be propagated to KSP and result in an error message in the logs and the UI. This has been fixed by properly checking for null pointers in the C♯ code (#1380).
-
It is now possible to describe a solar system using a data file containing keplerian coordinates (cartesian coordinates have been supported for a long time).
-
Date literals can now be written as Julian or Modified Julian dates, which are convenient when describing astronomical phenonema.
-
Orbits may now be described using a large variety of keplerian elements which obviates the need to perform offline computations to transform the characteristics of a body into something acceptable by Principia. Note that while it is possible to specify a large number of combinations of elements, the computations are numerically quite naïve, and may be result in large errors near singularities.
For more details see all 28 pull requests between Cartan and Catalan.
NOTE: Cartan is save-compatible with Cardano. However, existing saves won't take advantage of the faster integrators. You'll need to create a new save to see the speed-up.
-
Principia now supports a vessel-centred frame directed along the horizontal and the vertical of a celestial. This is useful for performing rendezvous. The points of closest approach and the points where the active vessel crosses the plane of the target vessel trajectory are displayed on the prediction and flight plan. See the description of plotting frames in the Concepts document and our guide to rendezvous for details regarding the use of this frame.
-
The integrators used for computing the positions of the celestials and the histories of the vessels have been changed. We now use symmetric linear multistep integrators instead of symplectic Runge-Kutta-Nyström integrators. The former are conjugate-symplectic, which is nearly as good as symplectic, and they produce much denser output. As a consequence the integration of the celestials is much more precise (errors in the meters per year instead of thousands of kilometers) and the integration of the vessels is about 5 times faster. Warping at 100 000× is completely smooth even with 20 vessels, and warping at 1 000 000× is janky but usable.
-
The stabilization of the Jool system that was introduced in Brouwer got lost in Cardano, causing an Apocalypse in some situations. This has been fixed (#1319).
-
A crash might happen during EVA if the unfortunate Kerbal would touch a non-physically-significant part, such as a barometre. This has been fixed by going up the part tree until a physically-significant part is found (#1308).
-
A crash might happen when warping from the sphere of influence of a celestial to that of another, especially if the second celestial is large (e.g., Kerbol). This has been fixed by properly detecting the change of sphere of influence (#1302).
-
Creating a manœuvre with the reference frame fixing the centre of a celestial and the line towards another celestial (e.g. Earth-Centred Sun-Aligned, ECSA) would systematically cause a crash (#1293).
-
In some cases Principia would lose track of a vessel and then find it again, but it would be confused about its sphere of influence. Combined with the tilt this might cause strange drifts (#1299).
For more details see all 50 pull requests between Cardano and Cartan.
WARNING: Cardano is not save-compatible with previous versions of Principia. If you have a game saved with Cantor or earlier, it won't load (or it will crash) if you try to use it in Cardano.
-
Principia now works with KSP version 1.2.2. Older versions of KSP are no longer supported (#1150, #1237, #1244).
-
Celestials may now have proper axial tilt and rotation. This is particularly useful when using RealSolarSystem. For instance, the rings of Saturn are (correctly) shown in the same plane as its satellites. Previously they would show up as being in the plane of Earth's equator, at an angle from the satellites. Similarly the lightning of the Earth correctly reflects the seasons.
-
Two new plotting frames have been added:
- A frame centred on a body and directed towards a second body.
- A frame centred on a body and rotating with the surface of that body. For that frame, the navball tracks the surface and is oriented North-East-Down.
-
The handling of the physics bubble has been completely rewritten to take advantage of the new features of KSP version 1.2.x. Unless engines (including RCS) are thrusting, a vessel will follow its free-falling trajectory regardless of whether or not it is timewarping.
-
When using an unstable solar system, the "apocalypse" that occurs when two celestials collide is now reported in the UI instead of causing a mysterious crash (#1114, #1115).
-
The rewrite of the physics bubble fixed several bugs:
- The phantom accelerations which sometimes prevented warping are gone (#1138).
- The gravitational acceleration is now calculated for each vessel, not for the centre of mass of the loaded vessels. This fixes problems where accelerations would be incorrect on some vessels, resulting in jumps and sudden shifts of the gravity vector (#1048).
- Implemented symmetric linear multistep integrators (not used in this release).
- Ported the symplectic partitioned Runge-Kutta integrators (more general than the symplectic Runge-Kutta-Nyström integrators), including leapfrog, which appears in Newton's Principia, to a form compatible with the implementation used for the existing symplectic Runge-Kutta-Nyström integrators.
Principia's
integrators
library now has 37 different fixed step conjugate-symplectic and symplectic integrators. - Integrators are now based on
Instance
s, which hold any persistent state that the integrator might need in addition to the state of the system; this is important for resumability of multistep or variable-step integrators. - Constructors of
Rotation
s from Euler angles and (appropriately for this release) Cardano angles have been added. These are used in pre-existing code (Keplerian elements) as well as for the rotations defining the surface frame of celestials, used to implement axial tilt. - Implemented a proper double-double addition, since the (pre-existing) compensated summation was not up to the task of the ill-conditioned sum in linear multistep integrators.
- We had noticed that we were not able to predict very precisely the position of some small bodies of the solar system, so we made a thorough analysis of the behaviour of Phobos. It turns out that the spherical harmonics C₂₂ and S₂₂ of Mars have a considerable influence on the orbit of its satellites. Unfortunately, adding them to our model would, as things stand, make the game too slow, and was too complex for implementation in Cardano. We'll try to improve this in the future, maybe by using symmetric linear multistep integrators.
- We analysed the dynamical stability of the retrobop system, noticing that it is highly chaotic.
We have not released for 8 months. Going forward, we plan to release more often, even if that means making smaller changes in each release. We'll try to have a new release coincident with each new moon.
For more details see all 166 pull requests between Cantor and Cardano.
And we're out of β, we're releasing on time! We believe that the mod as now sufficiently functional and stable to be fun to play with, so we are making it more broadly available. Download it here.
- When using stock KSP, the clock now properly uses 6-hour days instead of 24-hour days (#1085).
- Implemented date and time literals that are interpreted at compile time. Using these, four time scales are available to write
Instant
literals, again interpreted at compile time: Temps Terrestre (TT), Temps Atomique International (TAI), Coordinated Universal Time (UTC), and UT1. The dates in the lunar eclipse tests now use UT1 literals. Since Principia does not support general relativity, and has a unifiedInstant
type for the time coordinate, Temps Dynamique Barycentrique (TDB), which is used for the ephemerides of the solar system, is identified with TT, and Temps-Coordonnée Géocentrique (TCG) and Temps-Coordonnée Barycentrique (TCB) are not supported.
For more details see all 8 pull requests between بوژگانی and Cantor.
- Principia now works with KSP version 1.1.3. Older versions of KSP are no longer supported.
- The times of periapsides and apoapsides are now displayed on the trajectories.
- The norm of the velocity in the plotting frame is displayed when the navball is fixed in the plotting frame.
- The check that the C++ 2015 Redistributable runtime is properly installed on Windows has been tightened.
- The state of the ephemeris at startup is now logged to help in debugging modified solar systems.
- The fix that prevents the Jool system from getting unstable is now applied more strictly, so that modified stock solar system don't get clobbered by this fix.
- Gravity models may now be specified using Keplerian elements (in addition to Cartesian elements).
- An obscure bug has been fixed that would infrequently cause the trajectories of the celestials to be discontinuous because of cancellations in Чебышёв series.
- Fixed a bug where the vessels would take a hard turn when the sphere-of-influence changes (#1053).
- The release name, being in Farsi, is written right-to-left. KSP doesn't know how to do such an advanced thing, so it shows up inverted in the UI. Apologies to Farsi speakers.
For more details see all 33 pull requests between Burnside and بوژگانی.
- Changed the prediction parameters to be per vessel as opposed to global. Thus, different vessels may have predictions of different lengths or accuracies.
- Changed the way that the trajectories of celestials are recorded in saves: instead of recording everything that was computed in the course of the game, only the next 6 months or so are saved. The rest is recomputed when the save is loaded. The advantage is that the saves are considerably smaller (a factor of 100x has been observed in simple games) which makes choosing a save in KSP faster as it insists on loading all the saves in memory. The drawback is that loading a save is more CPU-intensive and may therefore take longer.
- The plugin has a new icon.
- Fixed the stabilization of the Jool system in the stock game which had stopped working in Буняковский. This is the hotfix previously released as Буняковский 6.
- Fixed a situation where adaptive step integration would crash when the system was already integrated to the desired final time (#1024).
- Fixed a problem where the start of a flight plan would be discarded to the point that it had no burns anymore and various pieces of the code would disagree as to whether the vessel still had a flight plan (#1022, #1023).
For more details see all 16 pull requests between Буняковский and Burnside.
- Added code to try to detect bad installations.
- Joint Windows and Linux build.
- Give the user more control over the length of the predicted flight plan trajectory.
- Prevent accidental deletion of a non-empty flight plan.
- Display the total Δv of the flight plan.
- Limit the amount of time that we are willing to spend computing the trajectory of celestials. This prevents the game from freezing when trying to extend e.g., the prediction to be very long. The prediction is just going to be progressively extended over several seconds.
- Compute and display the apsides of trajectories, which makes it easier to evaluate the altitude of the predicted flight plan. Note that, for trajectories that are very far from a conic, there may be many apsides. Note that apsides are only displayed with respect to the fixed celestial, if there is one.
- Tweaked the colours and styles used to display trajectories.
- Added a button to time warp to the next manœuvre (1 min ahead of the time of ignition).
- Changed the prediction computation to be defined by a number of steps, not a length. This makes the amount of work performed at each frame roughly constant.
- Support for KSP 1.1.2.
- Fixed a crash when saving with RealSolarSystem installed (#905). This is the hotfix previously released as Buffon 12.
- Fixed yet another use-after-free bug (#908) and added checks to detect situations that can lead to this kind of bug.
- Fixed a problem where burns would sometimes result in an infinite Δv.
- Stopped serializing the trajectories of the flight plan, recompute them instead. Also properly discard past trajectories (we used to keep them around for no good reason). This makes the saves smaller.
- Moved to x64 on Windows and stopped supporting Win32. This brought significant performance improvements (about 30%) for the integrators.
- Increased the protocol buffer deserialization limit to 512 MiB, which should make it possible to re-read very large saves. Since we are now creating significantly smaller saves, this should suffice for most missions.
- Added parameterization to limit the number of integration steps performed by adaptive integrators.
- Improved the encapsulation and testing of the Vessel class. Hopefully this will improve the stability of the plugin.
- Two-step journaling makes it easier to reproduce crashes.
For more details see all 75 pull requests between Buffon and Буняковский.
- The integrators now limit the number of steps they perform, and terminate if their step size vanishes. This avoids issues where the plugin would hang when the trajectory would accidentally get very close to the centre of a celestial body or spend a long time in a low orbit.
- The version identifier of the plugin is now displayed in the UI to make it is easier to assert what version is running.
- A use-after-free bug has been fixed which caused a variety of crashes (#872, #881, #889, #896) when the historical trajectory was shortened in a way that would cause it to start after the beginning of the flight plan.
- A verbosity option has been added to the journalling which makes it easier for us to reproduce crashes.
For more details see all 19 pull requests between Brouwer and Buffon.
- The whole Frenet trihedron is now displayed in the correct reference frame when "fix navball in plotting frame" is selected.
- The initial state (and thus the evolution) of the system is now deterministic even when not using RealSolarSystem. Tidally locked bodies no longer spin back and forth madly (on the other hand, they may not be tidally locked if their mean period differs from their Jacobi osculating period).
- When using stock, the Jool system is modified, cancelling the apocalypse. Specifically, we make the inner Jool system nonresonant, since we have been unable to replicate the results (Manley, priv. comm.) according to which some interpretations of the orbital elements yielded a stable Laplace resonance, despite systematic searches of the Jacobi osculating elements. In addition, at Scott Manley's and @pdn4kd's suggestion, we put Bop in a surprisingly stable, though highly precessing, retrograde orbit. The modified system is stable for upwards of a century.
- Flight planning has been implemented.
- When a Cartesian initial state cfg is not given, the KSP orbital elements are interpreted in a hierarchical osculating Jacobi fashion; for instance, the orbital elements of Jool are the osculating elements at game start of the orbit of the barycentre of the Jool system around the barycentre of the (sun, moho, eve, gilly, kerbin, mun, minmus, duna, ike, dres) system; the elements of Laythe are the osculating elements at game start of the orbit of Laythe around Jool; the elements of Vall are the osculating elements at game start of the orbit of Vall around the Laythe-Jool barycentre.
- The Windows build now uses profile-guided optimization (we estimate that this improves performance by ~20%); in theory this could be extended to other platforms.
- The evaluation of the Чебышёв series has been significantly optimized.
- @sarbian made trajectory rendering faster (as he pointed out, there is still lots of room for improvement).
- Everything that crosses the C++/C# interface can now be journalled if the right flag is set, allowing us to replay the C++ side of a session; this is useful for tracking down tricky bugs, and it enables profile-guided optimization.
- In order to get the full Frenet trihedron, (which was needed for manœuvres, since the Δv is defined in the Frenet frame at the point of ignition) geometric acceleration (the acceleration of a free-falling trajectory) in any reference frame was needed. To do that we created two abstractions, RigidMotion, the derivative of a RigidTransformation, and DynamicFrame, the definition of an arbitrary reference frame. The navigation frames (the frames in which the trajectory is drawn, or with which the manœuvres are defined) implement that (see BodyCentredNonRotatingDynamicFrame and BarycentricRotatingDynamicFrame).
- In order to interpret the orbital elements of KSP in the hierarchical Jacobi fashion described above, support was added for Kepler orbits (implementation), Jacobi coordinates, and hierarchical systems.
- Discrete trajectories were reworked, with a heavy dose of CRTP.
- In preparation for the surface frame in the future, RotatingBody was added.
- The C++ interface headers and C# extern declarations were repetitive and error-prone, this was exacerbated by the addition of journalling code and replaying code, so a generator was written to produce all of that from an annotated proto.
- @pdn4kd contributed some tests of lunar eclipse timings.
- For both Kepler orbits and lunar eclipse timings, a simple root finder was needed, bisection does the job for now.
- A bibliography was written, at @pdn4kd's request (it is somewhat out of date).
- SolarSystem, a class for initializing ephemerides from protobuf text format configuration files for testing purposes was written.
- A script for generating the initial state configuration files from the emails sent by JPL's HORIZONS system was written (the gravity model configuration file is hand-curated).
- An utility turns the protobuf text format configuration files into KSP ModuleManager configuration files for RSS support.
- Various geometric utilities were added: angles (implementation), spherical coordinates (more are needed).
- More C++11/14 features were used as they became available (for instance, the units are now constexpr), in addition we now use std::experimental::optional.
- C++14-related improvements were made to not_null.
For more details see all 195 pull requests between Bourbaki and Brouwer.
- Ephemeris: the celestial bodies are integrated on their own, with their own (much larger) timestep (45 min); their trajectories are then fitted using чебышёв series, yielding continuous trajectories. This means that when there are no vessels (including asteroids, see the FAQ), timewarp at very high speed (6'000'000x was tested in RealSolarSystem) is smooth.
- The predictions are computed using an adaptive step size, so they're faster and less fiddly (you still get a tolerance setting, but it doesn't need as much attention as the step size setting; the step size will shorten near periapsis and lengthen near apoapsis on its own). The histories are still in fixed steps of 10 s.
- There is an initial configuration for RealSolarSystem: the planets will start in the right places as given by the JPL HORIZONS service, and they are given gravity models using the freshest data available (Vesta's model is from Dawn data, some Cassini data gets used). A side effect of that is that the moon becomes far more accurate: since the motion of the moon is very much a 3-body problem, it cannot be accurately represented in RealSolarSystem alone. In particular, real-life eclipses can be observed in Principia + RealSolarSystem. This configuration also includes J₂ for the Sun, the planets, the Moon, and Vesta, so the resulting effects are felt (precession of Earth orbits, the possibility of heliosynchronous orbits, etc.).
- Bourbaki is save-compatible with Borel. However, for RealSolarSystem users, please note that unless you reset the plugin, the new initial state and gravity model configuration files will not be taken into account.
- Reimplemented the integrators: the symplectic Runge-Kutta-Nyström integrator was reimplemented more cleanly, an embedded explicit Runge-Kutta-Nyström integrator was implemented. Abstractions for differential equations were created.
For more details see all 89 pull requests between Borel and Bourbaki.
- Ported to version 1.0.x of KSP.
- Added custom navball settings, so that the navball can be fixed in the reference frame in which the trajectory is plotted; the IVA navball is unaffected; when using the custom navball, the prograde/retrograde vectors are now in the correct reference frame, consistent with what is shown is map view; the rest of the Frenet trihedron (the radial and normal vectors) are unaffected at the moment and will be fixed in another version.
- Added a setting to clip histories.
- Added a toolbar button to show/hide the UI.
- The UI now acknowledges the F2 key.
- Less memory-hungry.
- Fixed a crash (#463) when attempting to integrate with tmax_is_exact and tmax is at the end of the trajectory.
- Fixed a crash (#480) caused by an access a non-existent vessel.
- Fixed a UI bug (#502 where, if the vessel is switched, the map kept showing the trace from the last viewed vessel.
For more details see all 27 pull requests between Bolzano and Borel.
- Changed the serialization code to read/write data in chunks instead of holding several copies of the entire serialized form in memory.
- Added numerous integrators, and restructured the code to separate the symplectic Runge-Kutta-Nyström integrators from the symplectic partitioned Runge-Kutta integrators. Started to analyze their numerical characteristics and performance.
For more details see all 11 pull requests between Bessel and Bolzano.
- Rudimentary predictions have been added. The predictions are currently using the same integration method (McLachlan and Atela's 1992 optimal 5th order method), with the same splitting of the Hamiltonian (kinetic + potential energy), this is somewhat usable but unacceptably slow.
- Fixed a bug (#461) where Principia would switch to a nonrotating reference frame while still in the atmosphere.
For more details see all 5 pull requests between Бернштейн and Bessel.
- Fixed a crash on revert to VAB: when reverting to VAB, the old save was loaded immediately, but the time was only reset when exiting the VAB. Running Principia in the editor caused it to integrate back to the future, and caused a crash when KSP's time was reverted. Thanks to @diomedea for reporting this.
For more details see all 6 pull requests between Bernoulli and Бернштейн.
- Improved logging by printing out the stack trace in case of crash, as well as the base address of the DLL.
- Minor UI improvements.
For more details see all 6 pull requests between Banach and Bernoulli.
First non-ɑ release (also known as: first β release). It might be possible to play.
- Serialization has been implemented. It is now possible to save the state of Principia.
- Improved rendering performance by not reallocating gigantic objects at every frame. Thanks to @sarbian for pointing this out.
For more details see all 39 pull requests between Agnesi and Banach.
- Fixed a crash due to adding 0-part vessels to the physics bubble.
- Fixed a bug where the plugin would still manage the physics bubble at ground level on bodies without an atmosphere.
- Fixed a bug where a crashed vessel would keep being simulated.
- Improved performance by not calling FindObjectOfType at every frame.
- Started work on serialization using the Google protocol buffer library.
For more details see all 4 pull requests between Ackermann and Agnesi.
- Better logging and UI controls for logging.
For more details see all 2 pull requests between Abel and Ackermann.
First public ɑ release. Not exactly usable. About 9 months of development before that point.
For more details see all 300 pull requests before Abel.
- Kronecker
- Колмогоров
- von Koch
- Klein
- Kleene
- 𒁹𒆠𒁷𒉡
- کاشانی
- Καραθεοδωρή
- Канторович
- 掛谷
- Julia
- Jordan
- 賈憲
- 𓇹𓄟𓋴𓏲
- Jensen
- Jacobi
- 岩澤
- 伊藤
- ابن الهيثم
- Ὑπατία
- Hurwitz
- Householder
- Horner
- l’Hôpital
- Ἱπποκράτης
- Ἱππίας
- Ἵππασος
- Ἵππαρχος
- Hilbert
- Hesse
- Ἥρων
- Hermite
- Heine
- Hausdorff
- हरीश चंद्र
- Hardy
- Hamilton
- Halley
- Hadamard
- Haar
- Grothendieck
- Grossmann
- Gröbner
- Green
- Grassmann
- Goldbach
- Gödel
- Germain
- Гельфонд
- Гельфанд
- Gauss
- Gateaux
- Galois
- Gallai
- Galileo
- Fuchs
- Fubini
- Frobenius
- Frenet
- Frege
- Fréchet
- פרנקל
- Fourier
- Fibonacci
- del Ferro
- Ferrari
- Fermat
- Fatou
- Fáry
- Fano
- Euler
- Εὐκλείδης
- Εὔδοξος
- Erdős
- Ἐρατοσθένης
- Διόφαντος
- Descartes
- Desargues
- Δημόκριτος
- Dedekind
- Darboux
- Cramer
- Coxeter
- Cohen
- Clifford
- Christoffel
- 陈景润
- Chasles
- Cesàro
- Чебышёв
- Cayley
- Cauchy
- Catalan
- Cartan
- Cardano
- Cantor
- بوژگانی
- Burnside
- Буняковский
- Buffon
- Brouwer
- Bourbaki
- Borel
- Bolzano
- Bessel
- Бернштейн
- Bernoulli
- Banach
- Agnesi
- Ackermann
- Abel