MOARdV Posted October 12, 2017 Author Share Posted October 12, 2017 2 hours ago, Ser said: @MOARdV, The MM patches work, it was me having messed up CUSTOM and MATH prefixes and looking at the wrong variable. Are you sure the variable ELECOUTPUTALTERNATOR is calculated properly? I specified the rate of EC resource output for alternator as 2. My engine's part menu shows that current output rate is 1.88 EC/s. I'm sure that inside alternator logic it is calculated as outputResource.rate * some thrust coefficient. I compared that equation to what I wrote for MAS (which was written from scratch), and they are different. MAS uses only the outputRate field. I don't remember why I included availableAlternatorOutput in the RPM implementation. Looks like I need to queue that fix. Link to comment Share on other sites More sharing options...
Ser Posted October 12, 2017 Share Posted October 12, 2017 @MOARdV, Ok. And I have a suggestion for your MAS: it would be nice to be able to set a property like "transition" for some variables that would introduce a smooth transition to a new value when it's changed. That transition would make gauge needles actually turn to the new value instead of jumping momentarily. I want to implement such behavior in NavUtilities and it would be cool to have it in MAS based props also. Quite a cosmetic feature but could be good for analog gauges and compasses to act more realistic. Link to comment Share on other sites More sharing options...
MOARdV Posted October 12, 2017 Author Share Posted October 12, 2017 1 hour ago, Ser said: @MOARdV, Ok. And I have a suggestion for your MAS: it would be nice to be able to set a property like "transition" for some variables that would introduce a smooth transition to a new value when it's changed. That transition would make gauge needles actually turn to the new value instead of jumping momentarily. I want to implement such behavior in NavUtilities and it would be cool to have it in MAS based props also. Quite a cosmetic feature but could be good for analog gauges and compasses to act more realistic. Animated props that use translations or rotations to move needles / wheels / whatever already have the ability to transition like that, both in RPM and MAS. Link to comment Share on other sites More sharing options...
Ser Posted October 17, 2017 Share Posted October 17, 2017 (edited) @MOARdV, Could you recommend a way to bypass adding my engine to RPM's availableEngines list? It is an engine in fact but I need it to be handled separately from all other engines. I've thought of different ways to do it, but none is good: making it not a ModuleEngines will lead to re-implementing much of stock logic including alternator etc. Overriding engine handlers like ButtonEngineStart/State will lead to duplicating RPM's logic for all the other engines to work properly with props and variables. It would be great to have some kind of config where I could specify that my module or part should not be automatically handled by RPM because of it's own logic. Edited October 17, 2017 by Ser Link to comment Share on other sites More sharing options...
MOARdV Posted October 17, 2017 Author Share Posted October 17, 2017 5 hours ago, Ser said: @MOARdV, Could you recommend a way to bypass adding my engine to RPM's availableEngines list? It is an engine in fact but I need it to be handled separately from all other engines. I've thought of different ways to do it, but none is good: making it not a ModuleEngines will lead to re-implementing much of stock logic including alternator etc. Overriding engine handlers like ButtonEngineStart/State will lead to duplicating RPM's logic for all the other engines to work properly with props and variables. It would be great to have some kind of config where I could specify that my module or part should not be automatically handled by RPM because of it's own logic. Unfortunately, RPM doesn't have a way to exclude specific engines. There have been requests for individual engines to be controlled/tracked separately (or grouped together and controlled as a group), but the complexity of it would not fit RPM's design without a tremendous amount of effort, and I don't have the time and motivation to retrofit it to RPM and maintain it. Link to comment Share on other sites More sharing options...
Ser Posted October 17, 2017 Share Posted October 17, 2017 (edited) 58 minutes ago, MOARdV said: Unfortunately, RPM doesn't have a way to exclude specific engines. There have been requests for individual engines to be controlled/tracked separately (or grouped together and controlled as a group), but the complexity of it would not fit RPM's design without a tremendous amount of effort, and I don't have the time and motivation to retrofit it to RPM and maintain it. What do you think about having just a plain config to specify the ignored names? Something like this: RPM_IGNORE { partName = MyOwnPart1 partName = MyOwnPart2 moduleName = MyOwnModule ..... etc ..... } Those nodes might be loaded and parsed as a string list on RPM's Awake and then checked every time in UpdateVariables method whether the module in question is listed or not prior to adding to availableXXXX lists. As I see, the most of handling logic relies on these lists' contents. And the entire separate handling implementation will be on my side. Will it still require complex changes? I could make a PR if you're interested in merging it to RPM. Edited October 17, 2017 by Ser Link to comment Share on other sites More sharing options...
MOARdV Posted October 18, 2017 Author Share Posted October 18, 2017 On 10/17/2017 at 8:56 AM, Ser said: I could make a PR if you're interested in merging it to RPM. I'd like to see the implementation you're proposing. The way I'm reading it, the UpdateVariables method would have to check every single part to see if it's in the IGNORE list, and, if it is, check every single module to see if it's in the IGNORE list as well, unless I misunderstand how you intend it to work. Depending on the complexity of the change, it could go into v0.29.3. In related news, I've pushed v0.29.2 into the wild. This update includes a couple of bug fixes, as well as a new MODULO math operator. Full release notes on the Github Releases page. IVA Makers: If you have MFDs that use the old 'cameraTransform' parameter to draw camera views, as opposed to the 'JSISteerableCamera' background handler, you will need to update those MFD pages before v0.30.0, whenever that happens (most likely if there's a KSP 1.4.0, or if a minor release forces an RPM re-compile). 'cameraTransform' support is deprecated in v0.29.2, and it will be removed in v0.30.0. Link to comment Share on other sites More sharing options...
Ser Posted October 18, 2017 Share Posted October 18, 2017 (edited) 34 minutes ago, MOARdV said: I'd like to see the implementation you're proposing. The way I'm reading it, the UpdateVariables method would have to check every single part to see if it's in the IGNORE list, and, if it is, check every single module to see if it's in the IGNORE list as well, unless I misunderstand how you intend it to work. Depending on the complexity of the change, it could go into v0.29.3. A bit simpler. UpdateVariables already looks at every single module and decides where to add it. I'm going just to add additional check whether the module or its part is listed in the ignore list. Edited October 18, 2017 by Ser Link to comment Share on other sites More sharing options...
MOARdV Posted October 18, 2017 Author Share Posted October 18, 2017 1 hour ago, Ser said: A bit simpler. UpdateVariables already looks at every single module and decides where to add it. I'm going just to add additional check whether the module or its part is listed in the ignore list. I'm not keen on an unconstrained check for modules - that means that a stray RPM_IGNORE with a given module disables all parts, for all craft, that use that module. And that leads to bug reports of "Feature X in RPM isn't working" because the player likely won't be aware of the override. If the feature is scoped to "Ignore Module X on Part Y", the scope is more tightly controlled, and it'll be less likely to have side-effects on other parts. Link to comment Share on other sites More sharing options...
Ser Posted October 18, 2017 Share Posted October 18, 2017 (edited) 15 minutes ago, MOARdV said: I'm not keen on an unconstrained check for modules - that means that a stray RPM_IGNORE with a given module disables all parts, for all craft, that use that module. And that leads to bug reports of "Feature X in RPM isn't working" because the player likely won't be aware of the override. If the feature is scoped to "Ignore Module X on Part Y", the scope is more tightly controlled, and it'll be less likely to have side-effects on other parts. What do you think of using the following syntax: To ignore the whole part: name = MyPartName.* or to ignore a single module: name = MyPartName.AnyModuleName And I think ignored parts shouldn't be ignored by FetchPerPartData() method because it calculates part temperatures etc. Can't imagine the case when someone would want to skip that. Edited October 18, 2017 by Ser Link to comment Share on other sites More sharing options...
MOARdV Posted October 18, 2017 Author Share Posted October 18, 2017 2 hours ago, Ser said: What do you think of using the following syntax: To ignore the whole part: name = MyPartName.* or to ignore a single module: name = MyPartName.AnyModuleName And I think ignored parts shouldn't be ignored by FetchPerPartData() method because it calculates part temperatures etc. Can't imagine the case when someone would want to skip that. I think that would be a better-defined approach. A per-part opt-in (even if it's "All modules on this part") will minimize the likelihood of surprises. Link to comment Share on other sites More sharing options...
Ser Posted October 19, 2017 Share Posted October 19, 2017 (edited) @MOARdV, the PR is out. Another one I'd like to do is multiple action handlers, just load and treat them as an array. This would allow third party plugins to use MM to "register" additional action handlers on existing props just like listeners instead of writing weird code that replaces an existing handler and then uses reflection to chain the original one. Don't you mind? Edited October 19, 2017 by Ser Link to comment Share on other sites More sharing options...
vossiewulf Posted October 20, 2017 Share Posted October 20, 2017 I'm having continual problems with KSP crashing entering or leaving the VAB. I looked into my logs and removed a few things that cleaned up the log almost entirely, but the crashes continued, if anything they've gotten more frequent. Frustrating thing was last several crashes the crash directory had been created but was empty. It just crashed again, this time fortunately we have a log. Looking in there, the only exceptions I see are some from SSTU not playing well with Ferram (I asked about those in the SSTU thread), but also quite a few from RPM having a problem with Procedural Parts. It may be a PP problem, not sure. Any advice would be appreciated. I'm still on KSP 1.30 and the latest 1.30 versions of RPM and PP. Spoiler Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) Link to comment Share on other sites More sharing options...
MOARdV Posted October 20, 2017 Author Share Posted October 20, 2017 8 hours ago, vossiewulf said: I'm having continual problems with KSP crashing entering or leaving the VAB. I looked into my logs and removed a few things that cleaned up the log almost entirely, but the crashes continued, if anything they've gotten more frequent. Frustrating thing was last several crashes the crash directory had been created but was empty. It just crashed again, this time fortunately we have a log. Looking in there, the only exceptions I see are some from SSTU not playing well with Ferram (I asked about those in the SSTU thread), but also quite a few from RPM having a problem with Procedural Parts. It may be a PP problem, not sure. Any advice would be appreciated. I'm still on KSP 1.30 and the latest 1.30 versions of RPM and PP. Reveal hidden contents Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) Exception handling event onVesselWasModified in class RPMVesselComputer:System.NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 (Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42) NullReferenceException: Object reference not set to an instance of an object at JSI.RPMVesselComputer.onVesselWasModified (.Vessel who) [0x00000] in <filename unknown>:0 at EventData`1[Vessel].Fire (.Vessel data) [0x00000] in <filename unknown>:0 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) EventData`1:Fire(Vessel) ProceduralParts.ProceduralPart:OnPartColliderChanged() BaseEvent:Invoke(BaseEventDetails) Part:SendEvent(String, BaseEventDetails, Int32) ProceduralParts.ProceduralAbstractShape:ColliderChanged() ProceduralParts.ProceduralAbstractShape:RaiseModelAndColliderChanged() ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(LinkedList`1) ProceduralParts.ProceduralAbstractSoRShape:WriteMeshes(ProfilePoint[]) ProceduralParts.ProceduralShapeCone:UpdateShape(Boolean) ProceduralParts.ProceduralAbstractShape:OnUpdateEditor() ProceduralParts.ProceduralPart:InitializeNodes() ProceduralParts.ProceduralPart:DoInitialize() ProceduralParts.ProceduralPart:OnInitialize() Part:InitializeModules() ShipConstruct:LoadShip(ConfigNode) ShipConstruction:LoadShip(String) FlightDriver:Start() (Filename: Line: -1) I'm afraid the only advice I have is update to 1.3.1 and see if it reproduces in that environment. I don't support previous versions of KSP. Link to comment Share on other sites More sharing options...
karamazovnew Posted October 20, 2017 Share Posted October 20, 2017 (edited) @MOARdV Question 1: is it possible to create a camera that is recognized by other RPM screens (ASET, B9) as internal/landing cameras? I've noticed that ASET uses cameraTransform = ALCORExt_B_CamTransform|ALCORExt_A_CamTransform|ALCORExt_C_CamTransform|ALCORExt_D_CamTransform|ExtCam1 Meanwhile, RPM uses cameraIDPrefix = ExtCam in the camera cfg file, and then adds the camera ID through the object interface to get the ID and merge the name for its use: cameraTransform = ExtCam1|ExtCam2|ExtCam3|ExtCam4|ExtCam5|ExtCam6|ExtCam7|ExtCam8 Now, instead of doing that, can't you allow us to go through actual names directly, such as "Ext Cam1 -> Ext Cam 2 -> ALCORExt_B_CamTransform -> B9_something_camera" instead of going "ID 1,2,3,4,5" etc? Preferably the list would be drawn from a cfg file where we can add other camera names ourselves if needed? Question 2: I've never seen anyone use the Monochrome shader, and that's a really lost opportunity here. Currently, they have to be defined per screen, but why not do it per part? You'd need the following features (bear in mind I'm not a Kerbal programmer, so this is purely pseudo-code): - add a new variable to the JSI External Camera and docking port cameras MODULE { name = JSIExternalCameraSelector cameraContainer = RCSthruster rotateCamera = -90,0,0 cameraIDPrefix = ExtCam //this one wouldn't do anything anymore, actually //from the suggestion before: cameraIDs = ExtCam1,ExtCam2,ExtCam3, ALCORExt_B_CamTransform, Karamazov_really_weird_camera // now the new one RPMcustomCameras { EarlyBW { unlockTechs = flightControl } ModernCamera { unlockTechs = unmannedTech } KaramazovWasHERE {unlockTechs = start} } } - one library file, let's say "RPM_Custom_Camera_Shaders.cfg" that would look sort of like this: RPMCUSTOMCAMERA { name = earlyBW Description = MOARdv's BW Russian 1950s // all the rest from here are optional, any missing ones would be used directly from the MFD Screen config file rpmcustomshaders = BWheavyNoise (defined below) yawLimits =.... yawRate = ... yawLeft = .... yawRight = ..... pitchLimits = ..... pitchRate = ..... pitchUp = ...... pitchDown = ..... } RPMCUSTOMCAMERA { Name = ModernCamera Description = Camera with steering and NV rpmcustomshaders = ColorClean, BWClean, NightVisionBWLowGainLowNoise, NightVisionGREENHighGainHighNoise (all defined below) ...... } RPMCUSTOMCAMERA { Name = KaramazovWasHERE Description = Karamazov's new OP CANIKON telescope I just added myself .... } etc... you get the idea, Now for the shaderrs themselves: RPMCUSTOMSHADER { name = BWheavyNoise cameraEffectShader = .... cameraEffectVariables = .... cameraEffectTextures = .... } RPMCUSTOMSHADER { name = NightVisionGREENHighGainHighNoise cameraEffectShader = .... cameraEffectVariables = .... cameraEffectTextures = .... } etc. etc. This would allow you to create presets (at least to show us what's possible) and allow us to add more. The plugin would look at the camera's available shader/steer/zoom presets and if they're unlocked in the techtree, will show them to the Right click menu in the VAB/SPH (but not in flight, hehe) and allow us to select one of them. The first one should be "Default RPM camera" which would just be empty and look at the MFD40x20.cfg file. For the rest, once set, the plugin would load the settings in their definition, and fill up what's missing with the default values from the MFD40x20 file. - finally, assign a new task in the MFD40x20.cfg file to allow the user to scroll through the filters available for that model. Example: nextShader = 8, prevShader = 7 or whatever (I recommend the circle button anyway (and only nextShader is required, since cameras will not use 100 fulters) This would instantly allow us to create a mod with various cameras, ranging from old grainy black and white ones to new ones, and unlock them through the career. How does that sound? Possible? Doable? If done like this, it wouldn't affect any existing mod that uses RPM. They'd all work as they currently do, if the player chooses "Default RPM camera" and he'd have all current "ExtCam1, ExtCam2 etc." names available from the start. ASET and B9 would just have to add in a line in their screen configs to add in the new "nextShader, prevShader" function/buttons. EDIT: Finally done editing, I must've rewritten it 100 times Edited October 20, 2017 by karamazovnew Link to comment Share on other sites More sharing options...
MOARdV Posted October 20, 2017 Author Share Posted October 20, 2017 2 hours ago, karamazovnew said: Question 1: is it possible to create a camera that is recognized by other RPM screens (ASET, B9) as internal/landing cameras? A bit of background: The original RPM implementation had cameras defined as external parts (eg, the ExtCam part included with RPM), with a simple module on the part to identify them numerically. It could have been implemented as a "Name the camera" module, where each part could have a unique name that the user typed in. The downside to that approach is it has a slightly steeper learning curve, since the player would have to know in advance what the supported camera names were, and then make sure the camera parts were appropriately named in the VAB. That adds a lot of support overhead, since there will be frequent "How do I make the cameras work?" questions. (Incidentally, the "Name the camera" approach is what I implemented in MAS, but MAS also doesn't require the use of a hard-coded list of camera names - it can iterate through all of the cameras without knowing names in advance) In the case of the ALCOR lander pods, alexustas tightly coupled the lander pod with the IVA. The unusual (non-ExtCam) camera names all refer to transforms in the ALCOR lander, giving alexustas precise control over how that MFD works, and what it displays. I suppose it would be possible to update RPM to allow arbitrary names in addition to the simple ExtCam# implementation. Or, alternatively, to have a list of predefined camera names and require the user to select one for each installed camera (but see caveat later). That could be dicey if the user picks names that correspond to transforms on a part, like the case of the ALCOR lander - RPM would have to know how to prioritize the duplicate names. 2 hours ago, karamazovnew said: I've never seen anyone use the Monochrome shader, and that's a really lost opportunity here Alexustas uses a monochrome shader for a CRT-styled display in one of his lander can IVAs, and he uses the noise/gain shaders for some of the other MFD views. However, they're mostly in the currently unreleased update to the ASET Props and Avionics pack. The props included with the RPM distribution are rather old, and the configs for them were written a few years ago, prior to the shaders being available. I personally am not motivated to update the basic RPM IVAs and props, since I don't use them (my current IVAs all use the aforementioned ASET props pack). It would be feasible to add support for switchable shaders, and even tie them in to the tech tree, although I'm a bit hesistant to go that route since a) I never play career, so I wouldn't be able to thoroughly test the feature, and b) it opens a can of worms with respect to restricting other features in RPM based on available tech. Your proposal is well specified, and it would definitely be a way to add RPM features to earlier-era space flight without seeming totally out of place (I think there's a mod that actually uses more than one IVA, depending on the tech that was unlocked, but I don't remember which one that was) Now, the caveat I mentioned earlier: I am no longer developing significant features for RPM. I had a number of features I wanted to add to the mod, but I had to make a choice: Change existing functionality and break IVAs other mod authors created until they updated (not happening). Add new functionality that duplicates and enhances existing functionality (forcing me to maintain two similar code paths). Start a new mod. I went with the third option. I'm keeping RPM functional for now while I get MOARdV's Avionics Systems tidied up for a stable release, but RPM is basically in maintenance mode. I'm willing to accept new features if someone else submits a pull request on GitHub, but I don't have the time to develop and support major new features for this mod. Link to comment Share on other sites More sharing options...
karamazovnew Posted October 20, 2017 Share Posted October 20, 2017 43 minutes ago, MOARdV said: Or, alternatively, to have a list of predefined camera names and require the user to select one for each installed camera (but see caveat later) Yeap, that's what I meant. A normal player would just select a name from a predefined list, sort of how tank fuel switchers or procedural parts textures work. I see how an ID is much easier, since iyou can reforce the renumbering of cameras in case the player uses 2 cameras with the same name. Can of worms really But consider this as a request for MAS. And speaking about MAS, I already see how to switch through multiple pages with the same button (ex, Navball, HSI). But in RPM you could make a huge tree of hierarchical screens with the CONTEXTREDIRECT method (ex, B9). Will that also be available in MAS? Link to comment Share on other sites More sharing options...
MOARdV Posted October 20, 2017 Author Share Posted October 20, 2017 1 hour ago, karamazovnew said: And speaking about MAS, I already see how to switch through multiple pages with the same button (ex, Navball, HSI). But in RPM you could make a huge tree of hierarchical screens with the CONTEXTREDIRECT method (ex, B9). Will that also be available in MAS? I don't think there's anything as succinct as the CONTEXTREDIRECT config pages, but it should be quite possible using Lua scripting. Link to comment Share on other sites More sharing options...
Humankerbal123 Posted November 8, 2017 Share Posted November 8, 2017 Hi there! mod looks awesome, but when I downloaded it, Hud/cockpits stayed completely the same, the camera part even successfully loaded and is able to be placed on all parts, you can even change the cameras identification. I am currently running 1.2.2 Thanks so much! Link to comment Share on other sites More sharing options...
Krogernautics Posted November 16, 2017 Share Posted November 16, 2017 (edited) NVM Edited November 16, 2017 by Krogernautics Link to comment Share on other sites More sharing options...
reedhashlock Posted November 25, 2017 Share Posted November 25, 2017 (edited) Hi, I think I found an incompatibility KSP: 1.3.1 Windows 7 64bit Problem: Crash on startup when both SM AFV and RPM are installed Mods installed: BDAc RPM SM AFV SM Armory SM Industries Reproduction steps: Install both mods and launch the game Log: Spoiler KSP: 0.23 Windows 32bit Problem: Deadly Reentry destroys my RAPIER in closed-cycle mode Mods installed: Deadly Reentry Continued v4.1 Module Manager 1.5.0 Reproduction steps: Build a simple craft with a Mk1 pod, a long tank, two radial intakes, and a RAPIER. Take off, switch to closed-cycle mode. Watch engine overheat and explode. Log: <link>Output_log.txt Edit: Nevermind, I downloaded and installed another copy of RPM, it works now Edited November 25, 2017 by reedhashlock Link to comment Share on other sites More sharing options...
Kerbal Pig Posted November 25, 2017 Share Posted November 25, 2017 Is it possible to change the SAS mode within IVA(Prograde lock, Retrograde lock, etc.). If so, how? Link to comment Share on other sites More sharing options...
MOARdV Posted November 25, 2017 Author Share Posted November 25, 2017 1 hour ago, Kerbal Pig said: Is it possible to change the SAS mode within IVA(Prograde lock, Retrograde lock, etc.). If so, how? Assuming you are using the sample IVAs included with RPM, the 'AUTO' button on the top of the MFD toggles between MechJeb mode and SAS mode. Link to comment Share on other sites More sharing options...
CatCraftYT Posted December 4, 2017 Share Posted December 4, 2017 (edited) RPM screens don't show up at all and I'm reasonably sure I installed the JSI folder correctly. Edited December 4, 2017 by CatCraftYT Link to comment Share on other sites More sharing options...
RW-1 Posted December 9, 2017 Share Posted December 9, 2017 Hoping I can figure out what I messed up. 1.3.1, latest mechjeb (MechJeb2-2.6.1.0-768) and RPM (RasterPropMonitor.0.29.2) integration. Hitting the auto section of my monitors I get the dreaded SmartASS/MJ Control mechjeb autopilot not found, but ... but it is there, I have the tab I can go onto to use mjeb, , and the module is installed on the spacecraft. I used to have these working, but now it's gone from every spacecraft, even my SSTU ones which include mechjeb into the module. Thanks beforehand. I can respond shortly to any more information requests, in the meantime I may create another KSP folder and begin with just mjeb and RPM to eliminate any other mod that may be causing (don't think so but you never really know ...) Link to comment Share on other sites More sharing options...
Recommended Posts