Total Conflict: Resistance

Total Conflict: Resistance

35 ratings
Creating Mods for the Steam Workshop
By |PLayeR|№1 and 2 collaborators
This is a guide for creating mods for the Steam Workshop. The Workshop in Total Conflict: Resistance is currently in alpha version. At present, to create mods, basic skills in Unreal Engine and any 3D editor are required.
3
2
   
Award
Favorite
Favorited
Unfavorite
Preparing
For the mod system, we use UE pak files. You have 2 ways to create a modification.
The first option: You can use a simplified mod system, create a Json file or copy it from the plugin folder.
\TotalConflictWorkshop\Content\Data\SimpleModTemplates\


Next, fill it out and upload it to Steam. This method allows you to create only certain modifications. Below we will consider an example for a faction mod.
The second option: You can use Unreal Engine to create mods. This method is more complex but allows you to create any of the available modifications.

To begin, you will need to create an empty project in Unreal Engine 4.27.
Here are some links that may be useful to you:
https://docs.unrealengine.com/4.27/en-US/Basics/InstallingUnrealEngine/
https://docs.unrealengine.com/4.27/en-US/Basics/Projects/Browser/
Before continuing, you need to change a few settings in the project.
• Go to Edit -> Project Settings
• Disable "Share Material Shader Code"
• Disable "Use Io Store"

Next, we need to create a plugin, which will be our mod.

• Edit -> Plugins


• Click on “New Plugin”


