Recommended Posts

Hey everyone. First and foremost, I apologize for my absence from this thread. I had some personal matters that needed sorting out first, so even after returning from my holiday, I couldn't immediately get started on KS3P. It's concerning to hear that so many people find KS3P completely unresponsive. To everyone experiencing such a problem: I'm going to need logfiles to figure out what exactly is going wrong here. Check KS3P's mod folder, it should generate its own log file. Please upload that logfile in a comment (preferably in a spoiler-wrapper to keep the thread concise). If such a file is absent for some reason, I'm going to need the file 'KSP.txt', in your KSP installation directory (same folder as the executable).

Share this post


Link to post
Share on other sites
8 minutes ago, The White Guardian said:

Hey everyone. First and foremost, I apologize for my absence from this thread. I had some personal matters that needed sorting out first, so even after returning from my holiday, I couldn't immediately get started on KS3P. It's concerning to hear that so many people find KS3P completely unresponsive. To everyone experiencing such a problem: I'm going to need logfiles to figure out what exactly is going wrong here. Check KS3P's mod folder, it should generate its own log file. Please upload that logfile in a comment (preferably in a spoiler-wrapper to keep the thread concise). If such a file is absent for some reason, I'm going to need the file 'KSP.txt', in your KSP installation directory (same folder as the executable).

RL always comes firs dude. You dont need to apologise.

Ill get you a logfile shortly, and an explanation of the issues Im having.  I suspect the logfile wont help for one of them though.  Ill grab KSP.txt too for good measure.

I really hope that you can help get your mod back up and running for me and some others.  I think i speak for us all when i say that it adds so much to the game.  It is night and day without it. I miss mah bloom!

Matt

Share this post


Link to post
Share on other sites

Hi @The White Guardian

Ok so my KS3P issues are:

1) I am unable to open KS3P's GUI. Alt + 3 does nothing for me.  That is using LeftAlt + 3.  I have also tried Left Shift + 3, RightAlt + 3 and Right Shift + 3. I have also gone into Configuration.cfg and changed the Primary mapping to LeftShift, RightShift and RightAlt and this makes no difference.  I re-installed KS3P after all this fiddling to go back to your default.

2) According to your posts, whilst the DefaultConfig.ksp isnt finished, it seems that you set it up to at least work in the MainMenu scene.  It doesnt for me (assuming the MainMenu is the screen with Kerbin in the background, the 3 kerbals and the menu like Start New Game etc).  Im not sure how to tell if its working but Im seeing no signs of bloom etc.

Here are my logs.  I deleted both the KSP.log and the KS3P log.txt ahead of going into game for this so they would be clean logs showing only this game start.  i loaded the game, went straight into Tracking station and then into an orbiting station covered in lights to see if anything was working. No dice. Unable to open the GUI.

KS3P's Log.txt:

Spoiler

    ----    KS3P loading report    ----
[Log]: Running MonoBehaviour.Awake()!
[Log]: Loading asset bundle at path D:/Steam SSD/SteamApps/common/Kerbal Space Program/GameData\KS3P\Shaders\postprocessingshaders-windows.unity3d
[Wrn]: Adding shader [Hidden/Post FX/Ambient Occlusion].
[Wrn]: Adding shader [Hidden/Post FX/Blit].
[Wrn]: Adding shader [Hidden/Post FX/Bloom].
[Wrn]: Adding shader [Hidden/Post FX/Builtin Debug Views].
[Wrn]: Adding shader [Hidden/Post FX/Depth Of Field].
[Wrn]: Adding shader [Hidden/Post FX/Eye Adaptation].
[Wrn]: Adding shader [Hidden/Post FX/Fog].
[Wrn]: Adding shader [Hidden/Post FX/FXAA].
[Wrn]: Adding shader [Hidden/Post FX/Grain Generator].
[Wrn]: Adding shader [Hidden/Post FX/Lut Generator].
[Wrn]: Adding shader [Hidden/Post FX/Motion Blur].
[Wrn]: Adding shader [Hidden/Post FX/Screen Space Reflection].
[Wrn]: Adding shader [Hidden/Post FX/Temporal Anti-aliasing].
[Wrn]: Adding shader [Hidden/Post FX/Uber Shader].
[Log]: Adding compute shader [EyeHistogram].
[Log]: Scene input: MainMenu, SpaceCenter, VAB, SPH, Flight, EVA, IVA
[Err][KSP_PostProcessing.BloomModel]: Failed to load dirt texture path [KS3P/Textures/Fallback.png], loading blank fallback texture.
 

I tried to post the KSP.log you also asked for but I just get 'something went wrong'. Perhaps because its enormous?

here are some excerpts from it which may be pertinent (i just searched for KS3P in the log and pasted stuff which was before and after it)

Spoiler

[LOG 22:22:08.743] [AddonLoader]: Instantiating addon 'KS3P' from assembly 'KS3P'
[LOG 22:22:08.745] [KS3P]: Running MonoBehaviour.Awake()!
[LOG 22:22:08.746] [KS3P]: Loading asset bundle at path D:/Steam SSD/SteamApps/common/Kerbal Space Program/GameData\KS3P\Shaders\postprocessingshaders-windows.unity3d
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Ambient Occlusion].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Blit].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Bloom].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Builtin Debug Views].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Depth Of Field].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Eye Adaptation].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Fog].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/FXAA].
[WRN 22:22:08.927] [KS3P]: Adding shader [Hidden/Post FX/Grain Generator].
[WRN 22:22:08.928] [KS3P]: Adding shader [Hidden/Post FX/Lut Generator].
[WRN 22:22:08.928] [KS3P]: Adding shader [Hidden/Post FX/Motion Blur].
[WRN 22:22:08.928] [KS3P]: Adding shader [Hidden/Post FX/Screen Space Reflection].
[WRN 22:22:08.928] [KS3P]: Adding shader [Hidden/Post FX/Temporal Anti-aliasing].
[WRN 22:22:08.928] [KS3P]: Adding shader [Hidden/Post FX/Uber Shader].
[LOG 22:22:08.928] [KS3P]: Adding compute shader [EyeHistogram].

[LOG 22:22:10.226] [KS3P]: Scene input: MainMenu, SpaceCenter, VAB, SPH, Flight, EVA, IVA
[ERR 22:22:10.231] [KS3P]: [KSP_PostProcessing.BloomModel]: Failed to load dirt texture path [KS3P/Textures/Fallback.png], loading blank fallback texture.

