This guide walks through the process of building a mod on top of Base Assets - Required FBProject. First and foremost, you do not need a separate module -- you can build a mod right on top of Base Assets, and it will be stand-alone with no dependency. I will walk through how Asari Cora - Brittany Mesh can be recreated to understand the process.

1. Open Base Assets - Required in Frosty Editor and save the project as a new file, Asari Cora - Brittany Mesh. Save often.

Internally, the same uses Cora and Pia to reference Cora's assets. Similary Jayde is used for Sara. Peebee and Lacey are used for Peebee.

2. In Frosty Editor Data Explorer pane, uncheck show only modified and then search for pia_dm. This is the dynamic morph for Cora and is usually linked to all assets needing modification. You will see amb_paperdoll_cora and appearance_head_cora listed. We will modify amb_paperdoll_cora and continue our search with
appearance_head_cora. Double click amb_paperdoll_cora to open it. We will revisit.

File you should modify will generally have Cora, ally, squad, or preset in the name. If you are unsure if you should modify a file, you can right click on the file and select Find in data explorer. You will then see a list of reference to that file. Ignoring mesh variation database entries, if the list is small or indicates association with Cora, then it is not likely shared with other NPCs. Therefore safe and necessary to modify.

3. Right click appearance_head_cora. and select Find in data explorer. We will modify all of these files, so double click to open these assets. We will revisit.

We will not reuse appearance_head_cora, even though it is not shared with other NPCs. As SimpleHeadItemData, the asset is suppressed by Cora's paperdoll blueprint. Paperdoll is the model that displays in the UI, such as squad selection menu. We will use a SimpleApperanceItemData asset to override this suppression. There is likely a probably a more elegant way of finding the event, property, interface, or link causing the suppression and modifying that instead.

4. Go back to amb_paperdoll_cora. Click on Objects to expand. Click on Components to expand. Click on 0 to expand. This is SoldierBodyComponentData. Click on Components to expand. There are 3 items to look for: MEAppearanceComponentData, CharacterMorphHeadComponentData, and FaceFXPlayerData. CharacterMorpHeadComponentData causes the suppression. MEAppearanceComponentData is armor, clothing, head, and hair. FaceFXPlayerData is head shape.

If you export amb_paperdoll_cora to XML and search for CharacterMorphHeadComponentData, then you will uncover that LinkConnections Index 13 is what links this asset to the UI image. We will break this link and substitute with a SimpleAppearanceItemData.

5. Expand LinkConnections. Expand Index 13. Click on the 3 dots to the right of CharacterMorphHeadComponentData and select Clear assigned object. The data field should read null.

We will not create our SimpleAppearaanceItemData asset. I prefer to use Gear Items for this purpose.

6. Navigate to game/items/gear/head/appearances/. Scroll down until you see appearance_helmet_andromeda_01. Right click this asset and select Duplicate. We will name the new asset appearanceitem_head_cora_mesh. Double click the new asset to open it. Click on View Instances in the menu bar, next to Launch. Delete the ItemMeshMaterialVariation entries by selecting the entries then selecting Delete Instance. Close the window by selecting Cancel.

Ensure appearanceitem_head_cora_mesh is selected and click Bundles to the right of the window. You will see 4 bundles listed. We want to keep mastersharedbundle and get rid of the rest.

7. Go to the View menu and select Bundle Editor. In Bundle Editor, select Blueprint Bundles and type mws_lc_0 in the search. Ensure appearanceitem_head_cora is still selected then select each bundle and click Remove Added Bundle in the window to the right. You can verify success by clicking on References then clicking on Bundles to refresh.

We will now make the asset fit a head slot vice helmet slot and change culltags accordingly. We will also delete uneeded references.

8. Delete TracedLayerHashes by clicking the X to right of it. Delete the number in VariationHash.

9 Duplicate appearanceitem_head_cora. Name it appearanceitem_hlm_cora_mesh. We will come back to it.

