JPLRepo / DeepFreeze

http://forum.kerbalspaceprogram.com/threads/124720
Other
12 stars 15 forks source link

Frozen Kerbals cannot be thawed when ship docks/un-docks or use KIS on vessel. #28

Closed JPLRepo closed 9 years ago

JPLRepo commented 9 years ago

Originally Posted by hab136 I've got a bug report. Log and persistent.sfs: https://www.dropbox.com/sh/jtnkbvg4b...NPlGzJ9Ca?dl=0

I built a ship (Explorer 1), then docked it to my space station (TC2). Put Kerbals into the freezer, froze them (while docked), then undocked the ship, and then made a few modifications to the ship (with KIS).
When I went to unfreeze them (thankfully before the interplanetary journey), I couldn't. No Kerbals in the frozen list.
Looking at the save file, DeepFreeze saved them in SCENARIO{DFGameSettings{KerbalInfo{}}} against "vesselID = 6201018e-5580-48b6-9785-f655b44769cb" which doesn't exist, but presumably used to be TC2 (I also modified that station heavily using KIS). I changed that to c4792c2b-50e8-4e50-a3b9-67a166b6cfff to match the PartInfo{} vesselID of the actual freezer, as well as the actual ship:

Now the Kerbals show up in the list! But I can't unfreeze them. Pressing "Thaw" says "Code Error: Cannot thaw kerbal at this time / Thawing Aborted / Cannot thaw kerbal at this time". The log is full of "Argument is out of range" spam.
I'll try to fix this by save file hackery (probably just restoring them to "live" and then re-freezing), but this brings up some questions:

  1. Do you test against the vessel ID changing, via freezing and then undocking, or just moving the freezer (with frozen Kerbals inside) from one ship to another via KIS?
  2. If I change the vesselID of the freezer and then freeze Kerbals, is that safe? I can live with a restriction of "don't modify the ship while frozen Kerbals are aboard" but I do need to dock/undock and modify ships with KIS.
    It seems to me that storing the frozen Kerbals in the PartModule instead of the global SCENARIO{} would avoid the vesselID issues, but might not let you access their data while focused on another ship (the global Alarm window and such). Maybe just have each PartModule store which Kerbals are frozen on board, and update the vesselID in SCENARIO{}? I don't know the solution, just throwing things out there.

Thank you for the extensive bug report info.
Yes, DeepFreeze stores frozen kerbals against the SCENARIO rather than in the PartModule. This is so it can be accessed from anywhere in the game, such as another vessel (when the part is unloaded), etc and given there are Electrical Charge and Heat usage and monitoring that occurs all the time in game, this is required.
I am unfamiliar with how KIS operates and was not aware it can remove parts from vessels. It would be safe to say at this stage that DeepFreeze is NOT compatible with KIS. I will have to investigate how KIS removes parts, renames vessels, etc to see if it is using standard KSP GameEvents or not. I will check the GameEvents that DeepFreeze uses and check that standard docking, un-docking and renaming still works.

Rather than your game save hack, DeepFreeze does allow you to Thaw Frozen Kerbals from the Space Center (they will re-appear in the Astronaut Center back at KSC) if they are no longer associated with a valid vesselID. So you could try that.

JPLRepo commented 9 years ago

Fixed