[EXC 22:22:10.234] IndexOutOfRangeException: Array index is out of range.
    KSP_PostProcessing.KS3PUtil.GetBounds (UnityEngine.AnimationCurve curve)
    KSP_PostProcessing.Parsers.Parser`1[T].ParseCurve (.ConfigNode node)
    KSP_PostProcessing.Parsers.Parser`1[T].TryParseCurve (.ConfigNode node, KSP_PostProcessing.ColorGradingCurve& curve)
    KSP_PostProcessing.Parsers.ColorGradingParser.ParseCurves (.ConfigNode node)
    KSP_PostProcessing.Parsers.ColorGradingParser.Parse (.ConfigNode node)
    KSP_PostProcessing.Profile..ctor (.ConfigNode node)
    KSP_PostProcessing.Profile.op_Implicit (.ConfigNode node)
    KSP_PostProcessing.KS3P.Start ()

[LOG 22:22:31.022] Load(Texture): KS3P/Textures/Fallback
[WRN 22:22:31.024] Texture resolution is not valid for compression: 'D:\Steam SSD\SteamApps\common\Kerbal Space Program\GameData\KS3P\Textures\Fallback.png' - consider changing the image's width and height to enable compression
[LOG 22:22:31.024] Load(Texture): KS3P/Textures/LensDirt00
[LOG 22:22:31.475] Load(Texture): KS3P/Textures/LensDirt01
[LOG 22:22:32.048] Load(Texture): KS3P/Textures/LensDirt02
[LOG 22:22:32.558] Load(Texture): KS3P/Textures/LensDirt03
[LOG 22:22:33.021] Load(Texture): KS3P/Textures/NeutralLUT_16
[LOG 22:22:33.026] Load(Texture): KS3P/Textures/NeutralLUT_32
[LOG 22:22:33.033] Load(Texture): KS3P/Textures/SpectralLut_BlueRed
[LOG 22:22:33.037] Load(Texture): KS3P/Textures/SpectralLut_GreenPurple
[LOG 22:22:33.041] Load(Texture): KS3P/Textures/SpectralLut_PurpleGreen
[LOG 22:22:33.044] Load(Texture): KS3P/Textures/SpectralLut_RedBlue
[LOG 22:22:33.047] Load(Texture): KS3P/Textures/Galileo_Textures/LensDirt00
[LOG 22:22:33.065] Load(Texture): KS3P/Textures/Galileo_Textures/LensDirt01
[LOG 22:22:33.081] Load(Texture): KS3P/Textures/Galileo_Textures/LensDirt02
[LOG 22:22:33.103] Load(Texture): KS3P/Textures/Galileo_Textures/LensDirt03
[LOG 22:22:33.125] Load(Texture): KS3P/Textures/Galileo_Textures/LensDirt04
[LOG 22:22:33.145] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_0
[LOG 22:22:33.147] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_1
[LOG 22:22:33.149] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_10
[LOG 22:22:33.150] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_11
[LOG 22:22:33.152] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_12
[LOG 22:22:33.153] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_13
[LOG 22:22:33.154] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_14
[LOG 22:22:33.156] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_15
[LOG 22:22:33.157] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_16
[LOG 22:22:33.158] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_17
[LOG 22:22:33.159] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_18
[LOG 22:22:33.161] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_19
[LOG 22:22:33.162] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_2
[LOG 22:22:33.163] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_20
[LOG 22:22:33.165] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_21
[LOG 22:22:33.166] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_22
[LOG 22:22:33.167] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_23
[LOG 22:22:33.169] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_24
[LOG 22:22:33.171] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_25
[LOG 22:22:33.173] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_26
[LOG 22:22:33.174] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_27
[LOG 22:22:33.176] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_28
[LOG 22:22:33.177] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_29
[LOG 22:22:33.179] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_3
[LOG 22:22:33.181] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_30
[LOG 22:22:33.182] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_31
[LOG 22:22:33.184] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_32
[LOG 22:22:33.186] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_33
[LOG 22:22:33.187] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_34
[LOG 22:22:33.189] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_35
[LOG 22:22:33.190] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_36
[LOG 22:22:33.192] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_37
[LOG 22:22:33.194] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_38
[LOG 22:22:33.195] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_39
[LOG 22:22:33.196] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_4
[LOG 22:22:33.198] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_40
[LOG 22:22:33.199] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_41
[LOG 22:22:33.200] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_42
[LOG 22:22:33.202] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_43
[LOG 22:22:33.203] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_44
[LOG 22:22:33.205] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_45
[LOG 22:22:33.207] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_46
[LOG 22:22:33.208] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_47
[LOG 22:22:33.210] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_48
[LOG 22:22:33.211] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_49
[LOG 22:22:33.213] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_5
[LOG 22:22:33.214] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_50
[LOG 22:22:33.216] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_51
[LOG 22:22:33.217] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_52
[LOG 22:22:33.219] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_53
[LOG 22:22:33.221] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_54
[LOG 22:22:33.222] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_55
[LOG 22:22:33.224] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_56
[LOG 22:22:33.225] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_57
[LOG 22:22:33.227] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_58
[LOG 22:22:33.229] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_59
[LOG 22:22:33.230] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_6
[LOG 22:22:33.232] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_60
[LOG 22:22:33.233] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_61
[LOG 22:22:33.234] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_62
[LOG 22:22:33.236] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_63
[LOG 22:22:33.237] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_7
[LOG 22:22:33.239] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_8
[LOG 22:22:33.241] Load(Texture): KS3P/Textures/NoiseTextures/LDR_LLL1_9

[LOG 22:22:44.856] Config(KS3P) AstronomersVisualPack/Astronomers-KS3P/KS3P

[LOG 22:22:44.857] Config(KS3P) KS3P/DefaultConfig/KS3P

[LOG 22:22:08.568] Log started at 2019-08-24 22:22:08.568
[EXC 22:22:10.737] Add to mod list threw an exception in loading KEX-EVAFootprints, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool)
  at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 
  at ModuleManager.ModListGenerator.GetAdditionalModsFromStaticMethods (IBasicLogger logger) [0x00000] in <filename unknown>:0 
[LOG 22:22:10.782] Checking Cache
[LOG 22:22:11.112] SHA generated in 0.328s
[LOG 22:22:11.112]       SHA = CB-20-8B-6B-75-30-5A-D4-AC-B0-ED-F8-44-80-FE-19-B4-26-85-42-DD-09-91-FB-99-9A-37-EF-FD-84-71-B7
[LOG 22:22:11.202] Changes :
Added   : KS3P/Configuration.cfg
Added   : KS3P/DefaultConfig.cfg

