Jump to content

[1.4] StageRecovery - Recover Funds+ from Dropped Stages - v1.8.0 (March 11, 2018)


magico13

Recommended Posts

I have a question/feature request, probably something to be added sometime after the initial release but wanted to mention it while it was in my head. Skip down to TL;DR if you don't care to read my entire thought process, I do have a tendency to over-explain. :D

I've had one issue with SR that I have to just ignore when I use it, and it's that there's a reason we don't reuse liquid fueled engines when splashed down in the ocean in real life. Seawater gets into the components and corrodes them to the point that restoring them would take more money and effort than making a new engine. It's the main reason the shuttle was designed how it was. SRB's are simple enough that they can land in seawater fine, and the liquid fuel tank is dropped on its own while the engines come back with the shuttle, even though they serve no purpose without the tank. It's also why the Falcon 9 being able to steer itself back down onto a barge is so important.

Without there being a cost to liquid fueled rockets going into the water, it makes it so much easier to just slap a bunch of parachutes on to the stages and get a high value back for them no matter where they land. Why add a probe core and engineer a powered landing when parachutes are so much easier? (Besides it being cool.) But at the same time we don't need to make the solution TOO complicated, for both coding and gameplay purposes. So what I propose is this:

TL;DR: Would it be not overly complicated to add a difficulty option that zero's out any value back for LFR engines (and perhaps also reduce the value for LFR tanks) that land unpowered over water? And retain the normal calculated value if they land on dry land, or if it lands under power.

This will create more dynamic gameplay in a few ways. It gives more importance back to SRB's, as currently LFR stages are far to cost effective in early stages as you can easily get close to full value back for them, as they land a short distance away from the pad. It also encourages the player to either try and get them to re-enter over another continent, or even better it encourages them to utilize the nifty powered landing simulating you've added to SR. For simplicity's sake, we can assume that if it's a powered landing there is a target waiting for it. While adding a requirement to have it in range of a prepared landing target could be great fun, I'm not looking to give you any more work than needed. :D

Link to comment
Share on other sites

2 minutes ago, Tybot said:

TL;DR: Would it be not overly complicated to add a difficulty option that zero's out any value back for LFR engines (and perhaps also reduce the value for LFR tanks) that land unpowered over water? And retain the normal calculated value if they land on dry land, or if it lands under power.

I had intended on adding at the very least the ability to change recovery percentages for different biomes, so you could set "Ocean" to have a lower percentage. I hadn't intended on making this part dependent, just global for the entire stage. That wouldn't add preference for SRBs however. It's on my backlog, but that doesn't move very quickly.

Link to comment
Share on other sites

2 minutes ago, magico13 said:

I had intended on adding at the very least the ability to change recovery percentages for different biomes, so you could set "Ocean" to have a lower percentage. I hadn't intended on making this part dependent, just global for the entire stage. That wouldn't add preference for SRBs however. It's on my backlog, but that doesn't move very quickly.

Would adding part dependency make development considerably more complicated? Maybe a check for any part that uses or stores LF or LOX as a resource, rather than a manual list that would make more work for modded parts? Just thinking out loud.

Link to comment
Share on other sites

11 minutes ago, Tybot said:

Would adding part dependency make development considerably more complicated? Maybe a check for any part that uses or stores LF or LOX as a resource, rather than a manual list that would make more work for modded parts? Just thinking out loud.

That would probably be how I would do it, but I'd have to make the list of resources to check for configurable. With biomes and resources, there are a LOT of possible combinations, which would be a bit of a nightmare to configure if not set up nicely. Programming it is probably easier than configuring it, as long as you're ok with the fact that powered recovery doesn't actually change trajectories at all (otherwise programming it would be much harder).

 

A config file might look something like this:

{
  DEFAULT
  {
    default = 1.0
  }
  MOUNTAINS
  {
    default = 0.85
  }
  OCEAN
  {
    default = 0.75
    liquidFuel = 0.1
  }
}

Link to comment
Share on other sites

1 minute ago, magico13 said:

Programming it is probably easier than configuring it, as long as you're ok with the fact that powered recovery doesn't actually change trajectories at all (otherwise programming it would be much harder).

Yup, if players want to fine tune their trajectory they can take control of the stage and set it up themselves. Such maneuvers would likely happen well above the altitude they unload and trigger the reentry check. It would mean any landing in a poor biome would be bad, powered or not. But that's a worthy sacrifice for simplicity.

Would the configuration part be an area someone could help you with? When and if the time comes.

Link to comment
Share on other sites

1 hour ago, Tybot said:

Would the configuration part be an area someone could help you with? When and if the time comes.