10. In Data Explorer, search slot_head. Expand Game/Appearance/Slots/. Select slot_head. In the tabs above Data Explorer, select appearanceitem_head_cora_mesh. Click the arror next to Slot_Helmet, which should change the entry to slot_head.

11. In Data Explorer, search culltag_head. Expand game/appearance/culltags/. Select culltag_head. Go back to appearance_head_cora_mesh and expand IncludeTags. Click the arrow next to culltag_helmet, which should change the entry to culltag_head.

12. In Data Explorer, search culltag_skullcap. Expand game/appearance/culltags/. Select culltag_skullcap. Go back to appearance_head_cora_mesh and expand ExcludeTags. Click the + to add Index 1. Click the arrow next to Index 1 null, replacing it with culltag_skullcap.

We will now associate the asset with Cora's mesh in Base Assets. You need to know that the bundle holding the asset, which is game/ai/bundles/blueprintbundle_out_sab_asa, and the mesh, which is game/characters/asari/asa/0_heads/asa_hed_b(brittany)/hmf_asa_head_cora_skinned_mesh.

13. Go back to appearance_head_cora_mesh and expand BlueprintBundleRefAssetNamePairs. Delete Index 1 by clicking the X. Expand Index 0 then expand BlueprintBundleRef.

14. Replace the path under BlueprintBundleReference with game/ai/bundles/blueprintbundle_out_sab_asa. This information can be found by opening the game/levels/rootlevel/rootlevel/description asset. Expand SuperBundles and go the last entry, Index 33. Copy and paste this entry.

15. Replace the path under BlueprintBundleRefAssetNamePair with game/characters/asari/asa/0_heads/asa_hed_b(brittany)/hmf_asa_head_cora_skinned_mesh. The mesh can be found from the asset. Search head_cora and expand game/characters/asari/asa/0_heads/asa_hed_b(brittany). Double click hmf_asa_head_cora_skinned_mesh to open it. At the top right, under Annotations, click in the Name window and hit ctrl-a to select all. Paste this entry.

We also need to setup Cora's helmet to be an Asari breather. We will do so while in this workflow. Similarly to the above, we will use game/characters/asari/asa/0_helmets/asa_hlm_a/model/asa_hlm_a_model_mesh as the mesh and game/conversations/crit/crit_vlt/crit_vlt_0110_gravity_falling_a.perf__bundle. The mesh is used because Peebee's Asari breather will clip on Brittany's head. The bundle is the smallest bundle I could find, which should minimize load times. To find it, I selected the mesh and opened the various mesh variation databases with bundle in the file path to find the smallest one.

16. Go back to appearanceitem_hlm_cora_mesh. Similarly to above, expand BlueprintBundleRefAssetNamePairs. Delete Index 1 by clicking the X. Expand Index 0 then expand BlueprintBundleRef.

17. Replace the path under BlueprintBundleReference with game/conversations/crit/crit_vlt/crit_vlt_0110_gravity_falling_a.perf__bundle.

18. Replace the path under BlueprintBundleRefAssetNamePair with game/characters/asari/asa/0_helmets/asa_hlm_a/model/asa_hlm_a_model_mesh. Similarly to above, this can be copied and pasted from the mesh asset.

19. Search Data Explorer for helmet_cora. Expand Game/AI/Cora/ and open Helmet_Cora_Appearance.

20. Search Data Explorer for hlm_cora and expand game/items/gear/head/appearances/. Select appearanceitem_hlm_cora_mesh. Go back to Helmet_Cora_Appearance and click the arrow next to Appearance Helmet_Cora_SimpleAppearanceItem, replacing it with appearanceitem_hlm_cora_mesh.

We now change Cora's MESoldierBlueprints and AppearancePresets to Asari assets.

21. Search for head_cora in Data Explorer and select appearanceitem_head_cora_mesh in game/items/gear/head/appearances/. Go back to cora_casual_preset. Expand Items. Expand Index 1. Click the arrow next to Item appearance_head_cora, which should change to appearanceitem_head_cora_mesh.

22. Repeat the above for cora_nkd_preset and cora_preset.