[LOG 22:22:11.202] Cache SHA = 30-38-35-F7-3F-8B-64-B8-D5-C9-19-33-B8-17-B1-E6-A5-76-16-95-83-C2-80-30-9B-2E-1B-FA-66-D5-89-73
[LOG 22:22:11.202] useCache = False
[LOG 22:22:11.202] Pre patch init
[LOG 22:22:11.398] compiling list of loaded mods...
Mod DLLs found:
  Name                                    Assembly Version         Assembly File Version    KSPAssembly Version      SHA256

  Assembly-CSharp                         0.0.0.0                  0.0.0.0                                           d22b72a41bfc665921fb69c76d3567aa2a26a1aca8daa8cffb9dd27b45839175
  ModuleManager                           4.0.3.0                  4.0.3.0                  2.5                      48e3ae13b9b06e32ecc28a2993b5c2d0fce9869849f4b278ee49c6744577aea5
  MiniAVC                                 1.2.0.6                  1.2.0.6                                           f5823c3c6734b3d965a9c1c87cc9022d1d71c5cae37ed7cb94da68930a692939
  ClickThroughBlocker                     0.1.7.2                  1.0.0.0                  1.7                      8251997c98ed2004369d663095081108aecc077f2f245ba5f72818dae0e2da5a
  MiniAVC                                 1.2.0.6                  1.2.0.6                                           f5823c3c6734b3d965a9c1c87cc9022d1d71c5cae37ed7cb94da68930a692939
  ToolbarControl                          0.1.8.2                  1.0.0.0                  1.0                      269efac965cf2d40f414c6d82ce77ec0a4619a8249eed60c18348e834d5c4691
  MiniAVC                                 1.0.3.2                  1.0.3.2                                           9ee10c46cb6f86417f005046ae72fedda156e1d47c92febcb84c68f50e03f08a
  Sigma88LoadingScreens                   0.4.0.0                  0.4.0.0                  1.0                      01e03006439a92106dfc68a12f6be5a31a2fa3407bd47b979eb5e601ab7d8a28
  B9PartSwitch                            2.7.1.0                  2.7.1.0                  2.7                      86818338722a540f57edf10715f4ddf0b8869f439fb720ec87725d73ebc3e4b1
  BetterBurnTime                          1.0.0.0                  1.0.0.0                                           3722c997499e7ff3e1531da73d14128e000afb79df0e3c90fffbb28f6404eb59
  Chatterer                               0.9.96.2332              0.9.96.2332                                       9301dd88e4ea60e759acb4a1e8000f847b3bfb7629203b261358fc29a2c49412
  MiniAVC                                 1.0.3.2                  1.0.3.2                                           9ee10c46cb6f86417f005046ae72fedda156e1d47c92febcb84c68f50e03f08a
  MiniAVC                                 1.2.0.6                  1.2.0.6                                           f5823c3c6734b3d965a9c1c87cc9022d1d71c5cae37ed7cb94da68930a692939
  AGExt                                   2.3.5.0                  1.0.0.0                                           bb86480252295d889e30d5a8de297c311aec48f01763ad77cd39086b73562717
  DistantObject                           1.9.1.14505              1.9.1.14505              1.5                      da826b9dab488978667d874a84720d4e3bf06eba562e2644b5ea345630de25df
  EasyVesselSwitch                        1.11.7052.36539          1.11.7052.36539          1.11                     a757dfd4e4128817d9cfccabf59effe16a8ffe9676d555fde278849150614e32
  KSPDev_Utils.1.2                        1.2.7031.33522           1.2.7031.33522                                    8ab01b93fdbcca0c49acc5ec8fa6b1c624c3693f4f7c00fa423e30257ed0fd7d
  MiniAVC                                 1.3.0.3                  1.3.0.3                                           bbd066f72ad22904aeef547cfc489abff357c3505adb9b6c1a8e0a36b4a3b1f2
  MiniAVC                                 1.2.0.6                  1.2.0.6                                           f5823c3c6734b3d965a9c1c87cc9022d1d71c5cae37ed7cb94da68930a692939
  EditorExtensionsRedux                   3.3.21.0                 3.3.21.0                                          a8816416b75f12ca9782d4f50e18127c57612c32f958f1680df1e09a47f823c4
  MiniAVC                                 1.2.0.6                  1.2.0.6                                           f5823c3c6734b3d965a9c1c87cc9022d1d71c5cae37ed7cb94da68930a692939
  EngineLightRelit                        1.6.1.1                  1.0.0.0                                           95dd4b90c76d47e20203bbfe06d2e119d8fd0b5131ee5a2614789a5a6af9a419
  Atmosphere                              1.4.2.2                  1.4.2.2                                           afcdaf61ac50f12eb01e0d55a4e8791f3fa6c67242b59c2fef504a92daddc726
  CelestialShadows                        1.4.2.2                  1.4.2.2                                           9cd19ceaf7a165bd88bf7ae5c34e58993705c7d0e6b672167557b0df5454604f
  CityLights                              1.4.2.2                  1.4.2.2                                           2f1326f8b597a804c27d503e133550506944bcaafbc64ba9f656f2f67b5894dd
  EVEManager                              1.4.2.2                  1.4.2.2                                           0c6a35d25f6381c200a835b69a67df4b2b6e70e259453ab6bdf00bf5a3fcb610
  PartFX                                  1.4.2.2                  1.4.2.2                                           7fcf696cb88e39d14a5ede6db7d4588cc7c3276521492f4775bc20454a0bb808
  PQSManager                              1.4.2.2                  1.4.2.2                                           3d658636696729d53200b4f4f5cdb9cacc0781980f3f4844991f5eb2b29be24e
  ShaderLoader                            1.4.2.2                  1.4.2.2                                           376dc932494b050b8e4118e8d47bc1b28b7fb375e8e9dfc8f78988d0eafe50d3
  Terrain                                 1.4.2.2                  1.4.2.2                                           9fa58c35af2c8b0b87ee65e20568ae388594265b19c255487dbab55321a513c6
  TextureConfig                           1.4.2.2                  1.4.2.2                                           36a8b8e8c86953ab9558c7b482467a899c1a592ca45837e3b4b08444cb2939bd
  Utils                                   1.4.2.2                  1.4.2.2                                           89438864bf06b7ff94a38deec65136b8e53005be46e12939f89cfdc9347519fa
  _BuildManager                           1.4.2.2                  1.4.2.2                                           b23a27076980076cae46a18d6e3b74162e75ac0ebff3264fa308b800e8ca6d17
  MiniAVC                                 1.2.0.6                  1.2.0.6                                           f5823c3c6734b3d965a9c1c87cc9022d1d71c5cae37ed7cb94da68930a692939
  EVAEnhancementsContinued                0.1.14.1                 1.1.1.0                                           576d3b95135727eab0c6876eae3382e4def0444eda1fd6ecb242658da0cb5127
  FP_DockingSndFX                         2.1.12.27690             2.1.12.27690                                      1196d0a356eb99582fbcca768c629597add1942375801a30d734c571a558fd8d
  MiniAVC                                 1.2.0.6                  1.2.0.6                                           f5823c3c6734b3d965a9c1c87cc9022d1d71c5cae37ed7cb94da68930a692939
  HaystackContinued                       0.5.5.1                  0.5.2.1                                           fa4b85fbe4cd0b639fb7e73202e301b2141a38089dbba97b6c7a187291ddc5e5
  HideEmptyTechTreeNodes                  1.0.0.0                  1.0.0.0                                           168a0addb6adbb369324f9ef2e18f3536167647be1b37c7a6083b99cc366e94e
  KerbalEngineer                          1.1.6.0                  1.1.6.0                                           619f39bcb431edee7d190c981147259c4efba58d73a0cb1743c6f84a345d01d3
  KerbalEngineer.Unity                    1.0.0.0                  1.0.0.0                                           8c082cc8e206ef55e5a1dcc59d88debc9769e21c67ab229c00a8ded84e5f28e2
  MiniAVC                                 1.0.3.2                  1.0.3.2                                           9ee10c46cb6f86417f005046ae72fedda156e1d47c92febcb84c68f50e03f08a
  Kopernicus.Parser                       1.0.0.0                  1.0.0.0                  1.0                      f56ce0a68ea2523643a65688a7030f46be0d4a8534a1c3570d01f1ad5b94b7aa
  ModularFlightIntegrator                 1.0.0.0                  1.2.6.0                  1.0                      54bd24671fab9c9f8b69eea67a3f236631fcfb3db0455352ba35d5b55486c535
  Kopernicus                              1.0.0.0                  1.0.0.0                  1.0                      0182d1236bc02e40b3e8625cd3fd90b3b75b6f497926763f7abb3e5fa916b5f7
  KEX-Common                              1.0.0.0                  1.0.0.0                  1.0                      d8eb6609c9874680cf1d4754bb41ffe2c59af79f1cad8deaa8ccdbed79e543f6
  KS3P                                    1.0.0.0                  1.0.0.0                  1.0                      bfe7922877653b86190cbe1b935b8808f26e4138d72ddfb24f07b637513539b0

