Jump to content

Changing a 'partless' part mod to a 'partful' one? Craft Sharing systems vs 'partless' part mods


Recommended Posts

When I submitted craft with Explodium Breathing Engines to Kerbal X for the first time, it didn't recognize my ExV parts. These are Module Manager patches that clone stock parts and change several properties, as originally suggested by DStaal to avoid copy / pasting material owned by Squad. While this works in-game, it doesn't work well for craft sharing apparently.

I tried Craft Manager to upload craft from in-game to Kerbal X, which works, but the parts get listed as Squad-owned parts and they don't seem to retain mass or cost values. Which in a logical sense they are, since they are cloned and only have some properties changed.

I would just change all of the parts to stand-alone parts, like OhioBob does for his Eve Optimized Engines, but I worry about infringing Squad's copyright by just copy / pasting the majority of the part configs. 

Should I just do that anyway? Would Take Two have a fit? Or is there a better solution? For instance, some way to tell Module Manager to modify the parentUrl for these parts somehow so the parts look like they're from someplace other than "Squad."

It's not just Kerbal X I need concern myself with now, since Steam Workshop now supports craft sharing in KSP 1.4.4.

Link to comment
Share on other sites

On 7/12/2018 at 5:02 PM, Gordon Fecyk said:

When I submitted craft with Explodium Breathing Engines to Kerbal X for the first time, it didn't recognize my ExV parts. These are Module Manager patches that clone stock parts and change several properties, as originally suggested by DStaal to avoid copy / pasting material owned by Squad. While this works in-game, it doesn't work well for craft sharing apparently.

I tried Craft Manager to upload craft from in-game to Kerbal X, which works, but the parts get listed as Squad-owned parts and they don't seem to retain mass or cost values. Which in a logical sense they are, since they are cloned and only have some properties changed.

I would just change all of the parts to stand-alone parts, like OhioBob does for his Eve Optimized Engines, but I worry about infringing Squad's copyright by just copy / pasting the majority of the part configs. 

Should I just do that anyway? Would Take Two have a fit? Or is there a better solution? For instance, some way to tell Module Manager to modify the parentUrl for these parts somehow so the parts look like they're from someplace other than "Squad."

It's not just Kerbal X I need concern myself with now, since Steam Workshop now supports craft sharing in KSP 1.4.4.

I’ve never used Kerbal X, maybe you have to register mods it’s not already familiar with.

As for MM part names, you should definitely change the name if you are doing more than tweaking values.

Link to comment
Share on other sites

11 hours ago, 0something0 said:

What if you copypasted modded part configs?

That's the question I don't have the answer for. I'd convert the 'partless' configs into full configs, but the majority of their settings would be from Squad / Take Two content.

Granted I'm already using modified textures originally taken from the stock textures, which I think is OK per Part 8 of the add-on posting rules as these textures reside in GameData. 

Quote

8. Legal boundaries

You may not decompile, modify or distribute any of the .dll files or other files KSP comes with beyond content of the GameData folder. Follow the EULA. For assemblies, you may only use exposed public or protected members of classes, and you may not examine the code within any member.

No one's complained yet. I'm surprised this hasn't changed with the Take Two acquisition.

If this is still the case, then I'd just copy / paste the original parts and make my changes. Just want to be sure this is OK. Otherwise I'll need to find some other solution for Kerbal X and Steam Workshop that still works with Module Manager-generated parts.

Link to comment
Share on other sites

There's a part mapper utility available from Kerbal X that can scan the parts of a craft against the list of mods installed. This can upload modded parts to Kerbal X. My problem is the parts in my mod are only but Module Manager patches, and not parts in their own right. No parts, nothing to upload, and it's a 'partless' mod. The logic makes sense actually.

The Craft Manager plugin can upload these parts to Kerbal X, because that pulls the parts out of KSP's database in memory at the time. This let me upload the craft without missing part warnings, but this caused a new problem: The parts appear to belong to the mod 'Squad,' because of the parentURL of these parts still has "Squad/Parts/" in the path. That too isn't Kerbal X's fault; it is the nature of the Module Manager patches cloning stock parts and not changing the parentURL for them.