It won't actually be that hard to program, it just has the capability of being annoying for anyone who wants to change a bunch of things since there might be a lot of options (imagine mods with a lot of fuel types and extra biomes and you want to configure them all for some reason).

Link to comment
Share on other sites

I noticed that while the mod says it recovered all Kerbals and science etc. on a descent stage, if they are TOURISTS, the contract still fails.

 

The kerbals are then also no longer available in th crew roster (suppose the contract sys removed them)

Link to comment
Share on other sites

2 hours ago, Thygrrr said:

I noticed that while the mod says it recovered all Kerbals and science etc. on a descent stage, if they are TOURISTS, the contract still fails.

 

The kerbals are then also no longer available in th crew roster (suppose the contract sys removed them)

StageRecovery uses a custom recovery method that doesn't quite handle contracts correctly, since rely on events that only fire during regular recovery. With how StageRecovery works, it'd probably need a sizeable rewrite to get it to work correctly. I have plans for that, but it's low on the list.

Link to comment
Share on other sites

I'm here to report a little incompatibility (if not reported yet) with Strategia mod:

There's one of these strategies (probe frenzy) wich doubles the cost of manned launches, obviously it relies on stock launch-button/cost-system, so it doesn't influence the cost your mod sets for building.  This is not game breaking at all (I simply reduce my funds with the cheats windows on every crewed launch, I usually remove just 10k per kerbal). This is just a report of course, not a request in any way.

Keep up the good work, this mod and stage recovery make half of the gameplay for KSP, you've really been magic to me!

 

Link to comment
Share on other sites

10 minutes ago, PaganoCristo said:

I'm here to report a little incompatibility (if not reported yet) with Strategia mod:

There's one of these strategies (probe frenzy) wich doubles the cost of manned launches, obviously it relies on stock launch-button/cost-system, so it doesn't influence the cost your mod sets for building.  This is not game breaking at all (I simply reduce my funds with the cheats windows on every crewed launch, I usually remove just 10k per kerbal). This is just a report of course, not a request in any way.

Keep up the good work, this mod and stage recovery make half of the gameplay for KSP, you've really been magic to me!

 

FYI, you've placed this in the StageRecovery thread, not the KCT one :wink: KCT does use the stock funds system, but I'll have to check how Strategia's strategy is implemented. I would imagine it would use OnVesselRollout, which is definitely still triggered (but the crew may not have been loaded into the vessel by that time). I'll make a note to look into it when I get a chance.

Link to comment
Share on other sites

I am getting a bunch of nullrefs in my logs (see attachments). I noticed them while trying to find a bug with another mod, so it wasn't the cause of my initial search but just wanted to point it out for the dev.

Logs:  KSP.log and output.txt
 

Spoiler