[LOG 22:22:12.448] :BEFORE[KS3P] pass
[LOG 22:22:12.448] :FOR[KS3P] pass
[LOG 22:22:12.448] :AFTER[KS3P] pass

[LOG 22:23:19.872] [AddonLoader]: Instantiating addon 'MainMenuOperator' from assembly 'KS3P'

Parameter name: index
    System.Collections.Generic.List`1[KSP_PostProcessing.Profile].get_Item (Int32 index)
    KSP_PostProcessing.KS3P.Register (KSP_PostProcessing.PostProcessingBehaviour target, Scene targetScene)
    KSP_PostProcessing.Operators.PostProcessingOperator.Patch (Boolean scaled, Scene target)
    KSP_PostProcessing.Operators.MainMenuOperator.Start ()

[LOG 22:23:39.837] [AddonLoader]: Instantiating addon 'SpaceCenterOperator' from assembly 'KS3P'

Parameter name: index
    System.Collections.Generic.List`1[KSP_PostProcessing.Profile].get_Item (Int32 index)
    KSP_PostProcessing.KS3P.Register (KSP_PostProcessing.PostProcessingBehaviour target, Scene targetScene)
    KSP_PostProcessing.Operators.PostProcessingOperator.Patch (Boolean scaled, Scene target)
    KSP_PostProcessing.Operators.SpaceCenterOperator.Start ()
[ERR 22:23:44.186] StageRecovery: RegisterMod, CallRecoveryController returned null

[LOG 22:23:52.189] [AddonLoader]: Instantiating addon 'TrackStationOperator' from assembly 'KS3P'

Parameter name: index
    System.Collections.Generic.List`1[KSP_PostProcessing.Profile].get_Item (Int32 index)
    KSP_PostProcessing.KS3P.Register (KSP_PostProcessing.PostProcessingBehaviour target, Scene targetScene)
    KSP_PostProcessing.Operators.PostProcessingOperator.Patch (Boolean scaled, Scene target)
    KSP_PostProcessing.Operators.TrackStationOperator.Start ()

[LOG 22:24:08.749] [AddonLoader]: Instantiating addon 'FlightOperator' from assembly 'KS3P'

[LOG 22:27:08.192] [AddonLoader]: Instantiating addon 'MainMenuOperator' from assembly 'KS3P'

Parameter name: index
    System.Collections.Generic.List`1[KSP_PostProcessing.Profile].get_Item (Int32 index)
    KSP_PostProcessing.KS3P.Register (KSP_PostProcessing.PostProcessingBehaviour target, Scene targetScene)
    KSP_PostProcessing.Operators.PostProcessingOperator.Patch (Boolean scaled, Scene target)
    KSP_PostProcessing.Operators.MainMenuOperator.Start ()

 

 

Edited by III-METHOD-III
Typos

Share this post


Link to post
Share on other sites
11 hours ago, III-METHOD-III said:

[EXC 22:22:10.234] IndexOutOfRangeException: Array index is out of range.
    KSP_PostProcessing.KS3PUtil.GetBounds (UnityEngine.AnimationCurve curve)
    KSP_PostProcessing.Parsers.Parser`1[T].ParseCurve (.ConfigNode node)
    KSP_PostProcessing.Parsers.Parser`1[T].TryParseCurve (.ConfigNode node, KSP_PostProcessing.ColorGradingCurve& curve)
    KSP_PostProcessing.Parsers.ColorGradingParser.ParseCurves (.ConfigNode node)
    KSP_PostProcessing.Parsers.ColorGradingParser.Parse (.ConfigNode node)
    KSP_PostProcessing.Profile..ctor (.ConfigNode node)
    KSP_PostProcessing.Profile.op_Implicit (.ConfigNode node)
    KSP_PostProcessing.KS3P.Start ()

