Changelog
2.21.0.4 Added Tantares to whitelist Fixed EisenhowerAstronautics name in the whitelist
2.21.0.3 Added EisenhowerAstronautics to the mod whitelist Thanks to github user TonkaCrash for this: Modified GetInfo to suppress info about texture only changes
2.21.0.2 Added a mod whitelist to allow mods which depended on a bug which was fixed in 2.21 from displaying errors. The errors will still be logged to the log file Currently only Bluedog_DB is in the white list
2.21.0.1 Removed spaces from name in version file
2.21.0 Adoption by Linuxgurugamer Added InstallChecker and AssemblyVerison.tt Fix bug where a null entry in the renderers would throw an exception Thanks to github user @Scialytic for this: PR originally submitted to original repo: QoL improvements for parts with a large number of subtypes Thanks to github user @StonesmileGit for this: PR originally submitted to original repo: Handle ModuleFuelTanks nodes
2.20.0.0 Placeholder
- Recompile against KSP 1.12.3
- Add new
allowSwitchFromInFlightoption to subtypes, if a subtype with this set totrueis selected it can't be switched off of in flight - Add Italian localization
- Recompile against KSP 1.12.2
- Recompile against KSP 1.11.2
- Fix modules getting force-enabled when new data is loaded
- Change remote AVC reference so that it notifies even if you change KSP versions
- Prevent exceptions caused by zombie parts
- Recompile against KSP 1.10.1
- Update Spanish localization, add German and Chinese localization
-
Fix description of attach node mover (
SUBTYPE->NODE->positionOffset) for error messages -
Allow node size to be modified
SUBTYPE->NODE->size- Takes an integer
- Will scale with TweakScale (and round to the nearest integer)
-
Allow more flexible name matching in many places
-
If it starts and ends with
/, treat it as a regular expression -
If it contains
*or?, treat those as wildcards (anything or one character respectively) -
Otherwise treat it as a normal string
- If it starts with
\, the next character is/, and it ends with/, eliminate the leading\
- If it starts with
-
Implemented in the following places:
- attach node modifier node name (
SUBTYPE->NODE->name) - transform toggle name (
SUBTYPE->transform) - node toggler name (
SUBTYPE->node) - material modifier transform names (
SUBTYPE->MATERIAL->transform/baseTransform) - texture modifier transform names (
SUBTYPE->TEXTURE->transform/baseTransform) - module modifier name (
SUBTYPE->MODULE->IDENTIFIER->name) - transform modifier transform names (
SUBTYPE->TRANSFORM->name)
- attach node modifier node name (
-
-
Implement custom handling for
ModuleRCSFX- Disable unused effects when switching based on
runningEffectName
- Disable unused effects when switching based on
-
Fix transforms not getting shown/hidden properly after another module updates the model
-
Allow
ModuleB9PartSwitchto have its fields and events placed in a group:uiGroupName- unique identifier of the groupuiGroupDisplayName- human readable name of the group to show in the UI
-
New module for assigning PAW groups on other modules:
ModuleB9AssignUiGroups-
takes one or more
MODULEnodes that each identify a module to have its UI group assigned- each one must have an
IDENTIFIERnode to identify the module- it must have a
namewhich is the name of the module (wildcards and regex are allowed) - it can have any other fields that uniquely identify the module
- This is the same as the
IDENTIFIERin a module switcher
- it must have a
- each one must have an
-
uiGroupName- unique identifier of the group -
uiGroupDisplayName- human readable name of the group to show in the UI -
only applies to fields/events that don't already have a group
-
Cannot apply to
ModuleB9PartSwitch,ModuleB9PartInfo,ModuleB9AssignUiGroups(itself), orModuleSimpleAdjustableFairing
-
- Fix
ModuleJettisonshrouds disappearing in flight (again)
- Preserve drag cube weights when recalculating drag cubes
- Don't call drag cube update methods that will be called by the flight integrator anyway
- Ensure drag cubes aren't recalculated in flight regardless of configuration (it breaks things)
- Recompile against KSP 1.9.1
-
Fix non-unique aspects complaining when present on more than one module
-
Generic material modifiers
MATERIALnodes on subtypes-
transformdefines GameObjects on which to use renderers -
baseTransformdefines GameObjects and children on which to use renderers -
FLOAT- modifies a float propertyshaderProperty- name of the shader property to modifyvalue- float to set the value to
-
COLOR- modifies a color propertyshaderProperty- name of the shader property to modify (default_Color)color- color to set the property to, can be specified in any of the regular formats (name, hex, RGB(A) list)
-
TEXTUREmodifies a texture property (same functionality asTEXTUREnodes directly on the subtype)currentTexture- name of current texture to match when building (not full path) (optional)texture- path to new texture to switch toisNormalMap- whether to access the texture as a normal map or not (default false)shaderProperty- shader property to modify the color on- Default
_MainTexifisNormalMap = false - Default
_BumpMapisisNormalMap = true
- Default
-
-
Listen for
OnPartModelChangedevent to reinitialize model -
Send
ModuleDataChangedto modules that have had their data changed- Include two attributes in the event details,
requestNotifyFARToRevoxelizeandrequestRecalculateDragCubes, which can be used to request FAR/drag cubes updates at the end of the cycle
- Include two attributes in the event details,
-
Transform move/rotation/scale now affect drag cubes/FAR
-
Send/listen for
DragCubesWereRecalculatedandFarWasNotifiedToRevoxelizeto make sure actions are only done once per cycle -
Fix drag cube updates possibly not actually being used
- Support changing
ModuleDeployableSolarPanelchargeRate - Get rid of some useless debug messages related to UI prefabs
- Fix UI breaking on switchers with tech restrictions if subtypes are unlocked out of order
- Fix texture switches breaking on inactive subtypes when a part is duplicated
- Recompile against KSP 1.8.1
- Recompile against KSP 1.8.0
- Stop moving the switcher to the end of the part action window
- Remove
bottomOfWindowparamter
- Fix default subtype not activating on the icon
-
Allow switching UI to not be moved to the end of the part action window
- ModuleB9PartSwitch now accepts
bottomOfWindow = falsewhich will leave it in place - Modules without this new parameter are unaffected
- ModuleB9PartSwitch now accepts
-
Allow transforms to be scaled
TRANSFORM {}nodes now accept ascaleOffsetwhich multiplies the transform's local scalescaleOffseteither accepts a single number for all 3 axes or 3 numbers for x, y, z which can be separated by spaces, tabs, or commas
-
Fix plume switching for ModuleEnginesFX
- Still doesn't support switching in flight
-
Fix Texture switches getting stuck on copied parts
-
Fix node offsets not respecting part rotation when attempting to move the part with the switch
- Add missing Russian localization keys
- Fix surface attach node modifiers not actually doing anything
- Fix surface attach node modifiers checking whether the part allows surface attach to it rather than to parent part
-
Use funds symbol for cost in tooltips
-
Fix vessel size including disabled objects
-
add new
upgradeRequiredfield toSUBTYPEs- References the name of a
PARTUPGRADErequire do unlock the subtype - At least one subtype on every switcher must have no tech restriction (i.e. unlocks with the part), otherwise it will complain and remove the restriction from the first subtype
- All subtypes are unlocked in sandbox regardless of whether upgrades are applied
- Warning if the upgrade doesn't exist
- If you attempt to load a craft with a locked subtype you get a warning that it was replaced with the highest priority unlocked subtype
- References the name of a
-
Add
defaultSubtypePrioritytoSUBTYPEs- Number (float) that determines a subtype's priority as the "default" subtype (i.e. the one that is chosen when you freshly add the part).
- The subtype with the highest priority that is also unlocked will be chosen
- If two subtypes have the same priority and both are unlocked, it will choose the first
- The default value is zero.
-
Add basic implementation of module switching
-
HIGHLY EXPERIMENTAL
-
Subtypes now accept a
MODULEnode-
inside is an
IDENTIFIERnode which is used to identify the module -
it must have a
namewhich is the same as the module-
it can have any other fields that are used to identify the module
- e.g.
engineIDonModuleEngines
- e.g.
-
Identifying the module by nodes is not currently supported
-
-
It accepts a
DATAnode which provides new data to be loaded into the module -
It accepts a
moduleActive = falsevalue which causes the module to be disabled
-
-
Not everything will work initially, custom handling will have to be added for some modules
-
Some modules are blacklisted for loading new data and disabling. This list is subject to change.
ModulePartVariantsModuleB9PartSwitchModuleB9PartInfoModuleB9DisableTransformFSfuelSwitchFSmeshSwitchFStextureSwitchFStextureSwitch2InterstellarFuelSwitchIntersteallarMeshSwitchInterstellarTextureSwitch
-
-
Implement new switching UI based on the stock variant switcher
-
Have subtype switching buttons show some info about the subtype being switched to in a tooltip
- By default shows resources (including parent), mass, cost, max temperature, max skin temperature, crash tolerance
- Also shows
descriptionSummaryanddescriptionDetailfrom subtype, before and after auto-generated info respectively, if present
-
4 new fieds on
SUBTYPE-
descriptionSummary- any info here will be put in the subtype switching tooltip before the auto-generated info - make it brief -
descriptionDetail- any info here will be put in the subtype switching tooltip after the auto-generated info - go nuts -
primaryColor- color to use in the left part of the switching button- if not specified, use the tank type's primaryColor
- if that's not specified, use white
-
secondaryColor- color to use in the right part of the switching button- if not specified, use the tank's secondaryColor
- if that's not specified, use the subtype's primaryColor
- if that's not specified, use the tank's primaryColor
- if that's not specified, use gray
-
-
2 new fields on
B9_TANK_TYPEprimaryColor- color to use in the left part of the switching button i they subtype does not specify one. If not specified, common resource combinations will be used.secondaryColor- color to use in the right part of the switching button i they subtype does not specify one. If not specified, common resource combinations will be used.
-
add default colors for common resources
ResourceColorLiquidFuelResourceColorLqdHydrogenResourceColorLqdMethaneResourceColorOxidizerResourceColorMonoPropellantResourceColorXenonGasResourceColorElectricChargePrimaryResourceColorElectricChareSecondaryResourceColorOre
-
Automatically apply resource colors to common resource combinations in tanks (if colors are not specified by the tank or subtype):
- LiquidFuel
- LiquidFuel/Oxidizer
- LqdHydrogen
- LqdHydrogen/Oxidizer
- LqdMethane
- LqdMethane/Oxidizer
- Oxidizer
- MonoPropellant
- XenonGas
- Ore
- ElectricCharge
- Recompile against KSP 1.7.3
- Recompile against KSP 1.7.1
- Fix part action window showing removed resources in KSP 1.7.1
- Add Russian localization
- Fix part into button being shown when there's no info to display
- Provide more context for subtype initialization errors in the warning dialog
-
Compile for KSP 1.7.0
-
Remove
ModuleB9PropagateCopyEventsfrom parts since KSP handles this correctly now- Leave empty class so that KSP doesn't complain when loading craft/vessels
-
All initialization errors now warn the user but allow the game to continue
-
Add fuzzy matching for attach node toggling
?will match any one character,*will match anything (or nothing)- All matching nodes will be switched
-
Allow moving and rotation of transforms
- Subtypes can now have
TRANSFORMnodes-
Each one should nave a
namewhich is the name of the transform -
Each one can have a
positionOffset = x, y, zwhich is a local offset for that transform- Any number of modules can modify a transform's position (it's additive)
-
Each one can have a
rotationOffset = x, y, zwhich is a local rotation offset- Only one module can modify a transform's position
-
- Subtypes can now have
-
Remove KSP localization debug logging
-
Add Brazilian Portuguese localization
-
Localize switch subtype button
-
Fix texture switches incorrectly saying the current texture wasn't found when really the new texture wasn't found
-
Use more correct part names in some log messages
-
Allow subtypes to specify a mirror symmetry counterpart
- Subtypes now accept a
mirrorSymmetrySubtypevalue which is the subtype name of the mirror symmetry subtype - When placing the part in mirror symmetry, the symmetry counterpart will use this mirror symmetry subtype, otherwise it will use the normal subtype
- Subtypes now accept a
- Recompile against KSP 1.6.1
- Fix misspellings in fatal error and serious warning handlers
- Moved stack nodes now respect
scale,rescaleFactor, and TweakScale - Moved surface attach node now respects
scaleandrescaleFactor - When only one subtype is present, disable switching GUI and display subtype title as non-interactable string
- Downgrade incompatible resource switching module to a warning and disable B9 resource switching in that case
- French localization
-
Allow moving stack nodes
- Within a
SUBTYPE,NODEnodes take aname(node ID) and aposition(x, y, z position of the node)
- Within a
-
Fix log message for duplicated subtype names
-
Fix texture switching behaving weirdly when copying a part in the editor
- Fix issues with resource switching and stock delta-v simulation code
- Exception when copying a part in the editor
- Delta-v simulation was probably off as well
- Recompile against KSP 1.5.1
- Downgrade certain fatal errors to warnings
- The user will still get an on-screen message but it can be dismissed without closing the game
- Duplicate subtype names is now only a serious warning
- Subtype without a name is now only a serious warning
- Fix .version file again again
- Fix .version file again
- Fix .version file still listing KSP 1.4.x
- Recompile against KSP 1.5
- Provide better context for fatal exceptions
- A few incompatibilities that previously silently disabled functionality are now fatal errors
- Add Spanish translation of built-in strings
- Fire onPartResourceListChange when changing resources
- Recompile against KSP 1.4.5
- Recompile against KSP 1.4.4
- Fix ModuleJettison shroud disappearing in flight if used with a ModuleB9PartSwitch that affects drag cubes
- Don't destroy info module in flight since that messes with module order
- Recompile against KSP 1.4.3
- Remove a couple of hacky workarounds as fixes/improvements were added in KSP 1.4.3
- Use resource display names rather than identifiers in module description
- Extract all hard-coded UI strings into localization table
- Fix texture replacements getting locked in when loading a craft in the editor if a part up the hierarchy renders procedural drag cubes
- Recompile against KSP 1.4.2
- Fix transforms incorrectly being disabled in the part icon if subtypes are in a particular order
- Fix
transformin aTEXTUREnode looking for renderers in child transforms too
- Recompile for KSP 1.4.1
- Fix texture replacements being reset when drag cubes are rendered
- Fix battery tank type having 100x too much electric charge, bring mass in-line with stock
- Add texture switching
-
Each subtype can now have
TEXTUREnodes which take the following fields:texture(required) - path to the texture you want to use, e.g.MyMod/Parts/SomePart/texturecurrentTexture(optional) - name of the current texture (just the filename excluding the extension, not the full path). Anything that does not have this as the current texture will be ignored.isNormalMap(optional, default false) - whether the texture is a normal map or not (necessary due to KSP treating normal maps differently when they are loaded)shaderProperty(optional) - name of the shader property that the texture sits on. Default is_MainTexifisNormalMap = falseor_BumpMapifisNormalMap = true. For an emissive texture you would want_Emissivetransform(optional, can appear more than once) - names of transforms to apply the texture switch tobaseTransform(optional, can appear more than once) - names of transforms where the texture switch should be applied to them and all of their children
-
If no
transformorbaseTransformis specified, it will look for textures to switch on the entire part
-
- Only match on exact attach node id
- When switching in flight, resources should always start empty
- Allow individual subtypes to not allow switching in flight via
allowSwitchInFlightfield - Allow
ModuleB9PartSwitchto have its GUI hidden if it hasadvancedTweakablesOnly = trueand advanced tweakables are disabled - Better error handling if resource of tank type does not exist (show error dialog in game and force the user to quit)
- Fix .version file not being able to be parsed by KSP-AVC
- Move remote .avc file from bintray to s3
- Add back assembly guid (accidentally removed a while ago)
- Add new GUI that allows selecting subtype from a list
- Allow switching in flight via switchInFlight parameter (uses new GUI)
- Add stackSymmetry part field to subtypes
- Fix drag cubes being overwritten with defaults on root part in flight scene
- Fix vessel disappearing from map view if root part has a switcher that affects drag cubes
- Recompile for KSP 1.3
- Drag cube re-rendering now supports IMultipleDragCubes
- Fix an occasional NRE when building part info
- Allow "child" part switch modules to modify volume of "parent" module
- Allow multiple modules to manage the same transform or node, only enable it if they all agree
- Switch percentFilled priority to resource -> subtype -> tank type -> 100% since resources can be overridden on individual subtypes now
-
Allow tanks to be partially filled - percentFilled can be defined on the subtype, resource, or tank type (in decreasing order of priority), defaulting to completely full
-
Allow toggling resource tweakability in the editor - resourcesTweakable can be defined on the subtype or tank type (subtype takes priority), default is whatever the standard is for that resource
-
Allow RESOURCE nodes directly on the subtype
- If the resource already exists on the tank, values defined here will override what is already on the tank (won't affect other subtypes using the same tank)
- If it isn't already on the tank, it will be added (won't affect other subtypes using the same tank)
-
Add ModuleB9DisableTransform to remove unused transforms on models
-
Major internal changes
- Recompile against KSP 1.2.2
- Remove useless warnings in the log
- A few internal changes
- Recompile against KSP 1.2.1
- Fix resource amounts displaying incorrectly in part tooltip
- Reformat module title in part list tooltip a bit
- Hopefully reduce GC some more
- Update for KSP 1.2
- Add CoMOffset, CoPOffset, CoLOffset, CenterOfBuoyancy, CenterOfDisplacement to editable part fields
- Hopefully reduce GC allocation a little bit
- Recompile against KSP 1.1.3
- Remove some code which is unnecessary in KSP 1.1.3
- Fix TweakScale interaction - resource amounts did not account for scaling (broken since v1.4.0)
- Fix bug where we were setting maxTemp when we should have been setting skinMaxTemp or crashTolerance
-
Find best subtype intelligently
- If subtype name was previously set, use it to find the correct subtype (allows subtypes to be reordered without breaking craft)
- If name was not previously set or not found, but index was, use it (this allows transitioning from current setup and renaming subtypes if necessary)
- If index was not previously set, try to infer subtype based on part's resources (this allows easy transitioning from a non-switching setup)
- Finally, just use first subtype
-
Add unit testing for subtype finding
-
Get rid of some unnecessary logging in debug mode
-
Refactor part switching a bit
- Fix bug where having ModuleB9PartInfo on a root part would cause physics to break due to an exception (really a stock issue but no sense waiting for a fix)
- Do not destroy incompatible fuel switchers. Instead, disable fuel switching
- Allow part's crash tolerance to be edited
- Add info module to display changes to part in the info window. Only displays things that can be changed.
- Various internal changes
- Support TweakScale integration
- Allow plural switcher description (in part catalog) to be edited)
- Disable changing surface attach node size (problematic with Tweakscale)
- Don't remove FSfuelSwitch or InterstellarFuelSwitch if ModuleB9PartSwitch doesn't manage resources
- Defer rendering drag cubes until part has been attached (fixes flickering in editor)
- Avoid firing events multiple times
- Various internal changes
- Recompile against KSP 1.1.2
- Simplify part list info a bit
- Hopefully make some error messages clearer
- Various internal refactors and simplifications
- Remove FSmeshSwitch and InterstellarMeshSwitch from incompatible modules
- Recompile against KSP 1.1.1
- Fix resource cost not accounting for units per volume on tank type
- KSP 1.1 compatibility
- Fixed bug where having part switching on the root part would cause physics to break
- Moved UI controls to UI_ChooseOption
- Adjust default Monopropellant tank type to be closer to (new) stock values
- Use stock part mass modification
- Hopefully fix incompatible module checking
- Various refactors and simplifications which might improve performance a bit
- Fix NRE in flight scene
- Initial release