There doesn't appear to be a way to also change the URL of these parts as part of the part cloning process, so Craft Manager doesn't know any better. And the part mapper doesn't try to interpret Module Manager patches.

That being said, Katateochi's reached out to me and asked if there is something to look for in these parts to make them stand out, and he'd add a filter rule for me. I appreciate that, but it's not fair to them or to Kerbal X. Also, I can't account for Steam Workshop to do the same thing. It turns out there's not much to distinguish the parts aside from a different URL for the model textures, and even then I can't replace the textures for the Goliath engine or the Big-S wings without causing null reference exceptions. Maybe if I could somehow make alternate textures work for those parts, they could use that as a filter rule. Again though, I can't count on Steam Workshop or other craft repositories to be so accommodating.

Link to comment
Share on other sites

56 minutes ago, Gordon Fecyk said:

There's a part mapper utility available from Kerbal X that can scan the parts of a craft against the list of mods installed. This can upload modded parts to Kerbal X. My problem is the parts in my mod are only but Module Manager patches, and not parts in their own right. No parts, nothing to upload, and it's a 'partless' mod. The logic makes sense actually.

The Craft Manager plugin can upload these parts to Kerbal X, because that pulls the parts out of KSP's database in memory at the time. This let me upload the craft without missing part warnings, but this caused a new problem: The parts appear to belong to the mod 'Squad,' because of the parentURL of these parts still has "Squad/Parts/" in the path. That too isn't Kerbal X's fault; it is the nature of the Module Manager patches cloning stock parts and not changing the parentURL for them.

There doesn't appear to be a way to also change the URL of these parts as part of the part cloning process, so Craft Manager doesn't know any better. And the part mapper doesn't try to interpret Module Manager patches.

That being said, Katateochi's reached out to me and asked if there is something to look for in these parts to make them stand out, and he'd add a filter rule for me. I appreciate that, but it's not fair to them or to Kerbal X. Also, I can't account for Steam Workshop to do the same thing. It turns out there's not much to distinguish the parts aside from a different URL for the model textures, and even then I can't replace the textures for the Goliath engine or the Big-S wings without causing null reference exceptions. Maybe if I could somehow make alternate textures work for those parts, they could use that as a filter rule. Again though, I can't count on Steam Workshop or other craft repositories to be so accommodating.

What you could do is add a new module to each part.  The module doesnt have to do anything, it just has to be there.  And then he can look for that module in the part, if its there, it can identify the mod where i5 is from.

Link to comment
Share on other sites

28 minutes ago, linuxgurugamer said:

What you could do is add a new module to each part.  The module doesnt have to do anything, it just has to be there.

Did you suggest this already? Or maybe you did for someone else and I remember reading it. Sounds familiar.

I can try this to satisfy Kerbal X and see what happens. Would something like +ModuleExvPlaceholder{name=placeholder} be enough?

Link to comment
Share on other sites

  • 2 weeks later...
On 7/18/2018 at 3:25 AM, Gordon Fecyk said:

Did you suggest this already? Or maybe you did for someone else and I remember reading it. Sounds familiar.

I can try this to satisfy Kerbal X and see what happens. Would something like +ModuleExvPlaceholder{name=placeholder} be enough?

oh, hey, I totally missed the notification for this thread!
yes, adding a custom module with a name that is unique to your mod would be the way to go.  For example, tweakscale adds a module called "TweakScale" to each part and I can then detect that. In the case of tweakscale (and this is worth noting) that module is added to every part, even if the part isn't resized, but within that module are two values, one for current and one for default so I can check if those values are different, and if not ignore it.
eg tweakscale adds this to a part

MODULE
{
    name = TweakScale	
    currentScale = 1.25
    defaultScale = 1.25
    .......
}

KX detects that module, but as the two values are the same it ignores it, so a craft can have TweakScale modules present but if they're not doing anything it ignores them.
So if your mod adds a module to parts regardless of it being active, then add a value which acts as a flag to say if it's active or not.  Something like;