This is exactly what I was looking for: KS3P has an uncaught exception. Consequently KS3P's setup routine cannot finish execution and thus disables itself, hence why the GUI is unresponsive. I'll look into this immediately.

Share this post


Link to post
Share on other sites

For whoever it might interest: here's what the problem is.

Spoiler

Alright, so here's what the log file says.


[EXC 22:22:10.234] IndexOutOfRangeException: Array index is out of range.
    KSP_PostProcessing.KS3PUtil.GetBounds (UnityEngine.AnimationCurve curve)
    KSP_PostProcessing.Parsers.Parser`1[T].ParseCurve (.ConfigNode node)
    KSP_PostProcessing.Parsers.Parser`1[T].TryParseCurve (.ConfigNode node, KSP_PostProcessing.ColorGradingCurve& curve)
    KSP_PostProcessing.Parsers.ColorGradingParser.ParseCurves (.ConfigNode node)
    KSP_PostProcessing.Parsers.ColorGradingParser.Parse (.ConfigNode node)
    KSP_PostProcessing.Profile..ctor (.ConfigNode node)
    KSP_PostProcessing.Profile.op_Implicit (.ConfigNode node)
    KSP_PostProcessing.KS3P.Start ()

This is a so-called stacktrace: from the bottom up, we get a list of all of the methods subsequently called when the error occurred.


    KSP_PostProcessing.KS3P.Start ()

We begin with the method KS3P.Start(), which deals with importing the profiles from config nodes. So somewhere during this setup process, the error occurred.


    KSP_PostProcessing.Profile.op_Implicit (.ConfigNode node)

This is a bit strange. Basically, KS3P first indexes all config nodes that describe a custom post-processing profile, then add each confignode directly to a list of profile definitions. These are two different types: from KSP's 'ConfigNode' class directly to KS3P's 'Profile' class. This conversion is possible because of the following line in KS3P's source code:


public static implicit operator Profile(ConfigNode node) => new Profile(node);

This means that a confignode can be implicitly converted to a profile, hence why the stacktrace says 'Profile.op_Implicit' as the method that gave the error: it means 'implicit operator method'.


    KSP_PostProcessing.Profile..ctor (.ConfigNode node)

From the piece of source code that I linked, we can also see what this means, as the operator essentially does the conversion by calling the 'constructor method' that accepts a ConfigNode as a parameter. In essence, a constructor method is responsible for properly setting up a new instance of a type. In this case, it sets up a new instance of the 'Profile' class using data from a config node as a reference. Hence the word 'ctor' in the stack trace, it means that we're dealing with a constructor method.

Don't worry, it gets simpler now.


    KSP_PostProcessing.Parsers.ColorGradingParser.Parse (.ConfigNode node)

Remember that we're now dealing with parsing a specific profile. This part of the stacktrace tells us that the problem lies with parsing the color grading. The color grading parser is subdivided into several smaller parser-methods, each dealing with a specific aspect of the color grading (Tonemapper, Curves, etc).


    KSP_PostProcessing.Parsers.ColorGradingParser.ParseCurves (.ConfigNode node)

This tells us that the problem is in the curves parser specifically.


    KSP_PostProcessing.Parsers.Parser`1[T].TryParseCurve (.ConfigNode node, KSP_PostProcessing.ColorGradingCurve& curve)

Now this looks a bit more bizarre. What on Earth does 'Parser'`[T]' mean? In essence, KS3P has a base class (Parser) from which all post-processing effect parsers are derived. This way, all data that multiple post-processing parsers use can be defined once in the main Parser class, and can subsequently be shared with all parser subtypes. The " `1[T] " refers to the fact that this parser class is generic, that is to say, it contains a type that is not explicitly defined. For example, a generic method:


public void MyGenericMethod<T>(T item) where T : class

This means that the method will accept any reference-type object. It's a great way to make something that covers a lot of scenarios instead of having to create a custom method for each type. In the case of KS3P's Parser class, it means that I can force every subtype of the parser class to constrain itself to a specific post-processing model. Hence all of the methods it implements from Parser that contain the generic parameter 'T' will immediately refer to the appropriate type. This basically means that the CPU no longer needs to convert the method's output to the appropriate type.

But back to the stacktrace: the entry essentially means that the error occurred in the base parser class itself, not one of its subtypes, specifically the 'TryParseCurve' method. Specifically this line from the source code:


protected bool TryParseCurve(ConfigNode node, out ColorGradingCurve curve)

Some might have noticed that the stacktrace reads 'ColorGradingCurve&' and not 'out ColorGradingCurve'. Since it's a bit lengthy to explain, I'll write that tangent in a second spoiler.

Spoiler

Basically, there are two 'main' kinds of types in C#: Value types (anything defined as 'struct' or 'enum', such as 'int', 'short', 'long', 'double', 'float', 'char', etc) and Reference types (anything defined as 'class' or 'delegate', such as 'string' or System.Action). These are fundamentally different in memory storage and usage. For example, a struct (it it meets a few conditions) is stored in 'stack memory' whereas reference types are stored in 'heap memory'. The difference relevant here is how they behave when passed into a method.

A reference type, as the name implied, is simply an object that exists somewhere in your computer's memory. Every field or property it is assigned to is another link to this object. If no links exist, the object can no longer be retrieved and is henceforth treated as "out of scope", and cleaned up by the garbage collector. When you pass a reference type to a method, a reference to the actual object is passed to the method. Consequently you are given a link to the actual object, and can manipulate it as you see fit.

A value type on the other hand, or any 'struct', is instead copied. This might sound strange, but think about it: if we're copying, say, a number from object A to object B, would we want any change made to the value in object A to also immediately be changed in object B? That'd be absurd. For example, it'd make it impossible to store the status of a previous frame for the sake of comparing it with the current one.

Similarly, a value type's value is copied when passed into a method. Since value types are but a handful of bits most of the time, modern hardware can do this in the blink of an eye. It does however mean that write access is lost for value types. Hence the existence of the keywords 'ref' and 'out'. For example:



public void ClampAngle(ref float angle)
{
	while(angle > 360f) { angle -= 360f; }
	while(angle < 0f) { angle += 360f; }
}

This method clamps an angle in degrees to be within the 0-360 range, to avoid absurdly high numbers that can just as well be described with a smaller one. The 'ref' keyword ensures that the value type is passed by reference, IE that it gets treated as if it were a reference type, thereby allowing us to manipulate the original value.

