From 0b6fbb5812be0826f414721d6df04dc4f1a8501f Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 15:49:31 -0500 Subject: [PATCH 1/9] version --- .../DMagicOrbitalScience/DMagicOrbitalScience.version | 8 ++++---- Source/Properties/AssemblyInfo.cs | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/GameData/DMagicOrbitalScience/DMagicOrbitalScience.version b/GameData/DMagicOrbitalScience/DMagicOrbitalScience.version index da7dc6f..41e0505 100644 --- a/GameData/DMagicOrbitalScience/DMagicOrbitalScience.version +++ b/GameData/DMagicOrbitalScience/DMagicOrbitalScience.version @@ -1,7 +1,7 @@ { "NAME":"DMagic Orbital Science", "URL":"https://raw.githubusercontent.com/DMagic1/Orbital-Science/master/GameData/DMagicOrbitalScience/DMagicOrbitalScience.version", - "DOWNLOAD":"https://spacedock.info/mod/128/DMagic%20Orbital%20Science/download/1.3.6", + "DOWNLOAD":"https://spacedock.info/mod/128/DMagic%20Orbital%20Science/download/1.3.7", "GITHUB":{ "USERNAME":"DMagic1", "REPOSITORY":"Orbital-Science", @@ -11,12 +11,12 @@ "MAJOR":1, "MINOR":3, "PATCH":0, - "BUILD":6 + "BUILD":7 }, "KSP_VERSION":{ "MAJOR":1, "MINOR":2, - "PATCH":1 + "PATCH":2 }, "KSP_VERSION_MIN":{ "MAJOR":1, @@ -26,6 +26,6 @@ "KSP_VERSION_MAX":{ "MAJOR":1, "MINOR":2, - "PATCH":1 + "PATCH":2 } } diff --git a/Source/Properties/AssemblyInfo.cs b/Source/Properties/AssemblyInfo.cs index 00b0191..d78f2f4 100644 --- a/Source/Properties/AssemblyInfo.cs +++ b/Source/Properties/AssemblyInfo.cs @@ -19,7 +19,7 @@ // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("5428988e-53a6-4d8e-8af4-014572513e22")] -[assembly: AssemblyVersion("1.3.0.6")] -[assembly: AssemblyFileVersion("1.3.0.6")] -[assembly: AssemblyInformationalVersion("v1.3.6")] +[assembly: AssemblyVersion("1.3.0.7")] +[assembly: AssemblyFileVersion("1.3.0.7")] +[assembly: AssemblyInformationalVersion("v1.3.7")] [assembly: KSPAssembly("DMagic", 1, 4)] From 2bd2a28ce580c6544220978bcc1c97b9e5614935 Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 15:49:59 -0500 Subject: [PATCH 2/9] Use experience traits rather than Kerbal types --- Source/Part Modules/DMBreakablePart.cs | 3 ++- Source/Part Modules/DMModuleScienceAnimate.cs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Part Modules/DMBreakablePart.cs b/Source/Part Modules/DMBreakablePart.cs index b4efdd3..539baed 100644 --- a/Source/Part Modules/DMBreakablePart.cs +++ b/Source/Part Modules/DMBreakablePart.cs @@ -35,6 +35,7 @@ using System.Linq; using System.Reflection; using UnityEngine; +using Experience.Effects; namespace DMagic.Part_Modules { @@ -392,7 +393,7 @@ public void fixPart() if (v.parts[0].protoModuleCrew.Count <= 0) return; - if (v.parts[0].protoModuleCrew[0].experienceTrait.TypeName != "Engineer") + if (v.parts[0].protoModuleCrew[0].HasEffect()) { ScreenMessages.PostScreenMessage(string.Format("An engineer of at least level [{0}] is required to repair this instrument.", fixLevel), 6f, ScreenMessageStyle.UPPER_CENTER); return; diff --git a/Source/Part Modules/DMModuleScienceAnimate.cs b/Source/Part Modules/DMModuleScienceAnimate.cs index c2c5f2c..1dfe62c 100644 --- a/Source/Part Modules/DMModuleScienceAnimate.cs +++ b/Source/Part Modules/DMModuleScienceAnimate.cs @@ -35,6 +35,7 @@ using UnityEngine; using DMagic.Scenario; using KSP.UI.Screens.Flight.Dialogs; +using Experience.Effects; namespace DMagic.Part_Modules { @@ -664,7 +665,7 @@ public virtual void editorRetractEvent() if (!FlightGlobals.ActiveVessel.isEVA) return; - if (FlightGlobals.ActiveVessel.parts[0].protoModuleCrew[0].experienceTrait.TypeName != "Scientist") + if (FlightGlobals.ActiveVessel.parts[0].protoModuleCrew[0].HasEffect()) { ScreenMessages.PostScreenMessage(string.Format("[{0}]: A scientist is needed to reset this experiment.", part.partInfo.title), 6f, ScreenMessageStyle.UPPER_LEFT); return; From ecf4f8fcf13dcdb8af6b0a8260d5618e91652ffc Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 15:50:29 -0500 Subject: [PATCH 3/9] Add IScalarModule for antenna deploy --- Source/Part Modules/DMSoilMoisture.cs | 134 +++++++++++++++++++++++++- 1 file changed, 132 insertions(+), 2 deletions(-) diff --git a/Source/Part Modules/DMSoilMoisture.cs b/Source/Part Modules/DMSoilMoisture.cs index 12825ec..be4a681 100644 --- a/Source/Part Modules/DMSoilMoisture.cs +++ b/Source/Part Modules/DMSoilMoisture.cs @@ -34,7 +34,7 @@ namespace DMagic.Part_Modules { - class DMSoilMoisture: DMModuleScienceAnimate + class DMSoilMoisture: DMModuleScienceAnimate, IScalarModule { private bool fullyDeployed = false; @@ -43,12 +43,31 @@ class DMSoilMoisture: DMModuleScienceAnimate private Transform dish; private const string dishTransform = "armBase"; + private float scalar; + private float deployScalar; + private float scalarStep; + private bool moving; + + EventData onStop; + EventData onMove; + public override void OnStart(PartModule.StartState state) { + onStop = new EventData("SoilMoisture_" + part.flightID + "_OnStop"); + onMove = new EventData("SoilMoisture_" + part.flightID + "_OnMove"); + base.OnStart(state); dish = part.FindModelTransform(dishTransform); if (IsDeployed) + { fullyDeployed = true; + isLocked = true; + deployScalar = 1; + scalar = 1; + } + + if (anim != null && anim[animationName] != null) + scalarStep = 1 / anim[animationName].length; } protected override void Update() @@ -65,6 +84,24 @@ protected override void Update() if (!fullyDeployed && rotating) spinDishDown(); + + if (!moving) + return; + + if (scalar >= 0.95f) + { + isLocked = true; + moving = false; + deployEvent(); + onStop.Fire(anim[animationName].normalizedTime); + } + else if (scalar <= 0.05f) + { + isLocked = false; + moving = false; + retractEvent(); + onStop.Fire(anim[animationName].normalizedTime); + } } } @@ -72,6 +109,7 @@ public override void deployEvent() { if (!IsDeployed && fullyDeployed) StopCoroutine("retractEnumerator"); + StartCoroutine("deployEnumerator"); } @@ -79,21 +117,28 @@ private IEnumerator deployEnumerator() { base.deployEvent(); - yield return new WaitForSeconds(anim[animationName].length); + yield return new WaitForSeconds((1 - anim[animationName].normalizedTime) * anim[animationName].length); fullyDeployed = true; + isLocked = true; + deployScalar = 1; + scalar = 1; } public override void retractEvent() { if (IsDeployed && !fullyDeployed) StopCoroutine("deployEnumerator"); + StartCoroutine("retractEnumerator"); } private IEnumerator retractEnumerator() { fullyDeployed = false; + isLocked = false; + deployScalar = 0; + scalar = 0; if (dish != null) { @@ -122,5 +167,90 @@ private void spinDishDown() } } + #region IScalar + + public bool CanMove + { + get + { + if (anim.IsPlaying(animationName)) + { + scalar = anim[animationName].normalizedTime; + deployScalar = scalar; + } + + if (deployScalar < 0.95f) + isLocked = false; + + return true; + } + } + + public float GetScalar + { + get { return scalar; } + } + + public EventData OnMoving + { + get { return onMove; } + } + + public EventData OnStop + { + get { return OnStop; } + } + + public string ScalarModuleID + { + get { return "dmsoil"; } + } + + public bool IsMoving() + { + if (anim == null) + return false; + + if (anim.isPlaying && anim[animationName] != null && anim[animationName].speed != 0f) + return true; + + return moving; + } + + public void SetScalar(float t) + { + if (isLocked) + { + scalar = 1; + deployScalar = 1; + moving = false; + + return; + } + + anim[animationName].speed = 0f; + anim[animationName].enabled = true; + + moving = true; + + t = Mathf.MoveTowards(scalar, t, scalarStep * Time.deltaTime); + + anim[animationName].normalizedTime = t; + anim.Blend(animationName); + scalar = t; + deployScalar = scalar; + } + + public void SetUIRead(bool state) + { + + } + + public void SetUIWrite(bool state) + { + + } + + #endregion } } From 588082f6a694c390de3f5d210ecbc554cdab9128 Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 15:50:36 -0500 Subject: [PATCH 4/9] Don't deplot when locked --- Source/Part Modules/DMSIGINT.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/Part Modules/DMSIGINT.cs b/Source/Part Modules/DMSIGINT.cs index 8654d2a..7e5c5c9 100644 --- a/Source/Part Modules/DMSIGINT.cs +++ b/Source/Part Modules/DMSIGINT.cs @@ -230,6 +230,9 @@ public override void deployEvent() if (!transformState) setTransformState(true); + if (isLocked) + return; + if (useFairings) { if (HighLogic.LoadedSceneIsEditor) From 3e27d293120f491ab724cbcc9169eedc6480847c Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 15:51:10 -0500 Subject: [PATCH 5/9] Add ModuleDataTransmitter and part upgrade config --- .../OversizeScience/SIGINT.cfg | 14 ++- .../OversizeScience/SIGINT_End.cfg | 16 ++- .../OversizeScience/SIGINT_Small.cfg | 16 ++- .../SoilMoisture/SoilMoisture.cfg | 101 ++++++++++------- .../USSoilMoisture/USSoilMoisture.cfg | 103 +++++++++++------- 5 files changed, 169 insertions(+), 81 deletions(-) diff --git a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg index 820a1ff..c399b3e 100644 --- a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg +++ b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg @@ -114,7 +114,19 @@ DRAG_CUBE packetResourceCost = 55.0 requiredResource = ElectricCharge DeployFxModules = 0 - antennaPower = 1000000000000 + antennaPower = 10000000000000 antennaCombinable = False + + UPGRADES + { + UPGRADE + { + name__ = dm_antenna_upgrade + description__ = Antenna upgraded with signal relay + antennaType = RELAY + antennaPower = 20000000000000 + antennaCombinable = True + } + } } } diff --git a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg index 442000c..fd82b97 100644 --- a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg +++ b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg @@ -104,7 +104,7 @@ DRAG_CUBE asteroidReports = False } - MODULE + MODULE { name = ModuleDataTransmitter antennaType = DIRECT @@ -113,8 +113,20 @@ DRAG_CUBE packetResourceCost = 55.0 requiredResource = ElectricCharge DeployFxModules = 0 - antennaPower = 1000000000000 + antennaPower = 10000000000000 antennaCombinable = False + + UPGRADES + { + UPGRADE + { + name__ = dm_antenna_upgrade + description__ = Antenna upgraded with signal relay + antennaType = RELAY + antennaPower = 20000000000000 + antennaCombinable = True + } + } } MODULE diff --git a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg index b103504..d100f42 100644 --- a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg +++ b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg @@ -113,10 +113,22 @@ DRAG_CUBE antennaType = DIRECT packetInterval = 0.1 packetSize = 2 - packetResourceCost = 20.0 + packetResourceCost = 25.0 requiredResource = ElectricCharge DeployFxModules = 0 - antennaPower = 10000000000 + antennaPower = 1000000000000 antennaCombinable = False + + UPGRADES + { + UPGRADE + { + name__ = dm_antenna_upgrade + description__ = Antenna upgraded with signal relay + antennaType = RELAY + antennaPower = 2000000000000 + antennaCombinable = True + } + } } } diff --git a/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg b/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg index 1dd06cf..9862a48 100644 --- a/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg +++ b/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg @@ -41,46 +41,71 @@ dragModelType = default maximum_drag = 0.2 minimum_drag = 0.2 -MODULE -{ - name = DMSoilMoisture - - animationName = arrayDeploy - - customFailMessage = The L-band microwave arrays are only meant to operate in low orbit. - animSpeed = 1 - - experimentAnimation = true - experimentWaitForAnimation = true - waitForAnimationTime = -1 - keepDeployedMode = 2 - - startEventGUIName = Deploy Array - showStartEvent = false - endEventGUIName = Retract Array - showEndEvent = false - showEditorEvents = true - showToggleEvent = true - toggleEventGUIName = Toggle Array + MODULE + { + name = DMSoilMoisture + + animationName = arrayDeploy - experimentID = dmSoilMoisture - experimentLimit = 1 - xmitDataScalar = 1 + customFailMessage = The L-band microwave arrays are only meant to operate in low orbit. + animSpeed = 1 + + experimentAnimation = true + experimentWaitForAnimation = true + waitForAnimationTime = -1 + keepDeployedMode = 2 - experimentActionName = Collect Soil Moisture Data + startEventGUIName = Deploy Array + showStartEvent = false + endEventGUIName = Retract Array + showEndEvent = false + showEditorEvents = true + showToggleEvent = true + toggleEventGUIName = Toggle Array + + experimentID = dmSoilMoisture + experimentLimit = 1 + xmitDataScalar = 1 + + experimentActionName = Collect Soil Moisture Data + + useStaging = False + useActionGroups = True + hideUIwhenUnavailable = False + rerunnable = True - useStaging = False - useActionGroups = True - hideUIwhenUnavailable = False - rerunnable = True + dataIsCollectable = True + collectActionName = Take Data + interactionRange = 1.2 + externalDeploy = True + usageReqMaskExternal = 8 + + asteroidReports = True + asteroidTypeDependent = True + } - dataIsCollectable = True - collectActionName = Take Data - interactionRange = 1.2 - externalDeploy = True - usageReqMaskExternal = 8 - - asteroidReports = True - asteroidTypeDependent = True -} + MODULE + { + name = ModuleDataTransmitter + antennaType = DIRECT + packetInterval = 0.2 + packetSize = 4 + packetResourceCost = 30.0 + requiredResource = ElectricCharge + DeployFxModules = 0 + antennaPower = 100000000000 + antennaCombinable = False + + UPGRADES + { + UPGRADE + { + name__ = dm_antenna_upgrade + description__ = Antenna upgraded with signal relay + antennaType = RELAY + antennaPower = 200000000000 + antennaCombinable = True + } + } + } } diff --git a/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg b/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg index e96d159..17d43a3 100644 --- a/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg +++ b/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg @@ -54,51 +54,78 @@ angularDrag = 1 dragModelType = default -MODULE + MODULE { - name = DMSoilMoisture + name = DMSoilMoisture + + animationName = Deploy + bayAnimation = Take 001 + + experimentID = dmSoilMoisture + experimentLimit = 1 + + customFailMessage = The L-band microwave arrays are only meant to operate in low orbit. - animationName = Deploy - bayAnimation = Take 001 - - experimentID = dmSoilMoisture - experimentLimit = 1 + experimentAnimation = true + experimentWaitForAnimation = true + keepDeployedMode = 2 + USScience = true + + showEndEvent = false + showStartEvent = false + showToggleEvent = true + startEventGUIName = Deploy Array + endEventGUIName = Retract Array + toggleEventGUIName = Toggle Array + + experimentActionName = Collect Soil Moisture Data + resetActionName = Discard Data + + useStaging = False + useActionGroups = True + hideUIwhenUnavailable = False + rerunnable = True + + xmitDataScalar = 1.0 - customFailMessage = The L-band microwave arrays are only meant to operate in low orbit. - - experimentAnimation = true - experimentWaitForAnimation = true - keepDeployedMode = 2 - USScience = true - - showEndEvent = false - showStartEvent = false - showToggleEvent = true - startEventGUIName = Deploy Array - endEventGUIName = Retract Array - toggleEventGUIName = Toggle Array - - experimentActionName = Collect Soil Moisture Data - resetActionName = Discard Data - - useStaging = False - useActionGroups = True - hideUIwhenUnavailable = False - rerunnable = True - - xmitDataScalar = 1.0 - - dataIsCollectable = True - collectActionName = Take Data - interactionRange = 1.8 - externalDeploy = True - usageReqMaskExternal = 8 + dataIsCollectable = True + collectActionName = Take Data + interactionRange = 1.8 + externalDeploy = True + usageReqMaskExternal = 8 + + asteroidReports = True + asteroidTypeDependent = True + } - asteroidReports = True - asteroidTypeDependent = True + MODULE + { + name = ModuleDataTransmitter + antennaType = DIRECT + packetInterval = 0.1 + packetSize = 4 + packetResourceCost = 20.0 + requiredResource = ElectricCharge + DeployFxModules = 0 + antennaPower = 50000000000 + antennaCombinable = False + + UPGRADES + { + UPGRADE + { + name__ = dm_antenna_upgrade + description__ = Antenna upgraded with signal relay + antennaType = RELAY + antennaPower = 100000000000 + antennaCombinable = True + } + } } } + + @PART[dmUSSoilMoisture]:FOR[DMagic]:NEEDS[UniversalStorage] { @TechRequired = largeElectrics From 804ca1ab3554716fb78bc2a212cfb4200c02ab30 Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 15:51:38 -0500 Subject: [PATCH 6/9] Changes --- GameData/DMagicOrbitalScience/Change Log.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/GameData/DMagicOrbitalScience/Change Log.txt b/GameData/DMagicOrbitalScience/Change Log.txt index 27a5030..fa7b9ca 100644 --- a/GameData/DMagicOrbitalScience/Change Log.txt +++ b/GameData/DMagicOrbitalScience/Change Log.txt @@ -1,4 +1,9 @@ -v1.3.6 +v1.3.7 +- Fix a bug with resetting experiments with an EVA Kerbal +- Add Module Data Transmitter to Soil Moisture instrument +- Add antenna upgrade package to turn all Orbital Science antenna parts into relays and boost signal strength + +v1.3.6 - Fix bug preventing SIGINT from working as a comms antenna v1.3.5 From 2f5d4299c393575024cc1baace0cf63d30f841f2 Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 16:05:58 -0500 Subject: [PATCH 7/9] Antenna upgrade config --- .../Resources/DMAntennaUpgrade.cfg | 39 ++++++++++++++++++ .../DMagicOrbitalScience/Resources/Flag.tga | Bin 0 -> 32125 bytes .../Resources/dm_antenna.mu | Bin 0 -> 499 bytes 3 files changed, 39 insertions(+) create mode 100644 GameData/DMagicOrbitalScience/Resources/DMAntennaUpgrade.cfg create mode 100644 GameData/DMagicOrbitalScience/Resources/Flag.tga create mode 100644 GameData/DMagicOrbitalScience/Resources/dm_antenna.mu diff --git a/GameData/DMagicOrbitalScience/Resources/DMAntennaUpgrade.cfg b/GameData/DMagicOrbitalScience/Resources/DMAntennaUpgrade.cfg new file mode 100644 index 0000000..955462c --- /dev/null +++ b/GameData/DMagicOrbitalScience/Resources/DMAntennaUpgrade.cfg @@ -0,0 +1,39 @@ +PARTUPGRADE +{ + name = dm_antenna_upgrade + partIcon = dm_antenna + techRequired = specializedElectrics + entryCost = 35000 + cost = 0 + + title = DMagic Orbital Science Antenna Upgrade + basicInfo = Upgrades dual use antennas with signal boost and relay equipment. + manufacturer = DMagic + description = Some clever use of electronics allows these scientific instruments to be used for communication signal relays. +} + + +PART +{ + name = dm_antenna + module = Part + author = DMagic + + MODEL + { + model = DMagicOrbitalScience/Resources/dm_antenna + } + + rescaleFactor = 1 + + attachRules = 0,0,0,0,0 + + TechRequired = HIDDEN + entryCost = 0 + cost = 0 + category = -1 + subcategory = 0 + title = DM Upgrade + manufacturer = DMagic + description = DM Upgrade +} \ No newline at end of file diff --git a/GameData/DMagicOrbitalScience/Resources/Flag.tga b/GameData/DMagicOrbitalScience/Resources/Flag.tga new file mode 100644 index 0000000000000000000000000000000000000000..9248ab6800e160dfb3186ab2fed6199afa99b10c GIT binary patch literal 32125 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 literal 0 HcmV?d00001 diff --git a/GameData/DMagicOrbitalScience/Resources/dm_antenna.mu b/GameData/DMagicOrbitalScience/Resources/dm_antenna.mu new file mode 100644 index 0000000000000000000000000000000000000000..b0c97acb350b14a096ddcc6766cd433a0d304400 GIT binary patch literal 499 zcmeyb#mK_An#K+FQfj6lo> z#Q8$ZcBQHh_DuLX(-z3y2V~m-*?XaEm^ercSezfE=V!fr5fC%nxM;!90K^>^E%IPu z2QFF&0@Z-P#{L3(7uof8#IS|HIvVU3q>30{xP5vv&_6(rHP{O>nHX>L_zvfvc^_rm zoG7*hCV%SvEu+T7X<&I_pc!mnb0Gd>g0eyJ0rIaH5OaXoj36EefM_l#&F+`4;0KH; gkO~NZ#Rr7feCnnh50DAc!{L^bn66ino(Pfx0MnRsF#rGn literal 0 HcmV?d00001 From c44bc224aa192156bd6c4ab4aeac7492beb758de Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 16:09:38 -0500 Subject: [PATCH 8/9] Note about antenna to part description; search tags --- GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg | 2 +- GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg | 2 +- .../DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg | 2 +- .../ProbeScience/SoilMoisture/SoilMoisture.cfg | 4 ++-- .../UniversalStorage/USSoilMoisture/USSoilMoisture.cfg | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg index c399b3e..4774357 100644 --- a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg +++ b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT.cfg @@ -34,7 +34,7 @@ category = none subcategory = 0 title = Oversize Signals Intelligence Satellite manufacturer = DMagic -description = A grossly oversized radio signals intelligence dish that can be used for listening in to every imaginable from of communication, discovering radio anomalies on a planet's surface, or just impressing your neighbor. Warning: Dish is FRAGILE; it is NOT for use in the atmosphere; CANNOT be retracted! Can be used at up to five times the normal low orbit altitude. +description = A grossly oversized radio signals intelligence dish that can be used for listening in to every imaginable from of communication, discovering radio anomalies on a planet's surface, or just impressing your neighbor. Warning: Dish is FRAGILE; it is NOT for use in the atmosphere; CANNOT be retracted! Can be used at up to five times the normal low orbit altitude. This instrument can also be used as a powerful communications antenna. attachRules = 1,0,1,1,0 // --- standard part parameters --- diff --git a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg index fd82b97..4e96eb9 100644 --- a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg +++ b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_End.cfg @@ -27,7 +27,7 @@ category = Science subcategory = 0 title = Oversize Signals Intelligence Satellite manufacturer = DMagic -description = A grossly oversized radio signals intelligence dish that can be used for listening in to every imaginable from of communication, discovering radio anomalies on a planet's surface, or just impressing your neighbor. This instrument also servers as a nose cone, and uses deployable fairing shrouds. Warning: Dish is FRAGILE; it is NOT for use in the atmosphere; CANNOT be retracted! Can be used at up to five times the normal low orbit altitude. +description = A grossly oversized radio signals intelligence dish that can be used for listening in to every imaginable from of communication, discovering radio anomalies on a planet's surface, or just impressing your neighbor. This instrument also servers as a nose cone, and uses deployable fairing shrouds. Warning: Dish is FRAGILE; it is NOT for use in the atmosphere; CANNOT be retracted! Can be used at up to five times the normal low orbit altitude. This instrument can also be used as a powerful communications antenna. attachRules = 1,0,1,1,0 // --- standard part parameters --- diff --git a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg index d100f42..f6d07de 100644 --- a/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg +++ b/GameData/DMagicOrbitalScience/OversizeScience/SIGINT_Small.cfg @@ -34,7 +34,7 @@ category = Science subcategory = 0 title = Undersize Signals Intelligence Satellite manufacturer = DMagic -description = A mildly oversized radio signals intelligence dish that can be used for listening in to every imaginable from of communication, discovering radio anomalies on a planet's surface, or just impressing your neighbor. Warning: Dish is FRAGILE; it is NOT for use in the atmosphere; CANNOT be retracted! Can be used at up to five times the normal low orbit altitude. +description = A mildly oversized radio signals intelligence dish that can be used for listening in to every imaginable from of communication, discovering radio anomalies on a planet's surface, or just impressing your neighbor. Warning: Dish is FRAGILE; it is NOT for use in the atmosphere; CANNOT be retracted! Can be used at up to five times the normal low orbit altitude. This instrument can also be used as a powerful communications antenna. attachRules = 1,0,1,1,0 // --- standard part parameters --- diff --git a/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg b/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg index 9862a48..dd371f1 100644 --- a/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg +++ b/GameData/DMagicOrbitalScience/ProbeScience/SoilMoisture/SoilMoisture.cfg @@ -22,7 +22,7 @@ category = Science subcategory = 0 title = Soil Moisture Sensor manufacturer = DMagic -description = This orbital sensor deploys a large L-band microwave detector comprised of 82 individual antenna elements. It can be used to study the water content of the upper soil layers and the salinity levels of large water features. Can only be used in low orbit. +description = This orbital sensor deploys a large L-band microwave detector comprised of 82 individual antenna elements. It can be used to study the water content of the upper soil layers and the salinity levels of large water features. Can only be used in low orbit. This instrument can also be used as a powerful communications antenna. attachRules = 1,0,1,1,0 // --- standard part parameters --- @@ -34,7 +34,7 @@ emissiveConstant = 0.95 thermalMassModifier = 2.0 heatConductivity = 0.04 -tags = experiment research rerun re-run reus re-us redo re-do reset re-set science dmagic dmos microwave asteroid water +tags = experiment research rerun re-run reus re-us redo re-do reset re-set science dmagic dmos microwave asteroid water aerial antenna deploy direct dish extend fold radio signal transmi angularDrag = 2 dragModelType = default diff --git a/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg b/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg index 17d43a3..7111627 100644 --- a/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg +++ b/GameData/DMagicOrbitalScience/UniversalStorage/USSoilMoisture/USSoilMoisture.cfg @@ -37,7 +37,7 @@ category = none subcategory = 0 title = Univ. Storage - Soil Moisture Sensor manufacturer = DMagic -description = This orbital sensor deploys a large L-band microwave detector comprised of 82 individual antenna elements. It can be used to study the water content of the upper soil layers and the salinity levels of large water features. Can only be used in low orbit. +description = This orbital sensor deploys a large L-band microwave detector comprised of 82 individual antenna elements. It can be used to study the water content of the upper soil layers and the salinity levels of large water features. Can only be used in low orbit. This instrument can also be used as a powerful communications antenna. // --- standard part parameters --- mass = 0.05 @@ -48,7 +48,7 @@ emissiveConstant = 0.95 thermalMassModifier = 2.0 heatConductivity = 0.04 -tags = experiment research rerun re-run reus re-us redo re-do reset re-set science dmagic dmos universal wedge microwave asteroid water +tags = experiment research rerun re-run reus re-us redo re-do reset re-set science dmagic dmos universal wedge microwave asteroid water aerial antenna deploy direct dish extend fold radio signal transmi angularDrag = 1 dragModelType = default From 9aab015aedc2b3fe5050c547ffd0366d7f3e88c7 Mon Sep 17 00:00:00 2001 From: DMagic Date: Tue, 13 Dec 2016 16:10:02 -0500 Subject: [PATCH 9/9] Fix experience skill checks --- Source/Part Modules/DMBreakablePart.cs | 6 +++--- Source/Part Modules/DMModuleScienceAnimate.cs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Part Modules/DMBreakablePart.cs b/Source/Part Modules/DMBreakablePart.cs index 539baed..1f9da59 100644 --- a/Source/Part Modules/DMBreakablePart.cs +++ b/Source/Part Modules/DMBreakablePart.cs @@ -393,15 +393,15 @@ public void fixPart() if (v.parts[0].protoModuleCrew.Count <= 0) return; - if (v.parts[0].protoModuleCrew[0].HasEffect()) + if (!v.parts[0].protoModuleCrew[0].HasEffect()) { - ScreenMessages.PostScreenMessage(string.Format("An engineer of at least level [{0}] is required to repair this instrument.", fixLevel), 6f, ScreenMessageStyle.UPPER_CENTER); + ScreenMessages.PostScreenMessage(string.Format("A Kerbal with the Repair Skill is required to fix this instrument.", fixLevel), 6f, ScreenMessageStyle.UPPER_CENTER); return; } if (v.parts[0].protoModuleCrew[0].experienceLevel < fixLevel) { - ScreenMessages.PostScreenMessage(string.Format("An engineer of at least level [{0}] is required to repair this instrument.", fixLevel), 6f, ScreenMessageStyle.UPPER_CENTER); + ScreenMessages.PostScreenMessage(string.Format("An engineer of at least level [{0}] is required to repair this instrument.", fixLevel), 6f, ScreenMessageStyle.UPPER_CENTER); return; } diff --git a/Source/Part Modules/DMModuleScienceAnimate.cs b/Source/Part Modules/DMModuleScienceAnimate.cs index 1dfe62c..6ee7dea 100644 --- a/Source/Part Modules/DMModuleScienceAnimate.cs +++ b/Source/Part Modules/DMModuleScienceAnimate.cs @@ -665,9 +665,9 @@ public virtual void editorRetractEvent() if (!FlightGlobals.ActiveVessel.isEVA) return; - if (FlightGlobals.ActiveVessel.parts[0].protoModuleCrew[0].HasEffect()) + if (!FlightGlobals.ActiveVessel.parts[0].protoModuleCrew[0].HasEffect()) { - ScreenMessages.PostScreenMessage(string.Format("[{0}]: A scientist is needed to reset this experiment.", part.partInfo.title), 6f, ScreenMessageStyle.UPPER_LEFT); + ScreenMessages.PostScreenMessage(string.Format("[{0}]: A Kerbal with the Science Reset Skill is needed to reset this experiment.", part.partInfo.title), 6f, ScreenMessageStyle.UPPER_LEFT); return; }