Skip to content
Talia Wong edited this page Mar 21, 2022 · 8 revisions

v2.20.0

  • Recompile against KSP 1.12.3
  • Add new allowSwitchFromInFlight option to subtypes, if a subtype with this set to true is selected it can't be switched off of in flight
  • Add Italian localization

v2.19.0

  • Recompile against KSP 1.12.2

v2.18.0

  • 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

v2.17.0

  • Recompile against KSP 1.10.1
  • Update Spanish localization, add German and Chinese localization

v2.16.0

  • 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 \
    • 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)
  • Implement custom handling for ModuleRCSFX
    • Disable unused effects when switching based on runningEffectName
  • Fix transforms not getting shown/hidden properly after another module updates the model
  • Allow ModuleB9PartSwitch to have its fields and events placed in a group:
    • uiGroupName - unique identifier of the group
    • uiGroupDisplayName - 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 MODULE nodes that each identify a module to have its UI group assigned
      • each one must have an IDENTIFIER node to identify the module
        • it must have a name which 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 IDENTIFIER in a module switcher
    • 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), or ModuleSimpleAdjustableFairing

v2.15.2

  • Fix ModuleJettison shrouds disappearing in flight (again)

v2.15.1

  • 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)

v2.15.0

  • Recompile against KSP 1.9.1

v2.14.0

  • Fix non-unique aspects complaining when present on more than one module
  • Generic material modifiers
    • MATERIAL nodes on subtypes
      • transform defines GameObjects on which to use renderers
      • baseTransform defines GameObjects and children on which to use renderers
      • FLOAT - modifies a float property
        • shaderProperty - name of the shader property to modify
        • value - float to set the value to
      • COLOR - modifies a color property
        • shaderProperty - 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)
      • TEXTURE modifies a texture property (same functionality as TEXTURE nodes directly on the subtype)
        • currentTexture - name of current texture to match when building (not full path) (optional)
        • texture - path to new texture to switch to
        • isNormalMap - whether to access the texture as a normal map or not (default false)
        • shaderProperty - shader property to modify the color on
          • Default _MainTex if isNormalMap = false
          • Default _BumpMap is isNormalMap = true
  • Listen for OnPartModelChanged event to reinitialize model
  • Send ModuleDataChanged to modules that have had their data changed
    • Include two attributes in the event details, requestNotifyFARToRevoxelize and requestRecalculateDragCubes, which can be used to request FAR/drag cubes updates at the end of the cycle
  • Transform move/rotation/scale now affect drag cubes/FAR
  • Send/listen for DragCubesWereRecalculated and FarWasNotifiedToRevoxelize to make sure actions are only done once per cycle
  • Fix drag cube updates possibly not actually being used

v2.13.0

  • Support changing ModuleDeployableSolarPanel chargeRate
  • 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

v2.12.1

  • Recompile against KSP 1.8.1

v2.12.0

  • Recompile against KSP 1.8.0
  • Stop moving the switcher to the end of the part action window
  • Remove bottomOfWindow paramter

v2.11.1

  • Fix default subtype not activating on the icon

v2.11.0

  • Allow switching UI to not be moved to the end of the part action window
    • ModuleB9PartSwitch now accepts bottomOfWindow = false which will leave it in place
    • Modules without this new parameter are unaffected
  • Allow transforms to be scaled
    • TRANSFORM {} nodes now accept a scaleOffset which multiplies the transform's local scale
    • scaleOffset either 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

v2.10.1

  • 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

v2.10.0

  • Use funds symbol for cost in tooltips
  • Fix vessel size including disabled objects
  • add new upgradeRequired field to SUBTYPEs
    • References the name of a PARTUPGRADE require 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
  • Add defaultSubtypePriority to SUBTYPEs
    • 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 MODULE node
      • inside is an IDENTIFIER node which is used to identify the module
      • it must have a name which is the same as the module
        • it can have any other fields that are used to identify the module
          • e.g. engineID on ModuleEngines
        • Identifying the module by nodes is not currently supported
      • It accepts a DATA node which provides new data to be loaded into the module
      • It accepts a moduleActive = false value 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.
      • ModulePartVariants
      • ModuleB9PartSwitch
      • ModuleB9PartInfo
      • ModuleB9DisableTransform
      • FSfuelSwitch
      • FSmeshSwitch
      • FStextureSwitch
      • FStextureSwitch2
      • InterstellarFuelSwitch
      • IntersteallarMeshSwitch
      • InterstellarTextureSwitch

v2.9.0

  • 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 descriptionSummary and descriptionDetail from 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_TYPE
    • primaryColor - 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
    • ResourceColorLiquidFuel
    • ResourceColorLqdHydrogen
    • ResourceColorLqdMethane
    • ResourceColorOxidizer
    • ResourceColorMonoPropellant
    • ResourceColorXenonGas
    • ResourceColorElectricChargePrimary
    • ResourceColorElectricChareSecondary
    • ResourceColorOre
  • 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

v2.8.1

  • Recompile against KSP 1.7.3