But how does this work internally? How can we suddenly force the CPU to treat a value type in an atypical manner? Simple: by casting it to a subtype that can be treated as a reference type: from 'x' to 'x&'. This is done for every value passed with the keyword 'ref' (value may or may not be manipulated, but write access is granted anyway) and 'out' (value will be written to)

Next we have this:


KSP_PostProcessing.Parsers.Parser`1[T].ParseCurve (.ConfigNode node)

This has to do with the way 'TryParseCurve' works: it checks if the node supplied is defined, and if not, it returns an empty curve definition. Otherwise it passes the node on to the main 'ParseCurve' method, and this is the heart of the problem: I forgot to wrap this call to the 'unprotected' curve method in a try-catch safety net. But the stacktrace doesn't end there, so what specifically went wrong?


    KSP_PostProcessing.KS3PUtil.GetBounds (UnityEngine.AnimationCurve curve)

This is my poor attempt to find the uppermost and lowermost bounds of the color grading curve. So, at the very end of our bizarre adventure into the realm of CPU-puke, we have the following source code:


        internal static Vector2 GetBounds(this AnimationCurve curve)
        {
            var frames = curve.keys;
            return new Vector2(frames[0].time, frames[frames.Length - 1].time);
        }

The error given here specifically was an IndexOutOfRangeException. In the first line, I retrieve all of the keys from the provided animation curve. If the error was there, it'd be a NullReferenceException. Next line we get something to do with indices:


frames[0].time
frames[frames.Length - 1].time

Behold, our culprit. This code is valid in every case but one: an animation curve that has no keyframes. Consequently the array is empty: it has no items. Element '0' is out of range. frames.Length returns 0, 0 - 1 = -1, and an array index of '-1' is gibberish. The fix is simple:


var frames = curve.keys; // grab the keyframes as an array of UnityEngine.Keyframe
if(frames.Length == 0)
{
	// Animation curve has no keyframes, return empty bounds.
}
else
{
	// Treat as normal, as both index '0' and index 'length - 1' are valid.
}

And is what I've just implemented, along with several other safety measures. Problem solved.

TL;DR:

tenor.gif

Share this post


Link to post
Share on other sites

Alright, I'm about to test a newly compiled, updated KS3P. Not only did I remove the IndexOutOfRangeException, I also changed the configuration somewhat. Let me explain.

Previously, in KS3P/Configuration.cfg, one would find the name of each scene supported by KS3P, with a number assigned to it. This number was the index of the profile within the loaded profiles that KS3P should assign for that particular scene.

The problem here is that profile load order isn't set in stone, and honestly I feel a bit silly for actually once having programmed it this way. In this new setup, the name of the desired profile is assigned for each scene. Should KS3P not find a loaded profile corresponding to that name, it will instead target the first valid profile for that scene.

If, for some bizarre reason, no profiles are valid at all for a particular scene, KS3P will initiate its emergency fallback protocol, generating an empty Post-Processing profile (if it hasn't done so already) and updating that profile to be valid for each scene that lacks a profile definition.

I'm now going to test how this works in action.

EDIT: almost forgot, I also cleaned up Unity Technologies' source code for post-processing bundled with KS3P. Previously it contained an HDR check for the camera using a '#if' directive to function differently on older versions of Unity for backwards compatibility. Problem is, I'd be really surprised if someone were still using KS3P in a build of KSP using Unity 5, as KSP has been using Unity 2017 (build 2017.1.3p1 I believe) if not newer, for some time now. Obviously this check isn't necessary with KS3P, so I removed it.

Edited by The White Guardian

Share this post


Link to post
Share on other sites

Is the most recent version compatible with KSP 1.6.0? because I can't get it to work there. And if it isn't, are there any links to the 1.6 version?

Share this post


Link to post
Share on other sites
33 minutes ago, TomVorat said:

Is the most recent version compatible with KSP 1.6.0? because I can't get it to work there. And if it isn't, are there any links to the 1.6 version?

This thread might help you out:

 

Share this post


Link to post
Share on other sites
On 8/25/2019 at 1:31 PM, The White Guardian said:

Alright, I'm about to test a newly compiled, updated KS3P. Not only did I remove the IndexOutOfRangeException, I also changed the configuration somewhat. Let me explain.

Previously, in KS3P/Configuration.cfg, one would find the name of each scene supported by KS3P, with a number assigned to it. This number was the index of the profile within the loaded profiles that KS3P should assign for that particular scene.

The problem here is that profile load order isn't set in stone, and honestly I feel a bit silly for actually once having programmed it this way. In this new setup, the name of the desired profile is assigned for each scene. Should KS3P not find a loaded profile corresponding to that name, it will instead target the first valid profile for that scene.

If, for some bizarre reason, no profiles are valid at all for a particular scene, KS3P will initiate its emergency fallback protocol, generating an empty Post-Processing profile (if it hasn't done so already) and updating that profile to be valid for each scene that lacks a profile definition.

I'm now going to test how this works in action.

EDIT: almost forgot, I also cleaned up Unity Technologies' source code for post-processing bundled with KS3P. Previously it contained an HDR check for the camera using a '#if' directive to function differently on older versions of Unity for backwards compatibility. Problem is, I'd be really surprised if someone were still using KS3P in a build of KSP using Unity 5, as KSP has been using Unity 2017 (build 2017.1.3p1 I believe) if not newer, for some time now. Obviously this check isn't necessary with KS3P, so I removed it.

Excellent work, keep us updated and hopefully you can push the fixed version soon. We all love your mod.

Share this post


Link to post
Share on other sites

Because I'm a neophyte when it comes to this stuff.  If I run the current version of this with Astronomer's Pack, will it be causing me issues?  or any fps loss due to said issues?  I don't have it installed because I was afraid of that, and don't want to miss when this gets updated, so if there's no downside to installing it now so it gets autoupdated I'd prefer to do that.

Thanks! :)

Share this post


Link to post
Share on other sites

@The White Guardian

For some reason KS3P doesn't seem to work for me even with the 1.7.2 version. On the KSP logs it mentions me missing textures. Any idea on how to fix this problem because my game isn't complete until I have KS3P installed.

Edited by Nomadic Astronaut

Share this post


Link to post
Share on other sites
On 8/25/2019 at 1:47 PM, The White Guardian said:

For whoever it might interest: here's what the problem is.

  Hide contents

Alright, so here's what the log file says.



[EXC 22:22:10.234] IndexOutOfRangeException: Array index is out of range.
    KSP_PostProcessing.KS3PUtil.GetBounds (UnityEngine.AnimationCurve curve)
    KSP_PostProcessing.Parsers.Parser`1[T].ParseCurve (.ConfigNode node)
    KSP_PostProcessing.Parsers.Parser`1[T].TryParseCurve (.ConfigNode node, KSP_PostProcessing.ColorGradingCurve& curve)
    KSP_PostProcessing.Parsers.ColorGradingParser.ParseCurves (.ConfigNode node)
    KSP_PostProcessing.Parsers.ColorGradingParser.Parse (.ConfigNode node)
    KSP_PostProcessing.Profile..ctor (.ConfigNode node)
    KSP_PostProcessing.Profile.op_Implicit (.ConfigNode node)
    KSP_PostProcessing.KS3P.Start ()

This is a so-called stacktrace: from the bottom up, we get a list of all of the methods subsequently called when the error occurred.



    KSP_PostProcessing.KS3P.Start ()

We begin with the method KS3P.Start(), which deals with importing the profiles from config nodes. So somewhere during this setup process, the error occurred.



    KSP_PostProcessing.Profile.op_Implicit (.ConfigNode node)

This is a bit strange. Basically, KS3P first indexes all config nodes that describe a custom post-processing profile, then add each confignode directly to a list of profile definitions. These are two different types: from KSP's 'ConfigNode' class directly to KS3P's 'Profile' class. This conversion is possible because of the following line in KS3P's source code:



public static implicit operator Profile(ConfigNode node) => new Profile(node);

This means that a confignode can be implicitly converted to a profile, hence why the stacktrace says 'Profile.op_Implicit' as the method that gave the error: it means 'implicit operator method'.



    KSP_PostProcessing.Profile..ctor (.ConfigNode node)

From the piece of source code that I linked, we can also see what this means, as the operator essentially does the conversion by calling the 'constructor method' that accepts a ConfigNode as a parameter. In essence, a constructor method is responsible for properly setting up a new instance of a type. In this case, it sets up a new instance of the 'Profile' class using data from a config node as a reference. Hence the word 'ctor' in the stack trace, it means that we're dealing with a constructor method.

Don't worry, it gets simpler now.



    KSP_PostProcessing.Parsers.ColorGradingParser.Parse (.ConfigNode node)

Remember that we're now dealing with parsing a specific profile. This part of the stacktrace tells us that the problem lies with parsing the color grading. The color grading parser is subdivided into several smaller parser-methods, each dealing with a specific aspect of the color grading (Tonemapper, Curves, etc).



    KSP_PostProcessing.Parsers.ColorGradingParser.ParseCurves (.ConfigNode node)

This tells us that the problem is in the curves parser specifically.



    KSP_PostProcessing.Parsers.Parser`1[T].TryParseCurve (.ConfigNode node, KSP_PostProcessing.ColorGradingCurve& curve)

