Staging Delta-V / TWR readout omits sub-part inert mass, so it reads too optimistic vs the vehicle's real mass

Maxi

Member
Oct 17, 2025
150
99

Game Version

2026.7.8.4980

Operating System

Windows 10

What Happened​

The per-sequence Delta-V / TWR / Isp readout (the staging performance panel, backed by SequencePerformanceList) computes each stage's start ("wet") mass as the sum of every top-level part's own InertMass plus the fuel in the reachable tanks.
It never adds the inert mass carried on a part's sub-parts (sub-components).

The physics mass the vehicle actually flies with (Vehicle.TotalMass) does include that sub-part inert mass, because it is built from the tree-wide InertMass list.

The consequence is that, for any vehicle that carries mass on sub-parts, every stage's wet mass in the staging panel is lower than the vehicle's real mass, so the shown Delta-V and TWR read too optimistic and are internally inconsistent with the flight model.

Measured on the stock default "Rocket" demo vehicle (in vacuum):
  • First stage: real total mass 590,930.8 kg, but the staging wet mass is 590,845.1 kg. Difference: 85.8 kg too low.
  • Upper stage: real mass 72,566.2 kg, but the staging wet mass is 72,480.5 kg. Difference: 85.8 kg too low.
  • Total staged Delta-V: 18,143.5 m/s against the real mass, but the panel reports 18,195.7 m/s. The panel is +52.2 m/s (+0.3%) high; the upper stage alone is +0.5% high (10,083.6 vs 10,132.3 m/s).
  • The fuel burned, mass-flow rate and exhaust velocity match exactly between the two computations, which isolates the whole discrepancy to the inert-mass term.

Where the 85.8 kg comes from:


It is the docking port CoreCouplingA_Prefab_DockingPort1WA: its entire mass sits on its sub-part CoreCouplingA_Subpart_InteriorTunnelA, while the docking port's own top-level InertMass is 0.00 kg. So the staging math sees the docking port as weightless. I used an mod to do an per-part InertMass dump on the Rocket:

CoreCouplingA_Prefab_DockingPort1WA: own 0.00 kg, sub-parts 85.77 kg
TOTALS: top-level own 20316.01 kg, sub-part 85.77 kg, TotalMass 590930.81 kg
heaviest sub-part templates:
CoreCouplingA_Subpart_InteriorTunnelA x1 = 85.77 kg

The offset is a fixed 85.8 kg regardless of stage mass. On this vehicle the effect is small (about 0.014% of mass, 0.3% of total dV), but it is a fixed real error on every vehicle that carries such a part, and it grows with however much mass a design stores on sub-parts (a station or a build with several docking ports multiplies it).

What Was Expected​

The staging performance panel should use the same total inert mass that the physics uses for Vehicle.TotalMass (the whole part tree, sub-parts included), so the stage wet mass, Delta-V and TWR match the mass the vehicle actually flies with.
As it stands, a docking port (and any part that stores its mass on sub-parts) is invisible to the staging calculation, and the panel promises a bit more dV and TWR than the ship can deliver.

Reproduction Steps​

  1. Start the base game with only Core enabled (verify with the console "mods" command).
  2. Load a vehicle that carries a docking port.
  3. Enable "Show Delta-V Debug" from the debug menu to open the Delta-V Debug window.
  4. Expand a sequence and read its "Start mass X (inert Y + fuel Z)" line. The "inert Y" figure is lower than the vehicle's real inert mass (real total mass minus fuel) by the docking port's ~85.8 kg.
  5. Compare the stage wet mass (or "inert Y") against the vehicle's actual total mass. The staging figure is short by the total sub-part inert mass, and the sequence Delta-V/TWR is correspondingly optimistic.

Root cause, for what it is worth from my understanding (from the decompiled 2026.7.8.4980 source):
  • SequencePerformanceList.Recompute builds remainingInertMass by iterating PartTree.Parts (top-level parts only) and adding part.InertMass?.MassPropertiesAsmb.Props.Mass; SequencePerformanceList.JettisonPart subtracts the same per-part figure at staging. Neither walks Part.SubParts, so InertMass modules on sub-parts are never counted.
  • Vehicle.TotalMass comes from PartTree.RecomputeStaticMass (via ComputeInertMassPropertiesAsmb / StaticMassPropsAsmb), which sums the tree-wide PartTree.Modules.Get<InertMass>() and therefore does include sub-part InertMass.
  • So WetMass = (sum of top-level parts' own InertMass) + fuel is less than Vehicle.TotalMass by exactly the sum of sub-part InertMass, and DeltaV and TWR inherit that error because they are derived from WetMass (Isp only for mixed-exhaust-velocity stages, where the rocket-equation terms no longer cancel). Summing inert mass tree-wide (the same source RecomputeStaticMass already uses) would fix them all.

Reproduction Rate​

Always. It is deterministic and affects any vehicle that carries inert mass on sub-parts (for example a docking port).

Additional Info​

  • How I found it: developing a mod that computes staged Delta-V, I added a cross-check that compares the mod's own start mass (taken from Vehicle.TotalMass) against the stock SequencePerformanceList output for the same vehicle. Fuel, mass-flow and exhaust velocity matched to the digit and only the start mass differed, by a constant 85.77 kg. The mod should not have any effect on the results;
  • Impact: affects dV and TWR in the staging panel, both in the "too optimistic" direction; magnitude = the vehicle's total sub-part inert mass (85.77 kg for one docking port here, more for builds that carry several such parts).
 
Upvote 0