Timberborn

Timberborn

Timberborn Workshop
Welcome to Timberborn's Steam Workshop! Enjoy the player-made maps created with the built-in map editor, or try the crazy mods engineered by our fantastic modding community.
Learn More
Mod Exception with U7 - but which mod is it?!
Hey everyone,
we all know that U7 did break most mods and the modders are all incredible in their diligent work to fix them.
Thank you at this point to all of you!

I wanted to see which mods are already working an booted TB again.
As expected, there were a few exceptions on start up, pointing to specific mods, which I disabled.

However, I now experience an Exception which I can no longer pin-point to a specific mod.
Has anyone of you an idea which mod this could be?

ReflectionTypeLoadException: Exception of type 'System.Reflection.ReflectionTypeLoadException' was thrown. Could not resolve type with token 01000075 from typeref (expected class 'Timberborn.Persistence.IObjectSerializer`1' in assembly 'Timberborn.Persistence, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null') assembly:Timberborn.Persistence, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null type:Timberborn.Persistence.IObjectSerializer`1 member:(null) Could not resolve type with token 01000075 from typeref (expected class 'Timberborn.Persistence.IObjectSerializer`1' in assembly 'Timberborn.Persistence, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null') assembly:Timberborn.Persistence, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null type:Timberborn.Persistence.IObjectSerializer`1 member:(null) Could not resolve type with token 01000075 from typeref (expected class 'Timberborn.Persistence.IObjectSerializer`1' in assembly 'Timberborn.Persistence, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null') assembly:Timberborn.Persistence, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null type:Timberborn.Persistence.IObjectSerializer`1 member:(null) at (wrapper managed-to-native) System.Reflection.Assembly.GetTypes(System.Reflection.Assembly,bool) at System.Reflection.Assembly.GetTypes () [0x00000] in <eb0ef51e5908461ca908fdf6b2dbd966>:0 at Timberborn.ModManagerScene.ModCodeStarter+<>c.<GetModStarters>b__8_0 (System.Reflection.Assembly assembly) [0x00000] in <8bbabb838fa247f7b7d16641f62b9274>:0
< >
Showing 1-8 of 8 comments
Sometimes you can tell in the first few lines, because it mentions the name.

You'll have to do binary search on this one.
Binary Search?
Eh. Found it by trial and error. It was SimpleFloodgateTriggers
Dammit! Now the game is loading into main menu, but when I try to start a new map, this happens:

Failed to create an exception game save due to exception: System.NullReferenceException: Object reference not set to an instance of an object at Timberborn.GameScene.GameSceneExceptionStateSaver.CreateExceptionSave () [0x00006] in <d8029858d5514aeaba0e1d4be2ab7904>:0 MissingMethodException: Method not found: Bindito.Core.IBindingBuilder`1<!!0> Bindito.Core.IContainerDefinition.Bind<!0>() at Bindito.Core.Internal.ContainerDefinition.Install (Bindito.Core.IConfigurator configurator) [0x00000] in <9765826a707a4a6f941136f0ac7facfc>:0 at (wrapper dynamic-method) MonoMod.Utils.DynamicMethodDefinition.Bindito.Core.Internal.ContainerDefinition.InstallAll_Patch1(Bindito.Core.Internal.ContainerDefinition,string) at Bindito.Unity.SceneConfigurator.Configure (Bindito.Core.IContainerDefinition containerDefinition) [0x0000f] in <fbe63ff45c424cd6bfa79834e5691c24>:0 at Bindito.Core.Internal.ConfiguratorRunner.RunConfigurators (System.Collections.Generic.IEnumerable`1[T] configurators) [0x0000f] in <9765826a707a4a6f941136f0ac7facfc>:0 at Bindito.Core.Internal.ContainerCreator.ConfigureContainer (Bindito.Core.IContainer container, System.Collections.Generic.IEnumerable`1[T] configurators, Bindito.Core.Internal.IBinder binder, Bindito.Core.Internal.IProvisionListenerNotifier provisionListenerNotifier, Bindito.Core.Internal.IInjectionListenerNotifier injectionListenerNotifier) [0x00021] in <9765826a707a4a6f941136f0ac7facfc>:0 at Bindito.Core.Internal.ContainerCreator.CreateContainer (System.Collections.Generic.IEnumerable`1[T] configurators) [0x000da] in <9765826a707a4a6f941136f0ac7facfc>:0 at Bindito.Core.Internal.ContainerCreator.CreateChildContainer (System.Collections.Generic.IEnumerable`1[T] configurators) [0x00024] in <9765826a707a4a6f941136f0ac7facfc>:0 at Bindito.Core.Internal.Container.CreateChildContainer (System.Collections.Generic.IEnumerable`1[T] configurators) [0x00000] in <9765826a707a4a6f941136f0ac7facfc>:0 at Bindito.Core.Internal.Container.CreateChildContainer (Bindito.Core.IConfigurator[] configurators) [0x00007] in <9765826a707a4a6f941136f0ac7facfc>:0 at Bindito.Unity.SceneConfigurator.CreateSceneContainer () [0x00011] in <fbe63ff45c424cd6bfa79834e5691c24>:0 at Bindito.Unity.SceneConfigurator.Awake () [0x00018] in <fbe63ff45c424cd6bfa79834e5691c24>:0
That's a secondary exception. It says that one of the error report files will be missing.

Binary search: disable half the mods. That eliminates half the mods as causes. Repeat, disabling a quarter.
Gods dammit. So again trial and error.

Thanks mate!
Draeconix 10 Mar @ 12:44pm 
I recently ran into a similarly frustrating issue when I was trying to determine which mods worked and which ones didn't after U7 Experimental released. Unfortunately, it is a lot of enable mod, try to boot the game, rinse and repeat. It would be nice if there was a way to easily tell which mod it failed on.

Part of my job requires me to do a fair bit of coding, nothing too complex but complex enough that traces and comments are an immense help. One of my techniques is to put statements in my code that indicate which part of code they are executing. For example "Starting Section A Now" and "Ending Section A" I place these statements in a manner such that if it makes it from one statement to the next, I am pretty confident that it made it through that section of code. Expanding on this technique, I will also display the values of variables when testing my code to make sure the values are what I expect. This is all a very long winded way to say that it would be nice if either there would be a way to have the mods load and indicate which mod the game was attempting to load in the error log or standard practice that mods indicate the mod name. It would make debugging a lot easier from an end user perspective.

Another quality of life improvement for debugging is a sort of test mode that could run through the initial mod load and let you know when a mod fails. It would let you repeat this process without having to reboot the game. If you have more than a handful of mods installed as I do, this would be a game changer.

While we are talking about quality of life improvements, is there any way to tell if a mod is U7 compatible aside from modders tagging U6 or U7 in the title? It would be nice to filter on this so users don't accidentally download a module that isn't compatible with the current update.

Finally, one technique that helped me sort out what mods were working and which ones weren't was to disable everything and then start by enabling the mods that most things are dependent on. Things like TimperAPI or Harmony for example. Once I saw which of those didn't work, I disabled them and then started enabling mods one by one. Anything that flagged as missing a dependency I left disabled. I still ran into some mods that didn't work but knowing that a prerequisite mod didn't work, eliminated whole groups of mods that I didn't need to even look at.
fyi: The "More Mod Logs" mod attempts to add additional context to make these sorts of breakages easier to root cause without having to binary search the mods you have installed.
< >
Showing 1-8 of 8 comments
Per page: 1530 50