Jump to content

NavyFish

Members
  • Posts

    372
  • Joined

  • Last visited

Everything posted by NavyFish

  1. I suppose no news is good news, but I should still ask - any issues thus far?
  2. It's finally here Version 4.0 - Released 6/29/2014 [added] Ability to cycle through all unoccupied ports on your target. No more need to right-click a port! [added] Ports can now be targeted up to 2.25 Km away! [added] When a vessel is first targeted, the nearest port is automatically targeted. [added] Magenta HUD indicator floats on top of currently targeted port to allow for easy identification. [added] Ability to rename all docking ports using the right-click GUI (in both VAB/SPH and flight). [added] Text readout on indicator which displays the name of the targeted port. [added] Closure Distance (CDST) readout, displays range to target port along the approach axis only. [added] Prograde icon on velocity vector changes to Retrograde icon when CVEL is negative. [added] Support for parts with multiple docking ports (Thanks taniwha!) [added] Support for Extraplanetary Launchpads' recycle bins (Thanks taniwha!) [changed] New toolbar button icon, easier to identify. Clicking toolbar button will show/hide indicator. [changed] Removed hard-dependency on Blizzy's Toolbar. [changed] Added custom 'toolbar' button if Blizzy's toolbar is not present. [changed] Text now drawn using Bitmap Fonts, allowing for higher resolution text rendering particularly when increasing gauge scale. [fixed] Indicator no longer displayed in Map View or while on EVA [fixed] Generalized port orientation logic - all non-stock lateral ports should now work (Thanks taniwha!) See first post for download link. Also, note - for those of you who are really quick to the draw, Curseforge is still listing the file as "Under Review", so you may need to wait a moment.
  3. So perhaps two options would be useful: "Invert Translation Y-Axis" and "Invert Orientation Y-Axis" ? Correction: that wouldn't address DeepOddessy's concern. I suppose I could provide toggles for inverting all four axis.
  4. There seems to be enough people requesting this that I will consider putting in an option to change the control scheme. But I need to get a consensus on what folks would like to see for an alternate scheme. To me, the controls are all oriented correctly. I imagine people think that when they use WASD (staging controls), they're moving the orange circle - but, you're not. You're changing your ship's orientation, i.e. the white center crosshair, to line it up with the orange circle. Thus if the orange circle is up and right, you pull up (S) and turn right (D). Likewise, if the green CDI crosshair is up and right, you translate your ship up (K) and right (L) to get on centerline. Feel free to post your requests, be specific with respect to what control input (using staging mode) should have what effect on the gauge. If there's a consensus, I'll include it (probably for v4.1 as I'm trying to release this weekend).
  5. Yep, looks like everyone can expect a release this weekend! Taniwha's code helped in more than one way - it seems to have removed the nasty null ref! I can never be 100% sure, but the bugger hasn't surfaced in a while. Looks like calling partModule.transform could sometimes return a null reference, whereas ITargetable.GetTransform() always returns something. I'm not sure how one would safely get the transform for a PartModule that doesn't implement the ITargetable interface... perhaps partModule.part.transform is safe? Anyway, not my problem Doing a few last minute tweaks... made it so that "occupied" docking ports aren't selected when cycling (though you can still manually target them w/ a right-click). There are several more features I want to implement, but I'm forcing myself to stop here and get this thing out into the wild. There will inevitably be a version 4.1, and I even have some ideas for a version 5 (whereas by my ad-hoc versioning convention, whole numbered releases indicate large chunks of added functionality while 'point releases' contain smaller tweaks and fixes). Huzzah! I may even have time to make a short release vide (though those things always take longer than expected..) Navy Also, This release will have all the source files included, my apologies.
  6. Thanks both of you for the code inputs! As taniwha mentioned, he proposed a nearly identical change back in May. I'm glad to report it does indeed generalize the port orientation logic. RL has been quite busy for me lately, but I believe I will have an opportunity this weekend to release version 4.0 of the mod. There are a LOT of changes coming, and so bug-hunting and QA have required a lot of effort this time around. I have one last little bug I'm facing, and unfortunately I can't reproduce it reliably enough to determine its source - I don't even know if it's being caused by DPAI. It's been reported by others as well, even folks not using DPAI, so it's likely a bug in Squad's code - but it's quite possible that DPAI is doing something to triggering it. Unfortunately the bug requires you to force-quit KSP (it prevents you from being able to save, load, or go back to the space center), so the impact is not insignificant. With the upcoming release imminent, I'd ask that you hold-off on releasing your own version of the code at the present. If there's sufficient interest (and there seems to be), I may go ahead and host the project on github, thus allowing folks to propose and test changes with more frequency and ease. I think you're going to like the added features in 4.0. Thank you for your patience! Navy
  7. Thank you all for the feedback. I'm mulling over this, but career commitments have had me pretty busy lately and so progress is slow. @Nikola7007: It's more than likely not caused by DPAI. This plugin is very light-weight in terms of both memory requirements and processing. I recommend checking your debug log (hit alt+f2) for a bunch of null-reference errors, as perhaps another mod is breaking and causing your slowdown.
  8. Quick update: Beta testing is progressing nicely. Testers have identified two nasty buggers, which have -hopefully- been squashed. Question for the crowd on interface. In this upcoming version, the indicator automatically targets the nearest available port on your target ship. Therefore, if you have a ship targeted, as soon as you close within ~2.3km of it, the DPAI window appears. Some folks have mentioned they do not like this. You could click the toolbar button to hide the indicator, but I had it automatically re-appear whenever you changed targets (including deselecting and re-targeting your previous target). So, based on the feedback, I've tweaked the behavior of the toolbar button slightly - now, if you click the toolbar button, it hides the indicator - and the indicator does NOT reappear, until you click the toolbar button again. My fear, however, is that this could lead to situations where folks are not sure why the DPAI isn't popping up, etc. It's late and I'm tired, so it's entirely possible that I'm scratching my head over a trivial issue that most folks won't think twice about. But, when in doubt.. Thoughts? -Navy
  9. In short, no, there is no hard dependency. If you don't want to risk using MM, you don't have to install it. In that case, you simply won't be able to rename docking ports (the default name for a port will still appear on the gauge when targeted). Alternatively, you could skip the config file to achieve the same result.. but why?
  10. We've had 6 testers offer their services so far - thanks again to you all. If anyone else would like to help out, please don't hesitate to PM me. The more eyes we can get on this product, the sooner I'll be comfortable releasing it to the public!
  11. Hello folks, I'm back in the world. Looking for several people to help me beta test the upcoming release of DPAI. I'm mostly interested in testers who use a large number of mods, particularly those which use Module Manager. The next version of this mod will rely upon the latest version of MM, so part of the testing process will require an upgrade to the latest MM (I'll package the latest DLL). In addition to testing for bug fixes and compatibility issues, I'd like to hear about any major usability gripes - but I don't expect to implement any major new features prior to the release of this next version (4.0). If you're interested in helping out, please send me a PM. Thanks! -Navy
  12. Had a brief moment of internet access and thought I'd inject some data into this conversation. When you press W/A/S/D, you are not moving the orange circle (the alignment indicator): you are moving the white crosshairs. More specifically, you're moving the 'nose' of your vessel, which is represented by the white crosshair. It's as if there's a camera pointing out from your vessel's docking port, looking outward, with a white crosshair in the center of the view. Thus, when you press W, you're nosing your ship down - and therefore the alignment indicator moves upward relative to the crosshairs. So, to help your hand/eye coordination when using the indicator, instead of thinking that you're moving the orange circle with WASD, realize that you're moving the crosshairs. Thus, if the orange circle is above the crosshairs, "Pull Up" your nose/crosshairs by holding S to align with the circle. Another way to demonstrate this principle is to put your ship on the approach centerline (center-up the green CDI needles), and center your alignment. Now look on the stock navball - the magenta target icon should be centered on your heading pipper. Now hold W for a bit. You'll notice the magenta target icon moves upward relative to your navball heading pipper, and that this movement is replicated by the orange alignemnet indicator on the DPAI. (Note, the target icon does NOT provide the same information as the alignment indicator, but when you're on centerline it will appear very similar). Hope this helps clarify things.
  13. Indeed it is , fixed. Thank you everyone for your warm wishes and words of support. What a stellar community! See you in June! -Navy
  14. Ok ladies and gents, that time has come. I'll be taking off for the next month and won't be around till mid June. The newest Module Manager version is coming along nicely, but it just isn't quite there yet. In older versions of MM, adding modules to existing parts has a good potential to corrupt a save game (this has to do with a bug in KSP itself), and version 4.0 of DPAI does just that. So, unfortunately, that means you'll have to wait another month to play with these new features. I've considered various options such as opening up a repo on GitHub and giving someone team access, releasing a "use at your own risk" version, etc. But in the end, I want to maintain a rock-solid product that's easy to use and reliable, even if that means having to delay some new features for another 30 days. Another major consideration is that I'd like to be available in the week or two after a major release such as this, to address any particular bugs that may appear. I'm confident with my work, but I'm one person, on one OS, on just a few KSP installations (Vanilla, Vanilla + some mods, Vanilla + LOTS of mods (my daily play install )) - there's simply no way to verify compatibility with every platform and every mod configuration out there, which is where you guys come in! So with that said, I hope you enjoy the rest of May, and I'll be back shortly, bearing gifts of plugin-able goodness! See you again soon! -Navy
  15. What version of MM? The current code on the github site does not load any modules, as far as I can tell.
  16. Sure, I'll see what I can come up with. I suggest you take a look at line 816 of the current mudleManager.cs on your github master. for (int i = 0; i < subMod.nodes.Count; ++i) { ConfigNode node = subMod.nodes[i]; string name = node.name; if (CheckNeeds(ref name)) { node.name = name; CheckNeeds(node, url, path); // <<--------------------- This line copy.AddNode(node); } else { needsCopy = true; print("[ModuleManager] Deleting node in file: " + url + " subnode: " + string.Join("/", path.ToArray()) + "/" + node.name + " as it can't satisfy its NEEDS"); } } After copious amounts of debug logging, I have a feeling that what's causing modules to be added to a config twice. At the very least, it's happening from within the "CheckNeeds" segment of the program. If I run the following segment of code....... foreach (UrlDir.UrlConfig part in GameDatabase.Instance.root.AllConfigs) { Debug.Log(part.name); ConfigNode config = part.config; foreach (ConfigNode node in config.nodes) { if (node.name.Equals("MODULE")) { Debug.Log("\t" + node.name + ": " + node.GetValue("name")); } } } ....Prior to "CheckNeeds(excludePaths);" on line 533, the output looks like: [LOG 20:49:02.703] @PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] [LOG 20:49:02.703] MODULE: ModuleStagingToggle [LOG 20:49:02.704] MODULE: ModuleTweakableDockingNode .....Whereas, after line 533, it looks like: [LOG 20:49:04.266] @PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything] [LOG 20:49:04.267] MODULE: ModuleStagingToggle [LOG 20:49:04.268] MODULE: ModuleTweakableDockingNode [LOG 20:49:04.268] MODULE: ModuleStagingToggle [LOG 20:49:04.269] MODULE: ModuleTweakableDockingNode
  17. Found another bug - in some cases a module will be added to a part twice. Tested both 2.1.1 and 2.0.8 on a vanilla + 2 mods install and found that this only occurs with 2.1.1, ruling out an improperly written .cfg. Will start hunting for the cause.
  18. Found it, it was a small thing. The part of the code responsible for loading modules at their appropriate stage (FIRST, FOR, AFTER, etc) was rejecting everything that should load in stages other than FIRST, because a string comparison was failing due to mismatch in case. I added .ToUpper() in two places and everything was loaded successfully. Created a pull request for you on git hub, username bfishman. The fix: // Ensure the stage is correct string upperName = name.ToUpper(); int stageIdx = upperName.IndexOf(Stage.ToUpper()); if (stageIdx >= 0) { name = name.Substring(0, stageIdx) + name.Substring(stageIdx + Stage.Length); } else if (!(Stage.ToUpper() == ":FIRST" && !upperName.Contains(":BEFORE[") && !upperName.Contains(":FOR[") && !upperName.Contains(":AFTER[") && !upperName.Contains(":FINAL"))) { continue; }
  19. Removing the :FOR[....] stage from the configuration files allows them to load. I'm still looking for the bug in code.
  20. @swamp_ig: I noticed SaveGameFixer.cs is up on github, affiliated w/ ver 2.1.1. I built it from source and just tested it out on a vanilla install with only TweakableEverything installed. It doesn't seem to load all modules into the game. Specifically: Here's the MM log text from MM version 2.0.8: [LOG 12:17:40.834] [ModuleManager] compiling list of loaded mods... Mod DLLs found: Assembly-CSharp v1.0.0.0 ModuleManager v2.0.8.0 ModuleDB v1.0.5236.19316 ToadicusTools v0.0.0.0 TweakableAnimateGeneric v0.6.4.26691 TweakableDecouplers v1.1.5236.26688 TweakableDockingNode v1.1.5236.26687 TweakableEngineFairings v1.0.5236.26691 TweakableGimbals v1.1.5236.26690 TweakableLadders v0.6.3.26689 TweakableRCS v1.1.5236.26690 TweakableReactionWheels v0.6.4.26689 TweakableSolarPanels v0.6.0.26688 TweakableStaging v1.1.5236.26687 Non-DLL mods added: TweakableEverything [LOG 12:17:40.838] [ModuleManager] :FIRST (default) pass [LOG 12:17:40.862] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/advSasModule/part/advSasModule [LOG 12:17:40.865] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/asasmodule1-2/part/asasmodule1-2 [LOG 12:17:40.866] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/cupola/part/cupola [LOG 12:17:40.867] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/landerCabinSmall/part/landerCabinSmall [LOG 12:17:40.869] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/Mark1Cockpit/part/Mark1Cockpit [LOG 12:17:40.870] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/Mark2Cockpit/part/Mark2Cockpit [LOG 12:17:40.871] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/mark3Cockpit/part/mark3Cockpit [LOG 12:17:40.872] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/Mk1-2Pod/part/Mark1-2Pod [LOG 12:17:40.873] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/mk1pod/part/mk1pod [LOG 12:17:40.874] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/mk2LanderCabin/part/mk2LanderCabin [LOG 12:17:40.875] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreCube/part/probeCoreCube [LOG 12:17:40.876] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreHex/part/probeCoreHex [LOG 12:17:40.878] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreOcto/part/probeCoreOcto [LOG 12:17:40.879] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreOcto2/part/probeCoreOcto2 [LOG 12:17:40.880] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreSphere/part/probeCoreSphere [LOG 12:17:40.881] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeStackLarge/part/probeStackLarge [LOG 12:17:40.882] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeStackSmall/part/probeStackSmall [LOG 12:17:40.883] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/sasModule/part/sasModule [LOG 12:17:40.889] [ModuleManager] :BEFORE[Assembly-CSharp] pass [LOG 12:17:40.890] [ModuleManager] :FOR[Assembly-CSharp] pass [LOG 12:17:40.891] [ModuleManager] :AFTER[Assembly-CSharp] pass [LOG 12:17:40.892] [ModuleManager] :BEFORE[ModuleManager] pass [LOG 12:17:40.893] [ModuleManager] :FOR[ModuleManager] pass [LOG 12:17:40.894] [ModuleManager] :AFTER[ModuleManager] pass [LOG 12:17:40.896] [ModuleManager] :BEFORE[ModuleDB] pass [LOG 12:17:40.897] [ModuleManager] :FOR[ModuleDB] pass [LOG 12:17:40.898] [ModuleManager] :AFTER[ModuleDB] pass [LOG 12:17:40.899] [ModuleManager] :BEFORE[ToadicusTools] pass [LOG 12:17:40.900] [ModuleManager] :FOR[ToadicusTools] pass [LOG 12:17:40.901] [ModuleManager] :AFTER[ToadicusTools] pass [LOG 12:17:40.902] [ModuleManager] :BEFORE[TweakableAnimateGeneric] pass [LOG 12:17:40.903] [ModuleManager] :FOR[TweakableAnimateGeneric] pass [LOG 12:17:40.904] [ModuleManager] :AFTER[TweakableAnimateGeneric] pass [LOG 12:17:40.906] [ModuleManager] :BEFORE[TweakableDecouplers] pass [LOG 12:17:40.907] [ModuleManager] :FOR[TweakableDecouplers] pass [LOG 12:17:40.908] [ModuleManager] :AFTER[TweakableDecouplers] pass [LOG 12:17:40.909] [ModuleManager] :BEFORE[TweakableDockingNode] pass [LOG 12:17:40.910] [ModuleManager] :FOR[TweakableDockingNode] pass [LOG 12:17:40.911] [ModuleManager] :AFTER[TweakableDockingNode] pass [LOG 12:17:40.914] [ModuleManager] :BEFORE[TweakableEngineFairings] pass [LOG 12:17:40.916] [ModuleManager] :FOR[TweakableEngineFairings] pass [LOG 12:17:40.917] [ModuleManager] :AFTER[TweakableEngineFairings] pass [LOG 12:17:40.918] [ModuleManager] :BEFORE[TweakableGimbals] pass [LOG 12:17:40.919] [ModuleManager] :FOR[TweakableGimbals] pass [LOG 12:17:40.920] [ModuleManager] :AFTER[TweakableGimbals] pass [LOG 12:17:40.921] [ModuleManager] :BEFORE[TweakableLadders] pass [LOG 12:17:40.923] [ModuleManager] :FOR[TweakableLadders] pass [LOG 12:17:40.924] [ModuleManager] :AFTER[TweakableLadders] pass [LOG 12:17:40.925] [ModuleManager] :BEFORE[TweakableRCS] pass [LOG 12:17:40.926] [ModuleManager] :FOR[TweakableRCS] pass [LOG 12:17:40.927] [ModuleManager] :AFTER[TweakableRCS] pass [LOG 12:17:40.928] [ModuleManager] :BEFORE[TweakableReactionWheels] pass [LOG 12:17:40.929] [ModuleManager] :FOR[TweakableReactionWheels] pass [LOG 12:17:40.930] [ModuleManager] :AFTER[TweakableReactionWheels] pass [LOG 12:17:40.932] [ModuleManager] :BEFORE[TweakableSolarPanels] pass [LOG 12:17:40.933] [ModuleManager] :FOR[TweakableSolarPanels] pass [LOG 12:17:40.934] [ModuleManager] :AFTER[TweakableSolarPanels] pass [LOG 12:17:40.935] [ModuleManager] :BEFORE[TweakableStaging] pass [LOG 12:17:40.936] [ModuleManager] :FOR[TweakableStaging] pass [LOG 12:17:40.937] [ModuleManager] :AFTER[TweakableStaging] pass [LOG 12:17:40.939] [ModuleManager] :BEFORE[TweakableEverything] pass [LOG 12:17:40.940] [ModuleManager] :FOR[TweakableEverything] pass [LOG 12:17:40.947] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[*]:HAS[@MODULE[ModuleAnimateGeneric],!MODULE[ModuleDockingNode],!MODULE[ModuleGrappleNode],!MODULE[RetractableLadder]]:FOR[TweakableEverything] to Squad/Parts/Science/GooExperiment/part/GooExperiment [LOG 12:17:40.949] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[*]:HAS[@MODULE[ModuleAnimateGeneric],!MODULE[ModuleDockingNode],!MODULE[ModuleGrappleNode],!MODULE[RetractableLadder]]:FOR[TweakableEverything] to Squad/Parts/Science/MaterialBay/part/science_module [LOG 12:17:40.951] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[*]:HAS[@MODULE[ModuleAnimateGeneric],!MODULE[ModuleDockingNode],!MODULE[ModuleGrappleNode],!MODULE[RetractableLadder]]:FOR[TweakableEverything] to Squad/Parts/Utility/commDish/part/commDish [LOG 12:17:40.954] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[*]:HAS[@MODULE[ModuleAnimateGeneric],!MODULE[ModuleDockingNode],!MODULE[ModuleGrappleNode],!MODULE[RetractableLadder]]:FOR[TweakableEverything] to Squad/Parts/Utility/longAntenna/part/longAntenna [LOG 12:17:40.955] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[*]:HAS[@MODULE[ModuleAnimateGeneric],!MODULE[ModuleDockingNode],!MODULE[ModuleGrappleNode],!MODULE[RetractableLadder]]:FOR[TweakableEverything] to Squad/Parts/Utility/mediumDishAntenna/part/mediumDishAntenna [LOG 12:17:40.962] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleDecouple]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/decoupler1-2/part/decoupler1-2 [LOG 12:17:40.964] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleDecouple]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/StackDecoupler/part/stackDecoupler [LOG 12:17:40.965] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleDecouple]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/stackDecouplerMini/part/stackDecouplerMini [LOG 12:17:40.967] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleDecouple]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/stackSeparator/part/stackSeparator [LOG 12:17:40.968] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleDecouple]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/stackSeparatorBig/part/stackSeparatorBig [LOG 12:17:40.969] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleDecouple]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/stackSeparatorMini/part/stackSeparatorMini [LOG 12:17:40.976] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleAnchoredDecoupler]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/radialDecoupler/part/radialDecoupler [LOG 12:17:40.978] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleAnchoredDecoupler]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/radialDecoupler1-2/part/radialDecoupler1-2 [LOG 12:17:40.979] [ModuleManager] Applying node TweakableEverything/TweakableDecouplers/@PART[*]:HAS[@MODULE[ModuleAnchoredDecoupler]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/radialDecoupler2/part/radialDecoupler2 [LOG 12:17:40.983] [ModuleManager] Applying node TweakableEverything/TweakableDockingNode/@PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/dockingPort1/part/dockingPort1 [LOG 12:17:40.985] [ModuleManager] Applying node TweakableEverything/TweakableDockingNode/@PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/dockingPort2/part/dockingPort2 [LOG 12:17:40.986] [ModuleManager] Applying node TweakableEverything/TweakableDockingNode/@PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/dockingPort3/part/dockingPort3 [LOG 12:17:40.987] [ModuleManager] Applying node TweakableEverything/TweakableDockingNode/@PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/dockingPortLarge/part/dockingPortLarge [LOG 12:17:40.988] [ModuleManager] Applying node TweakableEverything/TweakableDockingNode/@PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything]:NEEDS[TweakableStaging] to Squad/Parts/Utility/dockingPortLateral/part/dockingPortLateral [LOG 12:17:40.994] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/engineLargeSkipper/part/engineLargeSkipper [LOG 12:17:40.995] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/liquidEngine1/part/liquidEngine [LOG 12:17:40.996] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/liquidEngine1-2/part/liquidEngine1-2 [LOG 12:17:40.998] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/liquidEngine2/part/liquidEngine2 [LOG 12:17:40.999] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/liquidEngine2-2/part/liquidEngine2-2 [LOG 12:17:41.000] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/liquidEngine3/part/liquidEngine3 [LOG 12:17:41.001] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/liquidEngineMini/part/liquidEngineMini [LOG 12:17:41.002] [ModuleManager] Applying node TweakableEverything/TweakableEngineFairings/@PART[*]:HAS[@MODULE[ModuleJettison]]:FOR[TweakableEverything] to Squad/Parts/Engine/nuclearEngine/part/nuclearEngine [LOG 12:17:41.007] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/engineLargeSkipper/part/engineLargeSkipper [LOG 12:17:41.008] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/JetEngine/part/JetEngine [LOG 12:17:41.009] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/liquidEngine1-2/part/liquidEngine1-2 [LOG 12:17:41.010] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/liquidEngine2/part/liquidEngine2 [LOG 12:17:41.012] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/liquidEngine2-2/part/liquidEngine2-2 [LOG 12:17:41.013] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/liquidEngine3/part/liquidEngine3 [LOG 12:17:41.014] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/liquidEngineMini/part/liquidEngineMini [LOG 12:17:41.015] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/nuclearEngine/part/nuclearEngine [LOG 12:17:41.017] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/radialLiquidEngine1-2/part/radialLiquidEngine1-2 [LOG 12:17:41.018] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/rapierEngine/part/RAPIER [LOG 12:17:41.019] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/smallRadialEngine/part/smallRadialEngine [LOG 12:17:41.021] [ModuleManager] Applying node TweakableEverything/TweakableGimbals/@PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Engine/turboFanEngine/part/turboFanEngine [LOG 12:17:41.029] [ModuleManager] Applying node TweakableEverything/TweakableLadders/@PART[*]:HAS[@MODULE[RetractableLadder]]:FOR[TweakableEverything] to Squad/Parts/Utility/telescopicLadder/part/telescopicLadder [LOG 12:17:41.030] [ModuleManager] Applying node TweakableEverything/TweakableLadders/@PART[*]:HAS[@MODULE[RetractableLadder]]:FOR[TweakableEverything] to Squad/Parts/Utility/telescopicLadderBay/part/telescopicLadderBay [LOG 12:17:41.034] [ModuleManager] Applying node TweakableEverything/TweakableRCS/@PART[*]:HAS[@MODULE[ModuleRCS]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Utility/linearRCS/part/linearRcs [LOG 12:17:41.037] [ModuleManager] Applying node TweakableEverything/TweakableRCS/@PART[*]:HAS[@MODULE[ModuleRCS]]:FOR[TweakableEverything]:NEEDS[!Realism] to Squad/Parts/Utility/RCS block/part/RCSBlock [LOG 12:17:41.041] [ModuleManager] Applying node TweakableEverything/TweakableSolarPanels/@PART[*]:HAS[@MODULE[ModuleDeployableSolarPanel]]:FOR[TweakableEverything] to Squad/Parts/Electrical/largeSolarPanel/part/largeSolarPanel [LOG 12:17:41.042] [ModuleManager] Applying node TweakableEverything/TweakableSolarPanels/@PART[*]:HAS[@MODULE[ModuleDeployableSolarPanel]]:FOR[TweakableEverything] to Squad/Parts/Electrical/solarPanels1/part/solarPanels1 [LOG 12:17:41.043] [ModuleManager] Applying node TweakableEverything/TweakableSolarPanels/@PART[*]:HAS[@MODULE[ModuleDeployableSolarPanel]]:FOR[TweakableEverything] to Squad/Parts/Electrical/solarPanels2/part/solarPanels2 [LOG 12:17:41.044] [ModuleManager] Applying node TweakableEverything/TweakableSolarPanels/@PART[*]:HAS[@MODULE[ModuleDeployableSolarPanel]]:FOR[TweakableEverything] to Squad/Parts/Electrical/solarPanels3/part/solarPanels3 [LOG 12:17:41.045] [ModuleManager] Applying node TweakableEverything/TweakableSolarPanels/@PART[*]:HAS[@MODULE[ModuleDeployableSolarPanel]]:FOR[TweakableEverything] to Squad/Parts/Electrical/solarPanels4/part/solarPanels4 [LOG 12:17:41.047] [ModuleManager] Applying node TweakableEverything/TweakableSolarPanels/@PART[*]:HAS[@MODULE[ModuleDeployableSolarPanel]]:FOR[TweakableEverything] to Squad/Parts/Electrical/solarPanels5/part/solarPanels5 [LOG 12:17:41.051] [ModuleManager] :AFTER[TweakableEverything] pass [LOG 12:17:41.054] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[longAntenna]:AFTER[TweakableEverything] to Squad/Parts/Utility/longAntenna/part/longAntenna [LOG 12:17:41.057] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[mediumDishAntenna]:AFTER[TweakableEverything] to Squad/Parts/Utility/mediumDishAntenna/part/mediumDishAntenna [LOG 12:17:41.059] [ModuleManager] Applying node TweakableEverything/TweakableAnimateGeneric/@PART[commDish]:AFTER[TweakableEverything] to Squad/Parts/Utility/commDish/part/commDish [LOG 12:17:41.061] [ModuleManager] Applying node TweakableEverything/TweakableDockingNode/@PART[dockingPort1]:AFTER[TweakableEverything] to Squad/Parts/Utility/dockingPort1/part/dockingPort1 [LOG 12:17:41.063] [ModuleManager] Applying node TweakableEverything/TweakableDockingNode/@PART[dockingPortLateral]:AFTER[TweakableEverything] to Squad/Parts/Utility/dockingPortLateral/part/dockingPortLateral [LOG 12:17:41.065] [ModuleManager] :FINAL pass [LOG 12:17:41.066] [ModuleManager] ModuleManager applied 72 patches and found 0 error And here's the log from 2.1.1 (I compiled it less than 15 minutes ago): [LOG 12:22:42.019] [ModuleManager] compiling list of loaded mods... Mod DLLs found: Assembly-CSharp v1.0.0.0 ModuleManager v2.1.1.0 ModuleDB v1.0.5236.19316 ToadicusTools v0.0.0.0 TweakableAnimateGeneric v0.6.4.26691 TweakableDecouplers v1.1.5236.26688 TweakableDockingNode v1.1.5236.26687 TweakableEngineFairings v1.0.5236.26691 TweakableGimbals v1.1.5236.26690 TweakableLadders v0.6.3.26689 TweakableRCS v1.1.5236.26690 TweakableReactionWheels v0.6.4.26689 TweakableSolarPanels v0.6.0.26688 TweakableStaging v1.1.5236.26687 Non-DLL mods added: TweakableEverything [WRN 12:22:42.037] @PART[*]:HAS[@MODULE[ModuleDecouple]]:FOR[TweakableEverything] [WRN 12:22:42.038] @PART[*]:HAS[@MODULE[ModuleAnchoredDecoupler]]:FOR[TweakableEverything] [WRN 12:22:42.039] @PART[*]:HAS[@MODULE[ModuleDockingNode]]:FOR[TweakableEverything] [WRN 12:22:42.040] @PART[*]:HAS[@MODULE[ModuleGimbal]]:FOR[TweakableEverything] [LOG 12:22:42.041] [ModuleManager] Deleting Node in file TweakableEverything/TweakableGimbals subnode: @PART[*]:HAS[@MODULE[ModuleGimbal]]:AFTER[Realism]:NEEDS[Realism] as it can't satisfy its NEEDS [WRN 12:22:42.042] @PART[*]:HAS[@MODULE[ModuleRCS]]:FOR[TweakableEverything] [LOG 12:22:42.042] [ModuleManager] Deleting Node in file TweakableEverything/TweakableRCS subnode: @PART[*]:HAS[@MODULE[ModuleRCS]]:AFTER[Realism]:NEEDS[Realism] as it can't satisfy its NEEDS [LOG 12:22:42.044] [ModuleManager] :FIRST (default) pass [LOG 12:22:42.066] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/advSasModule/part/advSasModule [LOG 12:22:42.070] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/asasmodule1-2/part/asasmodule1-2 [LOG 12:22:42.071] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/cupola/part/cupola [LOG 12:22:42.072] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/landerCabinSmall/part/landerCabinSmall [LOG 12:22:42.073] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/Mark1Cockpit/part/Mark1Cockpit [LOG 12:22:42.074] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/Mark2Cockpit/part/Mark2Cockpit [LOG 12:22:42.076] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/mark3Cockpit/part/mark3Cockpit [LOG 12:22:42.077] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/Mk1-2Pod/part/Mark1-2Pod [LOG 12:22:42.078] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/mk1pod/part/mk1pod [LOG 12:22:42.079] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/mk2LanderCabin/part/mk2LanderCabin [LOG 12:22:42.080] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreCube/part/probeCoreCube [LOG 12:22:42.081] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreHex/part/probeCoreHex [LOG 12:22:42.082] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreOcto/part/probeCoreOcto [LOG 12:22:42.083] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreOcto2/part/probeCoreOcto2 [LOG 12:22:42.085] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeCoreSphere/part/probeCoreSphere [LOG 12:22:42.086] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeStackLarge/part/probeStackLarge [LOG 12:22:42.087] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/probeStackSmall/part/probeStackSmall [LOG 12:22:42.088] [ModuleManager] Applying node TweakableEverything/TweakableReactionWheels/@PART[*]:HAS[@MODULE[ModuleReactionWheel]] to Squad/Parts/Command/sasModule/part/sasModule [LOG 12:22:42.093] [ModuleManager] :BEFORE[Assembly-CSharp] pass [LOG 12:22:42.095] [ModuleManager] :FOR[Assembly-CSharp] pass [LOG 12:22:42.096] [ModuleManager] :AFTER[Assembly-CSharp] pass [LOG 12:22:42.097] [ModuleManager] :BEFORE[ModuleManager] pass [LOG 12:22:42.098] [ModuleManager] :FOR[ModuleManager] pass [LOG 12:22:42.099] [ModuleManager] :AFTER[ModuleManager] pass [LOG 12:22:42.100] [ModuleManager] :BEFORE[ModuleDB] pass [LOG 12:22:42.101] [ModuleManager] :FOR[ModuleDB] pass [LOG 12:22:42.102] [ModuleManager] :AFTER[ModuleDB] pass [LOG 12:22:42.103] [ModuleManager] :BEFORE[ToadicusTools] pass [LOG 12:22:42.104] [ModuleManager] :FOR[ToadicusTools] pass [LOG 12:22:42.105] [ModuleManager] :AFTER[ToadicusTools] pass [LOG 12:22:42.106] [ModuleManager] :BEFORE[TweakableAnimateGeneric] pass [LOG 12:22:42.109] [ModuleManager] :FOR[TweakableAnimateGeneric] pass [LOG 12:22:42.110] [ModuleManager] :AFTER[TweakableAnimateGeneric] pass [LOG 12:22:42.111] [ModuleManager] :BEFORE[TweakableDecouplers] pass [LOG 12:22:42.113] [ModuleManager] :FOR[TweakableDecouplers] pass [LOG 12:22:42.114] [ModuleManager] :AFTER[TweakableDecouplers] pass [LOG 12:22:42.115] [ModuleManager] :BEFORE[TweakableDockingNode] pass [LOG 12:22:42.116] [ModuleManager] :FOR[TweakableDockingNode] pass [LOG 12:22:42.117] [ModuleManager] :AFTER[TweakableDockingNode] pass [LOG 12:22:42.118] [ModuleManager] :BEFORE[TweakableEngineFairings] pass [LOG 12:22:42.119] [ModuleManager] :FOR[TweakableEngineFairings] pass [LOG 12:22:42.120] [ModuleManager] :AFTER[TweakableEngineFairings] pass [LOG 12:22:42.121] [ModuleManager] :BEFORE[TweakableGimbals] pass [LOG 12:22:42.122] [ModuleManager] :FOR[TweakableGimbals] pass [LOG 12:22:42.123] [ModuleManager] :AFTER[TweakableGimbals] pass [LOG 12:22:42.124] [ModuleManager] :BEFORE[TweakableLadders] pass [LOG 12:22:42.125] [ModuleManager] :FOR[TweakableLadders] pass [LOG 12:22:42.126] [ModuleManager] :AFTER[TweakableLadders] pass [LOG 12:22:42.130] [ModuleManager] :BEFORE[TweakableRCS] pass [LOG 12:22:42.131] [ModuleManager] :FOR[TweakableRCS] pass [LOG 12:22:42.132] [ModuleManager] :AFTER[TweakableRCS] pass [LOG 12:22:42.133] [ModuleManager] :BEFORE[TweakableReactionWheels] pass [LOG 12:22:42.134] [ModuleManager] :FOR[TweakableReactionWheels] pass [LOG 12:22:42.135] [ModuleManager] :AFTER[TweakableReactionWheels] pass [LOG 12:22:42.136] [ModuleManager] :BEFORE[TweakableSolarPanels] pass [LOG 12:22:42.137] [ModuleManager] :FOR[TweakableSolarPanels] pass [LOG 12:22:42.138] [ModuleManager] :AFTER[TweakableSolarPanels] pass [LOG 12:22:42.139] [ModuleManager] :BEFORE[TweakableStaging] pass [LOG 12:22:42.140] [ModuleManager] :FOR[TweakableStaging] pass [LOG 12:22:42.141] [ModuleManager] :AFTER[TweakableStaging] pass [LOG 12:22:42.142] [ModuleManager] :BEFORE[TweakableEverything] pass [LOG 12:22:42.144] [ModuleManager] :FOR[TweakableEverything] pass [LOG 12:22:42.145] [ModuleManager] :AFTER[TweakableEverything] pass [LOG 12:22:42.146] [ModuleManager] :FINAL pass [LOG 12:22:42.147] [ModuleManager] Running tests... [LOG 12:22:42.148] [ModuleManager] ModuleManager applied 18 patches and found 0 errors As you can see, the new version only applied 18 of 72 patches. Chances are, you're still working on the code and haven't finished it yet. But in case you're 'done' and in the test phase, then hopefully this will help. You can safely assume that I'm stalking your git hub page Navy
  21. I think I love you... Heh, if you want a beta tester just shoot me a pm!
  22. I've been looking into the MM source code and playing around with .craft and .sfs files. I wrote a quick program (not a plugin) which will strip all MODULE{} blocks from a craft file. If I then load this stripped craft file in the editor, KSP re-populates all of the module definitions, assumedly from the 'template' found in GameDatabase.Instance.Root. Unfortunately I haven't had much time to play around with this, but I'm willing to bet sarbian and swamp_ig have spent some time delving into this area, so I'd like to ask a few questions in the hopes of catching me up to speed. I assume that if I do the same process (strip its MODULE{} blocks) with an .sfs file, then load it in-game, KSP will also repopulate all of its MODULE{} blocks from the same source (GameDatabase? or are those definitions pulled from elsewhere?). If one were to 'rebuild' a persistence file in such a way, then load a craft file in the editor which has NOT had its MODULE{} configurations stripped, and there exists a difference in the ordering of MODULE{} blocks between the .craft and database, will it modify the craft file at all, or just silently fail in some undefined way (likely throwing-out the non-matching MODULE definitions)? In theory, would the following work as a way to make MODULE ordering irrelevant (note that this is currently using out-of-game modification, but could assumedly be executed at runtime, possibly by intercepting some form of 'on load' event): Step 1) Strip all .craft and .sfs file of MODULE{} blocks, but save them in another file (or in memory), using a key-value for each .craft file and each vessel in the .sfs, with the keys being a combination of the name of PART(uid), the MODULE, and its index (if there are multiple copies of the same MODULE), and the value being the entire contents of the MODULE{} block. Step 2) Allow KSP to re-build the .craft and .sfs files, which will include any modified configurations provided by MM (confirmed this works, at least for craft files but assumedly for .sfs as well). Step 3) Scan through the .craft/.sfs files that KSP has just rebuilt, and whenever a MODULE{} is encountered, look-up the value for that block in the key-value set we created before, then replace the MODULE{} block with the saved data. Again, the key-value pairs are saved for both craft files as well as for instantiated vessels (using their vessel ID), so no data should be lost. In summary, this procedure allows KSP and MM to order MODULE{} blocks however it wants to, then re-writes the .sfs or .craft file to match that defined order, restoring data in the process. I'm not yet familiar enough with KSP's GameDatabase / ConfigNode to do this in-game. But I can only assume that some form of OnLoad event is provided, hopefully for both .craft and .sfs files, which would allow this procedure to modify the appropriate files at runtime and at the moment before they're actually de-serialized. If it's possible, then this should make the ordering of MODULE{} blocks unimportant, as they'll always be re-ordered to match what KSP expects. I'll poke around with this idea for the next two days, but as I mentioned, I'm going away for a month thereafter and won't be able to mess around with this stuff until I'm back. Hopefully you're already well ahead of me Navy
  23. Thank you. That would almost certainly allow me to fix the issue in my particular install, but I can't guarantee other mods won't have a similar effect. I'm holding off on releasing DPAI v4 until swamp_ig brings us some goodness!
×
×
  • Create New...