Warhammer 40,000: Rogue Trader

Warhammer 40,000: Rogue Trader

Warhammer 40,000: Rogue Trader Worskhop
Explore other users' modes. Subscribe so you don't miss new content!
Learn More
Blueprint mods are broken?
I'm following the modding guide and am trying to change some cue and answer blueprints, but

1. blueprint editor doesn't support overrides for half the fields
2. blueprint editor doesn't support creating inherited copies (though you can make them manually)
3. if I try to manually craft a patch, it doesn't seem to be applied (I tried the new and old syntax)
4. if you try to replace the whole existing blueprint (just copy/paste the whole cue/answer blueprint and change it), the game will hang at 40% loading, with exception in player.log about trying to insert the item with the same guid in the dictionary
5. if you change the assetId to unique guid, the replacement blueprint won't be applied

so, at the end of the day, current official modding support is kinda broken
Last edited by 13xforever; 2 Jan @ 6:28am
< >
Showing 1-5 of 5 comments
If you try to use new jbp_patch format, you have two issues:
1. the example patches only have FieldOverrides and ArrayPatches, but these will throw an exception, you actually also need to have empty ComponentsPatches as well
2. you can't patch some fields (probably the same fields that you can't override in the blueprint editor), you get an exception like this:

System.ArgumentException: Object of type 'System.String' cannot be converted to type 'Kingmaker.ElementsSystem.ConditionsChecker'. at System.RuntimeType.CheckValue(System.Object,System.Reflection.Binder,System.Globalization.CultureInfo,System.Reflection.BindingFlags) (in :0) at System.Reflection.RuntimeFieldInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) (in :0) at System.Reflection.FieldInfo.SetValue(System.Object,System.Object) (in :0) at Code.GameCore.Blueprints.BlueprintPatcher.BlueprintFieldOverrideOperation.Apply(Kingmaker.Blueprints.SimpleBlueprint) (in :0) at Code.GameCore.Blueprints.BlueprintPatcher.BlueprintPatcher.TryPatchBlueprint(Code.GameCore.Blueprints.BlueprintPatcher.BlueprintPatch,Kingmaker.Blueprints.SimpleBlueprint,System.String) (in :0)

(I tried using serialized json and plain object as the FieldValue in the patch, both fail to be converted)

e.g.
{ "TargetGuid": "a903589840ba4ab683d6e6b9f985d458", "FieldOverrides": [ { "FieldValue": "{\"Operation\":\"And\",\"Conditions\":[]}", "FieldName": "Conditions" } ], "ArrayPatches": [], "ComponentsPatches": [] }
or
{ "TargetGuid": "a903589840ba4ab683d6e6b9f985d458", "FieldOverrides": [ { "FieldValue": { "Operation": "And", "Conditions": [] }, "FieldName": "Conditions" } ], "ArrayPatches": [], "ComponentsPatches": [] }
ADDB 2 Jan @ 7:09am 
The modding tool indeed has some issues currently. There are a few known problems already, but I’ll forward this just in case.
Last edited by ADDB; 2 Jan @ 7:43am
When using the old patch format, it doesn't seem to be applied as expected. There are no errors in gamelogfull.txt, only the message that patch was applied (also, you have to use .jbp_patch extension instead of .patch like described in the modding readme).

[02.01.2024 20:14:12:520 - Mods][Message]: Patching blueprint: Cue_24 (a903589840ba4ab683d6e6b9f985d458)

for this patch:
{ "_#Entries": [ { "_#ArrayMergeSettings": "Replace", "Conditions": { "Operation": "And", "Conditions": [] } } ] }
Last edited by 13xforever; 2 Jan @ 9:03am
And finally when you try to replace the whole bluepring, you get this in player.log:
ArgumentException: An item with the same key has already been added. Key: a903589840ba4ab683d6e6b9f985d458 at System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) [0x0015a] in <b89873cb176e44a995a4781c7487d410>:0 at System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) [0x00000] in <b89873cb176e44a995a4781c7487d410>:0 at Kingmaker.Blueprints.JsonSystem.BlueprintsCache.Init (Kingmaker.Blueprints.JsonSystem.EditorDatabase.ResourceReplacementProvider.IResourceReplacementProvider resourceReplacementProvider) [0x0007b] in <caf9fb7a52a448fe9cfec15ad00c2f36>:0 at Kingmaker.Blueprints.JsonSystem.StartGameLoader.LoadPackTOC (Kingmaker.Blueprints.JsonSystem.EditorDatabase.ResourceReplacementProvider.IResourceReplacementProvider resourceReplacementProvider) [0x00000] in <caf9fb7a52a448fe9cfec15ad00c2f36>:0 at Kingmaker.GameStarter+<StartGameCoroutine>d__26.MoveNext () [0x00230] in <565daa4c3d1c4acf9e5e67b0a660585c>:0 at UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) [0x00026] in <a8fc136049044b19982b5abcb6f6b426>:0
I've implemented the same changes through UMM, it took considerably less time 😹

But I really wish the normal blueprint patch/replacement system was more generic and better supported, as I think it's cleaner and more approachable for normal people.
< >
Showing 1-5 of 5 comments
Per page: 1530 50