Professional Documents
Culture Documents
1
Contents
Revision History 8
1. Introduction 12
2. Installation and First Launch 12
3. UI Overview 13
3.1. Toolbar buttons 14
3.2. Camera Controls 18
3.3. Typical Brush dialog 18
3.4. Selection of Multiple Objects 19
3.5. Groups & Copying Them Between Maps 20
3.6. Typical Context Menu 22
3.7. Main Menu 25
3.8. Snapping panel 25
4. File Paths and Naming 28
4.1. File Paths 28
4.2. Naming conventions 29
5. Creation of a Map 30
5.1. Creation of a Terrain 31
5.1.1. Terrain Properties 33
5.1.2. Scene Properties 36
5.2. "Geometry" Brushes for Terrain 36
5.2.0. Context menu of the “Geometry” section 38
5.2.0.1. Copy Source Heightmap: Creation of Terrain by Third-Party Tool 38
5.2.0.2. Create Water Heightmap: Useful Map of Water Surfaces 39
5.2.0.3. Create Default Flowmap: Default Map of the Flow for River Objects 39
5.2.0.4. Restore version "mud" from "data.stg": Restoring Mud Data 39
5.2.0.5. Create Ref Merge Map: Creation of a Mask for Merging a Reference 39
5.2.1. Colorization 40
5.2.2. Wetness 41
5.2.3. Mud 41
5.2.4. Quick Mud 43
5.2.5. Water 44
5.2.6. Water Mud 45
2
5.2.7. Snow 46
5.2.8. RefMergeMask (only for References) 47
5.3. Assigning PBR Materials to Terrain 48
5.3.1. Material properties 50
5.3.2. Custom Materials 52
5.4. Adding Snow and Ice 54
5.4.1. Breakable Ice 55
5.5. Adding Models 57
5.5.1. Recommendations for models 59
5.5.2. Types of models. Their behavior and collisions 59
5.5.3. Interesting Models: Creatures, People, etc. 63
5.6. Adding Plants 66
5.7. Adding Multiple Objects via Distribution 68
5.7.1. Recommendations for painting with Distributions 71
5.7.2. Custom Brushes 71
5.8. Adding Overlays 75
5.8.1. Important Limitation: “1 road type per terrain block” 77
5.8.2. “Flatten”: Flattening roads 78
5.8.3. “ApplyOffset”: Adding ruts and bumps 78
5.8.4. “Brushes”: Adding Lampposts 79
5.8.5. Wires: Adding and connecting them 80
5.8.6. Recommendations for overlays 81
5.8.7. Custom overlays 81
5.8.8. Invisible overlays 81
5.9. Adding Rivers and Water Objects 83
5.9.1. Important Limitation and Recommendations for Rivers 88
5.9.2. Adding River Sounds via “RiverMarkup” 89
5.9.3. Background Water: Adding It on the Edges of the Map 91
5.10. Adding References 94
5.10.1. Reference properties 98
5.10.2. RefMergeMask brush 99
5.10.3. Usage of Mutators 102
5.10.4. Recommendations for the references 105
3
5.10.5. Set of In-Game References Provided with the Editor 106
5.11. Adding Trucks 108
5.11.1. How to identify IDs of truck parts 110
5.11.2. Allowing player to purchase trucks from all countries 112
5.11.3. Custom Trucks 112
5.12. Adding Sounds 113
5.12.1. Adding Series of Sounds 115
5.12.2. Adding Custom Sound Files 116
5.13. Adding Sound Domains 117
5.13.1. SoundDomain Properties 119
5.13.2. OneShotSoundDomain Properties 120
5.13.3. NoMusicSoundDomain Properties 121
5.14. Adding Music and Ambient Sounds 123
5.14.1. Adding Music 123
5.14.2. Adding Ambient Sounds 126
5.14.2.1. Contents of the Ambient Preset XML file 126
5.14.2.2. The process of adding ambient sounds 132
5.15. Adding Zones 136
5.15.1. Properties of various Zone Types 141
5.15.1.1. Loading Cargo: ...CargoLoading and ...ManualLoading zones 143
5.15.1.1.1. Model Building Settings for ...CargoLoading zones 144
5.15.1.2. Fuel Station: ...FuelStation zones 146
5.15.1.3. Garage: ...GarageEntrance and ...GarageExit zones 146
5.15.1.3.1. Setting up a Repairable (Upgradeable) Garage 147
5.15.1.4. Trailer Store: …TrailerAttach zones 149
5.15.1.5. Upgrades: ...UpgradesGiver zones 149
5.15.1.6. Watchtower: ...Watchpoint zones 149
5.15.1.6.1. cameraPos… and cameraDir... values: Hints and Tips 151
5.15.1.7. Recover feature: …Recovery zone 152
5.15.1.8. Craft and Generator features: …StorehouseCraft and …Energy zones 153
5.15.1.9. Living Area feature: …LivingArea zones 155
5.15.1.10. Ressuply Repair Parts in Hard Mode: …ResupplyRepairParts zones 155
5.15.1.11. Automatic Repairing: …AutoRepairAndRestore zones 156
5.15.1.12. Automatic Refueling: …AutoRefuel zones 156
4
5.15.1.13. Farming zones: …FarmingArea zones 157
5.15.1.14. Water Station zones: …WaterStation zones 157
5.15.1.15. Gateway zones: …Gateway zones 158
5.15.2. Zone Locator properties 161
5.15.3. List of Icons for Zones 161
5.15.4. Adding Fog of War: "isNeedToBeCloacked" flag 167
5.15.5. Enable or Disable the Dev Menu (TOOLS menu) 168
5.15.6. Adding Introductory Info and Initial Objectives 168
5.15.7. Modification of Content Settings 170
5.15.7.1. Locking and Unlocking Trucks and Upgrades 171
5.15.7.2. Starting Parameters of the Player 171
5.15.7.3. Custom Prices for Trucks and Upgrades 171
5.15.8. Logging: Logs as New Types of Cargo 172
5.15.9. Manual Unloading Zones 174
5.15.10. Selection of a Country for a Map 175
5.16. Adding Objectives 176
5.16.1. Stages 179
5.16.1.1. Delivery of Goods (“actions > zoneToFill” section) 180
5.16.1.1.1. Delivery of Water 181
5.16.1.1.2. Manual Unloading of Cargo 181
5.16.1.2. Delivery of the Truck (“truckDelivery” section) 182
5.16.1.3. Repairing the Truck (“truckRepair” section) 183
5.16.1.4. Changing the Truck (“changeTruck” section) 184
5.16.1.5. Visiting All Zones from the List (“vizitAllZones” section) 185
5.16.1.6. Seismograph Usage (“Seismograph Settings” section) 185
5.16.1.7. Spawning Cargo on a Map (“spawnCargoOnStageActive” section) 185
5.16.1.7.1. Metal Detector and “Should be discovered by metallodetector” option 186
5.16.1.8. Delivery of Cabins to Living Area (“livingAreaInfo” section) 188
5.16.1.9. Farming Assignment (“farmingInfo” section) 190
5.16.2. Other fields of Objectives 191
5.16.2.1. Common fields (for all objectives) 191
5.16.2.2. Specific fields for Contracts 196
5.16.2.3. Specific fields for Tasks 197
5.16.2.4. Specific fields for Contests 197
5.16.3. Model Building Settings 199
5
5.16.3.1. Adding Smoke 205
5.16.4. Custom Employers 205
5.17. Regions with Multiple Maps 209
5.17.1. Settings of the Gateway zone (ZonePropertyGateway) 217
5.17.2. Rules for a target zone of a Gateway. Extra zone 218
5.17.3. Contracts on the level of the Region 222
5.17.4. Locking Objectives based on Exploration 224
5.18. Custom Images for Regions and Maps 227
5.19. Localization of Maps 229
5.20. Custom Maps in COOP 229
5.21. Console Mods Requirements 229
5.22. Custom Cargo 229
5.23. Farming 230
5.23.1. Step 1: Creating a Zone for a Farming Area 230
5.23.2. Step 2: Creating Distributions for a Farming Area 231
5.23.3. Step 3: Creating an Objective for a Farming Area 236
5.23.4. Custom Trailers for Farming Stages 242
5.24. Water as a Resource 243
5.24.1. PICK_UP Water Stations 243
5.24.2. DROP Water Stations 244
5.24.3. TRANSIT Water Stations 245
5.24.4. Objectives: Water Delivery 247
5.24.5. Custom Addons and Trailers: Water as Cargo 248
5.25. Collaborative Work on Maps 249
5.25.1. Map pieces. Their subfolders in the "data" folder 249
5.25.2. Chunks. Selecting a chunk to work with 250
5.25.3. General Process of Collaboration 252
5.25.3.1. Collaboration: Distributions 253
5.25.3.2. Collaboration: PBR Materials 255
5.25.3.4. Collaboration: Rivers and Overlays 256
5.25.3.5. Collaboration: Sounds and SoundDomains 257
5.25.3.6. Collaboration: Zones 257
5.25.3.7. Collaboration: Objectives 257
5.25.3.8. Collaboration: Content Settings 257
6
5.25.3.9. Collaboration: References 258
5.25.4. Working with External Tools for Texture Maps 258
5.25.4.1. Combine chunks in directory 258
5.25.4.2. Separate chunks from directory 259
5.25.5. Working with Version Control Systems 259
6. Packing a Map 260
7. Testing a Map in the Game 261
8. Publishing a Map 263
9. Downloading Map Mods from mod.io 263
10. Playing on Map Mods from mod.io 264
11. Viewing Trucks 266
11.1. Opening XML files of a Truck 267
11.2. Viewing XML file of the Mesh 268
11.3. Viewing XML file of the Class 269
11.4. Viewing Errors 270
11.5. Viewing XML files of Meshes for Other Objects 270
11.6. Viewing the Snow Cover Effect for a Truck 271
Appendix 272
Appendix A: List of Addons and Addon-Trucks Mapping 272
Appendix B: Stages of a Sample Farming Contract 272
Stage 0 – truckDelivery: Deliver the Cultivator 273
Stage 1 – farmingInfo: Cultivate the field 274
Stage 2 – truckDelivery: Deliver the Planter 275
Stage 3 – farmingInfo: Seed the field 276
Stage 4 – farmingInfo: (hidden automatic step) 277
Stage 5 – truckDelivery: Deliver the Harvester 278
Stage 6 – farmingInfo: Harverst the field 279
Stage 7 – farmingInfo: (hidden automatic step) 280
7
Revision History
Version Changes
0.9.23 • Added section: “5.17.2. Rules for a target zone of a Gateway. Extra zones”
• The “DO_NOTHING” option was added to 5.16.1.2.
0.9.27 The 5.18. Custom Images for Regions and Maps section is added.
8
0.9.35 The following sections were added or modified:
• 5.16.1.1.2. Manual Unloading of Cargo (added)
• 5.15.9. Manual Unloading Zones (added)
• 5.22. Custom Cargo was added as a link to a separate guide
(Creating_Custom_Cargo.pdf in the same documentation package).
NOTE: For full info on creation of files of custom materials pease refer to the "Custom
Level Entities: Models, Overlays, and PbrMaterials" guide, available as
Custom_Level_Entities_Models_Overlays_and_PbrMaterials.pdf in the same
documentation package.
0.9.41 NOTE: In this update, along with the addition of the Farming feature to the Editor, to
improve and speed up the development of the Editor in general, we have added the
automatic integration of all fields and their functionality from the internal Saber Editor
(used for the creation of original game levels) to the SnowRunner™ Editor (used for
modding, described in this guide). The core mechanics of both editors are the same and
they have not changed. However, due to the implemented auto-integration, names of
some existing (and already described) fields and their order have change in some (rare)
places. And, also, some new fields were added in the Editor. We have tried to update
the guide correspondingly and reflect all these changes, see the list of changes below.
9
The following sections that are related to new Farming feature were added or modified:
• 5.23. Farming (added), separate chapter, including:
• 5.23.1. Step 1: Creating a Zone for a Farming Area (added)
• 5.23.2. Step 2: Creating Distributions for a Farming Area (added)
• 5.23.3. Step 3: Creating an Objective for a Farming Area (added)
• 5.23.4. Custom Trailers for Farming Stages (added)
• 5.16.1.9. Farming Assignment (“farmingInfo” section) (added as link to 5.23.3)
• Appendix B: Stages of a Sample Farming Contract (added)
And, the following sections were added or modified during the massive “auto-
integration” update:
• 5.15. Adding Zones (modified)
• 5.15.1. Properties of various Zone Types (modified)
• 5.15.1.1. Loading Cargo: ...CargoLoading and ...ManualLoading zones (modified)
• 5.15.1.1.1. Model Building Settings for ...CargoLoading zones (added)
• 5.15.1.3. Garage: ...GarageEntrance and ...GarageExit zones (modified)
• 5.15.1.3.1. Setting up a Repairable (Upgradeable) Garage (added)
• 5.16.1.7.1. Metal Detector and “Should be discovered by metallodetector” option
(modified)
• 5.15.1.11. Automatic Repairing: …AutoRepairAndRestore zones (added)
• 5.15.1.12. Automatic Refueling: …AutoRefuel zones (added)
• 5.15.1.13. Farming zones: …FarmingArea zones (added)
• 5.16.1. Stages (modified)
• 5.16.2.1. Common fields (for all objectives) (modified)
• 5.16.2.2. Specific fields for Contracts (modified)
• 5.16.2.4. Specific fields for Contests (modified)
General Info:
• 5.15.3. List of Icons for Zones (updated)
• Appendix A: List of Addons and Addon-Trucks Mapping (updated, in a separate file)
• 5.5.3. Interesting Models: Creatures, People, etc. (updated)
• 3.1. Toolbar buttons (updated)
• 3.6. Typical Context Menu (updated)
• 5.11.3. Custom Trucks (added)
• 5.16.1. Stages (updated)
• 5.16.1.2. Delivery of the Truck (“truckDelivery” section) (updated)
• 5.16.1.7.1. Metal Detector and “Should be discovered by metallodetector” option
(updated)
10
• 5.24.1. PICK_UP Water Stations (added)
• 5.24.2. DROP Water Stations (added)
• 5.24.3. TRANSIT Water Stations (added)
• 5.24.4. Objectives: Water Delivery (added)
• 5.24.5. Custom Addons and Trailers: Water as Cargo (added)
• 5.16.1.1.1. Delivery of Water (added as a link to 5.24.4)
11
1. Introduction
This guide provides an overview of the basic operations necessary to create a map mod
with SnowRunner™ Editor. Along with it, brief instructions on viewing trucks are also
provided.
If you installed the game through Microsoft Store, the Editor is not installed along with it.
NOTE: If you have installed the Public Test Server (PTS) version of the game, then
paths to all files of this version will be similar to the ones shown in this guide. However,
these paths will have SnowRunnerBeta in them instead of SnowRunner.
IMPORTANT: Currently, if you open the Editor, you will not be able to open the game at
the same time. If you need to open the game, you will need to close the Editor first.
12
3. UI Overview
13
1. The main panel (scene window) - displays the part of your scene. Here you
perform the main operations with the content of the scene: add new objects,
move and rotate them, paint the terrain using various brushes, and so on.
2. File view panel - this panel works as a library that contains all maps and
references. Double-click on the file in the panel will load the corresponding map.
3. Scene View panel (upper part) - displays the list of objects on the scene, both
physical and auxiliary. Objects can be selected both in the main panel (scene
window) and using the Scene View list, after expanding its hierarchy. Along with
objects, this hierarchy contains a set of various brushes in the Scene > Terrain >
Geometry section (see below).
4. The lower part of the Scene View panel (properties of a selected object) - this
panel displays and allows you to modify the properties of a selected object.
5. Minimap (the upper part of the Terrain panel) - displays the current view of the
level minimap.
6. The visible blocks section (the lower part of the Terrain panel) - displays visible
blocks of the terrain, depending on the direction of the camera on the scene.
7. Log (the Output panel) - All system messages and editor errors are displayed
here.
8. Above all these panels, the menu bar and toolbar are displayed.
9. Snapping panel is displayed as a floating panel above the main window. For
details on it, see 3.8. Snapping panel.
Save CTRL + S Saves the map and updates the data.stg file.
14
TIP: You can use values displayed for camera position
and camera direction vector when setting up
cameraPos... and cameraDir... vectors for
Watchtowers and Gateways. See 5.15.1.6.1 for details.
Open File ALT + SHIFT + O Displays a dialog that allows you to quickly find and
open a file from the Media folder.
Local transform CTRL + L There are two coordinate modes for controlling objects:
local and global. If you enable the Local transform
mode, then the axes of an object will correspond to its
position. If you disable this mode, then the axes along
15
which you can move the object will correspond to the
coordinate grid of the entire map.
Change scale When this option is disabled (by default), all selected
mod models are scaled independently from each other.
However, if you enable this option, the system will keep
the proportion in distance between them while you scale
them.
Show all sound When this option is enabled, the Editor displays all
domains sound domains on the level. By default, they are hidden
until selection in the Scene View panel.
16
Angles
Pack terrain Packs your map and generates the .zip and .pak files.
For details, see 6. Packing a Map
Region settings Allows you to create Regions and add multiple maps to
them. For details, see 5.17. Regions with Multiple Maps.
Show all Enabling this option highlights all overlays on the map,
overlays including the invisible ones. For details, see 5.8.8.
Invisible overlays.
Hide all nodes Enabling this option will hide all nodes (points) of all
of rivers and Overlays and Rivers of the map.
overlays
Show zone for When enabled, highlights all remains of the map (except
work the selected chunk) with red. Should be used in
combination with Select chunk (see below). For details,
see 5.25. Collaborative Work on Maps.
When disabled, nothing is highlighted on the map.
Select chunk Allows you to select a chunk of the map to work with.
Should be used in combination with Show zone for
work (see above). For details, see 5.25. Collaborative
Work on Maps.
17
Hide Plants Allows you to hide all plants (both single ones and
planted via a Distribution). Other objects, shadows, and
grass remain the same.
NOTE: However, when a brush is selected, the left-click and right-click behavior is
different, see below.
Painting with the brush is typically performed by pressing and holding the right mouse button
while moving the mouse. By pressing the left mouse button, you can apply the changes.
18
Typically, brushes have some universal settings:
● Size - the size of the brush in meters.
● Value - the force of the brush and the direction vector for changes after painting. It can
be set to a negative value. For example, for a brush of heights, positive values will raise
the terrain up, negative values will lower it.
● Falloff - specifies the softness of the border of the brush. For example, 0 - a brush with
absolutely hard edges, 1 - changes from the brush begin to fade immediately from the
center of the circle of the brush.
● Autofade - the automatic attenuation mode of the brush, that depends on the direction
of the drawn line. Useful for drawing ruts and working with mud.
● Randomize - a random spread of brush values in a given range. That is, the brush will
randomly change the values of force and direction. Useful for creating chaotic
unevenness.
NOTE: For some brushes, the range of the Value slider is from 0 to 1. Typically, in this case,
the brush will paint its content when the Value > 0.50 and remove its content when the Value <
0.50. However, the default value for such brushes is typically 0.50 and the brush will not do
anything until you change this value.
Typically, to apply your changes after using the brush, you left-click the terrain (or deselect the
selected section in the Scene View panel) and rebuild the terrain. You can either enable the
autorebuild terrain option (see 3.1. Toolbar buttons above) or manually rebuild the terrain. To
manually rebuild the terrain, right-click the scene window and select Rebuild Terrain or
Rebuild visible / Selection (to rebuild only visible or selected areas).
Undo Current Changes in the Brush dialog - discards the current changes during painting, reverts all
changes made after the most recent right-click.
The Geometry section with the Scene View panel contains a lot of brushes. For their
descriptions, see 5.2. "Geometry" Brushes for Terrain below and its subsections.
19
To select adjacent objects in the Scene View panel, hold SHIFT while selecting them.
20
2. After doing this, the group with the few digits as a name will appear in the
hierarchy.
3. If necessary, you can change the name of the group in its Name field (at the
lower part of the Scene View panel, while the group object is selected).
4. Now, to assign necessary objects for a group, for each such object:
a. Select it in the Scene View panel.
b. In the object properties, in the Group field, select the group you have
created.
21
The main goal of groups is to help you organize objects.
However, when objects are in the group it is easier to select multiple objects from them
(see 3.4. Selection of Multiple Objects above).
Moreover, after the creation of the group and assigning objects to it, you can copy all the
objects from this group to another map.
This is possible because information about objects added to the group is saved to a
separate file in the subgroups directory with the folder of the level (see 4. File Paths
and Naming below).
So, you can copy the file corresponding to your group from this directory to the
subgroups directory of another level. After that, the objects from this group will appear
at this level, when you open it in the Editor.
NOTE: Objects from the copied group will appear in the new map at the same positions
they have on the initial map.
NOTE: However, when a brush is selected, the right-click behavior is different, see 3.3.
Typical Brush dialog above.
22
The list of commands within a context menu depends on where particularly you have
performed a right-click. If you have right-clicked an object, the commands related to this
object will be displayed in the upper part of the menu, with the name of this object as a
prefix (e.g. “country_building_01_c” in the picture below). If this object belongs to a
group, then below them the operations related to groups will be displayed, with the name
of this group as a prefix (e.g. “455” in the picture below). If you have clicked the
particular object or a section of the particular type in the Scene View panel, then the
operations related to this type of object will be listed, with the name of this object type as
a prefix (e.g. “Models” in the picture below). And, also, the list will contain the list of
general context commands (e.g. Reload, Rebuild Terrain, etc.) below all other
commands.
Command Description
Rebuild Terrain Rebuilds all terrain of the map, applies all changes that you have done to its
23
properties (heights, references, etc.), and refreshes the appearance of the
level in the Editor.
Rebuild Selection Similar to Rebuild Terrain, but rebuilds only selected terrain blocks, which
is faster. You can select multiple terrain blocks by holding CTRL and left-
clicking the terrain in the main window of the scene.
Rebuild Visible Similar to Rebuild Terrain, but rebuilds only terrain blocks currently visible
in the main window of the scene, which is faster.
Combine chunks in Creates full-sized textures from small textures corresponding to all map
directory pieces of the map. See 5.25.4.1. Combine chunks in directory for details.
Separate chunks from Divides full-sized textures into smaller ones that correspond to map pieces.
directory See 5.25.4.2. Separate chunks from directory for details.
Add Pbr Material Adds a new PBR Material, see 5.3. Assigning PBR Materials to Terrain.
Add Plant Adds a new standalone Plant, see 5.6. Adding Plants.
Add Distribution Adds a new Distribution (e.g. massively planted trees, rocks, etc.),
see 5.7. Adding Multiple Objects via Distribution.
Add Overlay Adds a new Overlay (e.g. a road, wires, etc.), see 5.8. Adding Overlays.
Add River Adds a new River object, see 5.9. Adding Rivers and Water Objects.
Add River Markup Add a new River Markup object (a sound area for the river),
see 5.9.2. Adding River Sounds via “RiverMarkup”.
Add … Sound Domain Adds a new Sound Domain of the particular type,
see 5.13. Adding Sound Domains.
… - Fly To Moves the camera to the right-clicked object, zooms it, and selects it.
… - Delete Deletes the right-clicked object from the map. You cannot undelete it after
that.
24
3.7. Main Menu
The File menu:
● Close File - the system prompts you whether or not the changes should be
saved, saves them if you select so, and then closes the opened file.
● Reload File From Backup - allows you to reload your scene from automatically
created backup (you can select it in the appearing dialog). Please note that
backup contains only the XML file of the level, files of textures are not backed up.
● Unpack references - allows you to unpack the set of in-game references
provided with the Editor. For details, see 5.10.5 below.
● Save - saves your changes (CTRL + S).
● <list of recently opened files> - allows you to open them.
● Exit - exits from the Editor.
Snapping of objects is enabled when you hold SHIFT while moving or rotating an object.
The parameters that you can set in this panel are the following:
• Move – sets the step in coordinates that will be used when you move the object
with enabled snapping.
25
• Rotate – sets the step in degrees that will be used when you rotate the object
with enabled snapping.
• Snapping – allows you to select the particular snapping mode:
o None – snapping is disabled.
o Absolute – the position and rotation are changed with the specified steps
regardless of the initial position and rotation of the object. E.g., for Move
– as if there was a grid with a center in the origin of coordinates and you
were snaping the object to the grid points of this grid.
For example, if Move equals to 10 and the object is positioned in [5, 5, 0],
then the object will be snapped to the nearest points of such grid: [0, 0, 0],
[10, 0, 0], [0, 10, 0], [0, 0, 10], [10, 10, 0], and so on.
Or, if Rotate equals to 45, then the object rotation will be snapped to the
following rotation angles: 0, 45, 90, etc. (regardless of its initial rotation).
o Relative – the position and rotation are changed with the specified steps
relative to initial the values of position and rotation of the object. E.g., for
Move – as if there was a grid with a center in the initial position of an
object and you were snaping the object to the grid points of this grid.
For example, if Move equals to 10 and the object is positioned in [5, 5, 0],
then the object will be snapped to: [-5, -5, 0], [-5, 5, 0], [-5, 15, 0], etc.
Or, if Rotate equals to 45 and the initial rotation is [12, 0, 0], then the
object rotation will be snapped to the following rotation angles: [-33, 0, 0],
[12, 0, 0] , [57, 0, 0], [57, 45, 0], and so on.
26
NOTE: When you are rotating an object, you may notice that multiple angles are
changing at once. This happens because the angles of rotation of the object are
not mutually independent. For details, you can refer to
https://en.wikipedia.org/wiki/Euler_angles.
If Local transorm ( ) is enabled on the toolbar, the Absolute and Relative modes of
the snapping panel will work as if the Relative mode is active.
If Move is set to 0, snapping will be disabled for move transformations. If Rotate is set to
0, snapping will be disabled for rotate transformations.
The Snapping panel appears automatically after selecting an object. So, if you
occasionaly close it when it is needed, just select the same object again. (Currently,
there is a known issue on this subject, it will be fixed with the next update).
27
4. File Paths and Naming
4.1. File Paths
Source files of levels and references are stored in the Media\prebuild folder, which is
created in the Documents\My Games\SnowRunner\ folder.
NOTE: If you have installed the Public Test Server (PTS) or Closed Beta Testing version
of the game, then paths to all files of this version will be similar to the ones shown in this
guide. However, these paths will have SnowRunnerPublicTest or SnowRunnerBeta in
them instead of SnowRunner. I.e., your particular paths will depend on the version of
the game you are using.
NOTE: The prebuild folder will be filled with folders and files of levels after you create
these levels. At the first launch of the Editor, this folder is empty. Files and folders in the
screenshot above (and in the similar screenshots that follow) are shown for illustrative
purposes only.
The compiled level files generated by Editor and their .zip archives prepared for
uploading to mod.io are stored in the Media\levels folder:
28
Each folder of the level contains the data.stg file, which contains all binary information of
the level and a set of compiled files for textures as .dds files. The data.stg file is
updated each time you save the level.
When you pack the level in the Editor, the system, along with the .zip file (see above),
also generates the .pak file for this level. It is automatically copied to the folder, where all
local mods of the game are stored, i.e. to the Media\Mods folder.
For example:
C:\Users\<name_of_user>\Documents\My Games\SnowRunner\Media\Mods
NOTE: During your modding activities, you may want to look up some content (files, etc.)
in the initial.pak archive. It is located in the folder of the installed game
(…\preload\paks\client\initial.pak, see 2. Installation and First Launch). Please note
that this archive contains content of DLCs too. For example, some XML classes of
_objective models that you may want to open (see 5.16.3. Model Building Settings) are
located not only in the \[media]\classes\models subfolder within the archive, but within
\classes\models subfolders of the [media]\_dlc directory.
29
5. Creation of a Map
In general, the process of creating a map is the following:
1. Create a new terrain.
2. Modify the terrain:
a. Create the necessary height differences on it, smooth it in the right
places, and so on.
b. Assign the necessary PBR materials and use their layers to paint the
terrain.
c. Add mud and/or snow areas.
d. Add rivers and other water objects.
e. Add plants, either as single standalone plants or massively via
Distributions.
f. Add various overlays: roads, wires, etc.
g. Add various models: buildings, light poles, etc.
h. Add zones: Garage, fuel stations, zones for loading cargo, zones that will
be used for delivery of goods/trucks, etc.
i. Add objectives related to some zones: Tasks, Contracts, and Contests.
j. If necessary, add some external maps as references.
k. Add trucks and select one truck as Active.
l. Add sounds and sound domains.
3. Pack your map to .pak and .zip files.
4. Test your map locally in the game.
5. Publish your map to snowrunner.mod.io
The sections that follow describe some of these operations in more detail.
30
5.1. Creation of a Terrain
To create terrain:
1. In the File View panel, right-click the prebuild folder and select New Terrain in the list.
2. In the appearing window, specify the main parameters of the new map:
31
The parameters are the following:
● Name - the name of the map.
Names of levels must start with the level_ prefix, references must start with the ref_ prefix.
● U Blocks and V Blocks - allow you to specify the dimensions of the map (the width and length),
in blocks. Each block is equal to 24 meters.
○ U Blocks - the number of blocks along the X-axis.
○ V Blocks - the number of blocks along the Z-axis.
● Max height (m) - the maximum height of the level.
When creating new terrain, the system creates the new data.stg file and prompts about that.
Answer Yes.
If the creation of the initial terrain was performed successfully, you will see that the Scene View panel
now contains the following hierarchy:
The Terrain section there contains subsections that correspond to both tools (brushes) that you will use
during editing terrain and all objects that you will add to the terrain.
However, the main window of the editor will display only the grid and the initial terrain will be not visible.
32
To display the terrain, double-click the terrain preview in the Terrain panel on the left (A). After doing
this, the terrain will be displayed in the main window (B).
33
In this panel, you can view the information about the size of the map in blocks (which is
not editable) and specify such parameters as daytime presets, the sky preset, the sound
preset (Ambient Preset), and so on.
34
○ Or, you can create your own custom Ambient Preset and use it for your
map. For details on this, see 5.14.2. Adding Ambient Sounds.
● Daytime Presets section - specifies presets for lighting and time of day:
○ Night - night
○ Night to Day - dawn
○ Day Early Variants - morning
○ DayMidVariants - midday
○ DayLateVariants - after midday
○ DayToNight - sunset
The existing daytime presets can be found at the [media]\classes\daytimes\
folder of the initial.pak archive. Presets with the “a” suffix (e.g. “day__1a_ru_02”
for “day__1_ru_02”) correspond to the “cloudy weather” variant of the preset.
For example, the following presets are used for levels (the same IDs are the
possible values for these fields):
Taymyr:
Night night_ru_02
NightToDay night_to_day_ru_02
DayEarlyVariants day__1_ru_02;day__1a_ru_02
DayMidVariants day__2_ru_02;day__2a_ru_02
DayLateVariants day__3_ru_02;day__3a_ru_02
DayToNight day_to_night_ru_02
Alaska:
Night night_us_02
NightToDay night_to_day_us_02
DayEarlyVariants day__1_us_02;day__1a_us_02
DayMidVariants day__2_us_02;day__2a_us_02
DayLateVariants day__3_us_02;day__3a_us_02
DayToNight day_to_night_us_02
Michigan:
Night night_us_01
NightToDay night_to_day_us_01
DayEarlyVariants day__1_us_01;day__1a_us_01
DayMidVariants day__2_us_01;day__2a_us_01
DayLateVariants day__3_us_01;day__3a_us_01
DayToNight day_to_night_us_01
NOTE: Mixing presets from different levels can lead to an unpredicted result.
NOTE: Please be accurate while entering IDs of the Daytime Presets. Entered
values must not contain spaces (spaces in these values may result in a crash).
● Daytime Presets > Force section - allows you to set one particular daytime
preset for the level. This preset will not change with the game time. The section
contains the following fields:
○ Name - the name (ID) of the daytime preset, see above.
○ Night Factor - the lighting condition in the specified preset: “Day”,
“Night”, or “Night to Day”. This setting is necessary for the game logic that
35
is related to the daytime. Using this value, it will be able to identify what
time of the day should be used for the specified preset.
● Description level section:
○ Id - the name of the level for UI.
○ Description - the description of the level for UI.
● Extrudes To Wetness - sets the humidity of the hidden mud (the more it is, the
more liquid the dirt will be and the harder it will be to drive).
● -threshold - the parameter for cutting minor mud. Recommended values are in
the [0.05-0.2] interval:
○ For winter: 0.2
○ For warm seasons: below 0.15 (the best variant is 0.05).
● Background Water section - these fields allow you to configure the water
surfaces outside the map. See 5.9.3. Background Water: Adding It on the Edges
of the Map for details.
You can also enable “Fog of War” or enable the TOOLS menu for your map. However,
these options are specified along with zone settings, see 5.15.4 and 5.15.5 for details.
36
When you select the Geometry node (or any of its sub-nodes) in the Scene View, the terrain editing
menu (brush panel) of a certain kind will appear in the main panel of the Editor.
The Geometry section includes tools for working with the terrain surface.
Roughly speaking, by choosing the Geometry node or its sub-nodes - we select a brush with which we
will work with the terrain surface.
Painting, using the selected brush, is performed by pressing and holding the right mouse button while
moving the mouse. By pressing the left mouse button, you can apply the changes. For details on typical
Brush dialog, see 3.3. Typical Brush dialog above.
When working with the Geometry brush itself (when the Geometry node itself is selected in
the Scene View panel), you can edit heights and the geometry of the terrain. In the drop-down
list, you can select one of the three operating modes:
● Height - Lowering or raising the surface. If the brush value is negative, recesses will be
created on the terrain. If positive, bulges will be created.
● Flatten - Flattening of the surface. I.e., the brush allows you to create flat surfaces when
you hold the right mouse button. The height in the center of the brush is used as the
height of flattening when you click the right mouse button.
37
● Smooth - Smoothing of height differences. Smoothing occurs when the right mouse
button is pressed. We recommended you to set the Falloff value close to 0 for this brush.
After setup of the brush, you can change the terrain surface by moving the brush and holding the right
mouse button.
NOTE: Along with the manual creation of the terrain, you can create a terrain in the third-party tool. For
details, see 5.2.0.1 below.
The remaining brushes (sub-nodes of the Geometry node) are controlled in the same way. They are
briefly described in the subsections below, starting with 5.2.1. Colorization. The 5.2.0 section below
describes the context menu of the Geometry section.
38
5.2.0.2. Create Water Heightmap: Useful Map of Water Surfaces
The Create Water Heightmap command creates the texture with a heightmap of water
surfaces that were created as River objects on the map (see 5.9. Adding Rivers and
Water Objects). This texture is called _water_height.png, it has one channel, 16 bit.
This texture is not used by the Editor for the generation of the level. However, this
texture can be used, if masks for layers and distributions are generated in third-party
applications (e.g. Substance Designer or Houdini). Using this texture and a heightmap of
the level, one can easily see where the map contains water and what is its depth.
For example, according to the data on this mask, one can generate the distribution of
canes on the banks of water objects and a wetness mask near them.
5.2.0.3. Create Default Flowmap: Default Map of the Flow for River Objects
The Create Default Flowmap command creates the default map of the flow of water for
River objects on the map (see 5.9. Adding Rivers and Water Objects). This texture is
called _default_water_flow.tga, it has 3 channels (RGB), 8 bit for each channel.
The R and G channels contain components of the speed vector (for U and V axes of the
terrain correspondingly).
The default direction of the flow of the water is automatically calculated by the Editor
based on the height differences along the river spline and its curvature.
The _default_water_flow.tga texture is not used by the Editor for the generation of the
level. However, it could be used to generate a more accurate flow map in third-party
applications, using it together with the terrain heightmap and the water heightmap
textures.
After tuning, this water flow texture can be renamed to the water flow texture used for
the generation of the level - _water_flow.tga. If you enable the UseFlowMap option (set
UseFlowMap = True) in the properties of the River object after doing this, the Editor will
use the created _water_flow.tga texture when generating the level. Or, you can
manually paint the River object with the Water brush in the Editor to specify the flow
(see 5.9. Adding Rivers and Water Objects).
5.2.0.5. Create Ref Merge Map: Creation of a Mask for Merging a Reference
The Create Ref Merge Map command creates the _ref_merge.tga texture and enables
the RefMergeMask brush that can be used to create a mask for merging a reference
with your map. For more details, see 5.10.2. RefMergeMask brush.
39
5.2.1. Colorization
The Geometry > Colorization brush allows you to paint the surface with a specified color.
In the Color parameter, you can specify the necessary color tint, and use the slider to specify
how much this color will affect the surface.
If the slider pointer is located to the right from the middle of the slider, you will paint the terrain
with the selected color. If the slider pointer is on the left - the brush will erase the color from the
terrain. If the slider pointer is exactly in the middle of the slider, the brush will do nothing.
The Set button shows a color palette for selecting a color.
40
5.2.2. Wetness
The Geometry > Wetness brush allows you to adjust the wetness of the surface. The higher
the Value parameter is, the wetter the painted surface will be. The wetter the surface, the
stronger the vehicle will get stuck in it even if the mud is not painted in this area. On winter
maps, hard surfaces (e.g. winter asphalt, winter stone, ice) will become icy when painted with
the wetness brush.
5.2.3. Mud
The Geometry > Mud brush allows you to add and edit mud on the terrain surface.
41
Mud is displayed on the surface as vertical lines with horizontal marks. The more marks the line
has, the deeper the mud is at this point.
For example:
● The first horizontal mark is the boundary of the mud, which is passable by light and poorly
prepared vehicles.
● The second mark is the boundary of mud passable by four-wheel-drive regular trucks with
offroad tires.
● Below the second mark - almost everything will bog, except for heavy vehicles, upgraded
to the maximum limit.
The higher the Value parameter of the brush is, the faster the brush will add depth to the mud.
When the Value parameter has a negative value, the mud is reduced or erased.
In the drop-down menu, you can select two operating modes of the brush:
● Automatic - this mode adds mud and automatically paints the texture of the mud on the
surface. This mud will be sufficiently hard and dried out if wetness or hidden mud is not
painted on it (see below). To create mud traces, we recommend you to paint with a brush
size of 0.5 - 0.8 meters. For light mud, the Value should be 0.54 - 0.56. For deep traces -
0.6 - 0.7.
● Extrudes - this mode adds depth to the mud on the terrain. In this case, the texture of the
surface will not change. This is the “hidden mud” that the player will only see when the
earth is wet in this place (automatic wetting is defined by the Extrudes To Wetness
parameter in the Terrain section). This mud affects passability most of all.
42
5.2.4. Quick Mud
The Geometry > QuickMud brush allows you to paint mud with added ruts. This brush will
paint the ruts, the friability of the soil, and its wetness at the same time.
It is used for quick painting of the mud on badly broken roads.
43
5.2.5. Water
The Geometry > Water brush does not create water objects. It allows you to change the
properties for already created River objects. The water flows themselves are created by the River
tool (see 5.9. Adding Rivers and Water Objects).
WARNING: When painting the direction of the water flow using the Flow mode, the
Autofade option of the brush should be disabled. The enabled Autofade option will
result in the automatic correction of brushstrokes, which may result in the incorrect
map of flow directions.
TIP: Firstly, set the main direction of the flow for the whole river using a brush with a
huge Size. Then, using the brush of a smaller size, add the details of the river flow in
the necessary areas: the water flow near obstacles and reflection of water from the
banks of the river (at 45 degrees from the direction of the main flow). Finally, to
achieve the best result and to avoid sharp borders between parts of the flow, you can
open the map of flow (the _water_flow.tga texture) and blur the necessary parts of it
in the image editor of your choice.
44
The mask for the foam is stored in the green channel of the _water.tga texture (in the map
mod folder). The mask for the speed of water is stored in the blue channel of the same
texture. The result of painting the flow of the river is stored in the _water_flow.tga texture.
Along with manual painting of the flow of the river, you can generate a default flow map and
then tune it with a third-party tool (see 5.2.0.3 for details).
The Geometry > WaterMud brush allows you to paint dirty or muddy areas of water (it allows you to
repaint water objects). The color and properties of muddy water are set in the River object (see 5.9.
Adding Rivers and Water Objects).
As opposed to the regular mud, the water mud simply affects the color of the river. I.e., according to the
painted areas, the game will perform blending of the two river colors. These colors are set for the river
in its properties: Clean Type (for clear water) and Muddy Type (for muddy water).
45
5.2.7. Snow
The Geometry > Snow brush allows you to control the depth of snow.
This brush can only be used on the snow terrain layer, after painting it with the snow_layer layer
of the corresponding PBR material (see 5.3. below). You can paint using this brush if there is at
least a little layer of snow terrain in the painted area. For example, if 0 amount of the snow is
painted on the layer, then there will be no deep snow; however, if the weight of the snow on the
snow layer is 50%, then deep snow can be painted. This is done so to avoid sharp "steps" of the
deep snow (since on the map of the deep snow 1 pixel equals to 50cm).
As with mud (see 5.2.3. Mud above), after painting with the depth of the snow, a region with vertical
lines with horizontal marks will appear on the terrain. The more horizontal marks are displayed on the
vertical line, the deeper the snow is.
46
IMPORTANT: If there is solid ground under the snow and there is no mud, the car will not sink in
the snow for more than half of a wheel. If the snow is deeper than 1 horizontal mark (see
screenshot above) and there is a hidden mud (mud of the “Extrudes” type) under the snow, the
car will sink deeper in the snow and will bury itself in the snow below the level of the wheels.
Properties:
● Depth - sets the depth of snow (similarly to Mud).
● Flatten - flattens snow depth.
● Smooth - smooths transitions between sections of snow with different depths.
By enabling the Update material option in the Brush window, you can add both the depth of the
snow and the snow_layer itself, simultaneously.
NOTE: If you are creating a large level and are working with snow (painting depth or working with
a material with the snow_layer), then we recommend you to disable the auto rebuild of the
terrain. Otherwise, the auto rebuild and/or any operation with the material will take a long time.
To view the final result of the performed changes, you need to rebuild the scene. To do this, right-
click the scene window and select Rebuild Terrain or Rebuild Visible / Selection (to rebuild
only visible or selected areas).
After painting with the depth of snow - the system will mark this level as snowy. And, only after
that, the soft_snow and crust_snow layers can be applied (see 5.3.1. for details). They will be
available only after performing Rebuild Terrain also. The Procedural snow coverage parameter
of the Terrain (see 5.1.1. Terrain Properties) also works only for snowy levels.
47
5.3. Assigning PBR Materials to Terrain
The PbrMaterials section of the Scene View panel allows you to create PBR (Physically-Based
Rendering) terrain materials with layers and paint the terrain with them.
To create a material:
1. Right-click the terrain (or the PbrMaterials section of the Scene View panel).
2. Select Add PbrMaterial in the context menu.
After that, a new material with 4 layers will be created. You can create a maximum of 4 such
materials with 4 layers.
IMPORTANT: In winter levels containing snow, you can use only 3 layers of the material. And
the third layer should always be the snow (snow_layer).
After the creation of the material, its settings can be specified at the lower part of the Scene
View panel (after selection of this material). We recommend using almost the same values of
settings for all materials of the level.
For example, sample material settings:
● For winter maps:
○ AlbedoWetnessMult="1"
○ RoughnessWetnessMult="1"
● For summer and autumn maps:
○ AlbedoWetnessMult="2"
○ RoughnessWetnessMult="0.5"
The usage of the same settings for all materials of the level is important for the convenience of painting
and the absence of sharp boundaries between different materials.
The brush for painting with material contains a drop-down list with a selection of paint layers.
48
Painting with a layer is performed by holding the right mouse button. Whether the layer
will be added or removed - depends on the value of the Value slider. If the Value is
greater than 0.50, then the layer will be added, if it is less than 0.50, then the layer will
be erased.
The list of layers of the brush also contains the Opacity mode. This mode corresponds
to painting the block with the selected material.
IMPORTANT: When you are using more than one material for the terrain, you need to
paint the terrain with these materials using the Opacity mode of this brush first. And,
only after it, you can paint the terrain with the layers of these materials. When in the
Opacity mode, this brush paints terrain on a per-terrain-block basis. I.e. you can paint
each terrain block with one material only.
Therefore, to avoid sharp boundaries between different materials, you should use the
same textures as layers on the edges of two adjacent terrain blocks painted with two
different materials.
49
The name of the material can be set in the Name field at the lower part of the Scene
View panel (after selection of this material).
AlbedoWetnessMult - the coefficient that determines how much the existing wetness
will darken the texture of the terrain.
The brush control changes when painting snowy levels. In this case, additional layers
automatically appear in it:
50
NOTE: A level is considered snowy, if, somewhere on it, the snow depth is painted using
the Geometry > Snow brush (see above). Painting will not be active until you make
Rebuild Terrain and save the level.
In particular, the soft_snow and crust_snow layers will appear in the drop-down menu
of layer selection. These layers are modifiers of the already painted snow layer. They
need to be painted over a layer of snow.
● soft_snow - soft snow, it is typically painted mainly in the areas that contain a
forest, bushes, and a lot of plants.
● crust_snow - compressed snow with hard lumps, it is typically painted along the
edges of the road.
These layers change the normal map of the snow_layer only. This is necessary to vary
the snow appearance as described above. The results of painting with these layers
cannot be seen in the Editor itself, but are visible in the game.
51
Tiling scale - the tiling scale of the texture. Recommended values:
● for grass, earth, and sand - 5
● for rocks - 1
● for gravel - 3
● for snow - 2.2
NOTE: For details on how to create the files of a custom material, please refer to the “4.
Custom PbrMaterials” chapter of the “Custom Level Entities: Models, Overlays, and
PbrMaterials” guide, available as
Custom_Level_Entities_Models_Overlays_and_PbrMaterials.pdf in the same
documentation package.
After that, you can restart Editor, and, if you have created the files of the material
correctly, your material will be integrated with it. Particularly, you will be able to find this
material in the regular Asset window displayed when you are selecting File of the
material (texture) for the Layer of your PBR Material. It will be displayed there with the
name you have specified for it and the \Media postfix.
52
After that, you can use this material (texture) in a regular way, select it as one of the
Layers of your PBR Material, and paint the necessary areas of terrain with it.
53
5.4. Adding Snow and Ice
This section is a summary of snow & ice creation and links to other sections for details.
54
5.4.1. Breakable Ice
On your winter maps, you can create areas of “breakable ice”. These areas work as
areas of deep mud, but a little bit differently: the player drives on the ice/snow surface,
the ice becomes broken, the player’s vehicle may get stuck in the mix of snow, ice, and
water below the broken ice surface. The player’s vehicle will not go fully under the ice;
however, the player will experience some difficulties due to broken ice and will see nice
visuals.
55
To create a breakable ice area:
1. Ensure that your map has the correct Extrudes To Wetness value. In the
Terrain Properties of the map (see 5.1.1. Terrain Properties), the Extrudes To
Wetness value should be equal to 1.
2. Create a PBR material with the ice_02 texture as one of the layers (see 5.3.1.
Material properties for details).
The recommended scheme of layers for the material is the following:
a. Layer 1 (base layer) – up to you.
b. Layer 2 – the ice_02 texture.
c. Layer 3 – the snow_layer texture.
d. Layer 4 – do not use.
3. Paint the necessary area of the map with the ice_02 layer of the material. We
recommend you to use areas of flat terrain for that purpose.
4. Paint the area from step #3 (the area with ice_02) with the Mud brush in the
Extrudes mode (see 5.2.3. Mud for details), with the Value = 1.0
5. Create a Distribution (see 5.7) based on the one the following brushes:
a. IceChunks (for ice on a river)
or
b. IceDirt (for ice over a swamp)
6. Paint the area from step #4 (the area with ice_02 and Extrudes) with the created
Distribution, in the Density mode, with the Value = 0.80
7. If you were painting with the IceDirt distribution (to create a frozen swamp), paint
the snow (snow_layer) over the IceDirt area from step #6, to cover the surface
with snow.
8. Create a River object (see 5.9) and locate it directly below the terrain surface, to
add water that will appear when the ice will be broken.
9. Optional: If necessary, you can add the “ice_underwater_...” models below the
river surface for prettier visuals.
NOTE: A vehicle needs to be rather heavy to break the river ice, so use large trucks for
debugging it.
56
5.5. Adding Models
The Editor allows you to add different models to the scene.
To add a model, right-click the scene (or the Models section in the Scene View), and select Add
Model from the context menu.
NOTE: Every model in this window has its type displayed next to it: “STATIC”, “DYN”, “DESTR”.
For information on these types, see 5.5.2. Types of models. Their behavior and collisions below.
You can search for the particular model in this window if you know its name. The search query
should be specified in the text field above the list.
Double-click on the selected model in this window will add it to the map.
57
You can move, rotate, or scale the model on the map.
Moving and rotating is performed in the standard way, using arrows and circles displayed around
the model (see screenshot above). To scale a model, you need to hover the mouse over the
yellow rhomb displayed in the center of the coordinates of the model, then hold the left mouse
button and scale the model as necessary by moving the mouse.
The same parameters can be specified in the lower part of the Scene View panel, within the
Position, Rotation, and Scale fields.
There are also two coordinate modes for controlling the model: local and global.
58
If you enable the Local transform mode, then the axes of the model will correspond to its
position. If you disable this mode, then the axes along which you can move the model will
correspond to the coordinate grid of the entire map.
NOTE: For information on the Collision Type and Freeze Physics properties of the model, see
5.5.2. Types of models. Their behavior and collisions below.
2. Dynamic - these models can be moved the truck and have collisions during this
movement. They participate in the physics of the game. After an initial collision
with the truck, they disappear from the map after a while (see below).
59
3. Destructible - these models are dynamic models that can be broken by a truck
into chunks. Both the remnants of the model and its chunks disappear from the
map after a while (see below).
For performance optimization purposes, the physics of the game works not at the level
of the whole map, but only within its limited piece located around the current position of
the truck. For the same purpose, dynamic and destructible models disappear from the
map, when the period of their initial collisions with a truck is over and they are not nearby
the truck.
The important moment here is that until the first collision, the physics for dynamic
models is disabled (see the “Custom Level Entities. Models, Overlays” guide for
details, available as Custom_Level_Entities_Models_Overlays.pdf of the same
documentation package) and they will not disappear until they are moved and the truck
leaves their area. After the first collision, the physics is enabled for them and they start to
behave correspondingly.
However, sometimes, this behavior of the dynamic model in the game is “bad”.
For example, the piece of the fence, which is buried in deep snow, may try to jump up,
when touched by a truck.
In most cases, this strange behavior is caused by the fact that this model is “buried” in
the snow, mud, terrain or intersects with other static models (and starts to collide with
them when the physics becomes enabled for it).
To make the placement of models and plants correct from the point of view of the game
physics and facilitate your work with models, the Editor has some specific features:
60
The “STATIC” value marks a static model, “DYN” – a dynamic one, “DESTR”
corresponds to a destructible dynamic model (“DESTR+CHUNKS” for plants
corresponds to plants that are breakable into chunks). The same Collision Types
are also displayed in the Asset Browser window when adding a plant or a model
and in the properties of the model or a plant in the Collision Type field.
2. You can disable the physics for a dynamic model (and it will behave as a
static one).
You can make a dynamic or destructible model behave as a static one, i.e.
disable all physics for it except the collisions. After that, the truck will be unable to
move this model and this model will not disappear from the scene.
To do this, enable the Freeze Physics option in the properties of this dynamic
model.
Dynamic models with the enabled Freeze Physics option are displayed with a
black bbox around the model (instead of the regular grey one):
61
3. You can detect “bad” collisions of dynamic models directly in the Editor.
If you enable the Collision Notification ( ) option on the Toolbar of the Editor,
the system will highlight all incorrect collisions of your dynamic models and
manually added plants (i.e. not distributions) that occur when these models and
plants intersect with other models, terrain, snow or mud.
The bboxes of these incorrectly located models and plants will be:
a. violet – if the dynamic model intersects with terrain, snow, or mud.
62
Recommendations on using different types of models are the following:
• When you add models to the level, you take into account their types. You should
not use dynamic or destructible models in the areas where the space for them is
insufficient, or where they intersect other models or terrain. Otherwise, you will
get the buggy behavior of the physics in the game in this area.
• If you want to use a dynamic model within the level only for its visuals (e.g. you
are creating a static composition on the map that consists of multiple models),
you should enable the Freeze Physics option for this model to make it static.
• Check the intersections of your dynamic models with other models, terrain, snow,
and mud. If you find these intersections, try to remove them: relocate the model,
enable the Freeze Physics option, or simply remove the intersecting object.
You can add these creatures to the map as regular models. They require no additional
setup. However, there are some important nuances in their visibility to the player:
• Some models are visible to the player only at the particular distance. For
example, some creatures are visible only when the distance to them is between
63
50 and 150 meters. I.e., if a distance to such a model is less than 50 meters or
greater than 150 meters, the model becomes invisible.
• The …_notshy models do not become invisible at close distances.
• The "wolf2" model (which displays eyes in the darkness) is visible only at night.
64
65
5.6. Adding Plants
The list of models does not include plants. They are added to the scene separately.
The way you add plants to the map depends on how many plants you want to add:
● If you want to add a single plant, it can be done as described in this section.
● If you want to add multiple plants at once, it can be done with the help of the appropriate
Distribution (see 5.7. below).
Single plants are added to the map similarly to the models. You right-click the scene (or the
Plants section in the Scene View) and select Add Plant from the context menu. After doing this,
the window with the list of the plants will open. You can search the list and double-click the
necessary plant to add it to the map.
NOTE: Every plant in this window has its type displayed next to it: “STATIC”, “DYN”, “DESTR”,
“DESTR+CHUNKS“. For information on these types, see 5.5.2. Types of models. Their behavior
and collisions above (these types for plants work similarly to model types).
Moving, rotating, and scaling the plants are also performed similarly to models.
There are practically no differences, but, in the settings of the plant itself, there are several
additional parameters:
66
These additional parameters are the following:
● Do Land - If this option is set to True, the plant will always be attached to the terrain. This
allows you to avoid situations when a tree is hanging in the air.
● Perpendicularity - Perpendicularity to the coordinate grid. This is a useful setting for trees
growing on steep hills and mountains. The value of this parameter is specified by the
slider that appears to the right of the value when you click it.
NOTE: For information on the Collision Type and Freeze Physics properties of a plant, see
5.5.2. Types of models. Their behavior and collisions above. These settings work for plants the
same way they work for models.
67
5.7. Adding Multiple Objects via Distribution
Adding large amounts of trees and other plants is much more convenient with the help of the
Distribution map and usage of the Distribution brush. Besides, using Distributions you can add
not only plants, but also stones, debris, and so on. (What you will add depends on the brush set
you choose, see below).
First of all, right-click the terrain (or the Distributions section in the Scene View panel) and
select Add Distribution in the context menu.
After doing this, the new Empty Distribution object will appear in the Distributions section in the
Scene View panel.
Now you need to create a map for this Distribution object and specify settings for plants that you
will be adding using this Distribution.
Particularly, you will need to specify the following fields in the lower part of the Scene View panel:
● Map - In this field, you need to create the file of the Distribution map itself. To do this, you
need to click the Map field and then click the button displayed on the right side of it.
68
After that, you need to specify the name of the new file of the Distribution map in the
appearing window. This name must start with the dstr_ suffix and must end with the .tga
extension. For example, dstr_spruces_1.tga
After clicking Open in this window, the file with the specified name will be created, and the
brush for this distribution map will appear in the main window of the Editor.
● After that, you can specify properties for ignoring some areas of the map. Particularly, by
default, plants cannot grow through roads, water, and mud. However, after switching the
necessary parameter to True, you can become able to add plants on these surfaces:
○ Ignore Overlays - allows you to paint Distributions over roads.
○ Ignore Water - allows you to paint Distributions under the water.
○ Ignore Mud - allows you to paint Distributions over the mud.
● In the Brushes section, you need to set up brushes for the Distribution. When setting up
brushes, you can add to a Distribution a single brush or multiple brushes at once. For
example, in addition to a brush for a particular plant, you can add brushes for other types
of plants, brushes for mushrooms, leaves, stones, etc.
To set up brushes, you need to click the [press] button next to the Edit field.
After doing this, the Distribution Brushes window will appear:
It allows you to select brushes you will use when you will be painting with this Distribution.
On the left side of this window, there is a list of all brushes available in the Editor. On the
69
right, there is a list of brushes added to this Distribution. You can move brushes from the
left list to the right and back using the arrows between these lists.
For example, if, within this Distribution, you want to add aspens (Aspens) to the map
along with small stones (SmallRocks), then you will need to add these brushes to the
Selected Brushes list on the right. Once you added all necessary brushes to this list, click
OK. After that, all these brushes will be combined into one brush for painting, and the
name in the Distributions list will display the set of brushes selected for this Distribution.
After setting up brushes, you can start painting, i.e. start filling the map with plants or other
objects these brushes correspond to.
When you select the necessary Distribution in the Distributions section of the Scene View panel,
the Brush window appears in the main panel of the Editor (see screenshot above).
This window corresponds to all the brushes that you selected in the Distribution, and allows you to
paint with them as if you were painting with one brush. The Size, Value, and Falloff parameters
are responsible for the size, strength, and softness of this brush, respectively. The Randomize
option allows you to plant your objects unevenly.
Along with these parameters, the Brush window also has two modes that can be selected in the
drop-down list:
● Density - The density of plants in the painted area. The higher the Value parameter is in
this mode, the denser the plants will be added. To add plants to the area, the Value
parameter must be higher than 0.50. To erase plants from the area - it must be below
0.50.
● Scale - The scale of the plants. In this case, the Value parameter is responsible for the
size of plants in the painted area.
After setting up the parameters in the Brush window, you can paint with this brush by holding the
right button of the mouse.
70
NOTE: You can see the final appearance of the added plants only after rebuilding the terrain of
the scene. To rebuild it, right-click the Terrain section in the Scene View panel and select
Rebuild Terrain in the context menu.
Moreover, there are two scenarios if you want to create a custom brush. Particularly, you
can create:
1. The custom brush based on the existing plants/models provided with the
Editor – in this case, you can create your own instance of the brushes.xml file
and set up necessary brushes there, linking them to existing plants/models
classes.
2. The custom brush based on your own custom models – in this case, along
with the brushes.xml file, you will need to add all required for plant models:
model meshes in the FBX format, XML files of the meshes, XML files of the
classes, and all necessary textures.
71
NOTE: We call this file additional, since it supplements the original
brushes.xml, which is stored in the initial.pak.
3. Fill it with settings of your own custom brushes using the same structure and
tags as in the original brushes.xml that contains all predefined brushes.
NOTE: The original brushes.xml file is located in the initial.pak archive, at the
following path: initial.pak\[media]\classes\editor\brushes.xml
For example, you want to add some green oaks to your map. However, the default oaks
brush that is available in Distribution Brushes in Editor adds only autumn oaks (the
Oaks brush). But you are creating a summer map and they don’t fit.
However, you do know that actually there is an existing model of a green oak in Plants
(the "oak_green" plant model) and you’ve seen it in the Select Asset window:
So, now you can create a custom “OaksCustom” brush using this existing model and
add green oaks as Distributions, not as a separate Plants. You can also add some
bushes (e.g. the existing "bush_a" plant model) to this brush to enhance it and to add
oaks and bushes simultaneously.
Moreover, you can also link this custom plant brush to the “GrassCustom” custom grass
brush that you also would like to create, to add some grass and flowers (e.g. the "daisy",
"grass_daisy" and some other existing grass models).
In this case, your custom brushes.xml that you will need to add will contain descriptions
of two addtional brushes – OaksCustom and GrassCustom – and may look similar to
the following:
<DistributionBrushes>
<Plants>
<OaksCustom LinkedGrassBrush="GrassCustom" PlantsPerBlock="10">
<PlantType
Brand="oak_green"
Divergence="0.06"
MinSize="0.8"
72
MaxSize="1.3"
Perpendicularity="0.1"
/>
<PlantType
Brand="bush_a"
Divergence="0.1"
MinSize="0.8"
MaxSize="1.2"
Perpendicularity="0.8"
/>
</OaksCustom>
</Plants>
<Grass>
<GrassCustom PlantsPerBlock="1500">
<PlantType Brand="daisy" />
<PlantType Brand="grass_daisy" />
<PlantType Brand="grass_tall_can_b" />
<PlantType Brand="grass_flower_can_c" />
<PlantType Brand="grass_flower_can_e" />
<PlantType Brand="grass_flower_can_f" />
</GrassCustom>
</Grass>
</DistributionBrushes>
TIP: You can look up identifiers of models used in plant and grass brushes (e.g.
oak_green, bush_a, daisy, grass_daisy, etc.) in several places:
• You can look them up in the original brushes.xml, available in the initial.pak
archive, at the following path: initial.pak\[media]\classes\editor\brushes.xml
However, as we have seen with oaks, this predefined set of brushes may contain
not all plants and grass models. But most plants and grass are mentioned there,
so it’s a good source anyway.
• You cand identify the names of necessary models by the names of the
corresponding XML classes in the initial.pak, at [media]\classes\plants\ and
[media]\classes\grass\ folders. However, please note that the XML classes of
models available in the particular DLCs are located in the subfolder of DLCs in
the initial.pak, i.e. in the [media]\_dlc folder.
For example, XML class of daisy is located at
initial.pak\[media]\classes\grass\daisy.xml
but XML class of oak_green is located at
initial.pak\[media]\_dlc\us_03\classes\plants\oak_green.xml
NOTE: Descriptions of particular tags and attributes of brushes.xml will be added to the
next iteration of the "Custom Level Entities: Models, Overlays, and PbrMaterials"
guide along with details on Scenario #2 (see below). The corresponding gathering of info
and update of this guide on this subject is currently in progress.
73
After the creation of this Media\classes\editor\brushes.xml file and restart of the
Editor, if you have done everything correctly, you will see both of your custom brushes
(OaksCustom and GrassCustom) in the list of brushes and will be able to paint with
them:
74
5.8. Adding Overlays
On your map, you can lay roads of several types and add some decorative objects that use a
system of curves: railroad tracks, wires, pipes, etc.
All these objects are added to the map in the form of Overlay objects. These objects stretch
along the curve that is created by this tool.
To add an overlay to the map, you need to right-click the terrain (or the Overlays section in the
Scene View panel) and select Add Overlay in the context menu.
To add a selected overlay to the map, you need to double-click it in this window. After doing this,
the new overlay, which will contain two points, will be added to the map.
Each point of the overlay has its number, and these numbers begin with 0. You can expand an
overlay object in the Scene View window and determine the number of its points. The same
points can be seen in the main scene window:
75
You can add new points to the overlay, to set a more sophisticated curve for it. To add a new
point, you can select one of the existing points of the overlay, right-click it, and select Add after or
Add Before. Depending on the selected command, a point will be added to the overlay either
between the current number and the number before it or between the current number and the
number after it.
For example, if we select point #1 on the screenshot above, right-click it, and select Add before,
then the new point will appear between point #0 and point #1. If you select Add After, then the
new point will be added between point #1 and point #2. If you select point #0 and then perform
Add before - or select point #2 and then perform Add after, the overlay will be extended.
Points of the overlay can be moved similarly to moving models. To do this, you can:
● select the particular point of the overlay and, using arrows and holding the left mouse
button, move the point as necessary.
OR
● select the particular point of the overlay, then, in the properties of this point, change values
of the Position X and/or Position Y fields.
An overlay as a whole can also be moved (similarly to moving models).
Along with that, you can also change the width of the overlay at a particular point. To do this, you
can:
● hold the left mouse button in the center of the coordinates of the overlay, then move the
mouse to the side, increasing or decreasing the width.
OR
● select the particular point of the overlay, then, in the properties of this point, change the
value of the Width field.
NOTE #1: Overlay will be updated after each operation that changes it. However, some parts of it
may disappear, if they are out of the scope of the camera. You can see the final view of the
76
overlay by rebuilding the scene (right-click in the scene window, then Rebuild Terrain in the
context menu).
NOTE #2: Visualization of all points (nodes) of the Overlay with red points on the map may be
hidden by enabling the Hide all nodes of rivers and overlays ( ) option on the Toolbar, see
3.1. Toolbar buttons.
However, there is a workaround for this. If you need to create an intersection of roads of
different types within 1 terrain block, you can do the following:
1. Place the main parts of different roads on different terrain blocks.
2. In the intersection area, paint the terrain between roads using the PBR material
where the road texture is selected as one of the layers.
As an alternative option, you can hide the intersection under the layer of snow, mud, etc.
77
5.8.2. “Flatten”: Flattening roads
You can also specify the Flatten parameter in the overlay properties. If Flatten is set to True, the
overlay will try to flatten the terrain underneath it.
However, when enabled, this option flattens road bumps along its width (from one roadside to
another one). Along its length, the road may remain uneven. In other words, the road is flattened
in a perpendicular direction, i.e. there will be no oblique slopes from one roadside to another (see
screenshot below).
NOTE: The heightmap itself, which we have edited using the Geometry brush (see 5.2 above),
will remain unchanged when the Flatten parameter is enabled; the overlay will simply flatten it. To
see the result of this flattening - you need to perform the Rebuild Terrain operation.
78
5.8.4. “Brushes”: Adding Lampposts
Properties of an overlay also contain the Brushes section. These fields allow you to add
auxiliary objects that will be placed along the length of the overlay. For example, you can
add lamp posts along the side of the road.
To select the necessary type of objects that will be placed along the overlay, click the
[press] button next to the Edit field and select necessary brushes, in the same way as
when setting up a Distribution (see 5.7 above). Selected objects will appear on the map
after Rebuild Terrain.
79
NOTE: The intervals between the placed objects are defined in the configuration of the brushes.
This configuration is stored in the initial.pak archive, in the [media]\classes\editor\brushes.xml
file there:
80
For example, in the picture below, we placed a set of us_light_pole models and have
connected them with the wire_double overlay.
For example, you can be creating a map without any roads, but still want to plan some
main routes – through forests and rivers – that are possible for the player on this map.
81
In this case, you can use any overlay for marking this route, but make it invisible by
changing the IsInvisible option in its properties to True.
After rebuilding the map, this overlay will become totally invisible. It will become invisible
in the Editor too, allowing you to modify the surrondings and not mixing with them.
However, this overlay will still exist on the map, and, when you want to visualize it, you
can enable the Show all overlays ( ) option on the Toolbar (see 3.1. Toolbar
buttons). This will highlight it with the blue color and will allow you to modify it easier.
82
5.9. Adding Rivers and Water Objects
Rivers and other water objects are added to the map in the form of the River objects.
To create this object, right-click the terrain in the main window (or the Rivers section in the Scene
View), then select Add River in the context menu.
The logic of River objects related to adding points and changing their location on the map is
similar to overlays (see 5.8. Adding Overlays). However, there is also an important difference: in
contrast to roads, all points of the River object have a height. The water level in the river in this
area depends on this height.
2. Add the River object. Add the necessary number of points to this River object and
move/modify it so that it covers the bed of the river. This is done similarly to overlays.
However, you need to change the height of the points of the River object as well. You can
set the same height for each point of the River object in the Position Y parameter of this
point. The width of the river at a specific point of the River object can be set by changing
the Width parameter of this point.
83
3. Ensure that the river borders are correct. If necessary, adjust the terrain or the River
object.
4. After selecting the created River object in the Rivers section of the Scene View panel,
you can configure the following parameters in the object properties panel:
● AboveReferences - if set to “True”, protects the river colors selected for this river
from overriding by river color of the imported references. See 5.10.4.
Recommendations for the references for details.
84
● UseFlowMap - allows you to paint the direction of the flow with the Water brush.
○ If False, then the direction of the flow will be set to the direction, in which
the numbers of points of the River object are increasing. If you want the
opposite direction, you can invert the numbering of these points. To do this,
right-click on the River object in the Scene View and select River <N> -
Invert from the context menu.
○ If True, then you can specify the direction of the river flow using the
Geometry > Water brush in the Flow mode (see 5.2.5. Water).
● AvoidEffectOpacity - allows you to ignore the decrease of waves and current
velocity depending on depth. By default (False), the smaller the depth, the lower
the speed of the stream and the smaller the waves. The True value allows you to
make shallow, but wild mountain rivers.
● Clean Type - the color of the river when its water is clean.
● Muddy Type - the color of the river when its water is muddy. The mud is painted
by the specific WaterMud brush (see 5.2.6. Water Mud).
5. If necessary, using the Geometry > Water brush in the necessary mode (see 5.2.5.
Water), paint the following maps of the river:
● Foam - foam that will be drawn on the surface of the water. Painted by the
Geometry > Water brush in the Foam mode. The higher the Value with which you
paint, the more foam will be in this area. As a rule, foam needs to be painted in
some “wild” places of the river, for example, where water collides with rocks. The
result of painting the foam is stored in the green channel of the _water.tga texture
(in the map mod folder).
85
● Speed - the speed of the water in the direction of its flow (see Flow below).
Painted by the Geometry > Water brush in the Speed mode. The higher Value
you use for painting, the higher the speed of the water will be in this area. Value =
1 is the maximum water velocity. The result is stored in the blue channel of the
_water.tga texture (in the map mod folder).
● Flow - the direction of the flow of the river. This map is painted by the Geometry >
Water brush in the Flow mode. The created map will be applied to the river only if
UseFlowMap = True is set for the properties of the river (see step 4 above). By
default, the flow direction goes from point #0 of the River to its subsequent points.
But, if you set UseFlowMap = True and paint the river with the Water brush in the
Flow mode, this will override the default direction of the flow in the painted areas.
The Editor remembers the direction in which the brushstrokes were performed, and
stores this direction to define the river flow in this area. The color of the
brushstroke on the map depends on this direction. The result is stored in the
86
_water_flow.tga texture. Along with manual painting of the river flow, you can
generate a default flow map and then tune it with a third-party tool (see 5.2.0.3 for
details).
WARNING: When painting the direction of the water flow using the Flow mode,
the Autofade option of the brush should be disabled. The enabled Autofade
option will result in the automatic correction of brushstrokes, which may result
in the incorrect map of flow directions.
TIP: Firstly, set the main direction of the flow for the whole river using a brush
with a huge Size. Then, using the brush of a smaller size, add the details of the
river flow in the necessary areas: the water flow near obstacles and reflection
of water from the banks of the river (at 45 degrees from the direction of the
main flow). Finally, to achieve the best result and to avoid sharp borders
between parts of the flow, you can open the map of flow (the _water_flow.tga
texture) and blur the necessary parts of it in the image editor of your choice.
6. Switch to the Terrain section in the Scene View panel, and ensure that the river looks the
way you want, in terms of its speed, direction of flow, and foam.
87
7. If necessary, paint the dirty or muddy areas of water using the specific Geometry >
WaterMud brush (see 5.2.6. Water Mud).
NOTE: Visualization of all points (nodes) of the River with blue points on the map may be hidden
by enabling the Hide all nodes of rivers and overlays ( ) option on the Toolbar, see 3.1.
Toolbar buttons.
TIP: Starting with the DLC 9 (“Season 9: Renew & Rebuild”), you can add animated fish
models to your Rivers, see 5.5.3. Interesting Models: Creatures, People, etc.
88
Moreover, on the banks of the river, the surface of the water and the surface of the
terrain should not have the same height. (The height of the terrain should be a little bit
more.) Otherwise, the border between the water and the terrain will look unpleasant:
To fix this issue, you typically need to increase the height of the terrain a little bit.
Its principle is very simple - we create something similar to an overlay - the so-called
“sound riverbed”. And, we locate it so that it covers the riverbed of the river and its
surroundings, roughly copying the shape of the river.
89
Inside the created “sound riverbed”, the volume of the river sound will be at its maximum
and the sound of the river will be played as 2D sound. When the player is moving away
from the borders of the “sound riverbed”, the sound volume will fade, and the 2D→3D
panning will be performed. I.e, the 2D sound will be gradually transformed into 3D
sound, so the player in this area will be able to understand by the river sound in what
direction the river is located.
NOTE: As the sound of the river, the game will play the river sound from the sound
preset, which is set in the Ambient Preset parameter of the Terrain object (see 5.1.1.
Terrain Properties). If this parameter is not set, the river will be silent. If you want, you
can create a custom Ambient Preset, see 5.14.2. Adding Ambient Sounds below.
5. Each such point also has a Width parameter, which allows you to set the width
of the RiverMarkup object at this point. You can use the mouse wheel to change
the value of this field
6. Ensure that the Ambient Preset property of the Terrain object is set correctly
(see 5.1.1. Terrain Properties).
90
5.9.3. Background Water: Adding It on the Edges of the Map
The "Background Water" is the feature that allows you to create water surfaces outside
the map. I.e. you can expand the water surface, which is on the edge of the terrain,
outside of the map itself, and it will work as an extremely large water object on the edge
of the map, forming a better scenery for the player.
The properties of this feature are located within the properties of the Terrain, in the
Background Water group of fields.
2. Select the Terrain section in the Scene View panel and fill in the properties in
the Background Water section:
○ Height - specify the Y coordinate of the created River object here.
○ Type (Сlean) - specify here the same type of the color of the water as in
the created River object (the Clean Type field of the River object).
○ Enable for -X, … +X, …-Z, … +Z fields - these fields allow you to enable
the Background Water in the necessary direction (i.e. to place it in the
direction of the -X, +X, -Z, +Z axis - on the corresponding border of the
map). Typically, you enable here the option for axis corresponding to the
91
border, on which the River object is located. If necessary, you can enable
multiple options (e.g. if you want your map to have 2 or more water
borders).
3. Important nuances:
○ In the corners of the background water (i.e. in the corners of the
corresponding edge of the map), the surface of the water looks unusual:
So, we recommend you to mask these areas of the water surface with
mountains, rocks, or other objects. As an alternative option, you can
enable the background water for the adjacent side of the map.
○ To avoid displaying the “No entry” signs (marking the edge of the map) to
the player, place the border of the water of the River object at the
distance greater than 64 meters from the edge of the map. You can use
the Ruler tool to measure this distance (see 3.1. Toolbar buttons).
92
93
5.10. Adding References
A “reference” is an external map that can be added to your map. Typically, reference maps are
small or contain some reusable content. Or, this feature can be used for collaborative work on a
large map, where different modders work on their separate parts of a large map and then import
their pieces to it.
Names of all reference maps should start with the “ref_” prefix, according to the naming
convention.
The set of references used for the creation of original game levels is provided with the Editor, see
5.10.5 below for details.
NOTE: You cannot modify a reference you have imported to your map, except its position and
orientation. If you need to change its content, you need to modify the initial, source map of the
reference. Or, you can substitute some objects of the reference with different objects using
Mutators (see 5.10.3 below).
Before adding a reference to your map, you may want to compile it.
To do this:
1. Open the source file of the reference in the Editor (by clicking it in the File View
panel).
TIP: If necessary, you can skip the compilation of the reference, and simply add it to the
map. However, in this case, the preview texture of the reference will be white. But, the
reference in the final packed map will look the same.
94
3. In this dialog, select the .xml file of your reference and click Open.
After doing this, your reference will appear on the map as a brown rectangle:
4. Move and rotate your reference to put it to the necessary location on your map.
95
5. Then, deselect the reference by clicking somewhere on the map. The reference area will
be displayed on the map in the simplified mode:
6. Perform the Rebuild Terrain operation (you can do it by right-clicking the terrain and
selecting Rebuild Terrain from the context menu). After doing this, the content from the
reference will appear on the map:
96
7. As you can see, objects from the imported reference are added to your map. Moreover,
the height of the terrain and its material are also changed in the area of the reference (in
the screenshot above the material of the reference was applied to all terrain blocks on
which reference was located). Change of the material can be enabled or disabled in the
properties of the reference (in the ApplyMaterials field, see below).
8. To correctly merge the imported reference with your map, you can:
a. configure the properties of the reference that are displayed at the lower part of
the Scene View panel when the reference is selected.
b. Use the “RefMergeMask” brush to create a mask for merging a reference.
97
c. Use Mutators to substitute values of settings of the reference and its objects
according to a predefined mapping table (e.g. transform an autumn reference to a
winter one).
98
reference lies on, even if it does not cover them fully (see the screenshot of step
#6 in 5.10 above). If set to False, the reference will use the materials of the map
underneath (see the screenshot of step #7 in 5.10 above). The Materials used by
the reference can be also substituted with other materials using Mutators (see
5.10.3 below).
● ApplyMergeMap - whether or not the reference should use the RefMergeMask
map (the _ref_merge.tga texture) for merging the reference with the map. For
details, see 5.10.2. RefMergeMask brush below.
● MergeMaterialMasks - whether or not the reference should blend the materials
of the reference and the map using the RefMergeMask mask. For details, see
5.10.2. RefMergeMask brush below.
● MergeDistributions - whether or not the distributions specified in the reference
should be added to the map.
● WetnessBlendMode - specifies what should be done with the wetness of the
reference (see 5.2.2. Wetness). Possible values:
○ Replace - the wetness mask of the reference should replace the wetness
mask of the map below it.
○ Add - wetness values of the reference should be added to the wetness
values of the map below it.
● Snow - specifies what should be done with the depth of the snow of the
reference (see 5.2.7. Snow above). Possible values:
○ Replace - the depth of the snow of the reference should replace the
depth of the snow of the map below it.
○ Add - the depth of the snow of the reference should be added to the
depth of the snow of the map below it.
○ Ignore - the depth of the snow of the reference should be ignored. In this
case, the depth of the snow of the map below the reference will remain
the same.
● STG - displays the name of the reference (it cannot be modified).
NOTE: After changing the properties of the reference, you need to perform the Rebuild
Terrain operation to apply your changes. You can do it by right-clicking the terrain and
selecting Rebuild Terrain from the context menu.
99
Since it is used only for references, the RefMergeMask brush is hidden in the UI by
default. To display it, do the following:
1. Open the reference map in the Editor.
2. Right-click the Geometry section in the Scene View panel.
3. In the context menu, select Create Ref Merge Map.
4. After doing this, the _ref_merge.tga texture will be created in the folder of the
reference, and the RefMergeMask brush will be displayed in the Geometry
section:
5. Now you can select this brush and paint the mask for merging a reference with
your map.
When you select this brush, the main window will display the initial merging mask of the
reference:
100
This mask allows you to perform a smooth blending of the reference with the surrounding
landscape, blending of the materials and plants.
The yellow color on the mask means that this area will be added to the map when this
reference is imported to it. By default, the whole reference map has the same tone of
yellow, i.e. it is all added to the map.
Using the brush, you can specify areas that you do not want to add to the map (by
removing yellow color from them) and the areas where the content of the reference and
content of the map should be blended (the weight of the content from the reference in this
blending is defined by the tone of yellow it has on the mask).
The RefMergeMask brush works similarly to all other brushes from the Geometry
section: if the value selected in the Value slider is greater than 0.50, the brush will add
color to the mask; if it is less than 0.50, the brush will remove color. Painting is performed
by holding the right mouse button.
When painting the mask, you need to paint below objects located on the reference map
and below the water.
Typically, the resulting mask should be similar to the picture below, where the mask
gradually fades to the borders of the reference:
101
NOTE: This mask allows you to blend the materials of the reference and the map.
However, if layers of the materials are different then there will be a sharp difference in
them on the borders of the terrain blocks of the map and the reference. To avoid that,
you need to use the same base material in the reference and on the map. (Because of
that, we recommend you to use only the base material on the edges of the reference.)
Or, to avoid that you can use the appropriate Mutator.
Mutators that can be currently used by the Editor are defined in the initial.pak archive,
in the [media]\classes\editor\mutators.xml file there. This XML file has a simple
structure. Using corresponding tags, it defines “mutator” entities as objects that have an
ID and a mapping table with IDs of objects, which maps the objects you want to
substitute with alternative variants you want to use when this mutator is applied:
102
If you want to apply this mutator to all references imported to the map, you need to
specify its ID at the Mutator field in the properties of the Terrain:
103
NOTE: After changing the value of the Mutator field, you need to perform the Rebuild
Terrain operation to apply your changes. You can do it by right-clicking the terrain and
selecting Rebuild Terrain from the context menu.
NOTE: Mutators are applied only to references imported to the map. And to all such
references at once.
For example, let’s assume that we have a reference that was initially created in the
autumn setting and it does not fit well with the rest of the map, which is in summer and
“Russian” setting:
In this case, by using the mutator with the “rus” identifier for the terrain of the map, we
can transform this reference to the more appropriate setting:
104
5.10.4. Recommendations for the references
If you do not plan to use Mutators and plan to use materials of the reference (i.e.
ApplyMaterials is "True", see 5.10.1 above), then the base layer of the materials of the
reference and the map should be the same. For information on materials, see 5.3.
Assigning PBR Materials to Terrain above.
For type #1, you can use the ability to completely adjust the reference to the map. I.e.
you can set up the reference so that it modifies the level for itself only slightly. In this
case, typical settings of the reference are the following:
● Flatten = "False"
● ApplyMaterials = "False" (“True” is also possible)
● ApplyMergeMap = "True" (so, typically you need to specify the RefMergeMask, see
5.10.2. RefMergeMask brush).
● MergeMaterialMasks = "True"
● MergeDistributions = "True"
● WetnessBlendMode = "Add" (“Replace” is also possible)
● Snow = "Replace"
Type #2 is the most common and universal. We recommend you to make the terrain
below it rather flat to avoid sharp differences in height at the reference border. For this
type, the typical settings of the reference are the following:
105
● Flatten = "True"
● ApplyMaterials = "True"
● ApplyMergeMap="True" (so, typically you need to specify the RefMergeMask, see
5.10.2. RefMergeMask brush).
● MergeMaterialMasks = "True"
● MergeDistributions = "True"
● WetnessBlendMode = "Replace"
● Snow = "Replace"
On the map, at the location of the reference, we recommend you to remove all plants. However, if
necessary, you can leave some plants on the map at the edges of the reference area.
If your reference contains a river, the river colors from the reference may override the river colors
of another river on the map near it. The usage of river colors from the reference is the default
behavior in this case. However, if you set the AboveReferences field of your river on the map to
"True", you will protect its river colors from overriding.
By default, all these references are packed. To unpack them, select File > Unpack
references from the main menu.
After doing this, the system will ask you to confirm unpacking. If you have already
unpacked these references before and have changed some of them, your changes to
them will be lost after unpacking.
106
After confirming unpacking and a small delay, you will see a collection of new folders in
your prebuild folder: usa_6, usa4, usa4, usa, us, rus, rus3, rus4 and so on.
If you open these folders in Windows Explorer, you will see that they contain the regular
source files of the references (the XML file + folder for each reference).
References from this set are added to the map absolutely the same way as the regular
references.
Before adding a reference from this set to the map, you may want to compile it:
1. Open its source file in the Editor (this can be done from the File View panel).
2. Perform the Rebuild Terrain operation.
TIP: if necessary, you can skip the compilation of the reference, and simply add it to the
map without opening its source map and rebuilding. However, in this case, the preview
texture of the reference will be white. But, the reference in the final packed map will look
the same.
107
5.11. Adding Trucks
NOTE: By default, trucks are added to the map in Locked mode. In this mode, the player cannot
use the truck, until it is found.
WARNING: The truck in which the player starts the game must be marked as Active by
setting True in the corresponding field (see below). By default, the new truck has this field set to
False. At least one truck on the map must be Active for correct spawning!
To add a truck or trailer to the map, you need to right-click the map (or the Trucks section in the
Scene View) and select Add Truck.
After doing this, the model of the truck will appear on the map. Now, in the properties of the truck,
you can specify what particular truck will be spawned and set its addons and other settings. To
specify these properties, you need to select the created truck object in the Trucks section of the
Scene View. Properties are specified in the lower part of this panel.
108
When described step by step, the process is the following:
1. Right-click the map, select Add Truck.
2. Select the created truck in the Scene View in the Trucks section. Its properties appear in
the lower part of the panel.
3. Now choose what truck you need. In the Truck parameter in the properties of the truck,
click on the [press] button next to the Edit field. After doing this, the truck selection list will
be displayed. In the same list, you can also find models of trailers.
4. After adding a truck or a trailer to the map, you can set other settings for it. If the wrong
truck or trailer was selected, then the Edit field can be cleared by clicking the [press]
button next to the Сlear field.
5. The truck on the map will appear in its standard version. However, you can put the
necessary upgrades on it in the appropriate fields (see below). The name of the upgrade
must be entered manually, in the format of the ID of this upgrade in the game.
For example, you need to specify “g_scout_highway” for the highway gearbox. You can
view the list of all possible addons for the selected truck and their IDs directly in the game.
For instructions, see 5.11.1. How to identify IDs of truck parts below.
Using these IDs you can specify the following parameters:
● Engine
● Gearbox
● WinchUpgrade
● Suspension
● Wheels - Tires and rims (without specifying their size):
○ Type - specifies the type of the tires, see 5.11.1. E.g. wheels_scout1
○ Rim - specifies the type of rims, see 5.11.1. E.g. rim_offroad.
109
○ Tire - specifies the type of tires, see 5.11.1. E.g. allterrain_2.
● Customization - the number of the color/paint of the truck.
6. After doing this, you can fill in all other fields:
● Trailer - in this section, you can add a trailer to a truck. It is added the same way
as the truck (see above).
● Addons - in this section, you can add the necessary visual addons to the truck,
similarly to the selection of the truck. However, in the addon selection window, you
can select multiple addons (by clicking on them) and add them to the truck at once.
NOTE: For the full list of addons, including their IDs and their mapping to trucks,
please refer to Appendix A: List of Addons and Addon-Trucks Mapping (available
as a separate file: Addons_List.xlsx in the same documentation package).
NOTE: For the full list of addons, including their IDs and their mapping to trucks, please
refer to Appendix A: List of Addons and Addon-Trucks Mapping (available as a separate
file: Addons_List.xlsx in the same documentation package).
110
3. In the appearing menu, you can see all the necessary IDs:
NOTE #1: Previously, it was necessary to identify IDs of tyres and rims based on its
names. However, in the current version of the game you do not need to do this, since
their IDs are also displayed as is.
NOTE #2: Along with the Garage, you can look up identifiers of default car parts in the
XML class of the truck, available in the initial.pak archive. For example, here is the ID of
111
the engine from initial.pak\[media]\classes\trucks\chevrolet_kodiakc70.xml:
Please note that DLC trucks are available at the same path in the subfolders of DLCs
there, in the [media]\_dlc folder.
To remove this limitation and allow the player to purchase trucks from all countries, you
need to enable the isIgnoreCountryPurchaseBlock option in the zone settings plugin
window, save your changes there, and then repack the map.
To open this window, you need to click the Zone Settings button ( ) on the toolbar.
For more details, see 5.15. Adding Zones.
NOTE: Creation of the custom trucks is described in the “Integration of Trucks and
Addons” guide available as Integration_of_Trucks_and_Addons.pdf in the same
documentation package.
112
5.12. Adding Sounds
To add a point source of the 3D sound to the scene:
1. Right-click the terrain (or the Sounds section in the Scene View) and select Add
Sound.
2. A locator indicating the sound actor will appear in the scene. Move the appeared
actor to the necessary area of the scene:
3. To set the properties of the created sound actor, select it in the Scene View
panel, within the Scene > Terrain > Sounds section of it. Properties of the actor
are displayed at the lower part of the Scene View panel:
113
to specify the path to the sound, including its name without the file
extension. In the case of the custom sound file, the path must be
specified relative to the Media\sounds directory, with “/” as path
delimiters (see 5.12.2). For in-game sounds, see NOTE below.
NOTE: Along with custom sound files, you can use the sound files used
by the game. All these sounds are stored in the shared_sound.pak
archive, in the [sound] directory.
In the Sound file field, you need to specify the path relative to the
[sound] folder. When specifying a path, you can use either slashes (“\”)
or backslashes (“/”), and you should not specify the file extension of the
sound file.
For example, if you want to play the sound located in the
shared_sound.pak at the following path:
[sound]\actors\actor_electric_01_loop.pcm, then you need to specify
the following value in the Sound file field:
actors/actor_electric_01_loop
114
value of this parameter, not the two values (see the screenshot
above). They cannot be used separately.
○ If you want to play your sound only during the night, then you
should set this parameter to NIGHT_FOREST, NIGHT_WIND
Again, these two comma-separated IDs are the single value of this
parameter and cannot be used separately.
You can see that many series of the files in the [sound] directory of the
shared_sound.pak archive have been designed that way.
For example, the set of sounds for a night owl, which you can find in the
[sound]\amb\amb_us_autumn\amb_us_autumn_night_forest_owl\ directory,
consists of 5 sounds. Each of these sound files has the suffix “__<N>” (the double
underscore with a number) in the file name:
● amb_us_autumn_night_owl_rnd__1.pcm
● amb_us_autumn_night_owl_rnd__2.pcm
● amb_us_autumn_night_owl_rnd__3.pcm
● amb_us_autumn_night_owl_rnd__4.pcm
● amb_us_autumn_night_owl_rnd__5.pcm
To configure the sound actor to play a series of these sounds, rather than a particular
sound, you need to specify the name of one of these files without its “__<N>” suffix in
the Sound file field of this actor (see 5.12. Adding Sounds above). In this case, the
whole series of these sounds will be played.
For example, to play in your sound actor all the files above, you can specify the following
value of the Sound file parameter in the actor’s properties:
amb/amb_us_autumn/amb_us_autumn_night_forest_owl/amb_us_autumn_night_
owl_rnd
115
5.12.2. Adding Custom Sound Files
When configuring a sound actor (or a sound domain, see 5.13 below), you can use
custom sound files.
WARNING: For custom sounds, 16 bit is a strict limitation. I.e., you will not be able to
use, for example, 32-bit sounds for your map. However, the limitation of 44 kHz is a soft
one (e.g., we have the 22-kHz sounds in the game also).
2. Optional: You can create subfolders there to group some of your sound files.
Names of these folders must not contain spaces, they can contain Latin
characters, digits, and underscores.
For example, you can create the Media\sounds\my_directory folder there.
3. Put your custom sound files in these folders, in the .wav format.
For example, you can add
Media\sounds\my_sound.wav or Media\sounds\my_directory\my_sound.wav
5. When you pack your map, custom sound files will be added to the .pak file.
NOTE: Along with standalone custom sounds, you can also add and use custom series
of sounds, similarly to in-game series of sounds – see 5.12.1 above.
116
5.13. Adding Sound Domains
You can add 3 types of Sound Domains to the map:
● Regular SoundDomain - sets the area where a certain 2D stereo sound will
play. For example, using this object we can configure the playback of the water
lapping in the swamp.
● OneShotSoundDomain - these domains are designed to play single 3D sounds
inside a certain ring around a player when he/she enters the domain. Sounds will
be generated at a random position within this ring. For example, you can
configure a sound of the rockfall using this type of domain. When the player
drives near a large rock and enters the domain located near it, the player will
hear that the sounds of crumbling stones will be played around him/her at a
random position with a certain frequency.
● NoMusicSoundDomain - these domains are designed to turn off the in-game
music in certain areas. When the player enters the domain of this type, the
volume of the music is gradually decreased to zero.
All these types of domains are added to the map in a standard way - by right-clicking the
SoundDomains section in the Scene View panel and selecting Add <type of the
added domain> in the context menu.
After that, the domain will be created, and the area of this domain will appear on the
map. By default, this area is a square with four vertices.
117
You can edit the domain area in the standard way: move the vertices, add vertices to
this area, or delete unnecessary vertices.
To add a new vertex, right-click this domain in the Scene View panel and select Add
vertex from the context menu. Or, if you want to add a vertex at a particular position,
you can select a particular vertex of a domain, right-click it, and select Add vertex in the
context menu. In this case, the new vertex will be added in the middle between the
selected vertex and the next one in a clockwise direction.
NOTE: If you want the domain to work correctly, its area must be convex. If you need
to create a domain of a more complex shape, you need to compose it from several
convex domains with the same settings.
After the setup of the domain area, if the domain is selected, you can configure its
properties at the lower part of the Scene View panel.
These properties vary for different types of domains. They are described in the
subsections below.
NOTE: The Sound file field (see 5.12 above), which sets a sound or a series of sounds
to be played (for SoundDomain and OneShotSoundDomain domains), works the
same way as for regular sounds. In this field, you need to specify the path to the sound,
including its name without the file extension. In the case of the custom sound file, the
path must be specified relative to the Media\sounds directory, with “/” as path delimiters
(see 5.12.2). Along with custom sound files, you can use the sound files used by the
game. All these sounds are stored in the shared_sound.pak archive, in the [sound]
directory.
In this case, in the Sound file field, you need to specify the path relative to the [sound]
folder. When specifying a path, you can use either slashes (“\”) or backslashes (“/”), and
you should not specify the file extension of the sound file.
For example, if you want a domain to play a series of sounds located in
shared_sound.pak at the following path:
[sound]\amb\domains\amb_dom_autumn_day_bog_frogs_rnd_set\,
then you need to specify the following value in the Sound file field:
amb/domains/amb_dom_autumn_day_bog_frogs_rnd_set/amb_dom_autumn_day
_bog_frogs_rnd
For more details on playing sounds and sound series, see 5.12. Adding Sounds and
5.12.1. Adding Series of Sounds above.
118
5.13.1. SoundDomain Properties
For a general description of a SoundDomain, see 5.13. Adding Sound Domains.
NOTE: Along with custom sound files, you can use the sound files used by the
game. All these sounds are stored in the shared_sound.pak archive, in the
[sound] directory.
In this case, in the Sound file field, you need to specify the path relative to the
[sound] folder. When specifying a path, you can use either slashes (“\”) or
backslashes (“/”), and you should not specify the file extension of the sound file.
For example, if you want a domain to play a series of sounds located in
shared_sound.pak at the following path:
[sound]\amb\domains\amb_dom_autumn_day_bog_frogs_rnd_set\,
then you need to specify the following value in the Sound file field:
amb/domains/amb_dom_autumn_day_bog_frogs_rnd_set/amb_dom_autu
mn_day_bog_frogs_rnd
For more details on playing sounds and sound series, see 5.12. Adding Sounds
and 5.12.1. Adding Series of Sounds above.
● Overlay - the weight of the sound of this domain (from 0 to 1). The sound of the
domain will be mixed with the main ambient sound of the scene with this weight.
● Volume - the playback volume. The default value is 1 (the maximum, initial
volume of the sound file). If you specify values in the [0,1] interval, the volume of
the sound file will be multiplied by this parameter (and the sound will be
decreased correspondingly).
● Fading distance - the distance (in meters) from the domain border where the
sound will fade smoothly from its maximum volume (at the domain border) to
zero (at the fading distance). On the map, this area of the fading sound is
displayed as the semi-transparent external area around the domain:
119
● Conditions - if this parameter is not specified (the field is empty), the sound will
play at any time, during day or night. However, you can limit the interval during
which it can be played:
○ If you want to play your sound only during the day, then you should set
this parameter to DAY_FOREST, DAY_WIND
Please note that these two comma-separated IDs are the single value of
this parameter, not the two values (see the screenshot of domain
properties in 5.13). They cannot be used separately.
○ If you want to play your sound only during the night, then you should set
this parameter to NIGHT_FOREST, NIGHT_WIND
Again, these two comma-separated IDs are the single value of this
parameter and cannot be used separately.
NOTE: Along with custom sound files, you can use the sound files used by the
game. All these sounds are stored in the shared_sound.pak archive, in the
[sound] directory.
In this case, in the Sound file field, you need to specify the path relative to the
120
[sound] folder. When specifying a path, you can use either slashes (“\”) or
backslashes (“/”), and you should not specify the file extension of the sound file.
For example, if you want a domain to play a series of sounds located in
shared_sound.pak at the following path:
[sound]\amb\domains\amb_dom_rolling_stones_rnd_set\,
then you need to specify the following value in the Sound file field:
amb/domains/amb_dom_rolling_stones_rnd_set/amb_dom_rolling_stones_
rnd
For more details on playing sounds and sound series, see 5.12. Adding Sounds
and 5.12.1. Adding Series of Sounds above.
● Volume (Min, Max) - the volume range of the played sounds. Each new sound
will be played with a new random value of the volume from this range.
● Radius (Min, Max) - these fields set a ring around the player, with the inner
radius of the ring equal to the Min value and its outer radius equal to the Max
value. Both Min and Max values are specified in meters. The sound will be
played at a random point inside this ring.
● Interval (Min, Max) - these fields set the minimum and maximum time intervals
between sounds (in seconds). Each successive sound will be played after the
previous one with a delay, and the value of this delay will be each time taken
randomly from the [Min, Max] range.
● Weather Intensity threshold - this field is currently not used. You should keep
the default value of it, which is -1.
● Conditions - if this parameter is not specified (the field is empty), the sound will
play at any time, during day or night. However, you can limit the interval during
which it can be played:
○ If you want to play your sound only during the day, then you should set
this parameter to DAY_FOREST, DAY_WIND
Please note that these two comma-separated IDs are the single value of
this parameter, not the two values (see the screenshot of domain
properties in 5.13). They cannot be used separately.
○ If you want to play your sound only during the night, then you should set
this parameter to NIGHT_FOREST, NIGHT_WIND
Again, these two comma-separated IDs are the single value of this
parameter and cannot be used separately.
121
● Distance threshold - the distance (in meters) from the domain border, at which
the music volume decreases/increases.
● Fade in time - the time (in seconds) for the fade-in transition. This transition will
increase the volume of music (from zero to the volume set in the game) when the
player is leaving the domain.
● Fade out time - the time (in seconds) for the fade-out transition. This transition
will decrease the music volume (from the volume set in the game to zero) when
the player is entering the domain.
122
5.14. Adding Music and Ambient Sounds
Along with custom sounds, you can also add custom music and custom ambient sounds
to your maps.
However, if you want, you can use only one or two tracks and name them
as you like.
b. Create the subfolder of the level in this folder (e.g. aspen for
level_aspen.xml) and put the music files there.
123
3. Create or modify the Media\classes\sounds\music_presets.xml file:
a. Create the Media\classes\sounds folder (if you have not created it
before).
b. In this folder, create the music_presets.xml file (if you have not created
it before).
NOTE: If you have already created this file for another level, you need to
append it with new values corresponding to your new level (see below).
c. In this file, for each level where you want to use music, specify links to
your level and its music files, using <LevelMusic>, <Sound>, and
<GarageMusic> tags and their attributes.
For example:
<MusicPresets>
<LevelMusic LevelName="level_aspen">
<Sound
Name="music/aspen/aspen_night"
StartTime="24"
EndTime="6"
FadeInTime="30"
FadeOutTime="10"
/>
<Sound
Name="music/aspen/aspen_morning"
StartTime="6"
EndTime="13"
FadeInTime="30"
FadeOutTime="10"
/>
<Sound
Name="music/aspen/aspen_day"
StartTime="13"
EndTime="20.5"
124
FadeInTime="30"
FadeOutTime="10"
/>
<Sound
Name="music/aspen/aspen_evening"
StartTime="20.5"
EndTime="24"
FadeInTime="30"
FadeOutTime="10"
/>
<GarageMusic
SoundName="music/aspen/garage_aspen"
FadeInTime="30"
FadeOutTime="10"
Volume="1"
/>
</LevelMusic>
</MusicPresets>
Where:
● LevelName - must correspond to the exact name of your map
without file extension (e.g. level_aspen for level_aspen.xml).
● Name and SoundName - must contain the path to the corresponding
music track, relative to the Media\sounds\ folder and without the
file extension. E.g., music/aspen/aspen_evening for
Media\sounds\music\aspen\aspen_evening.wav
● If you are using separate music tracks for different times of the
day, as in the example above, you should keep the values of
StartTime, EndTime, FadeInTime, and FadeOutTime. They are
already set up for correct switching of the tracks according to the
change of daytime.
However, if you want to change them:
○ StartTime and EndTime - specify the time of the
beginning and end of the track, in in-game hours.
E.g., the "13" value here will correspond to 1:00 p.m.
○ FadeInTime and FadeOutTime - specify the fade in and
fade out duration, in seconds.
● Volume - coefficient that corresponds to the volume of the music in
the Garage.
125
Now, if you have specified all values correctly, your level will contain music and you can
test it by loading the level in the game. To switch between different times of the day, you
can use the Skip Time feature on the navigation map.
NOTE: If necessary, you can remove the playback of the music within a certain area
using NoMusicSoundDomain (see 5.13.3. NoMusicSoundDomain Properties).
Ambient sounds of the second type are defined by the Ambient Preset, which is
specified in the terrain properties (see 5.1.1. Terrain Properties).
If you want to use one of the existing ambient presets for your level, you can simply
specify the name of the preset in this field. However, if necessary, you can create your
own custom Ambient Preset, see below.
<AmbientSounds>
<Volume Min="0.6" Max="0.6" FadeTime="3.0"/>
<Interval Min="1.0" Max="1.0" />
<DayForest Sound="amb/aspen/day_forest_loop">
<RandomSet
Sound="amb/aspen/day_forest_birds1/day_forest_birds1_rnd"
MinRadius = "10"
MaxRadius = "35"
MinInterval = "30"
MaxInterval = "50"
MinVolume = "0.5"
MaxVolume = "0.7"
/>
<RandomSet
Sound="amb/aspen/day_forest_birds2/day_forest_birds2_rnd"
MinRadius = "10"
MaxRadius = "35"
MinInterval = "25"
126
MaxInterval = "45"
MinVolume = "0.5"
MaxVolume = "0.7"
/>
</DayForest>ло <DayWind Sound="amb/aspen/day_wind_loop">
<RandomSet
Sound="amb/aspen/day_wind_birds1/day_wind_birds1_rnd"
MinRadius = "10"
MaxRadius = "35"
MinInterval = "25"
MaxInterval = "50"
MinVolume = "0.5"
MaxVolume = "0.7"
/>
<RandomSet
Sound="amb/aspen/day_wind_birds2/day_wind_birds2_rnd"
MinRadius = "10"
MaxRadius = "35"
MinInterval = "30"
MaxInterval = "50"
MinVolume = "0.5"
MaxVolume = "0.7"
/>
</DayWind>
<NightForest Sound="amb/aspen/night_forest_loop">
<RandomSet
Sound="amb/aspen/night_forest_elves/elf_music"
MinRadius = "18"
MaxRadius = "55"
MinInterval = "15"
MaxInterval = "40"
MinVolume = "0.5"
MaxVolume = "1.0"
/>
<RandomSet
Sound="amb/aspen/night_forest_owl/night_owl_rnd"
MinRadius = "10"
MaxRadius = "40"
MinInterval = "25"
MaxInterval = "50"
MinVolume = "0.7"
MaxVolume = "1.0"
/>
</NightForest>
<NightWind Sound="amb/aspen/night_wind_loop">
<RandomSet
Sound="amb/aspen/night_wind_wolf/night_wind_wolf_rnd"
127
MinRadius = "10"
MaxRadius = "40"
MinInterval = "25"
MaxInterval = "55"
MinVolume = "0.9"
MaxVolume = "1.0"
/>
</NightWind>
<WaterFlow
Sound2D="amb/amb_river_flow_near_loop"
Sound3D="amb/amb_river_flow_far_loop"
MaxDist="150"
Dist2D="0"
Dist3D="30"
/>
</AmbientSounds>
128
● the type of the area the player is in, i.e. whether it is open space (WIND) or not
an open space (“forest”, FOREST). The game automatically defines this type
based on the predefined conditions and the position of the player on the map.
NOTE: When the player changes his/her position and, for example, moves from
DAY_FOREST to DAY_WIND, the corresponding presets of ambient sounds are
changed smoothly (they are blended).
I.e., we will have 4 different loops in one preset for different conditions: DAY_FOREST,
DAY_WIND, NIGHT_FOREST, and NIGHT_WIND.
These 4 “condition subpresets” are defined in the main ambient preset using the
<DayForest>, <DayWind>, <NightForest>, and <NightWind> tags.
NOTE: When you are specifying the value of the Conditions field for your sounds, you
also use these conditions, see 5.12. Adding Sounds.
NOTE: If you are using a series of sounds, the name of the file should be
specified without the “__<N>” suffix (see 5.12.1).
2. Random set, which is played with specified time intervals in addition to the main
sound loop (over it). It is similar to the OneShotSoundDomain (see 5.13.2.
OneShotSoundDomain Properties), which covers all the map, i.e. the sound will
also be played within a certain ring around the player, etc. The properties that
define how the sound will be played here are identical to properties of
129
OneShotSoundDomain (see below).
There can be multiple random sets in one subpreset. Parameters of random sets
are set within the <RandomSet> tags, which are children of the condition
subpreset tags. There can be multiple <RandomSet> tags within a condition
subpreset tag. Typically, the sound file(s) used in a random set is a series of
sounds (see 5.12.1).
For example:
<DayWind Sound="amb/my_level_1/day_wind_loop">
<RandomSet
Sound="amb/my_level_1/birds/birds_rnd"
MinRadius = "10"
MaxRadius = "35"
MinInterval = "25"
MaxInterval = "50"
MinVolume = "0.5"
MaxVolume = "0.7"
/>
</DayWind>
Where:
● Sound - the sound or the series of sounds this random set will play. You
should use Mono sounds here. You need to specify the path to the file
of the sound here, relative to the Media\sounds\ folder and without the
file extension. If you are using a series of sounds, the name of the file
should be specified without the “__<N>” suffix (see 5.12.1). E.g.,
amb/my_level_1/birds/birds_rnd for
Media\sounds\amb\my_level_1\birds\birds_rnd__1.wav and
Media\sounds\amb\my_level_1\birds\birds_rnd__2.wav series.
For more info on the properties of sound files and their location, see
below.
● MinRadius and MaxRadius - these fields set a ring around the player,
with the inner radius of the ring equal to the Min value and its outer radius
equal to the Max value. Both Min and Max values are specified in meters.
The sound will be played at a random point inside this ring.
● MinInterval and MaxInterval - these fields set the minimum and
maximum time intervals between sounds (in seconds). Each successive
sound will be played after the previous one with a delay, and the value of
this delay will be each time taken randomly from the [Min, Max] range.
● MinVolume and MaxVolume - the volume range of the played sounds.
Each new sound will be played with a new random value of the volume
from this range.
<Waterflow> tag:
This tag contains attributes that define the playback of the sounds of the river.
130
<WaterFlow
Sound2D="amb/amb_river_flow_near_loop"
Sound3D="amb/amb_river_flow_far_loop"
MaxDist="150"
Dist2D="0"
Dist3D="30"
/>
NOTE: For these sounds to be played, the “sound riverbed” should be set up for the
river, see 5.9.2. Adding River Sounds via “RiverMarkup” for more details.
131
5.14.2.2. The process of adding ambient sounds
1. If you want to create a custom ambient preset, you should start with preparing
sounds for it:
a. Amount of files:
Typically, for a good preset, you need:
i. one main loop for each “condition subpreset” (e.g <DayForest>,
<DayWind>, <NightForest>, and <NightWind>), i.e. 4 loops in
total.
ii. as many <RandomSet> sounds within each “condition subpreset”
as you like. Typically, a series of sounds is used for each random
set.
iii. 2 sound loops for the river: one that will be played when the player
is close to it and one to be played when the player is far from it
NOTE: You can use single sound files or sound series for all these
sounds.
NOTE: The volume level for ambient sounds and sounds of the
river can vary greatly, you should tune it on a per-sound basis.
c. Naming:
Since there are really lots of files, you will probably want to use the
naming convention of some sort. For example, you can start the names of
main loops with the name of the condition subpreset, e.g.
day_wind_loop.
And, for sure, if you use the series of sounds, you need to follow their
naming convention (see 5.12.1. Adding Series of Sounds).
2. Then, you need to put all these files into a hierarchy of directories with the
Media\sounds\ folder as a root.
Typically, the process is the following (however, you can create your own
hierarchy, if you want to):
a. Create the sounds subfolder in the Media folder, if it is not created.
For details on the location of the Media folder, see 4. File Paths and
Naming.
b. In the sounds folder, create the amb subfolder, to separate all your
ambient sounds from other sounds.
132
c. In the amb folder, create the folder of your level. E.g. aspen for
level_aspen.xml
d. Put the main loops in the folder of your level.
For example:
e. If you use the series of sounds for random sets, create subfolders for
them in the folder of the level, and put the sounds of random sets there.
For example:
f. Put the sounds of the river somewhere in the hierarchy. For example, in
the folder of the level, if they are specific, or straight into the amb folder if
you plan to use them for multiple maps.
133
3. Now, you need to create the XML class of the ambient preset somewhere in the
Media\classes\ambients\ folder:
a. Create the XML class of the ambient preset, with all paths to your sound
files (ensure that they are correct) and other settings. For details, see
5.14.2.1. Contents of the Ambient Preset XML file above.
Name the preset without spaces and special symbols (except “_”).
For example: snd_amb_preset_aspen.xml
b. In the Media folder, create the classes subfolder, and, within it, the
ambients folder. Put the XML of the preset there.
For example:
4. Open the Editor, open the necessary map, and specify the name of this preset in
the Ambient Preset field of the Terrain properties, without the file extension.
For example: snd_amb_preset_aspen
134
If you have done it all correctly, the .pak file of your map will now contain ambient
sounds.
135
5.15. Adding Zones
Using zones you can add to your map such in-game objects as Fuel Stations, Garage,
Cargo Loading Zones, and so on. Along with that, zones can be used in various
objectives (Contracts, Tasks, and Contests) that you may want to add to your map, see
5.16. Adding Objectives for details.
NOTE: Zones cannot be used in References. They can be added there, but they will not
work correctly on the target map when the Reference with these zones will be added to
it.
You should specify the properties of each zone very carefully. The Editor allows you to
configure a zone with incorrect parameters and logic (e.g. specify multiple “props” for
one zone), which can result in unpredicted behavior.
NOTE: The system validates some aspects of the configuration of zones during packing.
The log of occurring errors can be found in
Documents\My Games\SnowRunner\base\logs\ModMapError.txt
e.g. C:\Users\<username>\Documents\My Games\SnowRunner\base\logs\ModMapError.txt
To create a zone:
1. Open the necessary map in the Editor.
2. Add the zone locator to the map.
To do this:
a. Right-click the terrain (or the Zones section in the Scene View panel),
and select Add Zone from the context menu.
b. Move the locator to the necessary location of the map in a standard way.
136
c. Save the map.
4. Specify other properties of the zone locator, such as its name for UI (Name),
icons, etc. See 5.15.2. Zone Locator properties for details.
This will open the window of the specific plugin (ZoneSettingsEditor.exe) that
allows you to configure the logic of zones.
137
“test_zone_1” in our example, see step 3 above).
In these list entries, you will specify the properties of your zones. (E.g. we will
specify properties of our zone in the “test_zone_1” section).
WARNING: The ID of the zone locator in the Editor and the name of the
corresponding entry in the TERRAIN LOCATORS LIST must be exactly the
same and must not contain spaces. This is important since the zone locator in
the Editor and its zone settings specified in the plugin are linked by this ID.
So, if you change the ID of the zone locator in the Editor, you need to change it in
the TERRAIN LOCATORS LIST to exactly the same value.
If necessary, you can modify the value of this ID in TERRAIN LOCATORS LIST
by double-clicking it or by selecting it and pressing F2:
8. Zone properties that depend on the type of the zone (see 5.15.1 below) are
specified in the props section. From the point of view of type-specific zone
properties, there are two types of zones in the game:
a. Zones that are visible to the player as a “zone” and have a particular type
(e.g. Fuel Station, Garage Entrance, and so on). These zones should
have the props section with a set of properties corresponding to the type
of the zone.
b. Zones that just map a specific area on the map to some ID, which is used
somewhere else. Typically, these zones are somehow related to
objectives (e.g. the player needs to deliver a specific truck there, etc.).
These zones can have the empty props section.
NOTE about the “isCoop” option: Now all zones also have the isCoop option
above the props section. This option was developed specifically for racing
Contests of the DLC7 ("Season 7: Compete & Conquer"). Enabling this option
marks this zone as specifically “cooperative” zone that will work and will be
138
visible in the COOP mode only. Typically, this option is enabled only for zones
related to objectives that work in COOP (they also have the isCoop option, see
5.16.2.1 below) and only when these zones are not used in the single player
mode. If the zone is used both in COOP and single player modes (in different
objectives) this option should be disabled for it.
9. So, if you want to simply map a specific zone on the map to some ID (for
example, to create an objective for this zone later on), do not fill the props
section and proceed to steps 11-12 below.
10. Or, if you want to create a zone of a particular type, you need to select this type
and specify the logic for it. I.e., you need to add a set of properties to the props
section and fill them in.
To do this:
a. Click the plus button ( ) next to props below your zone in the list.
WARNING: One zone must have only one set of properties (which
corresponds to its type)! Adding multiple entries to the props list may
result in unpredicted behavior.
c. This will add to the form the set of properties that corresponds to the
selected type of zone.
139
d. Setup the logic of the zone by filling in the appeared fields.
Some zone types, like …AutoRefuel or …AutoRepairAndRestore,
require no properties to be filled in. Some, like CargoLoading, require
the setup of their fields. For descriptions of fields corresponding to the
particular zone types, please refer to the subsections in 5.15.1. Properties
of various Zone Types.
11. After you have specified properties of all zones that were added to the map, you
need to save your changes. To do this, in the plugin window, press CTRL+S or
select File > Save in the main menu of the plugin window.
The values of the specified zone properties are saved in the folder of the map
within the \Media\levels\ folder. After saving, it will have two files related to
zones:
a. user_name_of_map.txt - which stores the name of your map (to link
properties to it).
b. zone_settings.json - which stores specified zone properties in the JSON
format:
140
NOTE: Properties of objectives are stored in the same folder, in the
objective_settings.json file.
12. Now, pack your map. After doing this, you will be able to test your zones in the
game.
NOTE: Along with zone properties, the ZoneSettingsEditor.exe plugin also allows you
to specify objectives for your map (see 5.16 below) and enable the “fog of war” feature
(see 5.15.4 below).
TIP #1 : All type-specific zone properties can be combined. I.e., a single zone can have
multiple zone types in the props section. For example, this allows you to make a fuel
station (ZonePropertyFuelStation) that will automatically repair player’s vehicle
(ZonePropertyAutoRepairAndRestore).
TIP #2: If necessary, you can open the particular zone to the player or even dynamically
change the props of the zone as a reward to the player when they accomplish a
particular objective. For details, see ObjectiveRewardOpenZoneProperties and
ObjectiveRewardUpdateZoneProperties as values of rewards in 5.16.2.1. Common
fields (for all objectives).
Since these subsections go not in the alphabetical order (by the names of corresponding
141
ZoneProperty… sets of properties), here is a small index that lists all ZoneProperty…
properties with links to corresponding subsections in the guide:
142
• ZonePropertyManualLoading – see 5.15.1.1. Loading Cargo: ...CargoLoading
and ...ManualLoading zones
143
amount (Count If Finite) of cargo this zone can give to the player. You can add
multiple types of cargo here (see the screenshot above). To add a type of cargo:
o Click the next to the cargosSettings list.
o In the appeared list entry, double-click the default value next to the name
field and select the necessary type of cargo.
o If necessary, double-click the Count If Finite and specify the amount of
cargo this zone can give. The “-1” value in this field corresponds to the
unlimited amount of cargo.
● modelBuildingSetting – (optional settings) These settings allows you to play
animation after loading cargo from this zone to imitate the process of dismantling
a building. See 5.15.1.2.1. Model Building Settings for ...CargoLoading zones for
details.
The ZonePropertyManualLoading zone is the zone that adds the “manual loading of
the cargo” feature to the existing ZonePropertyCargoLoading zone (see platformId
above). The ZonePropertyManualLoading zone itself has no properties.
Along with regular ZonePropertyCargoLoading zones there are two types of zones
that are similar, but provide some debug functionality:
• ZonePropertyCargoLoadingAllCargo – Debug property. Similar to regular
ZonePropertyCargoLoading, but allows the player to load all types of Cargo
without limitations of their amount.
• ZonePropertyCargoLoadingAlwaysVisible – Debug property. Similar to
regular ZonePropertyCargoLoading, but makes the zone always visible and
available to the player.
NOTE: For main info on Model Building Settings and linking animated objects to cargo
delivery or accomplishment of some Stages, see 5.16.3. Model Building Settings.
144
• Names of states of the model in its XML class are different. For example, in
initial.pak\[media]\_dlc\us_03\classes\models\constr_wood_01_objective.xml you
will see such states as state_start and state_end.
145
NOTE: The _objective model still needs to be tagged to link it with these settings. See
5.16.3. Model Building Settings for details.
If you want to create a Fuel Station for the Normal Mode of the game, you do not need to
specify any properties of this zone – only the ZonePropertyFuelStation property itself is
required for the zone.
However, if you want players to use this Fuel Station in the Hard Mode of the game, you
can specify the price of the fuel (its price per liter) at this Fuel Station in the
pricePerLiter property.
TIP: Along with …FuelStation zones, you can also use …AutoRefuel zones, see
5.15.1.12. Automatic Refueling: …AutoRefuel zones below.
WARNING: The size of the zone locator for the Garage exit zone should be sufficient for
spawning large trucks without issues. Otherwise, if the size of the zone is small and
there is an adjacent building of the Garage, a spawned truck may collide with the wall of
the building or the player may experience issues with the camera. If the amount of free
space for the zone is low, try to locate the exit zone along the Garage building.
The Garage entrance zone, along with the the …GarageEntrance property itself, has
also the Upgradeable Garage State section. If you want a regular Garage that will be
fully functional from the start, leave “null” as the value of this section. If you want to set
up the Garage where some parts of functionality are disabled at the start, but will
146
become active upon accomplishment of some objectives by the player, you will need to
fill in the Upgradeable Garage State section and enable a specific option in Terrain
properties, see 5.15.1.3.1. Setting up a Repairable (Upgradeable) Garage below for
detals.
The Garage exit zone has no additional properties, except the …GarageExit property
itself.
A map can contain only one ZonePropertyGarageEntrance zone and only one
ZonePropertyGarageExit zone.
Step 1: Specify what functionality of a Garage will be initially available for the player.
This can be done by enabling and filling in the Upgradeable Garage State section of
the ZonePropertyGarageEntrance zone:
The check boxes in the Upgradeable Garage State section correspond to different
functionality areas that are initially enabled for the player in the Garage. By disabling
them – you disable the corresponding functionality at the start.
147
Step 2: Configure one or more objectives that will activate certain functionality areas of a
Garage as rewards for their accomplishment.
Particularly, when setting up an objective, in the rewards field, add the
ObjectiveRewardsUpgradeGarage section and fill it in. Particularly, fill in the following
fields there:
• Garage Entrance Zone – the zone of the upgradeable Garage (where you have
disabled some functionality at Step 1).
• Feature To Unlock – the particular (previously disabled) feature of the Garage
that you want to enable as the reward for the accomplishment of this objective.
Step 3: Specify that you will be using upgradeable Garage on your map in Terrain
properties.
Particularly, you will need to enable the Use upgradeable garage option in the
properties of Terrain:
WARNING: If this option is set to False, the upgradeable Garage will not work properly
and there will be several issues with it (the black screen inside the Garage, vehicles
"sticking" to terrain when leaving Garage, and, sometimes, even crashes). So, please do
not forget about enabling this option when setting up the upgradeable Garage.
NOTE: However, by default this option is disabled, for memory optimization reasons. It
should be enabled on maps with upgradeable Garage only.
148
5.15.1.4. Trailer Store: …TrailerAttach zones
The ZonePropertyTrailerAttach property allows you to create the “Trailer Store” zones.
These zones have no properties that you need to specify - only the
ZonePropertyTrailerAttach property itself is required.
NOTE: For information on IDs of the various parts of the truck, see 5.11.1. How to
identify IDs of truck parts above.
149
The properties of a Watchtower here are the following:
● range - the range of the Watchtower (that defines the opened “explored” area), in
meters.
● Duration of transition - Duration of the animation of “observation” (with the
camera moving according to the specified camera settings, see below) that will
be played when the player selects “Launch Observation” for this Watchtower.
The value is specified in milliseconds.
● Delay at start - the delay before the playback of the “observation” animation, in
milliseconds.
● Delay at end - the delay after the playback of the “observation” animation, in
milliseconds.
● cameraPosStart - the position of the camera at the beginning of the
“observation” animation. For details on selecting a correct value for this field, see
5.15.1.6.1 below.
● cameraDirStart - the direction vector for the camera at the beginning of the
“observation” animation. You should specify the direction vector here,
e.g. (1, 0, 0), see 5.15.1.6.1 below. If you leave this field with 0 values, the
animation will not work.
● cameraPosEnd - the position of the camera at the end of the “observation”
animation. For details on selecting a correct value for this field, see 5.15.1.6.1
below.
150
● cameraDirEnd - the direction vector for the camera at the end of the
“observation” animation. You should specify the direction vector here,
e.g. (1, 0, 1), see 5.15.1.6.1 below. If you leave this field with 0 values, the
animation will not work.
Particularly, you can use this method to specify cameraPosStart /cameraPosEnd and
cameraDirStart / cameraDirEnd values for a Watchtower. And, also, to specify the
cameraPos and cameraDir values for a Gateway (see 5.17.1).
As an alternative variant for specifying cameraPos… fields, you can use coordinates of
some objects on the map that are displayed in their properties (you will need to add
some value for the Y coordinate).
151
Then, you can tune the values as necessary.
The alternative variant for specifying direction vectors in the cameraDir... fields is as
follows. You can select an object of the scene. Arrows displayed after that will show the
directions of the X, Y, and Z axes. So, the (1,0,0) vector will look in the direction of X-
axis; (0,1,0) in the direction of Y-axis; (0,0,1) in the direction of Z-axis. And, of course,
you can specify all values in between.
For example, if you specify (-0.5, 0, -0.5) as a direction vector, it will set direction as in
the screenshot below.
152
In the game, the Recovery zones are invisible to the player.
If the map contains the Garage and the player has opened it, all recovery zones will be
ignored and the player will be transferred to the Garage after usage of the “RECOVER”
feature.
● craftSettings – a list that should contain all target cargo items that can be
crafted in this zone and the components they are crafted from. If Energy is
required while crafting a particular target cargo item, its amount should also be
specified in its settings. Particularly, for each target cargo item in the list you
need to specify the following:
153
WARNING: The number of the source components is limited. If you do
not require Energy, the maximum number of components is 4. If you do
require Energy, only 2 other source components can be added. If you
exceed these limits, your settings will not pass validation.
o energy – optional field, used only when you want the player to use
Energy while crafting as a requirement (so, the player needs to deliver a
generator to energyZoneId, and so on). The number of energy units
required for crafting this target cargo item. If this value is 0, the energy is
not required.
The ZonePropertyEnergy zone has no properties that you need to specify - only the
ZonePropertyEnergy property itself is required. This zone is mandatory if you want to
set Energy as a requirement for crafting. The player needs to deliver a Generator to this
zone and turn it on to be able to craft in the linked ZonePropertyStorehouseCraft zone
(see energyZoneId above).
154
5.15.1.9. Living Area feature: …LivingArea zones
The ZonePropertyLivingArea zone allows you to create zones where the player needs
to deliver Cabins or any other type of cargo.
NOTE: For details on creating the objective of this type, see 5.16.1.8. Delivery of Cabins
to Living Area (“livingAreaInfo” section).
NOTE: In the Normal Mode of the game, this property will be ignored.
155
The …ResupplyRepairParts zone has two settings:
• repairPartPrice – specifies the price per resupplying 1 repair point.
• repairWheelPrice – specifies the price per resupplying 1 spare wheel.
NOTE: For info on automatic repair zones, see 5.15.1.2. Fuel Station & Repairing:
...FuelStation & ...AutoRepairAndRestore zones above.
TIP: As with other zone properties, you can combine this property with other properties
(e.g. ZonePropertyFuelStation) or use it separately.
NOTE: In the Hard Mode of the game, auto-repairing will be not available and this
property will be ignored.
156
5.15.1.13. Farming zones: …FarmingArea zones
The ZonePropertyFarmingArea property in props of a zone marks it a zone
appropriate for farming.
However, specifying this property for a zone is only a part of more complex setup that is
required to enable farming in this zone. For details, see 5.23.1. Step 1: Creating a Zone
for a Farming Area and the 5.23. Farming chapter in general.
NOTE: If all other things (see 5.23.1, 5.23.2, and 5.23.3 below) are set up correctly,
farming will work even without the ZonePropertyFarmingArea property added to the
props of the zone. However, we still recommend to always add it, since it affects some
UI-related use cases (generation of UI text when there is no Ui Desc in the the farming
Stage).
157
only the "picking up" of water, i.e. water from the zone can fill the truck,
but cannot go in the reverse direction.
o DROP – these zones allow the player to fill the water tank of the zone
from their truck tank. They allow only the "dropping" of water, i.e. water
from the truck can fill the zone, but cannot go in the reverse direction.
o TRANSIT – these zones allow the player to transfer water from one
such zone to another. They act as a common reservoir connected to the
certain amount of shared zones of TRANSIT type where each such zone
can be used for both input and output of water. I.e, the water here is
common for all shared zones and can go in both directions: player can
either fill the water tank of their truck from this common reservoir, or fill
this common reservoir from their truck tank.
• Water – the initial amount of water (in liters) in the water reservoir of this zone. If
you set the Capacity of the zone to infinity, you can also set its initial amount to
the same value, by specifying "-1" as a value of this field.
• Capacity – the total capacity of the water reservoir of this zone. The "-1" value
means that the total capacity of the water reservoir is infinite.
• Is water delivery objective zone – this option needs to be enabled, if this zone
is the zone of the DROP type and, at the same time, is the target zone of some
water delivery objective. Enabling this option will hide this zone before the
activation of the objective and when the currect Stage of the objective is not
using it as the target zone. For details, see 5.24.4. Objectives: Water Delivery.
For PICK_UP and TRANSIT zones – that are not used in objectives – this option
should be disabled.
• Shared Water Zones – (valid for TRANSIT zones only) The list of the TRANSIT
zones that share the same water reservoir as this zone.
NOTE: For some hints on the setup of the zones of these types, see 5.24. Water as a
Resource below.
Gateway zones placed on the same map have almost the same mechanics of operation:
• You need to link two Gateway zones to each other.
• The player enters one of these zones and is spawned on the other one.
• You need to set up camera direction and position for each gateway to make
visuals of the gateway transition look good.
158
• For every gateway, you need to set up an extra zone that will be used for
gateway transitions if the dimensions of the initial zone of the gateway are
insufficient (for long trucks, trailers, and trucks on a winch).
• Gateway zones and extra zones should not have any obstacles (trees, rocks,
etc.) within them.
The properties of a Gateway zone in this scenario are almost the same relative to the
"Gateways for connecting maps within a region" (5.17) case:
• Duration of transition - The duration of the gateway animation sequence, in
milliseconds.
• Delay at start – the delay before the playback of the gateway animation, in
milliseconds.
• Delay at end – the delay after the playback of the gateway animation, in
milliseconds.
• levelZoneLink - the target Gateway zone to which the player will be transferred.
You can specify the link to this zone by clicking the button in this field and
selecting the zone from the list.
NOTE: If you are creating Gateways for on-the-same-map transition (i.e. from the
Zone Settings window, not from the Regions tab of the Region settings
window), the list of target zones will display only zones on the same map. For
instructions on setting up transitions between different maps of the Region,
please refer to 5.17. Regions with Multiple Maps, 5.17.1 and 5.17.2 sections.
NOTE #1: Previously, we used two extra zones (i.e. separate zones for
extraZoneToPlaceTrucks and extraZoneToPlaceWinch) and recommended to
159
do the same for map mods. However, now we use the one and the same extra
zone for extraZoneToPlaceTrucks and extraZoneToPlaceWinch to save
space necessary for the gateway setup.
NOTE #2: The size of the extra zone selected in extraZoneToPlaceTrucks and
extraZoneToPlaceWinch should be at least 40x9 and it should not have any
objects in it. See 5.17.2. Rules for a target zone of a Gateway. Extra zone for
details.
• Travel price – (optional, for Gateways located on the same map only) the price
of the Gateway transition to the player. If this field is specified, the specific pop-
up showing the price will appear in the UI when the player will initiate the
gateway transition. If it not specified, there will be no pop-up and the transition
will start directly after the initiation of the transition.
NOTE: The "Travel price" mechanics work for gateways located on the same
map only. There is no such field in settings of gateways created for connecting
different maps of a Region.
• cameraPos – the position of the camera at the start of the gateway animation.
From this position the camera will fly to the starting point of the truck on the
target zone of the gateway.
• cameraDir – the direction vector for the camera at the start of the gateway
animation. You should specify the direction vector here. For example: (1, 0, 0).
WARNING: If you leave the cameraDir field with 0 values, the gateway will
not work (the player will see the black screen).
TIP: See 5.15.1.6.1. cameraPos… and cameraDir... values: Hints and Tips for an
efficient way to specify cameraPos and cameraDir values.
160
5.15.2. Zone Locator properties
NOTE: For general info on creating zones - see 5.15. Adding Zones above.
Along with modification of the zone type and logic as described above, you may want to
modify the properties of the zone locator itself. You can do it in the Editor, after selecting
a zone locator in the Zones list in Scene View.
The properties of the zone locator are the following:
● Org X, Org Z, Dir - Coordinates and direction vector of the zone on the map. The
direction of the zone is marked with the purple arrow within its zone locator.
● Id - the ID of the zone locator. This particular ID is used to identify the zone in the
Editor and the zone settings plugin.
● Icon 30x30, Icon 40x40 - In these fields, you can specify the IDs of the icons
that will be used for the zone on the mini-map and in the game. The list of
possible values for these fields can be found in 5.15.3 below.
● Name - the name of the zone for UI.
● Is Visible On Minimap - Whether the zone is visible on the mini-map (True) or
hidden (False).
● Wall section - initially, the zone lies on the surface of the map. However,
sometimes it is necessary to raise it above the surface. In this case, you can use
the following settings:
○ Is Wall - make the 3D zone
○ Height - the height to which the zone will be raised
● Shape Type - the shape of the zone (rectangular or round)
● Border section - settings of the border of the zone:
○ Rounding Radius - the radius for rounded corners of the zone border
○ Thickness - the thickness of the border
○ Scroll Speed and direction - the speed of movement of the dashed line
on the zone border and the direction of such movement. The direction is
specified by the minus sign (“-”) or its absence.
○ Opacity - the transparency of the border.
● Dimensions - settings of the actual dimensions of the zone:
○ Length or diameter - the length or the diameter of the zone (if Shape
Type = Circle).
○ Width - the width of the zone.
The 30x30 and 40x40 icons are similar, so the table displays one preview for both of
them. Icon 40x40 is used for displaying a zone on the mini-map, Icon 30x30 is used for
displaying it in the left panel of the mini-map.
161
For some icons, there are two names in a cell: the second name is displayed after the
slash (“/”) and the new line. In this case, the name without the “40” suffix corresponds to
an icon without an outline. E.g, the “fuelStationImg / fuelStationImg40" value corresponds
to two icons: “fuelStationImg” (40x40, without an outline) and “fuelStationImg40" (40x40,
with an outline). Names of these icons should be used separately.
airportImg30 airportImg
bunkerImg30 bunkerImg
bunkerAltImg30 bunkerAltImg
climbRaceImg30 climbRaceImg40
constructionBlockageImg30 constructionBlockageImg
constructionBorderBoothImg30 constructionBorderBoothImg
constructionCargoImg30 constructionCargoImg
constructionHardHatImg30 constructionHardHatImg
constructionTrash30 constructionTrash40
constructionWarehouseImg30 constructionWarehouseImg
controlCenterImg30 controlCenterImg40
curciutRaceImg30 curciutRaceImg40
162
craftCrafting30 craftCraftinging40
/ craftCraftingMarker40
craftLivingArea30 craftLivingAreaMarker40
drillingSiteImg30 drillingSiteImg
experimentalFarm30 experimentalFarm40
factoryImg30 factoryImg
farmImg30 farmImg
fuelStationImg30 fuelStationImg
/ fuelStationImg40
fuelStationAlt2Img30 fuelStationAlt2Img
fuelStationAltImg30 fuelStationAltImg40
garageImg30 garageImg
/ garageImg40
gatewayImg30 gatewayImg
/ gatewayImg40
gatewayLockedImg30 gatewayLockedImg
/ gatewayLockedImg40
163
heroRaceImg30 heroRaceImg40
kolari30 kolari40
lumberjackImg30 lumberjackImg
manualLoading30 manualLoadingMarker40
manualUploading30 manualUploadingMarker40
markerImg30 markerGpsImg
npzImg30 npzImg40
offroadAltImg30 offroadAltImg
offroadAltAltImg30 offroadAltAltImg
ontarioFireDeptImg30 ontarioFireDeptImg40
ontarioGoldMineImg30 ontarioGoldMineImg40
ontarioTownHallImg30 ontarioTownHallImg40
ontarioWaterDropZoneImg30 ontarioWaterDropZoneImg40
orientationRaceImg30 orientationRaceImg40
potatoModified30 potatoModified40
164
repairRefuelZoneImg
resupplyImg30 resupplyImg
rocketConstructionImg30 rocketConstructionImg40
ruins30Bricks1 ruins40Bricks1
ruins30Bricks2 ruins40Bricks2
ruins30Bricks3 ruins40Bricks3
ruins30Metals1 ruins40Metals1
ruins30Metals2 ruins40Metals2
ruins30Metals3 ruins40Metals3
ruins30Rocket ruins40Rocket
ruins30Shipwreck ruins40Shipwreck
ruins30Woods1 ruins40Woods1
ruins30Woods2 ruins40Woods2
ruins30Woods3 ruins40Woods3
rusCrop30 rusCrop40
165
sawmillImg30 sawmillImg
serviceHubImg30 serviceHubImg
solarStationImg30 solarStationImg40
startTableImg30 startTableImg40
sunsailsTechnologies30 sunsailsTechnologies40
townStorage30 townStorage
trailerShopImg30 trailerShopImg40
upgradeCreateImg30 upgradeCreateImg40
/ upgradeCreateImg40Plus
watchTowerImg30 watchTowerImg
/ watchTowerImg40
waterStationImg30 waterStationImg40
allVehicleImg30 allVehicleImg
heavyDutyVehicleImg30 heavyDutyVehicleImg
heavyVehicleImg30 heavyVehicleImg
highwayVehicleImg30 highwayVehicleImg
offroadVehicleImg30 offroadVehicleImg
166
scoutVehicleImg30 scoutVehicleImg
troubleAltVehicleImg30 troubleAltVehicleImg
contestImg30 contestImg
taskNewImg30 taskNewImg40
taskImg30 taskImg40
taskSubImg30 taskSubImg40
167
3. To save your changes, press CTRL + S or select File > Save in the main menu
of the plugin window.
The information on the status of the fog of war is stored along with the zone properties
(see 5.15. above).
However, when you upload a map to the mod.io and then others download it and play on
it (see 10. Playing on Map Mods from mod.io), by default this menu is not displayed.
But, if necessary, you can keep this TOOLS menu even in the public version of your
map on mod.io (e.g. if you are creating a custom “proving grounds” map). To do this,
simply enable the isEnableDevMenu option in the zone settings plugin (then save your
changes, repack your map, etc.).
168
The settings of this pop-up can be configured in the popupSettings section (see below).
NOTE: The 1st objective that will appear in the HUD of the player (will be tracked
by the game) is always the 1st objective from the objectives list.
However, due to the fact that all these objectives are activated simultaneously,
the order of other objectives can be different from their order in the objectives
list. If want to make a sequence of objectives to be unlocked one after another,
you can add the first of them to the objectives list (it will be activated
automatically) and use the Blocker Objectives lists in subsequent objectives to
form the rest of the sequence (the player will need to manually activate them).
169
You can localize the values of the uiTitle and uiText fields. For details, see the
localization guide at https://snowrunner.mod.io/guides/uiname-uidesc-names-
descriptions-and-their-localization.
NOTE: To open the zone settings plugin, click the Zone Settings button ( ) on the
toolbar of the Editor.
170
5.15.7.1. Locking and Unlocking Trucks and Upgrades
The Lock/Unlock Content section allows you to lock and unlock trucks and upgrades
for the player.
When you add a truck/upgrade to the list, you need to specify its ID manually, as text.
For upgrades, these IDs can be identified using the game itself – see 5.11.1. How to
identify IDs of truck parts.
For trucks, you need to specify the ID of the type of the truck, which is displayed in the
Editor, in the properties of the truck (e.g. chevrolet_kodiakc70).
171
Similarly to the Lock/Unlock Content section, you need to specify the IDs of necessary
trucks and upgrades in this list. These IDs should be specified manually, as text.
For upgrades, these IDs can be identified using the game itself – see 5.11.1. How to
identify IDs of truck parts.
For trucks, you need to specify the ID of the type of the truck, which is displayed in the
Editor, in the properties of the truck (e.g. chevrolet_kodiakc70), see the pic above.
WARNING: When you set a custom price for a truck in the Editor, you change the base
price of the truck. However, the total price for the truck – displayed in the Truck Store –
may be higher than its base price, since its also includes the sum of prices of all its
default addons.
TIP #1: If you want to see the approximate price of all default addons of the truck in the
Truck Store, set "1" as the custom price of the truck. Please note that "0" here is the
special value: if you set it as the custom price of the truck, it will be available free of
charge to the player, regardless of the price of the default addons.
TIP #2: However, if you want to lower the total price of the truck below the minimum from
TIP #1, you can do so by decreasing both its base price and prices of its default addons.
I.e., in this case, you will need to specify decreased prices for all (or some of) its default
addons in the Custom Prices section. The ids of the default addons can be identified
using the TOOLS menu > Garage, see 5.11.1. How to identify IDs of truck parts for
details. Please note that some addons can be used by multiple trucks.
NOTE: In previous versions (starting with the 12.1 version), they are not in these lists,
but you can add them there manually, see the 0.9.32 version of this guide for details.
So, in the particular ZonePropertyCargoLoading zone, you can select one of these
cargo types (in a standard way), and your zone will be giving the player the necessary
type of logs. You can create both zones with auto-loading of logs or zones with their
manual loading.
172
173
NOTE: See 5.15.1.1 above for details on the creation of manual loading zones.
When setting up the manual loading zone, you may want to spawn your logs not on the
ground, but in a way that is a little bit more convenient for the player. In this case, you
can place the suitable model (e.g. logs_scavange_02) inside the zone locator of the
manual zone and tune such properties of this zone locator as its direction (Dir) and
dimensions (Dimensions) to spawn logs precisely above this model and make them fall
to the necessary location.
174
5.15.10. Selection of a Country for a Map
Starting with the DLC 10 ("Fix & Connect"), the zone settings plugin window allows you
to select a country for an individual map.
NOTE #1: To open this window, click the Zone Settings button ( ) on the
toolbar, see 5.15. Adding Zones for details.
NOTE #2: Previously, the selection of a country was available only for multiple
maps combined into a Region. For the Region, the country can be set in the
Country field of the Region desc tab, see 5.17. Regions with Multiple Maps for
details.
For the individual map, the country is selected in the country (Only for mods with
single map) field:
NOTE #3: As stated in the name of the field, the specified value will be actual
only for a separate map. If the same map is included in the Region, this value will
be ignored and the country selected for this Region will be used instead.
Selected country defines restrictions in purchases of trucks for the player and is also
displayed in the UI (on the Global Map).
NOTE #4: Names of "countries" are conventional. They need to be set and are
displayed on the Global Map in the conventional manner too. For example, you
should select the "US" value for Canadian maps, and, moreover, this value will
be displayed as "North America" on the Global Map (particulary, to be a correct
value for both Canada and the United States).
However, if you want to disable country limitations on purchasing trucks, you can enable
the isIgnoreCountryPurchaseBlock option, see 5.11.2. Allowing player to purchase
trucks from all countries for details.
175
5.16. Adding Objectives
Using the zone settings plugin (ZoneSettingsEditor.exe), you can specify Tasks,
Contracts, and Contests for your custom map. This is done similarly to adding zones
(see 5.15. Adding Zones).
I.e., you need to click the Zone Settings button ( ) on the toolbar of the Editor and
then specify the objective settings in the appearing dialog, using the same UI techniques
as with zones.
The values of the specified properties of objectives are saved in the folder of the map
within the \Media\levels\ folder, in the objective_settings.json file there. So, if you
want to reuse the settings for both zones and objectives, you will need 3 files from that
folder: user_name_of_map.txt, zone_settings.json, and objective_settings.json.
However, you will need to change the name of the map in these files.
NOTE: The system validates some aspects of the configuration of objectives during
packing. The log of occurring errors can be found in
Documents\My Games\SnowRunner\base\logs\ModMapError.txt
e.g. C:\Users\<username>\Documents\My Games\SnowRunner\base\logs\ModMapError.txt
However, the settings of objectives have some specifics that are described here and in
the subsections below.
However, in the additional zones fields, the format is different, you need to
specify the ID_of_the_zone only. For example: test_zone_1
You can specify the link to the zone either manually (as text) or by clicking
the button in these fields and selecting the zone from the list.
This is valid for both the globalZoneId field and additional zones fields.
176
NOTE: The ID of the zone locator in the Editor is specified for the zone as
described in 5.15. Adding Zones.
● In various Truck Uid fields, you can specify the ID of the Truck, which you can
specify for the Truck in the Editor in its properties (in the Id field). This is not the
type of the Truck.
WARNING: You need to use different Trucks (with different IDs) in different
objectives. For example, you cannot use the same Truck in two different
contracts, or even in a contract and in a task. Trying to do so may result in
unpredictable behavior.
However, you can use the same truck within different Stages of the same
objective (see 5.16.1. Stages below).
● For tasks and contests, the ID of the zone where the task or contest is activated
(by the player) needs to be specified in the taskGiverZone field. And, you can
specify additional such zones in the additionalTaskGivers list.
177
● The name of the objective in the UI is specified when adding it to the
corresponding list of objectives. It can be modified by double-clicking later.
NOTE: The names of the objectives must be unique, even objectives with
different types must have different names! E.g., if a task and a contract have the
same name, this can result in unpredicted behavior.
178
objective. The ID of this zone must be specified in the taskGiverZone field of a
Task or a Contest, in the long form, e.g. level_test_map_5 || test_zone_1
5.16.1. Stages
All objectives consist of Stages. The Stages list specifies what particular assignments of
what particular type the player needs to perform to complete an objective. Additional
settings can be specified for each assignment, depending on its type.
Fields of the stage define the assignment of the particular type. These fields vary from
type to type. They are described in the subsections below.
Along with particular sections defyning the type of the Stage (see subsections below,
starting with 5.16.1.1), every Stage also have a set of properties, displayed at the
beginning of the Stage entry in the Stages. These properties are common for all Stages
regardless of their type. They are the following:
• needToStartTimer – This option allows you to start timer for Contracts and
Contests that must be accomplished for a specific time (i.e. that have a
configured TimeFailReason as one of the failReasons, see 5.16.2.2 and
5.16.2.4 below). By default this option is enabled for every Stage. However, if
you disable it for some initial Stages of the time-limited Contract or Contest, the
timer for them will start from the first Stage where it is enabled. For example,
using this option, you can configure the behaviour when, at first, the player needs
to reach some starting zone (Stage 0, needToStartTimer = false) and, after it,
needs to do something with a time limit (Stages 1, 2, …, needToStartTimer =
true). See also: the needToStartTimerInGiverZone option in the 5.16.2.4.
Specific fields for Contests below.
• Don’t display target cargo on map – this option tells the game to not display
markers for target cargo (e.g. that needs to delivered to some zone) for the
player within the particular Stage. This allows you to force the player to search
for this cargo without markers in the UI. By default, this option is disabled and the
target cargo markers are shown.
NOTE: Regardless of its state, this option works as if it is enabled for objectives
where the usage of metal detector is required, see 5.16.1.7.1. Metal Detector and
“Should be discovered by metallodetector” option below.
179
• Ui Desc [DEPRECATED] – Deprecated field, please do not use it. Instead of it,
please use uiDesc fields in Stage sections related to the Stage type, see below.
NOTE: To create a zone for loading cargo, you can use the zone of the
...CargoLoading type (see 5.15.1.1 above). To create a zone where the physical
objects of goods will be spawned for manual loading, you can use the
spawnCargoOnStageActive stage (see 5.16.1.7 below).
If necessary - you can specify the ID of the truck that is required to perform this delivery
in the Truck need to visit Uid field.
For a description of Model Building Settings - see 5.16.3 below.
Moreover, using the Manual Unloading Settings and an additional zone, you can set
up manual unloading of necessary cargo – see 5.16.1.1.2 below.
180
5.16.1.1.1. Delivery of Water
Starting with the DLC 9 (“Season 9: Renew & Rebuild”), you can set up objectives for
the delivery of Water using “actions > zoneToFill” section. See 5.24.4. Objectives:
Water Delivery.
NOTE: In the case of manual unloading, the delivery zone itself can be also located on
some platform or eminence.
The manual unloading zone is created as a regular zone with an empty props section:
After the creation of this manual unloading zone and placing the delivery zone inside it,
you need to specify the link to the manual unloading zone in the Manual Unloading
Settings > Interaction zone Uid: field, see below.
NOTE: The link to a delivery zone itself must be specified as usual, in the globalZoneId
field.
181
5.16.1.2. Delivery of the Truck (“truckDelivery” section)
The group of fields in the truckDelivery section corresponds to the “delivery of a truck”
assignment.
Here you need to place the truck on the map in Editor and specify its Id as described
above (e.g. task_truck).
NOTE: The player will not be able to sit into the target truck during the assignment.
However, the player can attach it to his/her vehicle using the winch or as a trailer.
Specify the IDs of the target zone(s) in the globalZoneDeliveryId field and, if
necessary, additionalDeliveryZones (similarly to the goods delivery assignment
described above).
You can give the truck involved in the “delivery of a truck” assignment as a reward to the
player. To do this, select the “REWARD” option in the afterStageFinished field and
182
ensure that in previous stages of the objective this truck has not been removed from the
map (“DESTROY” option).
Alternatively, you can give a new truck (not the one from the map) as a reward to the
player using the ObjectiveRewardItem type in the rewards list of the objective. For
details, see the description of the rewards list in 5.16.2.1. Common fields (for all
objectives).
WARNING: You need to use different Trucks (with different IDs) in different objectives.
For example, you cannot use the same Truck in two different contracts, or even in a
contract and in a task. Trying to do so may result in unpredictable behavior.
However, you can use the same truck within different Stages of the same objective.
If necessary, you can remove the truck involved in the assignment from the map not
after accomplishing the stage, but after accomplishing the particular truckDelivery
substage. You can do it by enabling the Destroy After Substage (Dangerous!) option,
which is disabled by default. For example, if the Stage #0 of your objective consists of
two substage assignments – truckDelivery and vizitAllZones, you can remove the
quest truck/trailer involved in truckDelivery directly after finishing of this substage,
without waiting for Stage #0 to fininsh. However, similiraly to the “DESTROY” option in
afterStageFinished field, Destroy After Substage (Dangerous!) should be used with
care and you must not remove trucks if they are used in subsequent (sub)stages.
183
5.16.1.4. Changing the Truck (“changeTruck” section)
The group of fields in the changeTruck section corresponds to the assignment where
the player needs to change their truck to the particular truck.
Similarly to truckDelivery, you need to place this truck on the map in Editor, specify its
Id there, and then specify the same ID in the assignment.
Similarly to truckDelivery, you can give the truck involved in the assignment as a
reward to the player (see above).
NOTE: As opposed to truckDelivery, the player can drive the target truck during this
assignment.
WARNING #1: When creating objectives with multiple stages, you should not use the
changeTruck as a stage that goes before the truckDelivery / truckRepair stages
within the same objective, if you are using the same target truck for these stages.
Otherwise, you will block the ability of the player to drive a target truck and he/she will
not be able to accomplish the changeTruck stage. However, you can use the
changeTruck as a stage that goes after the truckDelivery / truckRepair stages for the
same target truck. I.e., you can set an objective for the player to deliver (e.g. using a
winch) or repair the target truck, and, then, sit in this truck and drive it. However, you can
tell the player to sit into a target truck first and, then, deliver it somewhere or repair it.
WARNING #2: In the properties of the target truck (which you require the player to sit
into), change Locked to False. Otherwise, the player will not be able to sit into this truck.
WARNING #3: You should not use the changeTruck stages within Contests, because
they have the default ChangeTruckFailReason, which will fail the contest if the player
changes the truck.
184
WARNING #4: You should not use the “DESTROY” option in afterStageFinished field
and/or enable the Destroy After Substage (Dangerous!) option in the changeTruck
assignments.
For each zone, you need to specify its ID in the globalZoneId field (similarly to the
goods delivery assignment described above).
If necessary - you can specify the ID of the truck that the player needs to use to visit this
zone in the Truck need to visit Uid field.
The ID of the target zone here is specified in the zone > globalZoneId field. The
spawned cargo items must be added to the cargos list (similarly to the “delivery of
goods” assignment).
185
Along with other properties, the spawnCargoOnStageActive section also includes the
Should be discovered by metallodetector option, which is necessary when creating
objectives for Metal Detector, see below.
After the player uses the metal detector at a particular distance from the marked cargo,
these pieces of cargo are “found” and are highlighted on the navigation map.
However, there are certain nuances in using this feature, they are listed below.
Hint #1: Hiding the markers of cargo while tracking the objective
Regardless of its actual state, the Don't display cargo from zoneToFill on map option
(see 5.16.1. Stages above) works as if it is enabled if the stage contains the
spawnCargoOnStageActive with the enabled Should be discovered by
metallodetector option. Due to this, white markers of the type of the cargo (see pictures
below) are always not shown for spawned cargo when the player tracks this objective.
186
NOTE: However, this affects the displayment of cargo only when this objective is
tracked. If the player switches to the different objective, the white markers of the cargo
type will be shown even when it is not found by the metal detector – it’s the known issue
(see pictures below). For total hiding of cargo, see the next hint.
However, this option works not only when this objective is tracked, so it will hide white
markers of the type of the cargo shown when the player switches to another objective.
I.e., disabling the ignoreHidingCargoWhenNotTracked option will fix the known issue
from Hint #1 above.
187
If the ignoreHidingCargoWhenNotTracked option is enabled (by default), the “hiding”
behavior will be limited to the tracked objective, i.e. hidden cargo will be shown when the
player switches to another objective. And, all other cargo of the same CargoType will not
be hidden on the map.
Hint #3: Using unique CargoTypes for metal detector objectives within a Region
We can fully hide white markers showing the type of cargo only for all cargo of the
particular CargoType at once (see above).
Due to this, we recommend you to use unique CargoTypes within all metal detector
objectives within a Region. Only in this case, you can safely disable the
ignoreHidingCargoWhenNotTracked option for them and not break other objectives.
188
The process to create this assignment is the following:
1. You need to create a Living Area zone (the zone with the
ZonePropertyLivingArea property). It is created in a standard way.
In the properties of this zone, in the name field, you need to select the type of
cargo that the player needs to deliver to accomplish the assignment. Typically, to
set up a delivery of Cabins, you need to select the
“CargoForkliftCaravanContainer2” type there. See 5.15.1.9. Living Area
feature: …LivingArea zones above.
2. In one of the Stages of the objective, you need to add the livingAreaInfo
section. In this section, you need to specify the following properties:
• livingAreaValue – the number of cargo items that the player will need to
deliver to this zone. Please note that the cargo type of these items will be
taken from the properties of this …LivingArea zone (you have specified it
in the name field at step #1 above).
• livingAreaGlobalZoneId – you need to specify here the global id of the
…LivingArea zone that you have created at step #1 above.
189
may be used for decorative purposes. Only the cargo items spawned with the
help of spawnCargoOnStageActive sections will interact with it correctly.
TIP: If necessary, you can use various cargo platforms for cargo items that need to be
placed in the LivingArea zone (e.g., the cargo_platform_wide model). To help a player
place cabins on these platforms, you can add the Caterpillar TH357 telehandler (the
cat_th357 truck in the Editor) to your map. However, please note that this is a DLC truck
and, on your map, it will be available to owners of DLC2 (“Explore and Expand”) only.
190
5.16.2. Other fields of Objectives
● Required rank – the minimum rank of the player that is required for the
objective.
● Blocked By Map – allows you to lock/hide objective until the player opens the
particular map (of the Region), see 5.17.4 below.
● Don’t show reward pop-up – whether or not the game should display the
reward pop-up to the player.
● Don’t show markers ingame and on minimap – This option can be used
specifically for maps that will be played in Hard Mode. If you enable it, the
precise markers for some objects that are shown in the game and on minimap
191
will not be shown to the player. For example, if this option is enabled and the
player needs to deliver the particular object located somewhere on the map,
then:
○ In the Normal mode, there will be the marker showing the precise
location of the object.
○ In the Hard Mode, on the same map, there will be no such marker and,
instead of it, the approximate zone where this object might be located will
be shown on the mini-map (see the screenshot below).
● isCoop – When enabled, this option will enable the cooperative game logic for
this objective and will hide it in the single player game. This option was
developed specifically for such cooperative objectives as racing Contests of the
DLC7 ("Season 7: Compete & Conquer"). This option is not intended to work with
objectives of different types and will have unpredicted behavior for them (use at
your own risk).
NOTE: For correct behaviour of racing Contests you will also need to enable the
pvpCoopOn option in 5.16.2.4. Specific fields for Contests, see below.
● isRepeatable – This option allows you to mark this objective (a Task, Contract or
Contest) as a repeatable objective. If this option is enabled, the player becomes
192
able to repeat the execution of the objective after finishing it. In fact, this option
works similarly to the “Restart objective” feature, i.e., the objective giver zone will
be active after the fulfillment of the objective, all items that were spawned within
the Stages of the objective will be re-spawned, necessary zones of the objective
will become active again after its start, and so on. This option was created
specifically to repeat tasks related to farming, but can be used for other types of
objectives too.
● Blocker Objectives – the list with the names of objectives you need to
accomplish to receive the current objective (see “Name” above).
● Special jingle settings – these settings allow you to specify the special jingle
that will be played when the player accomplishes the objective and whether it
should be played along with the cinematic (if it exists).
WARNING: Currently, these settings do not work. They will be either fixed, or
removed from the future versions of the Editor.
Particularly:
○ Play Jingle with cinematic (if exist) – If enabled, this option will tell the
system to play the specified custom jingle simultaneously with the
cinematic that should be played at the accomplishing of the objective (if
such cinematic is configured). The configuration of this cinematic can be
done via the particular _objective Model that contains animation and
Model Building Settings (Depend on Stages) settings of the objective.
See 5.16.3. Model Building Settings below for details on configuring it
(Scenario #2 in this section).
○ Special jingle (instead of classic) – the path and name of the jingle
sound file, relative to the Media\sounds\ folder and without the file
extension. The requirements for the sound file are the following:
Format: 44 kHz, Stereo, 16 bit, stored as .wav file.
Location: You should put the .wav file of the jingle to the Media\sounds
folder or a subfolder there. However, if you put it to the subfolder, the
value of the Special jingle (instead of classic) field must reflect it.
E.g, if use the Media\sounds\music_jingle_sample.wav file, the value
of the Special jingle (instead of classic) field will be simply
music_jingle_sample
However, if you use Media\sounds\music\music_jingle_sample.wav
the value of the Special jingle (instead of classic) field will be
music/music_jingle_sample
193
● Forced Daytime – these settings allow you to set a particular Daytime Preset for
the level upon the activation of the objective by the player.
WARNING: Currently, these settings do not work. They will be either fixed, or
removed from the future versions of the Editor.
Particularly:
○ daytime – specifies the name of the existing Daytime Preset specified for
the level (see Daytime Presets in 5.1.1. Terrain Properties above). This
preset will be automatically set upon the activation of the objective.
○ level – the identifier of the map (the name of the XML file of the map,
without the file extension).
● rewards – this section allows you to add rewards for the objective:
○ ObjectiveRewardExperience – the amount of XP granted as a reward.
After the player accepts the reward, the truck of the specified type will
become available in the Garage.
NOTE: Alternatively, you can give the truck involved in the assignment as
a reward after the completion of the objective. For details, see 5.16.1.2.
Delivery of the Truck ("truckDelivery" section).
194
○ ObjectiveRewardAddItemsToZone – as a reward, we can add some
cargo to the particular zone. You need to specify:
■ zoneId - the ID of the zone (in the short form, without the name of
the map and ||).
■ mapId - the ID of the map (the name of the XML file of your map,
without the extension).
■ cargosSettings - standard settings of cargo that will appear in the
zone:
● name - the type of the cargo to be added.
● Count If Finite - the amount of cargo to be added.
195
○ ObjectiveRewardUnlock – allows you to unlock a certain item for the
player as a reward. The identifier of this item needs to be specified in the
itemToUnlock field. Similarly to ObjectiveRewardItem (see above), you
can specify here the ID of the upgrade or the type of the truck, if it was
previously locked (see 5.15.7.1. Locking and Unlocking Trucks and
Upgrades) and you want to unlock it as a reward.
For example, you can lock and then unlock chevrolet_kodiakc70.
196
5.16.2.3. Specific fields for Tasks
● taskGiverZone - the ID of the zone where the task is activated (by the player).
● additionalTaskGivers list - the list with IDs of additional zones that activate the
task.
● taskGiverZone - the ID of the zone where the contest is activated (by the
player).
● additionalTaskGivers list - the list with IDs of additional zones that activate the
contest.
● failReasons - the list that contains the conditions for failure of the contest:
NOTE: You can specify multiple reasons for failure in the failReasons
section.
197
You cannot specify float values (e.g. 1.5) here, only integers (e.g. 1 or 2).
If the player will take this contest earlier (say, at 11:00 PM), the game will
switch its time on the map to 2:00 AM automatically.
● pvpCoopOn – this option was developed specifically for racing Contests of the
DLC7 ("Season 7: Compete & Conquer"). It enables the competition logic of
these Constests for mutliple participating players.
NOTE: For correct behaviour of racing Contests, you will also need to enable the
isCoop option for them, see 5.16.2.1. Common fields (for all objectives) above.
I.e., both pvpCoopOn and isCoop must be enabled for all racing Contests.
198
allows you to set up a special target zone for the Recover feature available in the
Functions menu specifically for this Contest. Typically, this zone is the starting
zone of this racing Contest. If this zone is specified and the player uses Recover
during the Contest, then this player will be recovered to the starting zone, not to
the Garage or a different ZonePropertyRecovery zone that can be too far away
from the racing location.
199
The setup of Model Building Settings fields will require you to know the names of
stagesProgress of these models (i.e. states of this object in the process of “building”).
For each model used in the game, you can view these states in the XML file of the class
of the model. These XML classes can be found in the initial.pak archive, in the
[media]\classes\models\ folder there. Or, at the same path in the subfolders of DLCs
there, in the [media]\_dlc folder (e.g. [media]\_dlc\us_07\classes\models).
In these XML files, the names of these states can be found as a value of the Name
attribute of the Subset tag.
Along with it, you will need to specify the Tag for the selected model in the Editor. It is
specified in the properties of the model, after selecting this model in Scene View.
200
For example, in the screenshot above, we have specified the “bridge_tag” for the
bridge_wooden_big_02_objective model.
The same tag you will need to specify in the Model Building Settings fields, see below.
As you can see from the settings of objectives, there can be 2 scenarios for “building”
objects:
1. We can link “building” of an object to cargo delivered by the player.
2. We can link “building” of an object to accomplished stages of the objective.
TIP: There is also a special 3rd scenario for “dismantling” buildings and linking this
“dismantling” to the amount of cargo the player obtains from the …CargoLoading zone.
See 5.15.1.1.1. Model Building Settings for ...CargoLoading zones for details.
WARNING: You should not use the same _objective model in two separate delivery
stages (i.e. in two separate actions stages link “building” of this model to the delivery of
the cargo). If you want “building” of the same model to depend on two deliveries of the
cargo as two separate stages, you should link “building” to the accomplishing of these
stages instead. I.e., in this case, you should perform the setup similarly to Scenario #2
below, not Scenario #1.
Scenario #1:
If we are linking to the delivered cargo, we will need to fill in the fields in the actions
stage of the objective, which describes the assignment to deliver the cargo (see 5.16.1.1
above).
201
● stagesProgress - in this list, you need to link the states of the model to the
status of the delivery. Goods can be either delivered or not delivered. So, you
need to add two stages here: one for goods not delivered (with 0 value) and one
for delivered goods (with 1 value). Names of the stages should be exactly the
same as the corresponding states of the model (build_stage_0 and
build_stage_1 in our example, see above).
By doing so, we will map build_stage_0 to not delivered goods (the “0” value)
and build_stage_1 to delivered goods (the “1” value).
● modelType – allows you play a specific sound from the predefined set of sounds
when a model changes state (e.g. during transition from build_stage_0 to
build_stage_1 in our example). If this transition is animated, this sound will be
played along with the animation. Sounds in this predefined set correspond to the
following entities: "COMMON" (default value), "WOOD", "BRICK", "METAL",
"LOG". Custom sounds here are not supported.
WARNING: Currently, this field does not work as intended. The sound is played,
but it is always the "COMMON" sound, regardless of the selected value. This
field will be either fixed, or removed from the future versions of the Editor.
The final set of settings here will look like the following:
202
Scenario #2:
If we are linking to the accomplished stages of the objective (see 5.16.1), we need to fill
in the fields in the Model Building Settings (Depend On Stages) section within this
objective.
The fields here are specified similarly to Scenario #1. However, in the stagesProgress
list, you need to create entries corresponding not to the status of delivery but to the
number of stages accomplished by the player for this objective.
For example, let’s assume that your objective contains two stages and the model has 3
states (let’s assume that the model has the build_stage_0, build_stage_1, and
build_stage_complete states). The default state of the model (when the player has
accomplished no stages) will be build_stage_0. When the player has accomplished the
first stage, we want the model to switch into the build_stage_1 state. When the player
has accomplished two stages, we want the model to switch into the final
build_stage_complete state. So, in the stagesProgress list, we need to map model
states of the model (on the left) to the number of accomplished stages (on the right).
203
WARNING: Names of model states must be specified without spaces, otherwise they
will not work.
Scenario #3:
You can also link the “dismantling” of the building to cargo in the …CargoLoading zone.
See 5.15.1.1.1. Model Building Settings for ...CargoLoading zones for details.
204
5.16.3.1. Adding Smoke
Starting with the DLC 9 (“Season 9: Renew & Rebuild”), you can add smoke to your
custom maps. This feature was used in the DLC 9 and it is also available in the Editor.
Objects that initiate the smoke are small cubes that are available as regular _objective
models:
• cube_objective_09
• cube_objective_big_09_01
• cube_objective_small_09_01
• cube_objective_small_09_02
Setup of the start and stop of smoke follows the general Model Building Settings
pipeline, see 5.16.3. Model Building Settings above.
NOTE: Currently, there is also a known issue with smokes: even if you have
accomplished the related objective/stage and, by this, have disabled the smoke cube –
this smoke cube will start to emit smoke again when you reload the level (e.g. by loading
a saved game).
205
2. In the appearing dialog, specify the internal name of the new employer.
For example, Lunar Waters Inc.
NOTE (On Linking): This internal name of the employer you will need to use in
all Contracts that you want to link to this employer. See 5.16.2.2. Specific fields
for Contracts for details.
3. After doing this, the new record in the employer list will appear, with the
specified id.
206
name from Step 2 above) instead of the name itself. For example,
UI_LUN_WTRS_EMPL. If you have specified the identifier in this field, do
not forget to create the .str files with localization strings for this identifier
and put them in the texts subfolder in the folder of the map (in
Media\prebuild\<map_name>\texts). Please note, that if the localization
string is not specified for a particular language, the identifier itself will be
displayed for it. See 5.19. Localization of Maps below for details.
5. Employer Logo and Employer Background images must have the following
format, dimensions, and location:
• Format:
PNG format.
To keep the original style of the in-game employer logos, you can use a
white image on the transparent background.
• Dimensions:
Employer Logo image: 40 x 40 px
Employer Background image: 200 x 200 px
• Location:
Media\prebuild\<MapName>\ui\textures
I.e., you need to put them in the folder of your map that contains
Contracts with this employer, in the \ui\textures subfolder of it.
6. Save your changes in the Zone Settings dialog (File > Save or CTRL+S).
207
2. Double-click the value of the employer field of the Contract and type in the
internal name of the custom employer there.
NOTE #1: The drop-down list with the in-game employers will not contain your
custom employer until you type it in.
NOTE #2: The value of the employer field must be exactly the same as the
internal name of the employer (the value you have specified at step 2 above
when you were creating this employer).
3. After you have typed in the necessary value, press ENTER to save it. Please
note that without clicking ENTER after typing in the value will not be saved.
4. Save your changes in the Zone Settings dialog (File > Save or CTRL+S).
After repacking your map and loading it in the game, you will see that your Contract now
displays the name (or the localized name, if you have localized it) and logos of the
created custom employer.
208
5.17. Regions with Multiple Maps
You can combine multiple maps into one Region, connect these maps using the
Gateway zones, and pack them as a single mod. Moreover, when creating a region, you
can add objectives that require performing actions on multiple maps of the region (e.g.
deliver some cargo from one map to another).
NOTE: Maps that form the region may be also published as separate mods, if
necessary. However, in this case, the Gateway zones and cross-map objectives that are
created on the regional level will not work.
All these operations are performed using the Region Settings Editor dialog, which you
can open by clicking the Region settings button ( ) on the toolbar.
Let’s assume that we have already created two maps: level_map_1 and level_map_2.
We want to create a region with these two maps and connect them using the Gateway
zones. Then, we want to pack the created region as a single mod.
And, let’s assume that, along with Gateways, we want these maps to contain the
following zones:
● level_map_1 will contain the Fuel Station
● level_map_2 will contain the Garage
And, we want the player to start on the level_map_1 and then proceed to level_map_2.
209
e. For this map, in the Zone Settings Plugin, we need the following:
i. All zones, including Gateway zones, should exist in the TERRAIN
LOCATORS LIST (of the Zone Settings). By default, this list is
populated automatically based on zone locators added in the
Editor. So, to add these zones, you simply need to click the Zone
Settings button ( ) on the toolbar (which will open the Zone
Settings Plugin) and save your changes there.
ii. You need to configure props of all necessary zones, except
Gateway zones.
The props of the Gateway zones will be configured later, on the
region level.
f. In our example, the zone properties of our first map will look like the
following:
210
2. Prepare level_map_2:
a. Do almost the same operations as for level_map_1.
However, on level_map_2 you do not need to add an active truck.
And the zone locators will be the following:
i. zone_2 (Garage entrance)
ii. gateway_2 (the zone that will be the gateway in the future)
b. So, the zone itself and its zone properties will look like the following:
3. Now, combine these two maps into the region. Open Region Settings Editor by
clicking the Region settings button ( ) on the toolbar.
211
4. In the appearing dialog, select File > New region.
5. In the opened Region desc tab, specify the properties of the region:
a. Name - the name of the region, which will correspond to the name of the
.zip archive of the region (after packing) and is also displayed on the
navigation map.
WARNING: The value of the Name field must not contain special
symbols prohibited for file names: \, /, :, *, ?, ", <, >, |.
b. Country - the country of the region (one of the supported by the game).
Selected country defines restrictions in purchases of trucks for the player
and is also displayed in the UI.
c. UiName - the name of the region for the UI (for Global Map).
d. UiDesc - the description of the region for the UI (for Global Map).
212
6. In the Region desc tab, add all necessary maps to your region, select a starting
level, and set the order of the maps for the regional map:
a. For each map you want to add: Click Add level, select the map in the
appearing Select level dialog, and click OK.
NOTE: This dialog contains all maps that you have packed (i.e. the .pak
files of the maps from the Media\Mods folder). If your map is not there,
most probably you’ve forgotten to pack it.
b. After you have added all necessary maps, select the Starting level from
them by enabling the radio button next to the necessary map.
NOTE: The starting map of the region must contain an active truck (see
5.11 for details).
c. Using fields with numbers displayed next to added maps, specify the
order of these maps. It defines locations of maps on the Region map.
213
7. After you have added maps to the region, new tabs (named as maps) will appear
in the dialog. If you switch to one of these tabs you will see that it displays
properties of zones and objectives of the corresponding map. However, these
properties are displayed in the read-only mode and you cannot change them
from this tab. For example, in the level_map_1 tab we will see the following:
8. Now, in the Regions tab, you can configure gateways and regional objectives for
your maps. I.e., this tab displays properties of zones and objectives on the level
of the region.
Regional objectives are configured in the objectiveSettings section and are
configured similarly to regular objectives, see 5.17.3. Contracts on the level of
the Region.
Gateways (and other zones, if you want to configure them not on the level of the
map, but on the level of the region) are configured in the MAPS LIST section,
which contains all maps of the region as subsections. Initially, after the creation
of the region, it is empty (since no regional zones are configured):
214
NOTE: To be able to configure a zone on a regional level, in the Regions tab,
you need to create a zone locator for it on the corresponding map (in the Editor)
and, also, ensure that this zone is in the TERRAIN LOCATORS LIST with empty
props section (in the Zone Settings plugin opened for this map), as we have
done in the step #1 above.
For example:
To configure the gateway_1 zone, which is located on our level_map_1, we will
need to do the following:
1. In the Regions tab, expand the MAPS LIST section.
2. In the level_map_1 section, add the gateway_1 zone to the
TERRAIN LOCATORS LIST.
3. Add ZonePropertyGateway to the props section of this zone.
4. In the levelZoneLink field of the gateway properties, select
level_map_2 || gateway_2 zone, to link the gateway_1 zone to
the gateway_2 zone on the level_map_2.
5. To make the gateway work, you need to set the non-zero value in
the CameraDir field, otherwise you will see the black screen
instead of the animation of the gateway. For example, you can set
the (1, 0, 0) vector in this field.
6. At the later steps of gateway tuning, you can configure other
properties of the gateway, particularly, the animation sequence
played when the player uses this gateway. For details on this, see
5.17.1 below.
7. The final configuration of MAPS LIST > level_map_1 section will
be similar to the following:
215
9. Save the settings of the region, by selecting File > Save in the menu of the
dialog (or by pressing CTRL+S).
10. Now, to pack your region, select File > Pack region mod in the menu of the
dialog. The system will pack your region to the set of .zip files in the Media\Mods
folder and will display the corresponding message.
After doing this, you can test your region mod locally (in the NEW GAME > CUSTOM
SCENARIOS, see 7. Testing a Map in the Game).
And finally, you can publish your Region by uploading these .zip files to SnowRunner’s
mod.io (https://mod.io/g/snowrunner), see 8. Publishing a Map.
216
5.17.1. Settings of the Gateway zone (ZonePropertyGateway)
NOTE: Starting with DLC 10 (“Season 10: Fix & Connect”), using Gateway zones you
can link not only two different maps of the same region, but two different areas within the
same map. For the description of this new scenario, please refer to 5.15.1.15. Gateway
zones: …Gateway zones. The section below – relates to the initial scenario where
Gateways were placed on different maps within a Region to connect them.
Gateway zones allow you to create portals that transfer the player from one map to
another map. The main principle here is simple: you create a Gateway zone on the first
map and link it to the zone on the second map in the properties of the Gateway zone.
WARNING: To ensure the correct behavior of the game after the transition provided by
your gateway, the target zone of the gateway should meet the particular criteria. To
provide necessary space for the transition of players that use trucks with trailers, you
can explicitly specify an additional zone that will be used when the player is transferred
to this gateway in its extraZoneToPlaceTrucks and extraZoneToPlaceWinch fields.
See 5.17.2. Rules for a target zone of a Gateway. Extra zone below for details.
Gateway zones that connect two different maps of the same Region can be created on
the level of the region only, using the Region Settings Plugin. For details on their
creation, see 5.17. Regions with Multiple Maps above.
You can set up a skippable animation sequence that will be played when the player uses
the gateway. It will be played when the player is spawned in the target zone of the
gateway (on the target map). This animation sequence is similar to the Watchtower
animation: the camera flies from the initial position and the direction you specify (in the
cameraPos and cameraDir fields, see below) to the starting point of the truck on the
target zone of the gateway and the direction of this zone.
TIP: It can be hard to specify good cameraPos and cameraDir values off the top of your
head. The camera statistics that can be displayed in the Editor may help you in that -
see 5.15.1.6.1. cameraPos… and cameraDir... values: Hints and Tips.
217
So, the animation-related properties of a gateway zone are the following:
● Duration of transition - The duration of the gateway animation sequence, in
milliseconds.
● Delay at start - the delay before the playback of the gateway animation, in
milliseconds.
● Delay at end - the delay after the playback of the gateway animation, in
milliseconds.
● cameraPos - the position of the camera at the start of the gateway animation.
From this position the camera will fly to the starting point of the truck on the
target zone of the gateway.
● cameraDir - the direction vector for the camera at the start of the gateway
animation. You should specify the direction vector here. For example: (1, 0, 0).
See 5.15.1.6.1 for a hint on specifying this value.
WARNING: If you leave the cameraDir field with 0 values, the gateway will
not work (the player will see the black screen).
218
Moreover, to avoid issues with large trucks and trailers you can specify an extra zone
that will be used for gateway transitions if the dimensions of the initial zone of the
gateway are insufficient.
219
NOTE: Previously, we used two extra zones (i.e. a separate zones for
extraZoneToPlaceTrucks and extraZoneToPlaceWinch) and recommended to
do the same for map mods. However, starting with DLC 6 ("Season 6: Haul &
Hustle"), we use the one and the same zone for extraZoneToPlaceTrucks and
extraZoneToPlaceWinch to save space necessary for the gateway setup.
The recommended size of this extra zone is 40x9 at least (this should be sufficient for
any truck and trailer pair in the game).
IMPORTANT: As opposed to the zone selected in the levelZoneLink, this zone should
be located on the same map as the gateway entrance, since it will be used when the
player returns to this gateway (during the backward transition).
220
As you can see, extra zone of the gateway_1 is located on level_map_1 and extra zone
of gateway_2 is located on level_map_2. When the player will travel from gateway_1 to
gateway_2, the player will be transferred to either gateway_2 or gw2_extra_zone_1 –
depending on the size of the player’s vehicle. When the player will travel back, from
gateway_2 to gateway_1, they will be transferred to either gateway_1 or
gw1_extra_zone_1.
Extra zones will be visible only in the Editor; they will not be visible to the player in the
game.
In gateway settings, this extra zone should be selected in the following fileds:
• extraZoneToPlaceTrucks – the zone that will be used if dimensions of the initial
zone of the gateway are insufficient for the transitioned vehicles.
• extraZoneToPlaceWinch – the zone that will be used for both the main truck
and trucks or trailers that are connected to it by the winch, if dimensions of the
initial zone of the gateway are insufficient.
Usage of this extra zone is optional. Even if you did not use it, the game will try to deliver
the player’s vehicles to the gateway zone.
NOTE: If the size of the player’s vehicles exceeds dimensions of the target zone, the
system will display the corresponding warning to the player. However, the player can
ignore this warning and proceed to the gateway anyway.
221
5.17.3. Contracts on the level of the Region
NOTE: For main info on Contracts, Tasks, and Contests - see 5.16. Adding Objectives.
This section describes only the specifics of the regional Contracts.
The main differences of regional objectives from objectives on the level of the individual
map are the following:
1. You can create only Contracts as regional objectives. You can not create
Tasks or Contests on the level of the region.
2. When you are creating regional Contracts, you can use zones from all maps of
the region.
Regional Contracts are created in the Region tab of the Region Settings Plugin dialog.
To add an objective, you need to expand the corresponding sections there and then
create a Contract in a standard way (see 5.16. Adding Objectives for details).
However, to be able to use a zone for a regional objective, you need to create a zone
locator for it on the corresponding map (in the Editor) and, also, add this zone to the
TERRAIN LOCATORS LIST with empty props section (in the Zone Settings plugin
opened for this map, as we have done with Gateway zones in 5.17. Regions with
Multiple Maps, in step 1.e.).
NOTE: Similarly to regular objectives, properties of regional objectives are partially
validated during packing and when the game tries to open a region.
The log of occurring errors can be found in
Documents\My Games\SnowRunner\base\logs\ModMapError.txt
e.g. C:\Users\<username>\Documents\My Games\SnowRunner\base\logs\ModMapError.txt
For example, we can create a Contract that requires the delivery of wooden planks to 2
different zones on 2 different maps:
222
Other important notes on regional Contracts:
● Please, ensure that all your Contracts in the region have unique names!
● The additional Map name for player profile field allows you to specify the map
this Contract will be associated with. The value of this field will be used for
calculating statistics (the progress by region).
223
● To achieve safe respawning of trucks and cargo, there is a limitation on contracts
with changeTruck, truckDelivery, repairTruck and spawnCargo... stages:
All vehicles and zones of spawning cargo set up in these Contracts must be
located on one map, i.e. all objects that are spawned must be located on the map
the Contract is linked to). E.g., you cannot create a Contract with two truck
deliveries, where one vehicle is spawned on one map and the other vehicle is
spawned on another map.
● There is a limitation on the Visiting All Zones and Seismograph Usage stages
of the regional Contracts:
Within one such stage, you can use zones from a single map only.
However, you can use zones from one map in one stage, and zones from the
other map in another stage, if necessary.
WARNING: The Blocked By Map field is also used for the very important purpose: the
game cannot spawn cargo (using spawnCargoOnStageActive, see 5.16.1.7) on the
map that does not exist in the Saved Game of the player and this field is used by the
game to check that the target map is already explored (exists in the Saved Game).
I.e., if your Contract on the level of the Region spawns some cargo on the map, which
needs to be specifically opened by the player (i.e., not the starting level), then you must
specify the valid value of the Blocked By Map field pointing to this target map in the
settings of this Contract. Otherwise, the game will generate an error upon opening this
Region.
For Tasks, Contracts, and Contests on the level of the particular map, the Blocked By
Map field is not used this way since, in this case, spawning can be performed only on
this particular (already opened) map and the additional check of the map state is not
necessary.
The Blocked By Map field can be specified both for Contracts on the level of the Region
(in the Region Settings Editor, see the 1st screenshot below) and for Tasks, Contracts,
and Contests on the level of the particular map of the Region (in the Zone Settings
Editor, see the 2nd screenshot below).
224
The Region Settings Editor dialog: Blocked By Map in the settings of a Contract on the level of the Region.
The Zone Settings Editor dialog: Blocked By Map in the settings of a Task on the level of the map.
The value of this field is currently specified manually. The format you need to use to
specify this field correctly is rather simple:
• The “mod_” prefix + identifier of the target map, which equals to the name of
the XML file without the .xml extension.
The name of the map identifier typically starts with “level_” according to our
guidelines (see 4.2 above), so your value will probably be similar to:
mod_level_my_level_name
The behavior of an objective with a non-null value of the Blocked By Map field is the
following:
225
• Contracts on the level of a Region and Contracts of the particular map – will
appear locked to the player until he/she opens the specified target map. The
information about that will be displayed on the navigation map in the descriptions
of these contracts in the form of the “Discover <name of the map>” label:
NOTE: The name of the target map in this label is taken by the game
from the Id field in the Description level section of the Terrain properties
of the target map (see 5.1.1. Terrain Properties above).
• Tasks and Contests of the particular map – will be hidden from the player totally
until he/she opens the specified target map. I.e., if the map from the Blocked By
Map field is not opened, the player will not see the taskGiverZone zone of the
Task/Contest and will be unable to activate it.
NOTE: If this field is specified for an objective on the level of the particular map, it
will work for this objective even if you load this map separately (not as a part of
the Region). Do not forget about that if you want to use one of the maps from the
Region as a separate mod.
In your Regional Contract, if you spawn cargo on a map that is not the starting level,
then you must specify the valid value of the Blocked By Map field pointing to this map,
see the WARNING at the beginning of the section.
226
5.18. Custom Images for Regions and Maps
The Editor allows you to set up custom pictures for the UI elements related to your
Regions and Maps.
For a Region, there are two fields for that in the Region Settings dialog, when you are
editing a region:
• GlobalMapRegionBG – allows you to set a background for the Region on the
Global Map screen. See the instructions below for the format of images and
other details.
• GlobalMapRegionIcon – allows you to set an icon for the Region in the Global
Map (in the upper part of the screen). Please note that some areas of the
GlobalMapRegionIcon image must be transparent for the icon to match the UI
of the Global Map screen. See the instructions below for the format of images
and other details.
For a Map, there are two fields for that in the Zone Settings dialog (shown when you are
editing settings of zones or objectives of this map):
• globalMapPreview – the small picture of the map that will be used for it in the
Global Map screen.
• saveSlotMapPreview – the preview of the map that will be used for the Save
Slots with this map in the LIST OF SAVED GAMES screen.
227
1. Prepare the pictures themselves:
a. Format of images: PNG
b. Dimensions of images:
• Image for the GlobalMapRegionBG field = 1920x1080 px
• Image for the GlobalMapRegionIcon field = 85x85 px*
• Image for the globalMapPreview field = 360x216 px
• Image for the saveSlotMapPreview field = 360x203 px
NOTE: Please note that there should be two separate \ui\textures folders: one
for a map and one for a region.
228
5.19. Localization of Maps
The localization of maps is performed similarly to the localization of trucks.
In short, you need to use UI_IDENTIFIERS in your text fields in Editor and then map
these UI_IDENTIFIERS to the localization strings in the .str files of different languages.
These .str files you need to put to the texts subfolder in the folder of your map (e.g. to
the Media\prebuild\level_map_1\texts folder).
NOTE: Localization .str files must be in the "Little-endian UTF-16 Unicode" encoding.
However, to start the multiplayer mode on the map, you need an opened Garage on it.
This is necessary for other players to be able to connect to the host of the COOP mode.
I.e., until the host opens the Garage within the map, other players will not be able to
connect to him/her (with the corresponding error message).
229
5.23. Farming
This section provides all info necessary to create a farming area on your map and set up
a farming objective related to this area.
For conviniece, the description of this process is split into 3 steps that are typically done
successively:
• Step 1: Creating a Zone for a Farming Area
• Step 2: Creating Distributions for a Farming Area
• Step 3: Creating an Objective for a Farming Area
3. In the properties of the zone locator, fill in the Distributions group name field.
230
NOTE: The specified value will be the name of the group of distributions that you
will create at Step 2. It must be exactly the same as the name of this group,
otherwise the farming area will not work.
4. In the Zone Settings dialog, in the TERRAIN LOCATORS LIST there, expand
properties of the created zone, and add the ZonePropertyFarmingArea
property to the props section of the created zone.
NOTE #1: If all other things (see other Steps below) are set up correctly, farming
will work even without the ZonePropertyFarmingArea property added to the
props of the zone. However, we still recommend to always add it, since it affects
some UI-related use cases (generation of UI text when there is no Ui Desc in
the the farming Stage).
5. Specify all other properties of the zone and zone locator as you like, in a
standard way.
After you have finished creating the zone for a farming area, you can proceed to creating
distributions for it, see below.
Particularly, you will need to plan the process of farming on your field done by the player
and create a separate distribution for every state of your farming area, including the
default one and even the stages that will require no actions from the player (but require
changing the texture of the field).
For example, if you want to plant potatoes on your farming area, you can have 6
distributions (states from 0 to 5):
231
State Description of Farming Stage Description of Distribution Distribution Name
0 Initially, your area can be filled with The default state of the field that CanesDry
canes. corresponds to the CanesDry
distribution with some dry canes
all over the field.
1 Then, the player will be cultivating This state corresponds to the Empty Distribution
the field with the Cultivator and the plowed ground without any plants,
field will become plowed: first – in i.e., you can create an Empty
the areas passed by the Cultivator, Distribution (i.e. a distribution
and, at the end, entirely. without selecting any Brushes)
for this state.
2 After that, the player will be This state corresponds to small PotatoSmall
planting potatoes on the field, with sprouts of potatoes appearing on
the help of the Planter. the field in the areas passed by
Planter. I.e., for this stage, you
need to create the PotatoSmall
distribution where the entire field
is covered with small sprouts of
potatoes.
3 However, at the end of the planting For this state you need to create PotatoBig
stage, when the player the PotatoBig distribution where
successfully finishes planting small the entire field is covered with
potatoes, the planted sprouts will large sprouts of potatoes.
grow into the large ones, on the
entire field. This stage will require
no action from the player. I.e., it
will be “hidden” in the UI (will not
be displayed as a subtask) and will
be passed automatically when the
player finishes the previous stage.
However, the plants on the field
will do change.
232
4 Now, when the potatoes have This state corresponds to the PotatoCore
grown, the player will be harvesting PotatoCore distribution
them with the help of the representing the potato tubers left
Harvester, and, in the areas on the field after Harvester.
passed by the Harvester, potato
tubers will appear.
5 Finally, after the stage of This state corresponds to the Empty Distribution
harvesting of potatoes is finished, ground without any plants. I.e.,
the potato tubers will disappear you can create an Empty
from the field and it will be empty Distribution (i.e. a distribution
again. This stage again will require without selecting any Brushes)
no action from the player (will be again for this state.
automatically passed and “hidden”
stage), but the field will do change WARNING: Regardless of the fact
again. that this distribution will be empty,
you need to assign a Map (.tga)
to it and paint your field on this
map in a regular way (however,
without selecting Brushes).
Otherwise, the State specified for
the distribution will not be saved
and farming field will not work
correctly.
As you can see, all these distributions will appear one after the other. Every next
distribution will appear:
• either gradually, only in sections of the field passed by farming equipment (e.g.
when the player is cultivating with the Cultivator, or planting with the Planter, or
harvesting with the Harvester),
• or, on the entire field at once (e.g. when small potato sprouts “grow”
automatically into the big ones),
• or, in both of these ways (e.g. after the player successfully finishes cultivating to
the specified percentage, the entire field will appear plowed, even in sections
that were not passed, and so on).
However, regardless of the manner of appearance, the order of appearance of these
distributions is always fixed.
To define this order, in the State field within the properties of every distribution you will
need to specify its number, starting with zero and without omissions.
233
WARNING: There is an important nuance for Empty Distributions, if you want to
include them in your farming cycle. Regardless of the fact that these distributions will be
empty, for every such distribution, you need to assign a Map (.tga) to it and paint your
field on this map in a regular way (however, without selecting Brushes). Otherwise, the
State specified for the distribution will not be saved and farming field will not work.
However, all these distributions are created for the same farming area and the game
should be able to identify that. So, along with specifying State numbers, you also need
to group them and link the resulting group of distributions to the zone created at Step 1.
To do this:
1. Create a group of distributions. This can done by right-clicking the Distributions
section in the Scene View panel and selecting Distributions – Add Group. See
3.5. Groups & Copying Them Between Maps above for details.
NOTE: Initially, the created group will have a number as a name. You can
specify the proper name of the group by selecting the created group in the
Scene View panel and changing the Name field in its properties.
2. Assign all distributions created for the farming area to this group. This can be
done by selecting a Distribution and changing the value of the Group field in its
properties, see 3.5. Groups & Copying Them Between Maps above for details.
Or, alternatively, after creating a group, you can create new distributions directly
234
in it, by right-clicking the group and selecting <name_of_the_ group> – Add
Distribution.
NOTE: The value specified in the Distributions group name field must be
exactly the same as the name of the distributions group, otherwise the game will
not find these distributions and the farming area will not work.
Except nuances described above, every distribution from the set is added in a standard
way, see 5.7. Adding Multiple Objects via Distribution for details. The borders of the
distribution area typically match the borders of the created farming area zone.
235
NOTE: For obvious reasons, if you change the location or borders of the farming area
zone, you need to repaint all distributions related to this farming area.
In general, your farming objective is created in the absolutely regular way, see 5.16.
Adding Objectives for the general info on that. You can create it in the form you like:
Contract, Task, or even Contest. All these types of objectives support farming
assignments within them (e.g. cultivate the particular farming area, plant a certain
vegetation, harvest the grown plants).
However, before proceeding to these particular properties, let’s highlight some general
important things related to farming assignments:
• Typically, there are multiple farming Stages within a Contract, Task, or Contest.
The player needs to cultivate the field, then they need to seed it, then – to gather
the harvest – all these assignments are described by separate Stages that go in
the certain order, but, if necessary, with some other non-farming assignments
(Stages) in between.
236
• Farming stages are tied not only to a particular zone, but also to the group of
distibutions (states of the field) that also must have a defined order. So, before or
in parallel with creating these Stages within an objective, you need to create a
zone and a group of distributions for the farming area, see 5.23.1 and 5.23.2
above for details.
• Particulary, every farming Stage is using two distributions (states of the field) and
defines the rules of transforming one of them into another:
o The first one – is the state of the field that the player has at the start of
Stage. Looking ahead, we can say that this state (distribution) of the field
that is displayed at the beginning of the Stage must have a the state that
is less than the neededState. I.e., its state should be one of the states
thar are previous to neededState. However, you do not need to directly
specify this state in the properties of this Stage, and the only requirement
for this state is that its less than neededState. So, it can be any state that
goes before it.
o The second one – the state (distribution) that will be appearing in the
areas of the field where the player is performing the defined farming
action (with the defined farming trailer). This distribution/state is the
neededState defined for the Stage.
• If you are wondering how the game will define that the player can interact with
the field with one of farming trailers, here is the list of these criteria. The farming
field will interact with the player’s trailer if the active Stage of the current objective
contains the farmingInfo section where:
o the farmingZone (see below) of this Stage corresponds to this farming
field.
o the player is using the requiredTrailer (see below) of this Stage.
o the current state of the faming field is less than the neededState of this
Stage.
• When necessary, for some Stages, this transition of one distribution into another
can be done at once and without any actions from the player, see
hideStageFromUi below.
237
• requiredTrailer – the farming trailer required for the assignment. Possible
values:
o "Cultivator" – the trailer of this type is typically used for cultivating the
farming area, to make the ground plowed.
For example, trailer_cultivator that can be found in the Editor.
o "Planter" – the trailer of this type is typically used for planting the
vegetation on the farming field.
For example, trailer_planter in the Editor.
o "Harvester" – the trailer of this type is typically used for harvesting the
farming field.
For example, trailer_harvester in the Editor.
NOTE: The farming area will be interacting only with the specified trailer
and the zone will iteract with it only when the current state of this field is
goes before the neededState (i.e. when the fields in any of the previous
states), see below.
• neededState – The state of the farming field that this field will be switched to
after the player will pass the required percentage of it (defined by tolerance, see
below) with the requiredTrailer. There are 6 possible values of neededState
and every such state is linked to the distribution with the corsponding State
number. See the mapping table below and 5.23.2. Step 2: Creating Distributions
for a Farming Area above.
NOTE #1: The neededState field of the Stage corresponds not to the state of the
farming field when the player starts this Stage, but to the final state of the filed
when the player finishes this Stage. However, when the player is performing the
Stage, the sections of the field that are passed by the player with a necessary
238
farming tailer (requiredTrailer) are also converted to the distribution
corresponding to the specified neededState.
NOTE #2: The state (distribution) of the field that will be displayed at the
beginning of the Stage must have a the state that is less than the neededState.
I.e., its state should be one of the states thar are previous to neededState.
For example, for sample farming process described in 5.23.2, for the Stage when
the player will be planting potatoes on the field with the help of the Planter, the
neededState will be equal to "FIELD_STATE_SOWN", but the field, at the
beginning of this process, will display the distribution corresponding to the
previous state – "FIELD_STATE_PLOWED". So, during the stage, the field will go
from state 1 (second distribution) to state 2 (third distribution). If necessary, you
can skip some states, and go not from 1 to 2, but from 0 to 2. But the state of the
neededState must be greater than the current state of the field at the moment
(e.g. 2>1 and 2>0). Since you may have such transitions (e.g. from 0 to 4 or from
0 to 5), the current state of the field is not specified in the Stage, only the
neededState.
NOTE #3: There are only a few requirements for a farming field to interact with
the player’s trailer during the Stage. Particularly, the farming field will interact with
the player’s trailer if the active Stage of the objective contains the farmingInfo
section where:
– the farmingZone (see below) of this Stage corresponds to this farming field.
– the player is using the requiredTrailer (see above) of this Stage.
– the current state of the faming field is less than the neededState of this Stage.
NOTE #1: However, the percentage that the player will see in the UI can be
higher than (1 – tolerance) * 100%, since this percentage corresponds to the
progress of this particular farming assignment. E.g., even when tolerance equals
to 0.3 (and req_percentage is 70%), the player will see 95% in the UI when they
have completed 95% of the required 70% of the field.
NOTE #2: The precise process of calculating sections of the field worked by the
239
player with the farming trailer (and transforming the current distribution into the
next one in these areas) is not so simple as it seems to be. Particularly, the game
tracks not the area passed by the trailer as a whole, but the area passed by
specific (invisible) boxes that are set up in the trailer properties. See 5.23.4.
Custom Trailers for Farming Stages for details.
• hideStageFromUi – Enabling this option will mark that this stage requires no
actions from the player and should be hidden in the UI of the game. I.e., if you
enable this option, no Ui Desc will be displayed for this Stage and it will be
passed automatically when the player finishes the previous stage. However, the
game will do perform actions defined by this Stage, i.e. it will switch the field to
the next distribution (corresponding to the state specified in neededState, see
above), so, plants on the field will do change. By default, farming Stages do
require actions from the player, so this option is disabled.
NOTE: For example, in our samples in section 5.23, there are two of these
"hidden" Stages that do not require actions from the player. One of these Stages
is placed after the planting stage and switches the field from the distribution with
small sprouts of potato to the distribution with large potato sprouts at once, when
the player has successfully finished planting of small potatoes. I.e., due to this
"hidden" Stage, the planted small sprouts "grow" into the large ones on the entire
field and there are no objectives displayed to the player at this moment.
• Ui Desc – the description of the Stage assignment. For example: “Cultivate the
field”. Or, the UI_IDENTIFIER of this text if you want to provide your map in
multiple languages.
• farmingZone – the ID of the zone that you have created for this farming area.
See 5.23.1 above for details on creating it.
NOTE: If you have a Region with multiple maps, this zone must be located on the
same map as the objective (on the map the objective is assigned to).
TIP: In the Appendix B: Stages of a Sample Farming Contract below, you will find fully
functional stages of a sample Contract for the farming area we used in 5.23.1 and 5.23.2
above.
However, along with the main properties listed above, you can also specify Model
Building Settings for the farming stage (see below).
240
As you can see, the fields in this Model Building Settings section are the same as in
other sections of this kind. The mechanics is also the same – you can play a certain
animation at the end (the successful completion) of the certain farming Stage.
NOTE: For more details on the fields of the Model Building Settings section and
setting up an animation playback via them, see 5.16.3. Model Building Settings. The only
difference of setting up this for farming stages is that you will probably want to play an
animation related to farming, not to building or repairing.
However, to be able to do this, you will need an _objective model with this animation
added to your map. Particularly, you will need to do the following:
241
1. Adding an animation source to your map, in the form of the _objective model, as
with building/repairing animations.
2. Tag this model in its properties and specify the same tag value in modelTag in
the Model Building Settings section.
3. In XML class of this _objective model model, look up the values of its states
(values of the Name attributes of the Subset tags), and add them to
stagesProgress list in Model Building Settings, specifying correct order for
them.
After that, the specified animation will be shown to the player at the end of the Stage.
If necessary, you can use two _objective models from DLC8 that contain animations
providing a look on your farming field: field_animation_objective and
field_animation_2_objective. They can be found in Editor. Their XMLs are at
[media]\_dlc\ru_08\classes\models\ of the initial.pak.
For details, see “18. Farming Trailers” in the “Integration of Trucks and Addons”
guide available as Integration_of_Trucks_and_Addons.pdf in the same
documentation package.
242
5.24. Water as a Resource
Starting with the DLC 9 (“Season 9: Renew & Rebuild”), you can add to your custom
maps Water Station zones, i.e. zones with ZonePropertyWaterStation in props.
In combination with truck addons, trailers, and semitrailers supporting water as cargo,
the Water Station zones add support of water to the gameplay of SnowRunner and
allow players to fill water tanks of their trucks, store, transfer, and deliver water to
particular locations.
Particulaly, there are 3 main types of Water Station zones: PICK_UP, DROP, and
TRANSIT. They allow to fill the tank of the truck of the player, fill the zone reservoir from
the truck tank, or transfer water between zones. Every type has its own nuances, see
subsections below. For the list of fields of Water Station zones, see 5.15.1.14. Water
Station zones: …WaterStation zones above.
TIP #1: As icons for the zone locator of the Water Station zones, you can use
ontarioWaterDropZoneImg30 and ontarioWaterDropZoneImg40 – for PICK_UP and
TRANSIT zones. In the original game, icons for DROP zones vary depending on the
employee of the conract; however, for custom maps you can use any other icons from
the list for them, see 5.15.3 above.
TIP #2: Starting with the DLC 9 (“Season 9: Renew & Rebuild”), you can add animated
fish models to your Rivers, see 5.5.3. Interesting Models: Creatures, People, etc.
TIP #3: If your map gameplay is somehow related to firefighting or eliminating the
consequences of a fire, you can utilize the smoke effect, see 5.16.3.1. Adding Smoke.
NOTE: For these zones, water cannot go in the reverse direction, i.e. the player cannot
fill the zone reservoir from the truck tank.
243
3. In Water – specify the amount of water, in liters, that the player can take from
this zone. I.e., this will be the current amount of water in the water reservoir of
this zone. To specify an infinite amount (e.g. in case of the river), you can
specify the "-1" value.
4. In Capacity – specify the maximum capacity of the water reservoir of this zone.
Specified Capacity must be greater than current amount (Water). The "-1" value
will set the capacity of this water reservoir to infinity, and, if you specified infinite
current amount (Water), then the Capacity must be infite too.
5. Leave the Is water delivery objective zone option disabled. (This option should
be enabled for DROP zones that are target zones of some objectives only).
6. Leave the blank list of Shared Water Zones (this list is necessary for TRANSIT
zones only).
NOTE: For these zones, water cannot go in the reverse direction, i.e. the player cannot
fill the truck tank from the zone reservoir.
244
• If this DROP zone is not used in any objective – leave the Is water
delivery objective zone option disabled.
6. Leave the blank list of Shared Water Zones (this list is necessary for TRANSIT
zones only).
NOTE: You can set up objectives that will require the player to deliver the particular
amount of water to the Water Station zone of the DROP type. See 5.24.4. Objectives:
Water Delivery for details.
These zones act as a common reservoir connected to the certain set of shared zones of
TRANSIT type. The player may fill this common reservoir via any zone from the set and
the amount of water will be changed in all of them, since they all are interconnected.
And, the player can also take water from this common reservoir, also via any zone from
the set (and the amount still available in the reservoir will be changed correspondingly
for all zones also).
NOTE: For TRANSIT zones, water can go in both directions: from the truck tank to the
reservoir and backwards.
Since TRANSIT zones work for both input and output, and are interconnected, the player
becomes able to transfer water with their help.
Thus, one of the simpliest scenarios of the TRANSIT zones usage may be the following:
1. The player fills the truck tank at some PICK_UP zone.
2. The player drives with this water to the TRANSIT zone A and fills its reservoir
with the water from the truck tank, emptying it and making the truck considerably
less heavy.
3. With an empty truck tank and less heavier truck, the player passes some
obstacles on the way much easier.
4. After passing obstacles, player drives to the interconnected TRANSIT zone B
(connected to the same reservoir as zone A) and fills the truck tank from it.
5. With the full truck tank, the player delivers water to the necessary DROP zone.
TIP #1: The scenario described above can be offered to the player as an alternative to
other routes, see the simpliest illustration below.
245
TIP #2: The scenario described above is just one of the basic ones. You can complicate
it the way you like. For example, you can open particular TRANSIT zones as rewards for
accomplishment of some other objectives (by changing their props dynamically), see
ObjectiveRewardOpenZoneProperties and ObjectiveRewardUpdateZoneProperties
as values of rewards in 5.16.2.1. Common fields (for all objectives).
246
Do this for all created zones (every such zone must have Shared Water Zones
list entries that point to all other zones from the set).
• select the zone of the DROP Water Station type in the globalZoneId field.
WARNING on the Is water delivery objective zone option: If your DROP zone is used
as a target zone in some water delivery objective, you should enable the Is water
delivery objective zone option in the ZonePropertyWaterStation prop of this zone.
This will hide this zone before the activation of the objective and when the currect Stage
of the objective is not using it as the target zone.
Otherwise, if this option is disabled and this zone is used within an object, at the moment
of activating the corresponding objective, the amount of water in this zone (which is set
by Water in the ZonePropertyWaterStation prop + water added to this zone by the
player before activating the objective) will be reset to zero.
247
WARNING on the zone Capacity VS delivery Amount: When specifying the target
Amount of water to be delivered required by the objective, please ensure that it is equal
or less than the Capacity of the zone. Otherwise, the player will not be able deliver the
requested amount and will not be able to finish the objective.
Their ceation is similar to the creation of these entities for Fuel as cargo, you just need to
add some properties to the XML files.
For details, see “19. Water as Cargo” in the “Integration of Trucks and Addons” guide
available as Integration_of_Trucks_and_Addons.pdf in the same documentation
package.
248
5.25. Collaborative Work on Maps
Starting with the DLC 9 (“Season 9: Renew & Rebuild”), your ability to collaborate with
other modders on the creation of large maps is enhanced.
Particularly, you can split your large map in pieces, work on necessary pieces
separately, and then combine all these pieces into the final map.
Regardless of its actual size, every map is conventionally splitted at 16 map pieces that
are numbered from [0,0] (as the top left piece) to [3,3] (as the bottom right piece), see
the illustration below.
NOTE: The actual size of every piece varies depending on the map size.
If you look into the folder of your map in Media\prebuild (see 4.1. File Paths for details),
and then proceed to data subfolder there, you will see that set of numbered subfolders,
from 0_0 to 3_3, see the screenshot below.
Yes, you are right – every such subfolder contains (almost all) data of the corresponding
piece of the map. However, there are exceptions to this, such as Rivers, Overlays, and
some other entities that are shared between all pieces, see below.
249
5.25.2. Chunks. Selecting a chunk to work with
A chunk is a set of adjacent pieces of the map, defined by two points: its top left point
and its lower right point.
Regardless of the actual dimensions of the map, there are 16 map pieces in total (4 x 4).
So, each of these points will have conventional X and Y coordinates from 0 to 4.
250
For example, when you are dividing the map between 3 modders, you can divide it into 3
chunks, as shown on the illustration above:
• Chunk #1: from (0,0) to (4,2)
• Chunk #2: from (0,2) to (3,4)
• Chunk #3: from (3,2) to (4,4)
And, as a result, Chunk #2 will contain 6 map pieces in it: [2,0], [2,1], [2,2], [3,0], [3,1],
[3,2]. And, the modder working with this chunk will have their data stored in the
corresponding subfolders within the data folder (see 5.25.1 above).
So, at first, it is probably a good idea to divide your map into convenient chunks and
distribute these chunks between members of your modding team. After that, they will
know the chunks (and, correspondingly, map pieces, i.e. subfolders of data) they will be
working with and the conventional coordinates of these chunks.
However, after that, you need every member of the team to be able to select their chunk
on the map and highlight it, to avoid modifications in other chunks. This can be done by
the Select chunk ( ) button and Show zone for work ( ) option on the Toolbar:
1. Click Select chunk ( ) on the Toolbar.
2. In the appearing small dialog, specify the conventional coordinates of necessary
chunk, i.e. conventional coordinates of its top left point and its lower right point.
251
If you leave the Show zone for work ( ) option enabled, you will be able to work with
the necessary part of the map only and will be able to avoid modifications in parts of the
map that are highlighted with red.
1. Leader of the modding team creates an empty new level in the Editor.
2. Source files of this level are sent to all members of the modding team.
NOTE: These source files, among the other files, will include the data\0_0 …
data\3_3 subfolders containing data of all map pieces. These map pieces will be
initially the same for all modders.
3. Team splits the map into chunks and assigns them to members of the team. As a
result:
a. Using the Select chunk and Show zone for work features, every
modder is able to work on the chunk assigned to them only.
b. Every modder knows the their particular map pieces, i.e. the particular
numbered subfloders from the data\0_0 … data\3_3 subfolders set,
where the work of this particular modder will be stored.
252
4. When it is necessary to update a chunk of the particular modder for all other
members of the team, this modder sends their particular map pieces (particular
numbered subfloders) to these members. They substitute these folders with
folders received from this modder, reload a map from source files, and, after that,
these map pieces are updated on their side.
5. At the end, all map pieces are gathered from corresponding modders and the
final building of the map is performed.
WARNING: This is the general process without some details. There are some nuances
in it – see below.
TIP: To avoid modifications of map pieces that are assigned to different modders, you
can set the Read-only attribute to "true" for data\0_0 … data\3_3 folders corresponding
to these map pieces.
The general process is meant to be similar to the described above. It works precisely
this way when you work with:
• Terrain (including all Geometry terrain brushes)
• Models
• Plants
• Trucks
• References
However, there are some differencies in this process for working with Distributions,
PBR Materials, Rivers, Overlays, Zones, and Objectives, see subsections below.
1. Adds the information about this distribution (its brushes, etc.) to the level:
• If this Distribution does not belong to any group of objects – this info will
be added to the main XML file of the level, the <level_name>.xml one
that is stored in Media\prebuild
• If this Distribution belongs to a group of objects (see 3.5 above) – this info
will be added to the XML file of this group, which will be located in the
Media\prebuild\<level_name >\subgroups folder
2. Adds the texture of this distribution in the .tga format to data of the level.
Particularly, since the map is always splitted into the conventional map pieces,
253
the appropriate texture pieces (.tga files with the same name) are added to the
corresponding data\0_0 … data\3_3 subfolders.
Thus, if a modder from modding team wants to add a distribution to one of their map
pieces, then this modder needs to send to other members of the team the following info:
1. The piece of XML code containing info on this distribution – to be added to the
corresponding XML file of the level or subgroup on the side of other modders.
For example, the following piece from the XML file of the level:
2. Textures (maps) of this distribution that were created for it in all data\0_0 …
data\3_3 subfolders:
254
NOTE: If a distribution is already created on all modders’ copies of the level, and the
modder modifying it has modified only its .tga texture (map) within this modder’s own
map pieces and has not modified the other properties of this distribution, this moder can
send only the modified map pieces, as described in the general process (see 5.25.3
above).
Piece of tech info: Every material has 4 layers. Every layer corresponds to a RGBA
channel in the mtrl_base_blends.tga texture. The data on the particular material the
terrain is painted with is stored within the mtrl_layout.tga texture (and this data is used
based on the RGBA channels too). Thus, when a modder modifies the properties of the
particular PBR material (without modifying the texture), in fact, they change only the
brush assigned to one of these textures, i.e. to one of the RGBA channels.
Thus, when simultaneously working with PBR materials, there may be three scenarios:
1. The modder does not modify the properties of the Material and layers
specified for it, but modifies the painting of the terrain (i.e. the texture)
within this modder’s own map pieces.
In this case, all that this modder have to send to other team members is the
mtrl_base_blends.tga and mtrl_layout.tga textures from the modified map
pieces (i.e. from the corresponding data\0_0 … data\3_3 folders).
2. The modder modifies the properties of the Material and layers specified for
it, but does not modify the painting of the terrain (i.e. the texture).
255
In this case, all that this modder has to send to other team members is the piece
of XML code containing info on the brush of this PBR Material from the
<level_name>.xml that is stored in Media\prebuild – for this to be added to the
copies of this XML file on the side of the other modders.
For example:
3. The modder modifies both the material properties and the texture within
this modder’s own map pieces.
In this case, the modder has to send both the mtrl_base_blends.tga and
mtrl_layout.tga textures from the modified map pieces and this XML piece.
Thus, when a modder creates a River or Overlay object, this modder needs to locate the
XML file of the necessary River or Overlay in these folders (by their Id, if necessary) and
send it to all other modders.
However, there is a nuance with deletion of River or Overlay objects. When one of the
modders deletes the River or Overlay object, this modder needs to tell others to delete
this object too.
256
5.25.3.5. Collaboration: Sounds and SoundDomains
Information on sounds and sound domains is stored in the
Media\prebuild\<level_name>\_sounds.xml
Thus, when a modder adds a Sound or SoundDomain object, this modder needs to
locate the XML code of the added sound or sound domain in this file and send it to all
other modders for them to add it.
The data on zone properties is stored in the zone_settings.json file within the
Media\levels\<level_name> folder.
Thus, when a modder adds a zone, this modder needs to send the following to other
modders:
• The piece of XML code with info on zone locator – either from _zones.xml or
from the XML file of the group.
• The piece of JSON code with zone properties – from zone_settings.json
Thus, when a modder adds an objective, this modder needs to do the following:
1. Sync all data on zones (see above).
2. Send a piece of JSON code with objective properties – from
objective_settings.json – to all other modders.
257
If a modder modifies them, the corresponding JSON pieces need to be sent to all other
modders.
Thus, data on References should be synced according to the general pipeline described
above. However, the map of the reference itself should be located at the same path for
all modders.
NOTE: If a single reference stretches across multiple pieces of the map, the data on this
reference will be stored at the map piece where its center is located.
As before, you can modify them not only by means of SnowRunner™ Editor, but also in
third-party tools that support .tga or .dds formats.
However, for some textures, you will probably want to modify the full-sized texture
corresponding to the whole map and then divide it to map pieces. That's what the
"Combine chunks in directory" and "Separate chunks from directory" context menu
commands are for.
This command creates the fullTexture folder within the folder of your level in
Media\prebuild\ and puts there all textures from all map pieces of the map, building the
whole-map-sized textures from them.
258
5.25.4.2. Separate chunks from directory
The "Separate chunks from directory" command is also available in the context menu.
NOTE: After the execution of this command, all textures in the applyTexture folder are
removed.
There is no direct "out-of-the-box" integration with a particular VCS, so you can use a
VCS you like: Git, Perforce, Subversion, and so on.
259
6. Packing a Map
To pack the map, you need to click the Pack terrain button ( ) on the toolbar of the
Editor.
NOTE: This operation will pack an individual map (as a mod). Packing of a region with
multiple maps is performed differently, see 5.17. Regions with Multiple Maps.
After doing this, the system will create two sets of files:
● set of .pak files – that are necessary for local testing.
● set of .zip files – that are intended for uploading to mod.io.
After successful packing, the set of .pak files is automatically copied to the mods folder
of the game, which will allow the game to find this map and display it in Custom
Scenarios. So, directly after packing, you can proceed to testing your map in the game.
If you need the .pak files themselves, you can find them in the folder with local mods of
the game, i.e. in the Media\Mods folder, which is created in the
Documents\My Games\SnowRunner\ folder.
260
The set of .zip files – that are intended for uploading to mod.io – will be created in the
Media\levels folder:
To do this:
1. Restart the game. After the restart, the game will find the .pak file generated as a
result of packing (see above).
2. In the main menu of the game, open NEW GAME > CUSTOM SCENARIOS.
On this screen, you will see the name of your map.
261
3. Select it (by clicking it) and press ENTER.
4. You will see a list of saved games. Click a necessary slot there (where you want
to start a new game on your map). If necessary, overwrite one of your previously
saved games.
5. After a loading screen, you will be spawned to your map in the “Proving Grounds”
mode. I.e., the TOOLS menu (with Repair & Refuel and other options) will be
available for you as if you have loaded one of the Proving Grounds maps.
262
IMPORTANT: To be able to be spawned on your map correctly, you need at least one
truck on your map and this truck must be Active (i.e. in the properties of the truck, the
Active parameter must be set to True).
8. Publishing a Map
After you have packed your map, you need to locate the generated set of .zip files, see
6. Packing a Map above.
NOTE: You need to upload every .zip file of every platform as a separate file on the
Edit Your Mod page at mod.io, see "4.3. Uploading Files of the Mod" of the “Quick
Guide – Adding Trucks” guide for details.
263
After that, you will be able to play on the activated maps.
264
4. You will see a list of saved games. Click a necessary slot there (where you want
to start a new game on your map). If necessary, overwrite one of your previously
saved games.
NOTE: As opposed to the local map (where the TOOLS menu is always shown),
the TOOLS menu on the downloaded map can be either displayed or hidden.
This is controlled by the isEnableDevMenu option in the zone settings of the
map (see 5.15.5 above).
265
11. Viewing Trucks
Along with working with maps, the Editor also allows you to view mods of your trucks.
NOTE: The XML files, textures, and Fbx files of custom trucks and addons are created
manually, in other applications (not in Editor). For more info on the creation of the truck
mods, please refer to:
• “Integration of Trucks and Addons” guide - the main guide on truck mods and
their properties. It is available as Integration_of_Trucks_and_Addons.pdf in
the same documentation package.
• “Quick Guide: Adding Trucks” guide – the quick guide on the creation of truck
mods. It is available as Quick_Guide_-_Adding_Trucks.pdf in the same
documentation package.
NOTE: We highly recommend opening your trucks in the Editor. By opening them there
you can view errors that do not result in crashes of the game but can affect truck
behavior.
266
11.1. Opening XML files of a Truck
Your truck mods are stored in the Media\Mods\ folder, which is created in the
Documents\My Games\SnowRunner\ folder.
The Editor uses the same Media folder. Therefore, you can simply open the XML files
from the source folders of the truck mods in the Editor (without copying anything to a
different folder).
To do this, simply expand the Mods folder in the File View panel of the Editor, locate the
XML file of the mesh or the XML class of your truck, and double-click them:
267
11.2. Viewing XML file of the Mesh
If you open the XML file of the mesh of the truck, you will see the contents of the Fbx file
with applied textures.
Here you can quickly check the opened model for correctness.
In the Scene View panel, you can see the whole hierarchy of the truck skeleton with the
CDT objects. If you select an object there, it will be displayed in the main panel and its
properties (coordinates, etc.) will be displayed at the lower part of the panel.
Next to the name of the collision object, you can see how the form of this collision object
is interpreted by the game engine:
The best such form is the “box”; however, “convex” is also suitable; the “mopp” value
here means memory optimized partial polytope (Havok term), which seems to be better
than “convex”; if the object is marked as “non-convex”, it may cause some issues. For
details, see “2.6.1.1. Collision meshes” of the Integration of Trucks and Addons guide
(it is available as Integration_of_Trucks_and_Addons.pdf in the same documentation
package).
268
11.3. Viewing XML file of the Class
When you open the XML file of the class of the truck, it is opened in the new Truck tab
in the Editor:
The panel on the left side displays some options that can be useful while working with a
truck:
● Activate attachments options - allow you to enable/disable the lights that are
described in the XML of the truck.
● Visualization options - allow you to visualize some objects that are not related to
lights or the physical model. For example, you can visualize the Damage Areas
of the truck by enabling the corresponding option.
● Cabin option - allows you to view the cabin of your truck in the high-poly mode.
The Scene View panel on the right displays the whole hierarchy of the truck skeleton
with the CDT objects. It works the same way as when viewing the XML-mesh of the
truck (see above).
Using this preview of the truck, you can also enable its Havok simulation. To do this,
click the button on the toolbar of the editor:
269
After doing this, the truck will be displayed as if it is placed on the ground.
The preview of the XML class of the truck allows you to quickly proceed to viewing the
XML mesh of the truck. To do this, right-click somewhere in the main panel and select
Goto Mesh File.
You can select errors there and copy them to buffer by pressing CTRL+C, then paste
where necessary by pressing CTRL+V.
270
The XML file of the class can be opened for trucks only.
271
Appendix
Appendix A: List of Addons and Addon-Trucks Mapping
This appendix is available as a separate file – see Addons_List.xlsx in the same documentation package.
272
Stage 0 – truckDelivery: Deliver the Cultivator
273
Stage 1 – farmingInfo: Cultivate the field
274
Stage 2 – truckDelivery: Deliver the Planter
275
Stage 3 – farmingInfo: Seed the field
276
Stage 4 – farmingInfo: (hidden automatic step)
277
Stage 5 – truckDelivery: Deliver the Harvester
278
Stage 6 – farmingInfo: Harverst the field
279
Stage 7 – farmingInfo: (hidden automatic step)
280