-
Posts
133 -
Joined
-
Last visited
Content Type
Profiles
Forums
Developer Articles
KSP2 Release Notes
Everything posted by CiberX15
-
I've noticed that after recovering a vessel with kerbals in it, the kerbals sometimes don't appear in the list again until the game is rebooted. I knew they cycled around in the list so I placed a 16 kerbal crew canister on my ship after recovering Jeb, and filled the canister expecting him to show up, but instead just kept getting auto generated kerbals. So then I loaded all the kerbals I had generated into a truck and parked it off the side of the runway so they wouldn't get recycled back onto the list, saved the game, quit, then launched clean. This time when I started filling up the crew canister Jeb showed up in the list.
-
Love the mod. Thanks for continuing to maintain it!. I don't know if I could play Kerbals for any length of time without it anymore. Any chance we could get the Mech Jeb Pod back? I saw it was removed back in 2.5.8 due to something to do with leg code? I mostly just like the looks of it though so even a stripped down version of it would be fun to have again. Or if there is some config file you could point me to where I could re-enable it for myself and live with the consequences? It still appears in the science tree and I keep thinking its back only to be disappointed :'( I want to encircle Kerbin in an ever growing field of questionably loyal machines!
-
Bad news: I dont think so. Good news, C# is almost identical to java script The only major differences is instead of the keyword "function" you use "void" and instead of declaring a variable like this "var NewVar : int = 5;" you would use "int NewVar = 5; " There are of course other minor differences but if you already know JavaScript its just a mater of learning what order things go in.
-
So I don't know if someone has already pointed this out or not but it is a useful tidbit of info that took me two days to figure out so I figured I post it here for all to see. you cannot make a persistent double variable using [KSPField(isPersistant = true)] it will just default to zero instead of keeping the value. floats however work fine.
-
Ok, Update, I just found out that it IS NOT keeping any of the variables I set to be persistent except for IsEnabled. RAWRG!!! I think it is mocking me now 8 < Edit: You know what? I don't think doubles can be persistent. There are two persistent variables that are being stored, Percent, which is a string, and IsEnabled which is a bool. I am going to try to convert the doubles to floats and see what happens. More Edit: That was it, apparently doubles CAN NOT be persistent. However floats work fine. So yeah, anyone having issues with their persistent double variables being wiped might want to try floats if they can.
-
DiEvAl, I just tried that but it didn't work : P Actually I was using Planetarium.GetUniversalTime() with the exact same results. The problem is that TimeActive keeps getting wiped. Would giving it a default value make it remember its current value? Also if this is in the wrong spot please feel free to move it to the correct spot 8 O
-
Ok so I am trying to find out how much time has passed so that I can calculate how long a part has been active for. The general idea is when the player clicks a button the variable TimeActive is set to vessel.missionTime which as I understand it is the total number of seconds since the ship/station/probe left the launch pad. For every tick I then set the variable ResearchTime to vessel.missionTime - TimeActive which means Research time is equal to the amount of seconds since the player clicked the button. This works perfectly when the player is focused on the ship in qustion. However, when they swich to another ship then switch back, TimeActive = 0, so when it runs its calculation, ResearchTime ends up being something like 50000. Now what I don't understand is that TimeActive is supposed to be persistent. In fact I have several variables that are set to be persistent, and all but TimeActive work. For example, IsEnabled is a bool used to determine whether the part should be doing anything. This variable is remembered when I go back and forth between ships. But for some reason TimeActive is always defaulted back to 0. I have checked over my code several times to see if I am zeroing it out anywhere but I didn't see anything. I even tried replacing the variable with the words OrangeJuice to make sure I hadn't accidentally overwritten a variable used by one of the parent classes but no change. Thank you in advance to anyone who can help me figure this out : ) Full Code is below: using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; /// <summary> /// ScienceTrickle /// By: CiberX15 /// Special Thanks to Fractal_UK whose KSPInterstellar ScienceModule I reverse engineered /// to figure out how to work the code /// </summary> public class ScienceTrickle : ModuleScienceExperiment { [KSPField(isPersistant = true, guiActive = true)] protected bool IsEnabled; [KSPField(isPersistant = true, guiActive = false)] protected double TimeActive; [KSPField(isPersistant = true, guiActive = false)] protected double ResearchTime; [KSPField(isPersistant = true, guiActive = true)] protected string CurrentPaper; protected float crew_capacity_ratio; [KSPField(isPersistant = true, guiActive = false)] protected double StoredScience; [KSPField(isPersistant = true, guiActive = true)] protected double RecordedData; /// <summary> /// Called when the part is started by Unity. /// </summary> public override void OnStart(StartState state) { base.OnStart(state); experiment.baseValue = 1; //reset experement value // Check our crew crew_capacity_ratio = ((float)part.protoModuleCrew.Count) / ((float)part.CrewCapacity); } //Begin Research Button [KSPEvent(guiActive = true, guiName = "Begin Research", active = true)] public void BeginResearch() { if (crew_capacity_ratio == 0) { return; } TimeActive = vessel.missionTime; //Planetarium.GetUniversalTime(); ResearchTime = 0; StoredScience = 0; RecordedData = 0; CurrentPaper = ""; IsEnabled = true; } //Stop Research Button [KSPEvent(guiActive = true, guiName = "Stop Research", active = true)] public void StopActivity() { IsEnabled = false; } //Clear Research Button [KSPEvent(guiActive = true, guiName = "Clear Research", active = true)] public void ClearResearch() { IsEnabled = false; ResearchTime = 0; StoredScience = 0; RecordedData = 0; CurrentPaper = ""; } new public void DeployExperiment() { experiment.baseValue = (float)RecordedData; base.DeployExperiment(); } /* new public void ReviewDataEvent() { base.ReviewDataEvent(); print("ORANGE JUICE=============================================================="); } new public void ResetExperiment() { base.ResetExperiment(); experiment.baseValue = 1; ClearResearch(); print("Finished Experiment Reset ================================================="); } new public void ResetExperimentExternal() { base.ResetExperimentExternal(); experiment.baseValue = 1; ClearResearch(); print("Finished Experiment Reset ================================================="); }*/ //Stop Research Button [KSPEvent(guiActive = true, guiName = "Debug", active = true)] public void DebugThing() { print ("BEGIN ======================================================"); print ("Research Time " + ResearchTime); print ("Mission Time" + vessel.missionTime); print ("Active Time" + TimeActive); print ("ResearchTime " + ResearchTime); print ("CurrentPaper " + CurrentPaper); print ("StoredScience " + StoredScience); print ("RecordedData " + RecordedData); print ("Experemrnt BaseValue" + base.experiment.baseValue); print ("Experemrnt ScienceCap" + base.experiment.scienceCap); print ("Experemrnt dataScale" + base.experiment.dataScale); } public void CheckFindings() { //crew mod float CrewMod = 0; //calculate crew contributions foreach (ProtoCrewMember proto_crew_member in part.protoModuleCrew) { CrewMod += 1 - proto_crew_member.stupidity; } //add collected science StoredScience += CrewMod * 4; RecordedData = Mathf.Round((float)StoredScience); } //Always Update public override void OnUpdate() { base.OnUpdate(); //if the modual is suposed to be making science! if(IsEnabled) { float ResourceDraw = part.protoModuleCrew.Count; if(ResourceDraw > 0 && part.RequestResource("ElectricCharge", ResourceDraw * 0.25f) >= ResourceDraw * 0.25f) { ResearchTime = vessel.missionTime - TimeActive; float Percent = (float)(ResearchTime / 86400) * 100; CurrentPaper = 0.01 * Math.Round(Percent * 100) + "%"; if(ResearchTime >= 86400) { int PapersCompleated = (int)(ResearchTime / 86400); print ("BEGIN ======================================================"); print ("Research Time " + ResearchTime); print ("Mission Time" + vessel.missionTime); print ("Time Active " + TimeActive); print ("Papers Compleated = " + PapersCompleated); for(int i = 0; i < PapersCompleated;) { print (i); if(part.RequestResource("Snacks", ResourceDraw) >= ResourceDraw) { CheckFindings(); } else { //shutdown if out of snacks IsEnabled = false; ResearchTime = 0; CurrentPaper = ""; print ("Not enough snacks, shutting down"); } i++; } ResearchTime = 0; TimeActive = vessel.missionTime; //(float)Planetarium.GetUniversalTime(); } } else { //shutdown if out of power IsEnabled = false; print ("Not enough power, shutting down"); } } } //In Game Update public override void OnFixedUpdate() { base.OnUpdate(); } }
-
More help needed developing space station mod
CiberX15 replied to CiberX15's topic in KSP1 Mod Development
Welp, I figured out that I could reset the Experiment.BaseValue on start. Since research papers count is separate from that players still would get the science because the BaseValue is set when the player hits the deploy button. However, this revealed another problem that I though was part of this one. When the experiment is run a second time it has a diminishing return. so even though the experiments can now be calculated independently, they will still yield unpredictable results when used a second time, or on other ships. So, any idea how I could make the labs generate unique experiment ID's each time they run? -
Ok I am developing this mod here: http://kerbalspaceprogram.com/ciber-x-labs-5/ The system works fine as long as there is only one Lab in use at any given time. But because an active lab changes the Experiment.BaseValue all other labs besides the first lab act very strangely. For example if I put Lab A into space and generate 57 research papers it will give me 57 data and 57 science when I hit the deploy experiment button. However, if I put a second lab, Lab B, on the launch pad, Lab B will read 57 data and only +15 science, where it should not be reading anything at all since it has not done any research yet but is reading Lab A’s experiment definition. Now what I am trying now is only setting the science value of the experiment when the player clicks the deploy button and immediately setting it back once the player has Kept/transmitted/recycled the data. Setting it was easy, I just intercepted the deploy experiment command and set the experiment.basevalue before letting it run the original function. However, I don’t know where to set it back to default. Is there a function that is always called after you close the experiment window (the one with the keep/transmit/recycle buttons on it)? After that window closes is when I need to reset the value. Or perhaps when the player changes focus, to another ship or goes back to the space port, that would actually work better. Thanks In advance... ...Again 8 P Code Below using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; /// <summary> /// ScienceTrickle /// By: CiberX15 /// Special Thanks to Fractal_UK whose KSPInterstellar ScienceModule I reverse engineered /// to figure out how to work the code /// </summary> public class ScienceTrickle : ModuleScienceExperiment { [KSPField(isPersistant = true, guiActive = false)] protected double ActiveTime; [KSPField(isPersistant = true, guiActive = true)] protected bool IsEnabled; [KSPField(isPersistant = true, guiActive = false)] protected double ResearchTime; [KSPField(isPersistant = true, guiActive = true)] protected string CurrentPaper; protected float crew_capacity_ratio; [KSPField(isPersistant = true, guiActive = false)] protected double StoredScience; [KSPField(isPersistant = true, guiActive = true)] protected double RecordedData; /// <summary> /// Called when the part is started by Unity. /// </summary> public override void OnStart(StartState state) { base.OnStart(state); // Check our crew crew_capacity_ratio = ((float)part.protoModuleCrew.Count) / ((float)part.CrewCapacity); } //Begin Research Button [KSPEvent(guiActive = true, guiName = "Begin Research", active = true)] public void BeginResearch() { if (crew_capacity_ratio == 0) { return; } ActiveTime = Planetarium.GetUniversalTime(); ResearchTime = 0; StoredScience = 0; RecordedData = 0; CurrentPaper = ""; IsEnabled = true; } //Stop Research Button [KSPEvent(guiActive = true, guiName = "Stop Research", active = true)] public void StopActivity() { IsEnabled = false; } //Clear Research Button [KSPEvent(guiActive = true, guiName = "Clear Research", active = true)] public void ClearResearch() { IsEnabled = false; ResearchTime = 0; StoredScience = 0; RecordedData = 0; CurrentPaper = ""; } new public void DeployExperiment() { print("Begining Deployment Calculations =================================================="); experiment.baseValue = (float)RecordedData; base.DeployExperiment(); } /* new public void ReviewDataEvent() { base.ReviewDataEvent(); print("ORANGE JUICE=============================================================="); } new public void ResetExperiment() { base.ResetExperiment(); experiment.baseValue = 1; ClearResearch(); print("Finished Experiment Reset ================================================="); } new public void ResetExperimentExternal() { base.ResetExperimentExternal(); experiment.baseValue = 1; ClearResearch(); print("Finished Experiment Reset ================================================="); }*/ //Stop Research Button [KSPEvent(guiActive = true, guiName = "Debug", active = true)] public void DebugThing() { print ("ResearchTime " + ResearchTime); print ("CurrentPaper " + CurrentPaper); print ("StoredScience " + StoredScience); print ("RecordedData " + RecordedData); print ("Experemrnt BaseValue" + base.experiment.baseValue); print ("Experemrnt ScienceCap" + base.experiment.scienceCap); print ("Experemrnt dataScale" + base.experiment.dataScale); } public void CheckFindings() { //crew mod float CrewMod = 0; //calculate crew contributions foreach (ProtoCrewMember proto_crew_member in part.protoModuleCrew) { CrewMod += 1 - proto_crew_member.stupidity; } //add collected science StoredScience += CrewMod * 4; RecordedData = Mathf.Round((float)StoredScience); } //Always Update public override void OnUpdate() { //if the modual is suposed to be making science! if(IsEnabled) { float ResourceDraw = part.protoModuleCrew.Count; if(ResourceDraw > 0 && part.RequestResource("ElectricCharge", ResourceDraw * 0.25f) >= ResourceDraw * 0.25f) { ResearchTime = Planetarium.GetUniversalTime() - ActiveTime; float Percent = (float)(ResearchTime / 86400) * 100; CurrentPaper = 0.01 * Math.Round(Percent * 100) + "%"; if(ResearchTime >= 86400) { int PapersCompleated = (int)(ResearchTime / 86400); print ("Papers Compleated = " + PapersCompleated); for(int i = 0; i < PapersCompleated;) { print (i); if(part.RequestResource("Snacks", ResourceDraw) >= ResourceDraw) { CheckFindings(); } else { //shutdown if out of snacks IsEnabled = false; ResearchTime = 0; CurrentPaper = ""; print ("Not enough snacks, shutting down"); } i++; } ResearchTime = 0; ActiveTime = (float)Planetarium.GetUniversalTime(); } } else { //shutdown if out of power IsEnabled = false; print ("Not enough power, shutting down"); } } base.OnUpdate(); } //In Game Update public override void OnFixedUpdate() { base.OnUpdate(); } }
-
Need help developing a science station mod
CiberX15 replied to CiberX15's topic in KSP1 Mod Development
found another bug that I could use some help solving 8 0 The system works fine as long as there is only one Lab in use at any given time. But because an active lab changes the Experiment.BaseValue all other labs besides the first lab act very strangely. I think perhaps I need to have each lab dynamically generate its own uniquely named Experiments at run time. There only needs to be one experiment definition per lab since each lab would overwrite the data each time they record their findings, but they need to be separate so that lab B does not read lab A's experiment definition. Thanks In advance... ...Again 8 P -
Need help developing a science station mod
CiberX15 replied to CiberX15's topic in KSP1 Mod Development
And Here it is : http://kerbalspaceprogram.com/ciber-x-labs-5/ hope you enjoy! (let me know if you find any bugs; ) -
Need help developing a science station mod
CiberX15 replied to CiberX15's topic in KSP1 Mod Development
Ok I think I have it working Acceptably based on the above (Thanks DMagic). I set the science cap to 5000 so (assuming I was correct above) the maximum science that can be mined from any given location/altitude is 5000. For balance I will may lower this to 1000 to encourage players to build new stations around other celestial bodies and give players a valid reason to de-orbit their space stations (which is arguably more fun than putting them up in the first place). Also, for anyone having similar issues I changed the lines: RecordedData = Mathf.Round((float)StoredScience); base.experiment.baseValue = (float)RecordedData; base.experiment.scienceCap = (float)RecordedData; base.experiment.dataScale = (float)RecordedData; to RecordedData = Mathf.Round((float)StoredScience); base.experiment.baseValue = (float)RecordedData; which seems to have solved my unpredictable science returns issue. It's 12:30am here so I am going to head to bed, but with these issues resolved you will probably see the mod going up sometime tomorrow(today). Ill post a link here when I have one : ) -
Need help developing a science station mod
CiberX15 replied to CiberX15's topic in KSP1 Mod Development
At the moment I am setting all of the values to the same number, this seems to return predictable numbers the first time I submit the data. It would really help if someone could explain what each variable does : { Can I assume The science value cap is the maximum amount of science that can be gained from an experiment at a given location/altitude? If so that would actually work out alright since it would force players to eventually build stations further and further into space, but only after having exhausted an area. -
Ok, I am working on a mod where I am attempting to make space stations more valuable in career mode. What I am doing is creating a new part/module that consumes electrical energy and a new resource "Snacks" to gain science. The way it works is it calculates how long it has been running + the amount of kerbals - their stupidity. My aim is for it to generate roughly +100 science per Kerbin year in high Kerbin orbit (should be somewhat more if players manage to get it into orbit around other celestial bodies). The idea is that players could use it as a little surplus of science in-between interplanetary missions but not spam it. Requiring "Snacks" also means players will have to do some station upkeep without resorting to hard mode methods like food and oxygen supply that kill kerbals. Now I have this 80% working already, even have custom models and everything but I am having problems with two things. One, the module is extended from theModuleScienceExperiment and simply sets the experiment basevalue, science cap, and datascale depending on how much "research" has been done when the player activates the experiment. Part of my problem is I don't know how these values actually control the science. For example if I want the science gained to be exactly +24 how would I manipulate the variables to reflect that? Secondly, once the experiment has been transmitted, it losses scientific value, that's fine for normal experiments but I need this one to be reset each time because it represents scientists doing different research projects each time. For example if the player has had the station in orbit for a year and sends +100 data back to Kerbin, then waits another Kerbin year, rather than getting another +100 like I want them to, they would get +0 or +50 since so far as the game is concerned the experiment has already been done. I need it to consistently return 100% of the science regardless of repeat experiments. Thank you in advance for anyone who can help me figure this out : ) code below using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; /// <summary> /// My first part! /// </summary> public class ScienceTrickle : ModuleScienceExperiment { [KSPField(isPersistant = true, guiActive = false)] protected float last_active_time; [KSPField(isPersistant = true, guiActive = true)] protected bool IsEnabled; [KSPField(isPersistant = true, guiActive = false)] protected float ResearchTime; [KSPField(isPersistant = true, guiActive = true)] protected string CurrentPaper; protected float crew_capacity_ratio; [KSPField(isPersistant = true, guiActive = false)] protected double StoredScience; [KSPField(isPersistant = true, guiActive = true)] protected float RecordedData; protected float LastCheckTime = 5; /// <summary> /// Called when the part is started by Unity. /// </summary> public override void OnStart(StartState state) { base.OnStart(state); // Check our crew crew_capacity_ratio = ((float)part.protoModuleCrew.Count) / ((float)part.CrewCapacity); //make sure we check the science when we startup LastCheckTime = 5; } //Begin Research Button [KSPEvent(guiActive = true, guiName = "Begin Research", active = true)] public void BeginResearch() { if (crew_capacity_ratio == 0) { return; } last_active_time = (float)Planetarium.GetUniversalTime(); StoredScience = 0; RecordedData = 0; IsEnabled = true; } //Stop Research Button [KSPEvent(guiActive = true, guiName = "Stop Research", active = true)] public void StopActivity() { IsEnabled = false; } public void CheckFindings() { /* //find time passed double now = Planetarium.GetUniversalTime(); double time_diff = Math.Round(now - last_active_time); //correct negitive time (wait what does that even mean?!) if(time_diff < 0) time_diff = 0; */ //set altitude mod float altitude_multiplier = (float)(vessel.altitude / (vessel.mainBody.Radius)); altitude_multiplier = Math.Max (altitude_multiplier, 1); //crew mod float CrewMod = 0; //calculate crew contributions foreach (ProtoCrewMember proto_crew_member in part.protoModuleCrew) { CrewMod += 1 - proto_crew_member.stupidity; } //compute science gain (should gain ~100 science per crew per kerbin year if in orbit around kerbin) double science_to_add = /*time_diff*/ CrewMod; //add collected science StoredScience += science_to_add; RecordedData = Mathf.Round((float)StoredScience); base.experiment.baseValue = (float)RecordedData; base.experiment.scienceCap = (float)RecordedData; base.experiment.dataScale = (float)RecordedData; } //Always Update public override void OnUpdate() { //if the modual is suposed to be making science! if(IsEnabled) { float ResourceDraw = part.protoModuleCrew.Count; if(ResourceDraw > 0 && part.RequestResource("ElectricCharge", ResourceDraw * 0.25f) >= ResourceDraw * 0.25f) { ResearchTime += (float)Planetarium.GetUniversalTime() - (float)last_active_time; float Percent = (ResearchTime / 864000) * 100; CurrentPaper = 0.01 * Math.Round(Percent * 100) + "%"; if(ResearchTime >= 864000) { if(part.RequestResource("Snacks", ResourceDraw) >= ResourceDraw) { ResearchTime = 0; last_active_time = (float)Planetarium.GetUniversalTime(); CheckFindings(); } else { //shutdown if out of snacks IsEnabled = false; print ("Not enough snacks, shutting down"); } } } else { //shutdown if out of power IsEnabled = false; print ("Not enough power, shutting down"); } } base.OnUpdate(); } //In Game Update public override void OnFixedUpdate() { //last_active_time = (float)Planetarium.GetUniversalTime (); base.OnUpdate(); } } /* if (active_mode == 0) { // Science persistence ResearchAndDevelopment.Instance.Science = ResearchAndDevelopment.Instance.Science + (float)StoredScience; */
-
Hey awesome pack, I am so happy to see it work with the science tree now : ) Suggestion though: could you perhaps move the fuel carrying parts to the propulsion tab in the next build, and the Kerbal carrying parts to the utility tab? Even with plugins to sort parts installed I have trouble finding the section that carries fuel instead of kerbals when each part has 3-4 identical variants with different functionality. If they were divided up into the proper tabs I think finding the particular part with the right functionality would be a lot easier. Keep up the great work : )
-
Well as I understand it, funding is already planed in some form or another. So far as provisions go though, I am not fond of the idea. It sounds cool on paper, but I have tried several mods that do this and it always just comes out being annoying. Just like when you forget to turn your solar panels on and your probe dies, your kerbal pilots could just up and die on you and leave missions that took real life hours wasted. I think that would just make the game too difficult to be stock game-play. At most I would say a hard mode that could be turned on and off, but that might require a lot of work and new parts for a feature that many players would not use.
-
Yeah, data storage would be great too. It would allow you to do long term missions with lander and probes without the ability to send data wirelessly. In this case players would need to bring back the whole capsule/data storage. Might replace the first antenna early game. Interesting, however that might mitigate the need for maned missions altogether. As it is now collecting soil samples is what encourages players to actually land kerbals on other planetary bodies.
-
First off, I have been waiting desperately for career mode since I bought the game and since that time I have logged 266 hours in KSP (probably 100 more of offline time). Squad, you did not disappoint. Even though this is just the first rendition of just one part of career mode, you nailed it. I can't wait to see what you implement next. With that out of the way there are three connected points I want to touch on. One, my standard pipeline is, send ship to destination, run test, send data, repeat, and repeat, and repeat, and repeat, and repeat, and repeat, and repeat... I don't mind the time and electrical energy it takes to do this, in fact I like it. What I want to see removed is the tedium of repeatedly clicking back and fourth between the experiment and the transmission dish. What I would recommend is continuous experimentation. Internally all you would have to do is cause an experiment to repeat if its data is collected. From the players point of view this would leave the dish open and transmit data every time an experiment finishes. The existing power requirements for sending data would still force the player to either stop the experiments or wait for a charge to build back up. All this does is remove the tedium from the experience. Secondly and on a similar note, I would like to be able to bring back more than one soil sample per mission/pod. This could be done by either adding additional storage space to the capsules, or even adding a storage container part that would add additional weight to a craft but allow it to carry more samples. In either case if you are not already I would recommend making the samples have a certain amount of weight, not much, but enough that if a player decides to dig a crater and put it in their space ship they probably won't be able to take of as easily. Finally I would recommend some form of resource trickle from manned labs. Adding something like the Hitchhiker that gains science at a slow but steady rate depending on electrical energy, placement around or on a celestial body, and how many kerbals are inside of it "doing science." The resource trickle might only be something like + 15 science per real life hour (I say real life to avoid exploiting time compression). Science would be stored until sent via existing transition system, encouraging players to come back to their stations every now and then. In this way players could have a significant reason to put space stations up and build maned bases on planetary bodies in the same way that the current science tree gave players a significant reason to actually build probes. This has already been implemented in a mod here: ( http://forum.kerbalspaceprogram.com/threads/43839-0-21-KSP-Interstellar-%28Now-with-Heat-Radiators%21%29-Version-0-6-%28Beta%29 ) but it would be nice to see this as a stock feature. Anyways, that's my take and suggestions on the new update. Thank you so much Squad for an excellent game, and I cant wait to see more p.s. My first campaign has been going for 3 in game years and Jeb and the rest of the original flight crew are still alive! I must be doing something wrong!