[LOG 23:32:01.359] ATV Debris Unloaded
[LOG 23:32:01.378] Packing ATV Debris for orbit
[LOG 23:32:01.379] ScaleModList: listSize 574 maxListSize 1066
[LOG 23:32:01.408] ScaleModList: listSize 574 maxListSize 1066
[LOG 23:32:03.536] [F: 114455]: Vessel ATV Debris was on-rails at 1.1 kPa pressure and was destroyed.
[LOG 23:32:03.540] [SR] Searching in RecoveryQueue (0) for 6b9f69be-45ec-4add-b93a-4a2fb5c342ed
[LOG 23:32:03.541] [SR] Altitude: 24493.1691736123
[EXC 23:32:03.543] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:03.545] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:03.547] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[LOG 23:32:03.548] [SR] Vt: 76.26724
[LOG 23:32:03.550] [SR] Trying powered recovery
[LOG 23:32:03.551] [SR] No kerbal pilot found, searching for a probe core...
[LOG 23:32:03.551] [SR] Found an SAS compatible probe core!
[LOG 23:32:03.552] [SR] Final Vt: 76.26724
[LOG 23:32:03.553] [SR] Distance: 34399.45
[LOG 23:32:03.558] [Vessel ATV Debris]: Vessel was destroyed.
[LOG 23:32:04.035] [F: 114474]: Vessel ATV Debris was on-rails at 1.1 kPa pressure and was destroyed.
[LOG 23:32:04.038] [SR] Searching in RecoveryQueue (0) for 46e4c2b6-c7bb-44a7-b686-baef77da16d8
[LOG 23:32:04.038] [SR] Altitude: 24533.618067276
[EXC 23:32:04.039] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:04.040] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:04.042] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:04.044] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:04.045] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:04.047] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[EXC 23:32:04.049] NullReferenceException
	UnityEngine.Transform.InverseTransformDirection (Vector3 direction)
	StageRecovery.RecoveryItem.DetermineTerminalVelocity ()
	UnityEngine.Debug:LogException(Exception)
	StageRecovery.RecoveryItem:DetermineTerminalVelocity()
	StageRecovery.RecoveryItem:Process()
	StageRecovery.StageRecovery:VesselDestroyEvent(Vessel)
	EventData`1:Fire(Vessel)
	Vessel:Die()
	Vessel:CheckKill()
	VesselPrecalculate:MainPhysics(Boolean)
	VesselPrecalculate:FixedUpdate()
[LOG 23:32:04.050] [SR] Vt: 10.82117
[LOG 23:32:04.051] [SR] Distance: 35113.41
[LOG 23:32:04.051] [SR] Adding funds: 4921.60498046875, New total: 1770519.90179401
[LOG 23:32:04.053] [Vessel ATV Debris]: Vessel was destroyed.

 

 

Link to comment
Share on other sites

14 hours ago, Jimbodiah said:

I am getting a bunch of nullrefs in my logs (see attachments). I noticed them while trying to find a bug with another mod, so it wasn't the cause of my initial search but just wanted to point it out for the dev.

Your link to the output_log is not the same as the one used for that snippet, as it contains no errors, but it's alright.

Those NREs are alright, I had assumed they were going to happen because they happened in my testing and I put a try-catch around them with logging so I could examine them further. StageRecovery just assumes the rotation is "up" if that happens, otherwise it gets the actual one. And annoyingly I haven't found a way to check for what causes that to throw so I have to use the try-catch. So basically they're not a big deal, but thank you for reporting them :)

Link to comment
Share on other sites

How do you guys manage to recover the first stage? Kickbacks aren't so cheap that it's not worth slapping on 2 parachutes each. But the game deletes them before stage recovery can mark them as salvaged. It recovers the second stage just fine, and marks the first stage as destroyed if I don't put chutes on it.

Link to comment
Share on other sites

I put chutes on every stage. I put the chutes on the same stage as the seperator so they will deploy when they can. For the first stage I tend to set the pressure to ~.55 and the alt to ~750.  .55 is to keep them from popping right away which tends to cause colisions. I used to set alt to 250-500 but with changes made, they don't slow down fast enough. So 500-750 depending on how heavy the first stage parts are. The rest of the stages I leave at default because we now have the "open when safe" override back so they won't deploy during reentry burn.

Link to comment
Share on other sites

I've noticed a bug. I sent a probe into a solar orbit, but had a stage that would still fall down to kerbin (it was still in kerbin orbit). I followed it and it was traveling around 3000 m/s when it hit the 25 km height, but it still burned up (yes I had heatshielding), and the report said that it was travelling at 8850 m/s when it hit the atmosphere.. I guess it took the relative velocity of my active vessel or something, but this was quite annoying, as it would've survived otherwise, not wasting 30k+ funds :/ 

Link to comment
Share on other sites

It uses the surface velocity, which should be relative to the planet and independent of any active vessels. If you can recreate it in stock and send me a save file, or at the very least send the output_log.txt file from that specific play session then I can look into it. Otherwise I can't do much about it.

Link to comment
Share on other sites

10 hours ago, sardia said:

How do you guys manage to recover the first stage? Kickbacks aren't so cheap that it's not worth slapping on 2 parachutes each. But the game deletes them before stage recovery can mark them as salvaged. It recovers the second stage just fine, and marks the first stage as destroyed if I don't put chutes on it.

The problem here is that simply slapping chutes on is not enough if the booster impacts while still within physics range.  You actually have to program the chutes to work correctly.  Stage Recovery does not act on anything within physics range of your control point.

Link to comment
Share on other sites

10 minutes ago, magico13 said:

It should have been updated when I updated it on SpaceDock, but you are more than welcome to. I guess they added an override since I didn't officially update for 1.1.3.

Cool, done: https://github.com/KSP-CKAN/NetKAN/pull/4867

It's had an override for over a year: https://github.com/KSP-CKAN/NetKAN/commits/master/NetKAN/StageRecovery.netkan I didn't remove it, just bumped the version numbers.

Link to comment
Share on other sites

20 hours ago, sardia said:

How do you guys manage to recover the first stage? Kickbacks aren't so cheap that it's not worth slapping on 2 parachutes each. But the game deletes them before stage recovery can mark them as salvaged. It recovers the second stage just fine, and marks the first stage as destroyed if I don't put chutes on it.

10 hours ago, Loren Pechtel said:

The problem here is that simply slapping chutes on is not enough if the booster impacts while still within physics range.  You actually have to program the chutes to work correctly.  Stage Recovery does not act on anything within physics range of your control point.

I fix that by using RealChute. Deploy on staging, but with a delay so the staged part(s) get clear.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...