v2.8.0

  • Recompile against KSP 1.7.1
  • Fix part action window showing removed resources in KSP 1.7.1
  • Add Russian localization

v2.7.1

  • Fix part into button being shown when there's no info to display
  • Provide more context for subtype initialization errors in the warning dialog

v2.7.0

  • Compile for KSP 1.7.0
  • Remove ModuleB9PropagateCopyEvents from 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 TRANSFORM nodes
      • Each one should nave a name which is the name of the transform
      • Each one can have a positionOffset = x, y, z which 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, z which is a local rotation offset
        • Only one module can modify a transform's position
  • 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 mirrorSymmetrySubtype value 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

v2.6.0

  • Recompile against KSP 1.6.1
  • Fix misspellings in fatal error and serious warning handlers

v2.5.1

  • Moved stack nodes now respect scale, rescaleFactor, and TweakScale
  • Moved surface attach node now respects scale and rescaleFactor
  • 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

v2.5.0

  • Allow moving stack nodes
    • Within a SUBTYPE, NODE nodes take a name (node ID) and a position (x, y, z position of the node)
  • Fix log message for duplicated subtype names
  • Fix texture switching behaving weirdly when copying a part in the editor

v2.4.5

  • 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

v2.4.4

  • 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

v2.4.3

  • Fix .version file again again

v2.4.2

  • Fix .version file again

v2.4.1

  • Fix .version file still listing KSP 1.4.x

v2.4.0

  • 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

v2.3.3

  • Recompile against KSP 1.4.5

v2.3.2

  • Recompile against KSP 1.4.4

v2.3.1

  • 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

v2.3.0

  • 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

v2.2.2

  • Fix texture replacements getting locked in when loading a craft in the editor if a part up the hierarchy renders procedural drag cubes

v2.2.1

  • Recompile against KSP 1.4.2
  • Fix transforms incorrectly being disabled in the part icon if subtypes are in a particular order
  • Fix transform in a TEXTURE node looking for renderers in child transforms too

v2.2.0

  • Recompile for KSP 1.4.1

v2.1.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

v2.1.0

  • Add texture switching
    • Each subtype can now have TEXTURE nodes which take the following fields:
      • texture (required) - path to the texture you want to use, e.g. MyMod/Parts/SomePart/texture
      • currentTexture (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 _MainTex if isNormalMap = false or _BumpMap if isNormalMap = true. For an emissive texture you would want _Emissive
      • transform (optional, can appear more than once) - names of transforms to apply the texture switch to
      • baseTransform (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 transform or baseTransform is specified, it will look for textures to switch on the entire part

v2.0.0

  • 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 allowSwitchInFlight field
  • Allow ModuleB9PartSwitch to have its GUI hidden if it has advancedTweakablesOnly = true and 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)

v1.10.0

  • Add new GUI that allows selecting subtype from a list
  • Allow switching in flight via switchInFlight parameter (uses new GUI)

v1.9.0

  • Add stackSymmetry part field to subtypes

v1.8.1

  • 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

v1.8.0

  • Recompile for KSP 1.3
  • Drag cube re-rendering now supports IMultipleDragCubes

v1.7.1

  • Fix an occasional NRE when building part info

v1.7.0

  • 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

v1.6.1

  • Switch percentFilled priority to resource -> subtype -> tank type -> 100% since resources can be overridden on individual subtypes now

v1.6.0

  • 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

v1.5.3

  • Recompile against KSP 1.2.2
  • Remove useless warnings in the log
  • A few internal changes

v1.5.2

  • Recompile against KSP 1.2.1

v1.5.1

  • Fix resource amounts displaying incorrectly in part tooltip
  • Reformat module title in part list tooltip a bit
  • Hopefully reduce GC some more

v1.5.0

  • Update for KSP 1.2
  • Add CoMOffset, CoPOffset, CoLOffset, CenterOfBuoyancy, CenterOfDisplacement to editable part fields
  • Hopefully reduce GC allocation a little bit

v1.4.3

  • Recompile against KSP 1.1.3
  • Remove some code which is unnecessary in KSP 1.1.3

v1.4.2

  • Fix TweakScale interaction - resource amounts did not account for scaling (broken since v1.4.0)

v1.4.1

  • Fix bug where we were setting maxTemp when we should have been setting skinMaxTemp or crashTolerance

v1.4.0

  • 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

v1.3.1

  • 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)

v1.3.0

  • 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

v1.2.0

  • Support TweakScale integration
  • Allow plural switcher description (in part catalog) to be edited)
  • Disable changing surface attach node size (problematic with Tweakscale)

v1.1.4

  • 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

v1.1.3

  • Recompile against KSP 1.1.2
  • Simplify part list info a bit
  • Hopefully make some error messages clearer
  • Various internal refactors and simplifications

v1.1.2

  • Remove FSmeshSwitch and InterstellarMeshSwitch from incompatible modules
  • Recompile against KSP 1.1.1

v1.1.1

  • Fix resource cost not accounting for units per volume on tank type

v1.1

  • 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

v1.0.1

  • Fix NRE in flight scene

v1.0.0

  • Initial release