Now this looks a bit more bizarre. What on Earth does 'Parser'`[T]' mean? In essence, KS3P has a base class (Parser) from which all post-processing effect parsers are derived. This way, all data that multiple post-processing parsers use can be defined once in the main Parser class, and can subsequently be shared with all parser subtypes. The " `1[T] " refers to the fact that this parser class is generic, that is to say, it contains a type that is not explicitly defined. For example, a generic method:



public void MyGenericMethod<T>(T item) where T : class

This means that the method will accept any reference-type object. It's a great way to make something that covers a lot of scenarios instead of having to create a custom method for each type. In the case of KS3P's Parser class, it means that I can force every subtype of the parser class to constrain itself to a specific post-processing model. Hence all of the methods it implements from Parser that contain the generic parameter 'T' will immediately refer to the appropriate type. This basically means that the CPU no longer needs to convert the method's output to the appropriate type.

But back to the stacktrace: the entry essentially means that the error occurred in the base parser class itself, not one of its subtypes, specifically the 'TryParseCurve' method. Specifically this line from the source code:



protected bool TryParseCurve(ConfigNode node, out ColorGradingCurve curve)

Some might have noticed that the stacktrace reads 'ColorGradingCurve&' and not 'out ColorGradingCurve'. Since it's a bit lengthy to explain, I'll write that tangent in a second spoiler.

  Reveal hidden contents

Basically, there are two 'main' kinds of types in C#: Value types (anything defined as 'struct' or 'enum', such as 'int', 'short', 'long', 'double', 'float', 'char', etc) and Reference types (anything defined as 'class' or 'delegate', such as 'string' or System.Action). These are fundamentally different in memory storage and usage. For example, a struct (it it meets a few conditions) is stored in 'stack memory' whereas reference types are stored in 'heap memory'. The difference relevant here is how they behave when passed into a method.

A reference type, as the name implied, is simply an object that exists somewhere in your computer's memory. Every field or property it is assigned to is another link to this object. If no links exist, the object can no longer be retrieved and is henceforth treated as "out of scope", and cleaned up by the garbage collector. When you pass a reference type to a method, a reference to the actual object is passed to the method. Consequently you are given a link to the actual object, and can manipulate it as you see fit.

A value type on the other hand, or any 'struct', is instead copied. This might sound strange, but think about it: if we're copying, say, a number from object A to object B, would we want any change made to the value in object A to also immediately be changed in object B? That'd be absurd. For example, it'd make it impossible to store the status of a previous frame for the sake of comparing it with the current one.

Similarly, a value type's value is copied when passed into a method. Since value types are but a handful of bits most of the time, modern hardware can do this in the blink of an eye. It does however mean that write access is lost for value types. Hence the existence of the keywords 'ref' and 'out'. For example:




public void ClampAngle(ref float angle)
{
	while(angle > 360f) { angle -= 360f; }
	while(angle < 0f) { angle += 360f; }
}

This method clamps an angle in degrees to be within the 0-360 range, to avoid absurdly high numbers that can just as well be described with a smaller one. The 'ref' keyword ensures that the value type is passed by reference, IE that it gets treated as if it were a reference type, thereby allowing us to manipulate the original value.

But how does this work internally? How can we suddenly force the CPU to treat a value type in an atypical manner? Simple: by casting it to a subtype that can be treated as a reference type: from 'x' to 'x&'. This is done for every value passed with the keyword 'ref' (value may or may not be manipulated, but write access is granted anyway) and 'out' (value will be written to)

Next we have this:



