Jump to content

decouplers that form interstages are 'cones to smaller' but should be 'cylinders to equal'


Recommended Posts

Hey there,

on the screenshot below:


you can see "SM" type decoupler generates a procedural cone to the size of the smaller engine - this is not how it works on rockets - the KSP's decoupler plate is the base for procedural (idealy) cylinder to the part (fuel tank) that is _BEFORE_ an engine (which we hide in interstage for launch) on the stack. So the code should take a part to which an engine is attached and then attempt to cast procedural cylinder (ok, cone) to this part's diameter, and if it produces an error (say engine is attached to small ocagonal strut instead of a tank) either produce an error message or, which is better, attempt to find a "good" part up the stack to cast a cone to

...alternatively, it is possible to display a user-editable (shader-highlit) proposed cone\cylinder which turns red if some stupid combination is there (say, the player attempts to attach decoupler to an engine that is attached sideways to the fuel tank via octagonal strut) - in this case the player is presented with clear picture view why this wouldn't work to create an insterstage and optionally may elect to only use the decoupler plater (say by right clicking once to remove shroud depiction) for his\her radial decoupling needs

Link to comment
Share on other sites

Generated elements like shrouds etc, and parts in general never align to grandparent parts, never have. They don't know what is above the engine, it applies the shroud to its diameter, period.

Use engine plates when you're working with size differences.

Edited by The Aziz
Link to comment
Share on other sites

9 hours ago, The Aziz said:

parts in general never align to grandparent parts, never have

you are very very wrong in this statement... how does fairing builder work? say you start with a cone of radius R1 and then your next R2 is larger and then, say on R5 you encounter an antenna sticking out - can you complete your fairing? no... it shows you that there is no valid (collision-free) intersection at such radius - and how does it do it?

foreach (Part thisPart in PartsAboveFairingBase) {

  if (thisPart.dimension.x >= fairingRadius || thisPart.dimension.y >= fairingRadius || thisPart.dimension.y >= fairingRadius) DisplayFairingSegmentInvalid();


So, it is a bug with going throught the stack above the decoupler, which should have almost the same logic of checking as fairing has.

Link to comment
Share on other sites

  • Create New...