MODULE
{
    name = YourModName
    active = true
}

Then let me know add I'll add that to the list of partless mods that KX checks for.

On 7/18/2018 at 1:54 AM, Gordon Fecyk said:

add a filter rule for me. I appreciate that, but it's not fair to them or to Kerbal X. Also, I can't account for Steam Workshop to do the same thing

For me it's not a problem. While I'd like to have everything automated and self learning, Module Manager patches is one bit I've not figured out to do, so it's just the way I've got to do it. And it's pretty easy for me to add in a new rule.
From what I've seen of the steam workshop approach (I poked it with a stick in disgust) it doesn't have (and sorry to blow KX's trumpet here) anything like the mod detection capability of KerbalX. Regardless of which parts a craft has, all it's able to do is just list all the installed dlls, which doesn't even come close to reflecting the actual mods a craft uses.  (and I can't even get it to submit that list along with the craft, or a description). So whatever you do, steam workshop is a long way off being able to detect a specific mod on a specific craft. </end rant, sorry, not sorry>

Link to comment
Share on other sites

On ‎7‎/‎28‎/‎2018 at 10:11 AM, katateochi said:

So if your mod adds a module to parts regardless of it being active, then add a value which acts as a flag to say if it's active or not.

This might not be behaving the way we expected it to. I added ModuleExvPlaceholder to a part cloned from shockConeIntake:

+PART[shockConeIntake]:FOR[ExplodiumBreathingEngines]
{
	@name = shockConeIntakeExV
	// ... insert rest of part changes here
	// Placeholder module to assist Kerbal X and other craft repositories with modified part detections
	%MODULE[ModuleExvPlaceholder]
	{
		%active = true
	}
}

This produced the following in the Module Manager cache:

UrlConfig
{
	name = shockConeIntakeExV
	type = PART
	parentUrl = Squad/Parts/Aero/circularIntake/intakeShockCone
	PART
	{
		// ... Rest of part defined here
		MODULE
		{
			name = ModuleExvPlaceholder
			active = true
		}
		// ... Rest of part defined here
	}
}

Then I tried building a new craft with just a Mk2 inline cockpit and the part, and the placeholder module didn't show up. Resulting craft file is in this spoiler area.

Spoiler

