Jump to content

rhoark

Members
  • Posts

    526
  • Joined

  • Last visited

Everything posted by rhoark

  1. After some discussion on the subreddit I decided to make some new sensor modules that introduce small errors. There's no direct dependency or special interface to kOS, but the purpose is to enable the use of kOS to experiment with tools for guidance from uncertain readings (such as least-squares, Kalman filtering, and Byzantine fault tolerance.) Here's a beta/preview/proof-of-concept: https://www.dropbox.com/s/11tov1wvslpdwsp/ErrorBars-0.zip What's done so far: External air temperature thermometer with hysteresis and influence from the part's temperature. (Part temperature influence is higher when the thermometer is aerodynamically shielded.) Added as a PartModule on the 2HOT. Linear accelerometer and rate gyro with white noise and red noise. Added to the seismometer, any command part with SAS, and any reaction wheel without command. (Reaction wheels have the highest accuracy.) Barometer with small white noise and a strict 2 Pa - 200kPa range. More accurate when aerodynamically shielded. Added to the Pres-Mat. Pitot tube with a 10 kPa - 1MPa range, dampened readings under 25 m/s, and large fluctuations above Mach .7 - must not be aerodynamically shielded. New part in the control tab, using the "Small Hardpoint" model. Still to come: Radar altimeter Radio time-of-flight transponder Fluctuations in actual state rather than just measurements (wind gusts, micrometeorites)
  2. My rebalance just sets it at half, no plans for a slider. Here's the code to do that much: http://forum.kerbalspaceprogram.com/threads/118026-WIP-tech-tree-rearrangement?p=1913619&viewfull=1#post1913619
  3. Here's mine: http://forum.kerbalspaceprogram.com/threads/118026-WIP-tech-tree-rearrangement
  4. How'd you fix it? I'm having a similar problem. You can look at this mod for how they altered the navball http://forum.kerbalspaceprogram.com/threads/50524-0-90-Enhanced-Navball-1-3
  5. There was a mod with some nice-looking half-cylinder girders and matching service bays, but I don't remember the name. Can anyone help?
  6. That would be a large undertaking, but there are mods that let you add new spawn locations, so you could build your own crawler and spawn it with a rocket aboard right outside the VAB.
  7. Pyrolysis gases carry some heat with them as they go, but the pressure they generate also increases the shock standoff distance. Edit: according to this paper the standoff is less important than how the ejected gas chemically reacts with the dissociated gas in the shock. If I'm understanding correctly, nitrogen and oxygen radicals would otherwise react exothermically with the heat shield.
  8. Speaking of which, does anyone know if heatshields properly reduce convective flux, or do they just subtract heat while ablative material lasts?
  9. Is there a way, stock or mod, to spawn a resource with biome-dependent density?
  10. Just saw this for the first time, looks great!
  11. Source for altering career limits. Data members in GameVariables aren't initialized automatically, so they need to be set explicitly or things go awry. They probably come from the difficulty GUI, but I don't know how to get at that directly. Making calls to the replaced instance instead of the superclass lets multiple mods apply changes simultaneously. [KSPAddon(KSPAddon.Startup.SpaceCentre, true)] public class DoStuffAtLoad : MonoBehaviour { static GameVariables customGame; static GameVariables stockGame; public DoStuffAtLoad() { } void Awake() { if (customGame == null) { stockGame = GameVariables.Instance; customGame = new interceptCareerLimits(GameVariables.Instance); } GameVariables.Instance = customGame; } } public class interceptCareerLimits : GameVariables { static GameVariables _master; public interceptCareerLimits(GameVariables master) : base() { _master = master; this.partRecoveryValueFactor = _master.partRecoveryValueFactor; this.reputationAddition = _master.reputationAddition; this.reputationKerbalDeath = _master.reputationKerbalDeath; this.reputationKerbalRecovery = _master.reputationKerbalRecovery; this.reputationSubtraction = _master.reputationSubtraction; this.contractDestinationWeight = _master.contractDestinationWeight; this.contractFundsAdvanceFactor = _master.contractFundsAdvanceFactor; this.contractFundsCompletionFactor = _master.contractFundsCompletionFactor; this.contractFundsFailureFactor = _master.contractFundsFailureFactor; this.contractPrestigeExceptional = _master.contractPrestigeExceptional; this.contractPrestigeSignificant = _master.contractPrestigeSignificant; this.contractPrestigeTrivial = _master.contractPrestigeTrivial; this.contractReputationCompletionFactor = _master.contractReputationCompletionFactor; this.contractReputationFailureFactor = _master.contractReputationFailureFactor; this.contractScienceCompletionFactor = _master.contractScienceCompletionFactor; this.mentalityDeadlineExceptional = _master.mentalityDeadlineExceptional; this.mentalityDeadlineSignificant = _master.mentalityDeadlineSignificant; this.mentalityDeadlineTrivial = _master.mentalityDeadlineTrivial; this.mentalityExpiryExceptional = _master.mentalityExpiryExceptional; this.mentalityExpirySignificant = _master.mentalityExpirySignificant; this.mentalityExpiryTrivial = _master.mentalityExpiryTrivial; this.mentalityFundsExceptional = _master.mentalityFundsExceptional; this.mentalityFundsSignificant = _master.mentalityFundsSignificant; this.mentalityFundsTrivial = _master.mentalityFundsTrivial; this.mentalityReputationExceptional = _master.mentalityReputationExceptional; this.mentalityReputationSignificant = _master.mentalityReputationSignificant; this.mentalityReputationTrivial = _master.mentalityReputationTrivial; this.mentalityScienceExceptional = _master.mentalityScienceExceptional; this.mentalityScienceSignificant = _master.mentalityScienceSignificant; this.mentalityScienceTrivial = _master.mentalityScienceTrivial; } public override int GetPartCountLimit(float editorNormLevel) { if (editorNormLevel == 0) { return 60; } return _master.GetPartCountLimit(editorNormLevel); } public override bool UnlockedActionGroupsStock(float editorNormLevel) { _master.GetPartCountLimit(editorNormLevel); return true; } public override bool UnlockedActionGroupsCustom(float editorNormLevel) { _master.UnlockedActionGroupsCustom(editorNormLevel); return editorNormLevel > 0.0; } public override float GetRecruitHireCost(int currentActive) { var stock = _master.GetRecruitHireCost(currentActive); return stock / 2.0f; } public override bool EVAIsPossible(bool evaUnlocked, Vessel v) { return _master.EVAIsPossible(evaUnlocked, v); } public override int GetActiveContractsLimit(float mCtrlNormLevel) { return _master.GetActiveContractsLimit(mCtrlNormLevel); } public override int GetActiveCrewLimit(float astroComplexNormLevel) { return _master.GetActiveCrewLimit(astroComplexNormLevel); } public override int GetActiveStrategyLimit(float adminNormLevel) { return _master.GetActiveStrategyLimit(adminNormLevel); } public override float GetContractDestinationWeight(CelestialBody body) { return _master.GetContractDestinationWeight(body); } public override float GetContractFundsAdvanceFactor(Contracts.Contract.ContractPrestige prestige) { return _master.GetContractFundsAdvanceFactor(prestige); } public override float GetContractFundsCompletionFactor(Contracts.Contract.ContractPrestige prestige) { return _master.GetContractFundsCompletionFactor(prestige); } public override float GetContractFundsFailureFactor(Contracts.Contract.ContractPrestige prestige) { return _master.GetContractFundsFailureFactor(prestige); } public override float GetContractLevelLimit(float mCtrlNormLevel) { return _master.GetContractLevelLimit(mCtrlNormLevel); } public override float GetContractPrestigeFactor(Contracts.Contract.ContractPrestige prestige) { return _master.GetContractPrestigeFactor(prestige); } public override float GetContractReputationCompletionFactor(Contracts.Contract.ContractPrestige prestige) { return _master.GetContractReputationCompletionFactor(prestige); } public override float GetContractReputationFailureFactor(Contracts.Contract.ContractPrestige prestige) { return _master.GetContractReputationFailureFactor(prestige); } public override float GetContractScienceCompletionFactor(Contracts.Contract.ContractPrestige prestige) { return _master.GetContractScienceCompletionFactor(prestige); } public override float GetCraftMassLimit(float editorNormLevel) { return _master.GetCraftMassLimit(editorNormLevel); } public override Vector3 GetCraftSizeLimit(float editorNormLevel) { return _master.GetCraftSizeLimit(editorNormLevel); } public override float GetCrewLevelLimit(float astroComplexNormLevel) { return _master.GetCrewLevelLimit(astroComplexNormLevel); } public override float GetDataToScienceRatio(float RnDnormLevel) { return _master.GetDataToScienceRatio(RnDnormLevel); } public override string GetEVALockedReason(Vessel v, ProtoCrewMember crew) { return _master.GetEVALockedReason(v, crew); } public override float GetExperimentLevel(float RnDnormLevel) { return _master.GetExperimentLevel(RnDnormLevel); } public override int GetHashCode() { return _master.GetHashCode(); } public override float GetMentalityDeadlineFactor(float mentalityFactor, Contracts.Contract.ContractPrestige prestige) { return _master.GetMentalityDeadlineFactor(mentalityFactor, prestige); } public override float GetMentalityExpiryFactor(float mentalityFactor, Contracts.Contract.ContractPrestige prestige) { return _master.GetMentalityExpiryFactor(mentalityFactor, prestige); } public override float GetMentalityFundsFactor(float mentalityFactor, Contracts.Contract.ContractPrestige prestige) { return _master.GetMentalityFundsFactor(mentalityFactor, prestige); } public override float GetMentalityReputationFactor(float mentalityFactor, Contracts.Contract.ContractPrestige prestige) { return _master.GetMentalityReputationFactor(mentalityFactor, prestige); } public override float GetMentalityScienceFactor(float mentalityFactor, Contracts.Contract.ContractPrestige prestige) { return _master.GetMentalityScienceFactor(mentalityFactor, prestige); } public override OrbitDisplayMode GetOrbitDisplayMode(float tsNormLevel) { return _master.GetOrbitDisplayMode(tsNormLevel); } public override int GetPatchesAheadLimit(float tsNormLevel) { return _master.GetPatchesAheadLimit(tsNormLevel); } public override float GetRecoveredPartValue(float pValue) { return _master.GetRecoveredPartValue(pValue); } public override float GetRecoveredResourceValue(float rscValue) { return _master.GetRecoveredResourceValue(rscValue); } public override float GetScienceCostLimit(float RnDnormLevel) { return _master.GetScienceCostLimit(RnDnormLevel); } public override float GetStrategyCommitRange(float adminNormLevel) { return _master.GetStrategyCommitRange(adminNormLevel); } public override float GetStrategyLevelLimit(float adminNormLevel) { return _master.GetStrategyLevelLimit(adminNormLevel); } public override int GetTrackedObjectLimit(float tsNormLevel) { return _master.GetTrackedObjectLimit(tsNormLevel); } public override UntrackedObjectClass MinTrackedObjectSize(float tsNormLevel) { return _master.MinTrackedObjectSize(tsNormLevel); } public override float ScoreFlightEnvelope(float altitude, float altEnvelope, float speed, float speedEnvelope) { return _master.ScoreFlightEnvelope(altitude, altEnvelope, speed, speedEnvelope); } public override float ScoreSituation(Vessel.Situations sit, CelestialBody where) { return _master.ScoreSituation(sit, where); } public override string ToString() { return _master.ToString(); } public override bool UnlockedEVA(float astroComplexNormLevel) { return _master.UnlockedEVA(astroComplexNormLevel); } public override bool UnlockedEVAClamber(float astroComplexNormLevel) { return _master.UnlockedEVAClamber(astroComplexNormLevel); } public override bool UnlockedEVAFlags(float astroComplexNormLevel) { return _master.UnlockedEVAFlags(astroComplexNormLevel); } public override bool UnlockedFlightPlanning(float mCtrlNormLevel) { return _master.UnlockedFlightPlanning(mCtrlNormLevel); } public override bool UnlockedFuelTransfer(float editorNormLevel) { return _master.UnlockedFuelTransfer(editorNormLevel); } public override bool UnlockedSpaceObjectDiscovery(float tsNormLevel) { return _master.UnlockedSpaceObjectDiscovery(tsNormLevel); } }
  12. I'd put it in basicScience, and keep it a part because I like blinkenlights in my service modules.
  13. This has been updated as described in the first post. If you have a "VetTech" folder from the preliminary release, you should delete that.
  14. FWIW, 6S bays are much better than stock still. Open on both ends, and the doors don't hog all the surface attachment area.
  15. I got this: Exception occured while saving contract contract 'DrawingBoard': System.NullReferenceException: Object reference not set to an instance of an object at ContractConfigurator.Behaviour.SpawnKerbal.OnSave (.ConfigNode configNode) [0x00000] in <filename unknown>:0 at ContractConfigurator.ContractBehaviour.Save (.ConfigNode configNode) [0x00000] in <filename unknown>:0 at ContractConfigurator.ConfiguredContract.OnSave (.ConfigNode node) [0x00000] in <filename unknown>:0 From this: CONTRACT_TYPE { name = DrawingBoard title = Back to the Drawing Board agent = Research & Development Department topic = prototype subject = KerbinSrf motivation = rescue synopsis = Retrieve a stranded technician. completedMessage = Welcome the newest member of the astronaut corps. (The R&D department doesn't want them back.) minExpiry = 0.0 maxExpiry = 0.0 prestige = Trivial maxCompletions = 1 maxSimultaneous = 1 rewardScience = 5.0 rewardReputation = 0.5 rewardFunds = 1000.0 failureReputation = 0.1 failureFunds = 500.0 advanceFunds = 500.0 weight = 8.0 BEHAVIOUR { name = DrawingBoardKerbal type = SpawnKerbal KERBAL { name = Lellen Kerman kerbalType = Crew gender = Female owned = False addToRoster = True lat = -0.16769918580325 lon = 285.352839573331 alt = 66.5987950620474 } } PARAMETER { name = DrawingRecover type = RecoverKerbal name = Lellen Kerman } BEHAVIOUR { name = DrawingBoardProto type = SpawnVessel VESSEL { craftURL = /NotTerrible/Ships/PrototypeX221.craft flagURL = /Squad/Flags/spheres owned = False targetBody = Kerbin lat = -0.17064431309352 lon = 285.354411648 } } }
  16. Everything core to the experience will be in a single download. Bargain Rockets is licensed Creative Commons, so no problem there. I'm not going to use the whole pack - just a selection of parts that fill specific holes in the progression. I've finished rebalancing them to more realistic levels. The original pack made them nearly as effective as regular rocket parts - now they're as terrible as you'd expect given how they look. (I've been researching such things as the adhesive force of duct tape and the potential energy of a potato battery.) That lets me fulfill the mission statement of providing a type of part very early, without stealing the thunder of later nodes. I don't want to force a lot of suborbital missions, but I want to make it a viable and appealing path. Grinding experiments near KSC is not fun, which is why I'm making some contracts as well. I've planned a set of 12 one-time missions (4 each with a pilot, scientist, or engineer theme) to diversify missions in the neighborhood of KSC. That's what I'm working on now. I'd like to enable earlier unmanned missions, but not with full real-time control like regular probe cores. I'm considering one or both of two options: a limited probe core that ignores pitch/yaw/roll controls; or bundling dtobi's Smart Parts (auto-staging on timer or altitude triggers).
  17. I'd use it. re: interstages, a complete fairings solution for KSP should be able to recreate the Apollo missions.
  18. Is there a transform name that every model is guaranteed to have? (The context is giving arbitrary things ModuleIntake, which require a transform name as a parameter.)
  19. Thanks, Nathan. Where can I find information on this class? I don't see it in the reference here.
  20. Giving this some more thought, I'm not satisfied with the early experience still. I made sure it was playable in that the nodes don't cost too much for the available science, but that was just sweeping the problem under the rug. I want the tree to promote a period of suborbital missions, but there's not enough there to make that fun. I was thinking initially of recommending USI Sounding Rockets to go with this (a recommendation that still stands), but looking at the USI catalog I was reminded of Bargain Rockets. A few select parts from that in the start node (rebalanced so they're not as unreasonably effective parts), plus some suborbital contract ideas I have, and this will start to come together.
  21. What I mainly want to do is enable action groups at level 1 of the VAB. Right clicking a little thermometer on a flying rocket is a pain.
×
×
  • Create New...