23. Go back to amb_paperdoll_cora. Expand Index 6, MEAppearanceComponentData. Expand DefaultItems. Click on the arrow next to Index 0 null, which should change to appearanceitem_head_cora_mesh.

24. Repeat this process for npc_combatally_cora and npc_sqd_cora, respectively Index 6 and Index 8. Except, you are clicking the arrow next to appearance_head_cora, replacing it with apperanceitem_head_cora_mesh.

We now change Cora's head morph, which will include the above MESoldierBlueprints and some AssetTemplates.

25. Search hmf_pia, expanding Game/characters/FaceFX/HMF/. Open all the references except the npc_out_gue_hmf and npc_out_mar_hmf references.

26. Search asa_brittany, expanding Game/Characters/FaceFX/ASA/. Select ASA_Brittany. Go back to ambtemplate_global_cora_casual. Expand Components. Expand Index 0. Expand Template. Click the arrow next to FaceFXFile HMF_Pia, replacing it with ASA_Brittany.

27. Go back to all the other open ambtemplates and repeat the above. You can verify by finding and reselecting HMF_Pia in data explorer. There should be no ambtemplates listed.

28. Go back to amb_paperdoll_cora.  Expand Index 10 FaceFXPlayerData. Make sure ASA_Brittany is selected in Data Explorer and then click the arrow next to FaceFXFile HMF Pia, replacing ith with ASA_Brittany.

29. Do the same for npc_combatally_cora and npc_sqd_cora. Indexes 20 and 22 respectively.

We need to replace Cora's body texture with a texture that matches her head texture. Body texture asset: Game/Characters/Human/HMF/0_Armors/HMF_ARM_NKDa/Textures/HMF_ARM_NKDa_Pia_Diff. Head texture asset: game/characters/asari/asa/0_Heads/ASA_HED_B(Brittany)/Textures/ASA_HED_B_Pia_Diff. You can create your own or export the images from the author's FBproject file. The head texture is part of Base Assets, since it is a new asset associated with the mesh.

30. In Data Explorer, search hmf_arm_nkda_pia, expanding Game/Characters/Human/HMF/0_Armors/HMF_ARM_NKDa/Textures. Open HMF_ARM_NKDa_Pia_Diff.

31. Click on Import on the menu bar. Select the new body texture file from File Explorer.

Lastly, we replace Cora's squad images used in the load out UI. You can create your own squad images or export the images from the author's FBproject file.

32. In Data Explorer, search squadcora, expanding Game/UI/LoadOut/SquadImages/. Open SquadCora, SquadCora_Locked, and SquadCora_Selected.

33. Go back to SquadCora and click Import on the menu bar. Select the associated squad image file from File Explorer. Repeat for the other squad images.

34. Save your finished mod. Congratulations!

If you launched Frosty Editor as an Administrator, then you can click the Launch button to preview your mod in game. Otherwise, export the mod from Frosty Editor and import to Frosty Mod Manager in the usual manner.

If you would like to make the mod dependent on Base Assets - Required, then right click on the following assets and select Revert:

game/ai/bundles/blueprintbundle_out_sab_asa/MeshVariationDb_Win32
game/characters/asari/asa/0_heads/asa_hed_b(brittany)/hmf_asa_head_jayde_skinned_mesh
game/characters/asari/asa/0_heads/asa_hed_b(brittany)/hmf_asa_head_peebee_skinned_mesh
game/characters/asari/asa/0_Heads/ASA_HED_B(Brittany)/Textures/ASA_HED_B_Jayde_Diff
game/characters/asari/asa/0_Heads/ASA_HED_B(Brittany)/Textures/ASA_HED_B_Lacey_Diff
Game/Characters/Asari/ASA/0_Heads/ASA_HED_B_Brittany/Textures/ASA_HED_B_TattooB_Mask
game/levels/rootlevel/rootlevel/description

This will avoid last file conflicts, making the mod more modular and compatible with other Base Asset mods that did the same.

Article information

Added on

Edited on

Written by

supersaud

0 comments