Modding:Dependencies
What is a Dependency?
A dependency when it comes to the game or modding is to tell the game that your pak depends on something from the referenced pak. So when we want to reference an asset from a defined pak say from the SharedDev.pak and we make our pak and the asset doesn't show, well if we were to make our mod have the dependency of the SharedDev.pak it will tell the game that is where some of the assets referenced are coming from.
Why do we want to use Dependencies?
So if we make a head mod that references a vanilla ID and the head shows up checkered we can fix that "bug" by making our mod dependent on the pak that material comes from. This way we don't have to copy and paste MaterialBanks/TextureBanks from the game files to fix these "bugs."
Or if we want to make a class mod and want to add an ability from another mod, after getting permission we would make our mod dependent on that mod. That way when both are installed our class mod would be able to use that ability without having to actually include it in our mod itself.
Example
In this extract from the games GustavDev meta this is saying the GustavDev pak is dependent on the SharedDev pak and the Gustav pak
Adding Dependencies to Mod Paks
So using the example above the image below expands upon that and shows what lines are used from the original pak to make the dependencies section. You may need to open the image to see it in its full size.
As code you can copy into your meta for a base. Copy this over the <node id="Dependencies"> line.
<node id="Dependencies"> <children> <node id="ModuleShortDesc"> <attribute id="Folder" type="LSString" value="SharedDev"/> <attribute id="MD5" type="LSString" value=""/> <attribute id="Name" type="LSString" value="SharedDev"/> <attribute id="UUID" type="FixedString" value="3d0c5ff8-c95d-c907-ff3e-34b204f1c630"/> <attribute id="Version64" type="int64" value="36028797022722506"/> </node> </children> </node>
So let's break down these lines one by one;
This is the blue (1) line from the image. This needs to match the "Folder" line from the meta of the pak our mod is dependent on.
<attribute id="Folder" type="LSString" value="SharedDev"/>
Laughingleader explained to me that this line is best with a null value so change to "" if it has a value inside.
<attribute id="MD5" type="LSString" value=""/>
This is the yellow (2) line from the image. This needs to match the "Name" line from the meta of the pak our mod is dependent on.
<attribute id="Name" type="LSString" value="SharedDev"/>
This is the green (3) line from the image. This needs to match the "UUID" line from the meta of the pak our mod is dependent on.
<attribute id="UUID" type="FixedString" value="3d0c5ff8-c95d-c907-ff3e-34b204f1c630"/>
This is the pink (4) line from the image. This needs to match the "Version64" line from the meta of the pak our mod is dependent on. However if the game updates and there is a new version of this file then you want the latest "Version64" value. This is to guartentee it is loading the latest version of the asset your mod is dependent on.
<attribute id="Version64" type="int64" value="36028797022722506"/>
Vanilla Dependencies
If you wish to make sure your mod is loading assets from the vanilla paks correctly you can make them dependent on the below paks.
Shared
<node id="ModuleShortDesc"> <attribute id="Folder" type="LSString" value="Shared"/> <attribute id="MD5" type="LSString" value=""/> <attribute id="Name" type="LSString" value="Shared"/> <attribute id="UUID" type="FixedString" value="ed539163-bb70-431b-96a7-f5b2eda5376b"/> <attribute id="Version64" type="int64" value="36029297386049870"/> </node>
SharedDev
<node id="ModuleShortDesc"> <attribute id="Folder" type="LSString" value="SharedDev"/> <attribute id="MD5" type="LSString" value=""/> <attribute id="Name" type="LSString" value="SharedDev"/> <attribute id="UUID" type="FixedString" value="3d0c5ff8-c95d-c907-ff3e-34b204f1c630"/> <attribute id="Version64" type="int64" value="36028797022722506"/> </node>
Gustav
<node id="ModuleShortDesc"> <attribute id="Folder" type="LSString" value="Gustav"/> <attribute id="MD5" type="LSString" value=""/> <attribute id="Name" type="LSString" value="Gustav"/> <attribute id="UUID" type="FixedString" value="991c9c7a-fb80-40cb-8f0d-b92d4e80e9b1"/> <attribute id="Version64" type="int64" value="36029301681017806"/> </node>
GustavDev
<node id="ModuleShortDesc"> <attribute id="Folder" type="LSString" value="GustavDev"/> <attribute id="MD5" type="LSString" value=""/> <attribute id="Name" type="LSString" value="GustavDev"/> <attribute id="UUID" type="FixedString" value="28ac9ce2-2aba-8cda-b3b5-6e922f71b6b8"/> <attribute id="Version64" type="int64" value="144255927711717104"/> </node>