Jump to content

How do you get an engine to apply thrust if there are parts behind it?


Recommended Posts

I'm confused at the moment on how to apply thrust through parts. I'm working on a frontal-facing propeller/intake hybrid part (if it were in reality, the propeller provides thrust while pushing intake air inside it; the very pushing of the intake air provides the thrust), but I'm a newbie coder in KSP, so I'm really just using code from stock parts to make this. Here is the current CFG file:

PART
{
	name = PropellerIntake
	module = Part
	author = Daxturus
	rescaleFactor = 1
	node_stack_bottom01 = 0.0, 0.0, 0.0, 0.0, -1.0, 0.0
	buoyancy = 0.1
	TechRequired = aerodynamicSystems
	entryCost = 2400
	cost = 1600
	category = Aero
	subcategory = 0
	title = KK-20 Propeller Engine
	manufacturer = C7 Aerospace Division
	description = When first presented to C7's board of advisors, it was adopted quickly for use as an efficient frontal thruster, best suited for subsonic flight. It also doubles as an air intake.
	attachRules = 1,0,1,0,0
	stackSymmetry = 2
	mass = 1.2
	thermalMassModifier = 8.0
	heatConductivity = 0.12 // half default
	emissiveConstant = 0.55
	dragModelType = default
	maximum_drag = 0.3
	minimum_drag = 0.3
	angularDrag = 1
	crashTolerance = 12
	maxTemp = 1800 // = 3400
	fuelCrossFeed = True
	bulkheadProfiles = size1
	tags = #autoLOC_500144 //#autoLOC_500144 = aero (air breathe fligh inlet jet oxygen plane subsonic suck
	MODEL
	{
		model = (I personally took this out, this is something else)
	}
	DRAG_CUBE
	{
		cube = Default, 0.7536889,0.6974452,0.7221569, 0.7536889,0.6974494,0.7221569, 1.213026,0.45,0.7008534, 1.213026,0.9357337,0.1625167, 0.7536888,0.6983959,0.7221569, 0.7536888,0.6964872,0.7221569, 0,0.269185,3.208935E-08, 1.25,0.6633701,1.25
	}
	MODULE
	{
		name = ModuleResourceIntake
		resourceName = IntakeAir
		checkForOxygen = true
		area = 0.006
		intakeSpeed = 15
		intakeTransformName = Intake
		machCurve
		{
			key = 1 1 0 0
			key = 2 0.95 -0.4312553 -0.4312553
			key = 3 0.85 -0.5275364 -0.5275364
			key = 4 0.7 0 0
		}
	}
	RESOURCE
	{
		name = IntakeAir
		amount = 0.4
		maxAmount = 0.4
	}
	MODULE
	{
		name = ModuleAnimateHeat
		ThermalAnim = IntakeCircularHeat
	}
	MODULE
	{
		name = ModuleEnginesFX
		thrustVectorTransformName = thrustTransform
		exhaustDamage = False
		ignitionThreshold = 0.1
		minThrust = 0
		maxThrust = 60
		heatProduction = 35
		useEngineResponseTime = True
		engineAccelerationSpeed = 0.3
		engineDecelerationSpeed = 0.3
		useVelocityCurve = False
		flameoutEffectName = flameout
		powerEffectName = running_thrust
		runningEffectName = shockDiamond
		engageEffectName = engage
		disengageEffectName = disengage
		spoolEffectName = running_turbine
		engineSpoolIdle = 0.03
		engineSpoolTime = 3.0
		EngineType = Turbine
		exhaustDamageMultiplier = 0
		clampPropReceived = True
		PROPELLANT
		{
			name = IntakeAir
			ignoreForIsp = True
			ratio = 8
		}
		PROPELLANT
		{
			name = LiquidFuel
			resourceFlowMode = STAGE_STACK_FLOW_BALANCE
			ratio = 1
			DrawGauge = True
		}
		atmosphereCurve
		{
			key = 0 10500 0 0 
		}
		// Jet params
		atmChangeFlow = True
		useVelCurve = True
		useAtmCurve = True
		flowMultCap = 1.0
		machLimit = 2.5
		machHeatMult = 2.0
		velCurve
		{
			key = 0 1.3 0 0
			key = 0.5 1.1 0 0
			key = 1 1 2.433527 2.433527
			key = 1.5 0.9 1.986082 1.986082
			key = 2 0.85 1.452677 1.452677
			key = 3 0.8 1.452677 1.452677
			key = 10 0.7 1.452677 1.452677
		}
		atmCurve
		{
			// definite 'kink' to the curve at high altitude, compared to flatter BJE curve
			key = 0 0 0 0
			key = 0.045 0.5 4.304647 4.304647
			key = 0.16 0.5 0.5779132 0.5779132
			key = 0.5 0.6 0.4809403 0.4809403
			key = 1 1 1.013946 0
		}
	}
	MODULE
	{
		name = ModuleAnimateHeat
		ThermalAnim = TF1Heat
	}
	MODULE
	{
		name = ModuleTestSubject
		useStaging = True
		useEvent = True
		situationMask = 15
		CONSTRAINT
		{
			type = OXYGEN
			value = True
		}
		CONSTRAINT
		{
			type = SPEEDENV
			test = LT
			value = 200
			prestige = Trivial
		}
		CONSTRAINT
		{
			type = SPEEDENV
			test = GT
			value = 100
			prestige = Trivial
		}
		CONSTRAINT
		{
			type = SPEEDENV
			test = LT
			value = 100
			prestige = Significant
		}
		CONSTRAINT
		{
			type = SPEEDENV
			test = GT
			value = 50
			prestige = Significant
		}
		CONSTRAINT
		{
			type = SPEEDENV
			test = LT
			value = 50
			prestige = Exceptional
		}
		CONSTRAINT
		{
			type = SPEEDENV
			test = GT
			value = 20
			prestige = Exceptional
		}
		CONSTRAINT
		{
			type = SPEED
			test = LT
			value = 300
			situationMask = 8
		}
		CONSTRAINT
		{
			type = SPEED
			test = GT
			value = 50
			situationMask = 8
		}
		CONSTRAINT
		{
			type = DENSITY
			test = GT
			value = 0.3
			situationMask = 8
			prestige = Trivial
		}
		CONSTRAINT
		{
			type = DENSITY
			test = GT
			value = 0.1
			situationMask = 8
			prestige = Significant
		}
		CONSTRAINT
		{
			type = DENSITY
			test = GT
			value = 0.05
			situationMask = 8
			prestige = Exceptional
		}
		CONSTRAINT
		{
			type = ALTITUDEENV
			test = GT
			value = 4000
			prestige = Trivial
		}
		CONSTRAINT
		{
			type = ALTITUDEENV
			test = LT
			value = 8000
			prestige = Trivial
		}
		CONSTRAINT
		{
			type = ALTITUDEENV
			test = GT
			value = 1000
			prestige = Significant
		}
		CONSTRAINT
		{
			type = ALTITUDEENV
			test = LT
			value = 2000
			prestige = Significant
		}
		CONSTRAINT
		{
			type = ALTITUDEENV
			test = GT
			value = 500
			prestige = Exceptional
		}
		CONSTRAINT
		{
			type = ALTITUDEENV
			test = LT
			value = 1000
			prestige = Exceptional
		}
		CONSTRAINT
		{
			type = REPEATABILITY
			value = ALWAYS
			prestige = Trivial
		}
		CONSTRAINT
		{
			type = REPEATABILITY
			value = BODYANDSITUATION
			prestige = Significant
		}
		CONSTRAINT
		{
			type = REPEATABILITY
			value = ONCEPERPART
			prestige = Exceptional
		}
	}
	MODULE
	{
		name = ModuleSurfaceFX
		thrustProviderModuleIndex = 0
		fxMax = 0.5
		maxDistance = 20
		falloff = 2
		thrustTransformName = thrustTransform
	}
	EFFECTS
	{		
		running_thrust
		{			
			AUDIO
			{
				channel = Ship
				clip = sound_jet_deep
				volume = 0.0 0.0
				volume = 0.05 0.4
				volume = 1.0 1.5
				pitch = 0.0 0.3
				pitch = 1.0 0.5
				loop = true
			}
			PREFAB_PARTICLE
			{
				prefabName = fx_smokeTrail_light
				transformName = thrustTransformFX
				emission = 0.0 0.0
				emission = 0.05 0.0
				emission = 0.075 0.25
				emission = 1.0 1.25
				speed = 0.0 0.25
				speed = 1.0 1.0
				localOffset = 0, 0, 1
				localRotation = 1, 0, 0, -90
			}					
		}
		running_turbine
		{
			AUDIO
			{
				channel = Ship
				clip = sound_jet_low
				volume = 0.0 0.0
				volume = 0.05 0.2
				volume = 1.0 0.45
				pitch = 0.0 0.3
				pitch = 0.05 0.5
				pitch = 1.0 0.65
				loop = true
			}
		}
		engage
		{
			AUDIO
			{
				channel = Ship
				clip = sound_vent_medium
				volume = 1.0
				pitch = 2.0
				loop = false
			}
		}
		disengage
		{
			AUDIO
			{
				channel = Ship
				clip = sound_vent_soft
				volume = 1.0
				pitch = 2.0
				loop = false
			}
		}
		flameout
		{
			PREFAB_PARTICLE
			{
				prefabName = fx_exhaustSparks_flameout_2
				transformName = thrustTransformFX
				oneShot = true
			}
			AUDIO
			{
				channel = Ship
				clip = sound_explosion_low
				volume = 1.0
				pitch = 2.0
				loop = false
			}
		}
	}
}

The engine makes noise, shows an increase in thrust, in kilonewtons, but there is no real thrust. I believe it's because it's attached to a part in the direction of the thrust, which I know the game does not like.

What module/code should I add so the part essentially ignores the part it is attached to? Thanks in advance!

Edited by Daxturus
Clarity
Link to comment
Share on other sites

I'll add to sarbians post above , that your engine actually needs , based on the posted cfg, TWO thrust transforms.   One called thrustTransform  and second called thrustTransformFX

PS if you have the transforms in place and exhaust damage turned off , the thrust will indeed pass right through the part , most if not all KSP propeller engines that can be found in various mods, have the thrust transform just behind or right on the prop itself, so usually inside or adjacent to a collider

Edited by SpannerMonkey(smce)
Link to comment
Share on other sites

Looking at the code I see a name that suggests the small (size 0) circular intake. The problem is that you need a model that has two transforms in it: One with a transform for the intake module (facing forward) and the second with a transform facing backward for thrust. The only transform available to you is the one used by the intake module and you don't want that.

You'll have to learn part welding and manipulation of multiple models in a part via MODEL {} config nodes. Ultimately you'll need to add (for example) the Juno engine's model, scale it down even more and then you can think about whether the part behind it is blocking thrust.

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...