KSP_PostProcessing.Parsers.Parser`1[T].ParseCurve (.ConfigNode node)

This has to do with the way 'TryParseCurve' works: it checks if the node supplied is defined, and if not, it returns an empty curve definition. Otherwise it passes the node on to the main 'ParseCurve' method, and this is the heart of the problem: I forgot to wrap this call to the 'unprotected' curve method in a try-catch safety net. But the stacktrace doesn't end there, so what specifically went wrong?



    KSP_PostProcessing.KS3PUtil.GetBounds (UnityEngine.AnimationCurve curve)

This is my poor attempt to find the uppermost and lowermost bounds of the color grading curve. So, at the very end of our bizarre adventure into the realm of CPU-puke, we have the following source code:



        internal static Vector2 GetBounds(this AnimationCurve curve)
        {
            var frames = curve.keys;
            return new Vector2(frames[0].time, frames[frames.Length - 1].time);
        }

The error given here specifically was an IndexOutOfRangeException. In the first line, I retrieve all of the keys from the provided animation curve. If the error was there, it'd be a NullReferenceException. Next line we get something to do with indices:



frames[0].time
frames[frames.Length - 1].time

Behold, our culprit. This code is valid in every case but one: an animation curve that has no keyframes. Consequently the array is empty: it has no items. Element '0' is out of range. frames.Length returns 0, 0 - 1 = -1, and an array index of '-1' is gibberish. The fix is simple:



var frames = curve.keys; // grab the keyframes as an array of UnityEngine.Keyframe
if(frames.Length == 0)
{
	// Animation curve has no keyframes, return empty bounds.
}
else
{
	// Treat as normal, as both index '0' and index 'length - 1' are valid.
}

And is what I've just implemented, along with several other safety measures. Problem solved.

TL;DR:

Thank you for the thorough step-by-step on error interpretation! I always wondered how to read those!

By the way. Not sure if you’ve heard the news, but 1.8 is going to move KSP to a newer unity something, making dx11 baseline. Not sure if this impacts KS3P, other than no more pesky dx9 problems ;)  but I thought I’d mention it. 

Share this post


Link to post
Share on other sites

Hello everyone! I really like this mod. It's very sad that it not works on 1.7.3. So I recently made some additions to the source code and place a pull request on github. Now it's worked at least on my installation :)

@The White Guardian Please be so kind as to look towards on pull request and check it? Things concerning GUI and configs still be a little messy though...

I can make a some kind of beta for 1.7.3 and post a link here (if someone interested in) in order to check if it works not only on my configuration. Since this is my first post at forum (definitely not last) I'm not sure - would it be a violation of the license or some rules?

Anyway glad to be here! :)

Share this post


Link to post
Share on other sites
5 hours ago, clusta said:

Hello everyone! I really like this mod. It's very sad that it not works on 1.7.3. So I recently made some additions to the source code and place a pull request on github. Now it's worked at least on my installation :)

@The White Guardian Please be so kind as to look towards on pull request and check it? Things concerning GUI and configs still be a little messy though...

I can make a some kind of beta for 1.7.3 and post a link here (if someone interested in) in order to check if it works not only on my configuration. Since this is my first post at forum (definitely not last) I'm not sure - would it be a violation of the license or some rules?

Anyway glad to be here! :)

That is so strange. I just logged into my PC and was sitting here, thinking 'I really miss Kerbal Space Programme, ever since KS3P stopped working for me I havent played it". i came on to see if @The White Guardian had made any progress yet (i check once a week).

i truly do not know the rules about forking a programme. You arent taking over the mod (nor trying to) - infact you are helping those users of it who cant currently use it. Ive seen it happen in many mods where the owner went 'missing' for a few months and people posted links to versions that solved issues related to KPS version changes.

Anyhow, perhaps The White Guardian will reply and give you permission.  in the meantime, i would love to test your version.  Can you PM it to me whilst you wait or decide if you will post it here?

Thanks

Share this post


Link to post
Share on other sites

It depends on the license, but typically it is frowned upon in the community. Let's say your fork introduces new issues, how are the users supposed to know who to go to? You? The White Guardian? More than likely TWG because it will be impossible to know who's code is causing issues, which isn't fair to him to be expected to answer questions about issue related to someone else's fork. 

I'm not saying your code does have issues, but I have seen all too often on the forums bad forks and the developers of those bad forks do not stick around to help with bug squashing. 

There used to be an unspoken rule amongst modders about waiting 90 days to do something like that, but ultimately it depends on the license which should be in the mod somewhere. Check that before you do anything.

Share this post


Link to post
Share on other sites
6 minutes ago, Galileo said:

It depends on the license, but typically it is frowned upon in the community. Let's say your fork introduces new issues, how are the users supposed to know who to go to? You? The White Guardian? More than likely TWG because it will be impossible to know who's code is causing issues, which isn't fair to him to be expected to answer questions about issue related to someone else's fork.

That's why I post pull request on github with my changes to TWG. But I'm interesting in just testing that new additions. Can I just put a link to the compiled patched 'unofficial' DLL at my own fork? It's just a little help, few bugs fixed and some additions. Just wanna to test it in order to see if I missed something before TWG take a look at it. Again, that's TWG's mod, not mine :)

Share this post


Link to post
Share on other sites
25 minutes ago, clusta said:

That's why I post pull request on github with my changes to TWG. But I'm interesting in just testing that new additions. Can I just put a link to the compiled patched 'unofficial' DLL at my own fork? It's just a little help, few bugs fixed and some additions. Just wanna to test it in order to see if I missed something before TWG take a look at it. Again, that's TWG's mod, not mine :)

Yeah, I suppose if you only plan to post it on GitHub. I wouldn't post anything here until you get proper permission from TWG.

Share this post


Link to post
Share on other sites

Hi there, So I've given this mod a go again (last time was 3 years ago or something) and wow does it make the game look different!

https://imgur.com/a/Vk0WJHU

However, I'm trying to make a config for a mod I'm working on, but can't figure out how to use the exported txt file to get my settings to run in game.

I have spent the last two days looking everywhere (searched this whole topic, searched google etc and experimented my self for instructions on specifically what to do with the txt file but haven't found anything that works.

I tried renaming the expoted config settings txt to a .cfg, tried copying the contents to the default config, tried putting the txt next to the default config and tried changing the index values for the configuration file, but all of these either stop the mod running in game or simply just don't show my config in the GUI in game.

If someone could help me just letting me know exactly what to do with the exported .txt file in order to have this running in my game from start up I'd be very greatful!

As you can see the mods works fantastically in game, I just currently have to re input all my custom settings ever time I start up KSP.

Share this post


Link to post
Share on other sites
1 hour ago, Friznit said:

Importing custom configs doesn't work yet.  TWG is working on a fix.

ah ok, good to know, thanks

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.