• Select “Content Only”.
• Enter a name for the plugin (for example, let's call it "AKMSGold").
• Enter author, description, etc.
• Finally click Create Plugin.

P.S. There is currently a problem where two or more plugins with the same name will not work. Therefore, it's better to add some kind of ID to the plugin name, for example, a Steam user ID. This way, your plugin will always have a unique name (e.g., AKMSGold_41697085).
Adding additional content
To create mods, you will need additional content. We have placed everything necessary in the plugin (from now on, for convenience, we will call it TCW)

You can download the plugin from the SDK or find it in the steam project folder.

Copy the plugin “TotalConflictWorkshop” in to this folder “Plugins” of your project in UE.
If it does not exist, create a new one.

Or /Steam/steamapps/common/Total Conflict Resistance/Workshop/.

Result:


If the plugin hasn't appeared, check your content display settings.
Content Browser -> View Options -> Show Plugin Content.


P.S. Do not modify the contents of the added plugin. It should match the one in the game. Also, the plugin content may change or expand, so don't forget to update it in your project.

Creating Mod (Part #1)
So, now we have a new project, a created plugin, and a plugin with additional content. Now we can proceed to create the mod. The project itself simply combines all the content, while the development takes place inside the previously created plugin. In our example, this is "AKMSGold".

Creating a coloring
• Create textures in any 3D editor and import them into the Unreal Engine plugin. (Textures, such as Normal maps, can be found in TCW or you can create your own)
https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Textures/Importing/
• Create all necessary materials inside the plugin.
https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Materials/
Also, be sure to set "Used with Skeletal Mesh" to "True" in the material, otherwise the in-game coloring will not work.


• Create a Data Asset based on (note: "BP_WeaponColoring"), and name it "DA_AKMS_Gold" (see Creating).
• Next, fill in the basic parameters of "DA_AKMS_Gold" (see Populating).
• Finally, add the previously created materials in the order they should be applied to the model. If you want to use a material from the game (e.g., glass material for vehicles), simply leave the array element empty.
• Next, we can proceed to packaging the mod (see Packaging mod).

Creating a model
• Create a model and textures (see Creating a coloring) for it in any 3D editor. If you want to make a skeletal mesh, use assets of the “Skeleton” type found in TCW.
• Import your content into UE (for skeletal mesh, select the skeleton from TCW).
Static mesh: Link #1[docs.unrealengine.com]
Skeletal mesh: Link #2[docs.unrealengine.com]
• Create a Data Asset based on the base class with the suffix “Model” (see Creating).
• Populate it (see Populating).
• Fill in the additional fields.
• Next, we can proceed to packaging the mod (see Packaging mod).

Creating a level
• Create a new level or use one of the biomes in TCW.
https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/LDQuickStart/
• Set up the lighting.
https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/LightingAndShadows/
• Set up navigation.
https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/NavigationSystem/BasicNavigation/
• Place the BP_DangerZone actor around the perimeter. It warns and eventually destroys the player who goes out of bounds.
• Set up the environment in the level (trees, houses, fog, etc.).
At this stage, our level should be visually ready, but the game won't be able to interact with it yet. To fix this, we'll use tags. Enter the word "tag" in the search on the details panel for any actor and add the tags you need to the array.
In this example, the Target Point has been assigned the PlayerSpawnPoint tag, which is responsible for the player's location.


• Place actors throughout the map and set tags for them. Next, we'll look at examples for Target Point, but you can use absolutely any actors, as long as they are either within the created plugin or are default in UE.
Target point can be found in Place Actors -> All Classes -> Target Point.
Table of tags for the level:
Name
Description
1
PlayerSpawnPoint
Sets the player's spawn point.
2
EnemySpawnPoint
Sets the enemy's spawn point.
3
VehicleSpawnPoint(n)
Sets the spawn point for vehicles. The number in parentheses (starting from 1) is used for grouping squads. For example, for the player we enter VehicleSpawnPoint(1), and for the enemy VehicleSpawnPoint(2).
4
AttackDirectionPoint
Sets the direction of attack.
5
SoldierDefensivePosition
Sets the point where a soldier will take a defensive position. Used when one side starts in defense.
6
VehicleDefensivePosition
Sets the point where a vehicle will take a defensive position. Used when one side starts in defense.
7
DefensiveBuilding
Indicates that this actor is a defensive building and soldiers can take positions in it. Inside this actor, you need to place Target Points with tag #5.
8
SquadIndex(n)
A tag that forcibly sets the squad number for tag #3. By default, squads will appear in the order in which Target Points were added to the scene. Starts with SquadIndex(0).
9
SittingPosition
A tag that sets the sitting position for a soldier. Used together with tag #5.
10
LyingPosition
A tag that sets the prone position for a soldier. Used together with tag #5.
11
TakeCover
A tag that tells a soldier to take cover. Used together with tag #5.

• And the final stage, as with any other mod, we need to populate the Data Asset. Levels have 2 key Data Assets. These are Level and LevelContext. The first one collects all the data about the level, including the "Primary" tag. LevelContext sets additional data that needs to be included in the level. They have the prefix "BP_Context" in their name.

So, to begin with, let's set the game difficulty and time of day (which will correspond to your level) in BP_Context_LevelSettings.


Next, if we want to add destructible objects, they need to be entered into BP_Context_Destruction. Before that, create everything necessary (sounds and effects can be skipped, then the default ones will be used). For destructions, we use the 'Apex Destruction' plugin, which should be enabled automatically for you, but if this hasn't happened, add it in the plugins.


Next, we need to fill in the data for the player and the enemy. Use BP_Context_HqSettings for this. Select the team, side, and set the faction for them, as well as the squads. Do this for both teams.


And the final step, fill in the level data.

• Next, we can proceed to packaging the mod (see Packaging Mod).
Creating Mod (Part #2)
Creating a faction
Option for a Json-based Mod:
• Create or copy a Json file (SimpleMod_Faction.json).
• Fill in the basic parameters and settings for the faction.
• Upload the json file and additional content (e.g., images for the faction) to Steam.
КАРТИНКИ



Option for a Data Asset-based Mod:
• Create flag and portrait images for the faction.
• Create a Data Asset based on BP_FactionData (see Creating).
• Fill in the basic parameters (see Populating).
• Fill in the fields for the faction. Insert images, enter a name, and choose a color.

• Next, we can proceed to packaging the mod (see Packaging Mod).

Creating Settings
• Create a Data Asset based on BP_”type of settings”SettingsData (see Creating).
Let’s consider the example of game speed settings by creating BP_GameSpeedSettingsData.
• Fill in the basic parameters (see Populating).
• Set the desired coefficients.

• Next, we can proceed to packaging the mod (see Mod Packaging).

P.S. Similarly, other settings are created, for example, for weapons it is necessary to create a Data Asset based on BP_WeaponSettingsData.


Packaging mod
After we've added the content and created the mod, we can proceed to packaging it. To do this, we'll need to create several profiles in the Project Launcher. First, we'll add a profile for the project itself (without it, the plugin can't be packaged), and then we'll add a profile specifically for the plugin (in our case, the mod).

So, let's get started:
• First, you need to create a level if you don't have any in your project (in our example, it's EmptyLevel).
File -> Save Current As... or Ctrl + Shift + S
Enter a name, choose the location, and click save
• Open the Project Launcher.


• Click the "+" in the bottom right corner and add a new profile.


• Set all parameters as shown in the images below.
Make sure to select any level from your project.






The profile for the game is ready, now we need to create a similar profile for the plugin.
• Add a new profile, but set the following parameters.




In the field where you need to enter the DLC name, specify the name of your created plugin. In our example, this is "AKMSGold".
Thus, we have two profiles. The first is for the project, and the second is for our mod.
• Next, run them in the following order. First, the project, then the mod.


If you've done everything correctly, it should build without errors. We're only interested in the pak file of the packaged plugin.

It is located in the following directory path:
/ModCreator/Plugins/AKMSGold/Saved/StagedBuilds/WindowsNoEditor/ModCreator/Plugins/ AKMSGold/Content/Paks/WindowsNoEditor/AKMSGoldModCreator-WindowsNoEditor.pak


This is just an example of what the path to the pak file will look like.
You can give the pak file any name you want. For example, we'll call it "AKMSGold.pak".
Uploading mod
After you have packaged your mod, you can proceed to upload it to the Steam Workshop. It is uploaded directly from the game.

• Launch TotalConflict:Resistance.
• Go to the workshop.
• Then the mod editor.
• Next, click the create button. After that, an empty item will appear on the Steam page.
• Enter data for the mod (see Editor Table).


When you fill in the fields you are interested in, click the "Apply" button. The previously created mod should update in the Steam Workshop.
Result:


You can manage some mod functions from the Steam app or web version. But some functions, such as uploading a mod or previewing, require using the in-game editor.
Help
Data Asset
Creation
You can create a Data Asset based on the base classes provided in TCW.




Populating
• Copy and paste the line from the table located in TCW (see Parameter Table).
• Add tags (e.g. "Primary", see Tag Table)


P.S. You can skip some fields if you don't want to use them. Then the default parameters will be used in the game (note: "Icon" parameter, see Weapon Coloring).

Editor Table
Name
Description
Title
The name of the mod that will be displayed on Steam
Description
Description of the mod
Visibility
Sets the visibility of the mod for other players
Type
Sets the type of mod
Tag
Sets additional data to the mod type
Preview Path
Enter a path or select a preview for the mod
Content Path
Enter the path or select a folder with content

Parameter Table
Name
Description
RowName
Allows setting a string from the table in TCW
Tags
Allows adding tags

Tag Table
Name
Description
Primary
Indicates that this Data Asset will be the main one. As soon as a Data Asset with this tag is found, the search will be interrupted. Which means, there can only be one Data Asset with this tag in a mod.

Image Size Table
Name
Size
Format
Weapon
256 x 256
.png
Vehicle
256 x 256
.png
Level
512 x 512
.jpg
Faction flag
230 x 150
.jpg
Faction leader
210 x 290
.png
Examples
Weapon Coloring
Example of a Golden Skin for the AKMS:


Vehicle Coloring
Example of a white and desert camouflage pattern for the Humvee:


Note, the "Primary" tag is set only in the main Data Asset!
19 Comments
rocco Apr 9 @ 4:39am 
I also can't figure out what to do with the JSON files. Do they also need to be converted to a .pak file?
Mocraz Mar 29 @ 1:15pm 
Very poorly explained, nothing is understood, now I understand why I don't see mods for this game in the workshop, many games are mod-friendly but this one clearly doesn't care.
CZ2128D Feb 5 @ 5:14pm 
Where to place the json for the game to recognize it?
Also do we have default value for all weapons and vehicle in json? I only see one UMP45.
Thunder  [developer] Jan 22 @ 8:48am 
In beta test branch.
Thunder  [developer] Jan 22 @ 8:48am 
The SDK has been updated and is now located in the game folder (Workshop).
Fel-X Jan 15 @ 11:07am 
i can't find BP_GameSpeedSettingsData in SDK
peter34513 Dec 27, 2024 @ 12:51am 
i can't find BP_GameSpeedSettingsData in SDK
Echo Charly21 Dec 24, 2024 @ 7:04pm 
literally any unreal version is fine for me but 4.27, my pc just absolutely dies when i start up a blank project
toxic_timmeeeeeeee Sep 15, 2024 @ 5:49am 
I cant find the packages with the Plugin. It is not on Steam and not in the Game Files.