ship = Untitled Space Craft
version = 1.4.3
description = 
type = SPH
size = 2.5,1.8835144,3.81011343
persistentId = 292851695
rot = 0,0,0,0
missionFlag = KanadianDictionary/Flags/imgur
vesselType = Debris
PART
{
	part = mk2Cockpit.Inline_4294706808
	partName = Part
	persistentId = 3258937109
	pos = 0.0350779295,10.2404585,0.0247310922
	attPos = 0,0,0
	attPos0 = 0.0350779295,10.2404585,0.0247310922
	rot = 0.707106829,0,0,0.707106829
	attRot = 0,0,0,1
	attRot0 = 0.707106769,0,0,0.707106769
	mir = 1,1,1
	symMethod = Mirror
	autostrutMode = Off
	rigidAttachment = False
	istg = -1
	resPri = 0
	dstg = 0
	sidx = -1
	sqor = -1
	sepI = -1
	attm = 0
	modCost = 0
	modMass = 0
	modSize = 0,0,0
	link = shockConeIntakeExV_4294695116
	attN = top,shockConeIntakeExV_4294695116_0|1.25|0
	EVENTS
	{
	}
	ACTIONS
	{
	}
	PARTDATA
	{
	}
	MODULE
	{
		name = ModuleCommand
		isEnabled = True
		hibernation = False
		hibernateOnWarp = False
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
			MakeReferenceToggle
			{
				actionGroup = None
			}
			HibernateToggle
			{
				actionGroup = None
				active = False
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleReactionWheel
		isEnabled = True
		actuatorModeCycle = 0
		authorityLimiter = 100
		stateString = Active
		stagingEnabled = True
		WheelState = Active
		EVENTS
		{
		}
		ACTIONS
		{
			CycleAction
			{
				actionGroup = None
			}
			Activate
			{
				actionGroup = None
			}
			Deactivate
			{
				actionGroup = None
			}
			Toggle
			{
				actionGroup = None
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleScienceExperiment
		isEnabled = True
		Deployed = False
		Inoperable = False
		cooldownToGo = 0
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
			DeployAction
			{
				actionGroup = None
			}
			ResetAction
			{
				actionGroup = None
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleScienceContainer
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
			CollectAllAction
			{
				actionGroup = None
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = FlagDecal
		isEnabled = True
		flagDisplayed = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleAnimateGeneric
		isEnabled = True
		aniState = LOCKED
		animSwitch = True
		animTime = 0
		animSpeed = 1
		deployPercent = 100
		animationIsDisabled = False
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
			ToggleAction
			{
				actionGroup = Light
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleDataTransmitter
		isEnabled = True
		xmitIncomplete = False
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
			StartTransmissionAction
			{
				actionGroup = None
				active = False
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = GeometryPartModule
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = FARAeroPartModule
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = FARPartModule
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleTripLogger
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		Log
		{
			flight = 0
		}
		UPGRADESAPPLIED
		{
		}
	}
	RESOURCE
	{
		name = ElectricCharge
		amount = 150
		maxAmount = 150
		flowState = True
		isTweakable = True
		hideFlow = False
		isVisible = True
		flowMode = Both
	}
	RESOURCE
	{
		name = MonoPropellant
		amount = 25
		maxAmount = 25
		flowState = True
		isTweakable = True
		hideFlow = False
		isVisible = True
		flowMode = Both
	}
}
PART
{
	part = shockConeIntakeExV_4294695116
	partName = Part
	persistentId = 3007171446
	pos = 0.0350779295,10.2404585,1.89973164
	attPos = 0,0,0
	attPos0 = 0,1.87500036,-2.38418579E-07
	rot = 0.707106829,0,0,0.707106829
	attRot = 0,0,0,1
	attRot0 = 0,0,0,1
	mir = 1,1,1
	symMethod = Mirror
	autostrutMode = Off
	rigidAttachment = False
	istg = -1
	resPri = 0
	dstg = 0
	sidx = -1
	sqor = -1
	sepI = -1
	attm = 0
	modCost = 0
	modMass = 0
	modSize = 0,0,0
	attN = bottom,mk2Cockpit.Inline_4294706808_0|-0.625|0
	EVENTS
	{
	}
	ACTIONS
	{
	}
	PARTDATA
	{
	}
	MODULE
	{
		name = ModuleResourceHarvester
		isEnabled = True
		EfficiencyBonus = 1
		IsActivated = False
		stagingEnabled = True
		lastUpdateTime = 0
		EVENTS
		{
		}
		ACTIONS
		{
			StopResourceConverterAction
			{
				actionGroup = None
			}
			StartResourceConverterAction
			{
				actionGroup = None
			}
			ToggleResourceConverterAction
			{
				actionGroup = None
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleAnimateHeat
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = ModuleAnimationGroup
		isEnabled = True
		isDeployed = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
			DeployModuleAction
			{
				actionGroup = None
			}
			RetractModuleAction
			{
				actionGroup = None
			}
			ToggleModuleAction
			{
				actionGroup = None
			}
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = GeometryPartModule
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = FARAeroPartModule
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	MODULE
	{
		name = FARPartModule
		isEnabled = True
		stagingEnabled = True
		EVENTS
		{
		}
		ACTIONS
		{
		}
		UPGRADESAPPLIED
		{
		}
	}
	RESOURCE
	{
		name = ExpVapour
		amount = 0.20000000000000001
		maxAmount = 0.20000000000000001
		flowState = True
		isTweakable = False
		hideFlow = False
		isVisible = False
		flowMode = Both
	}
}

 

Maybe I need to declare the module somewhere else first?

[Update 14 AUG 2018] There doesn't seem to be a solution that would permit me to retain Module Manager usage. The next release of this add-on will be fully defined parts and not just MM clones, along the lines of Eve Optimized Engines. Hopefully Take Two doesn't have a fit.

Edited by Gordon Fecyk
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...