You are on page 1of 280

SnowRunner™ Editor Guide

Version 0.9.45 of June 07, 2023

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.24 The 5.17.2 section is corrected and clarified.

0.9.26 The following sections were added:


• 5.5.3. Models of Creatures
• 5.20. Custom Maps in COOP
• 5.21. Console Mods Requirements

0.9.27 The 5.18. Custom Images for Regions and Maps section is added.

0.9.29 Warning on correct naming of textures in vehicle mods (5.21).

0.9.31 The following sections were added or modified:


• 5.4.1. Breakable Ice (added)
• 5.11.2. Allowing player to purchase trucks from all countries (added)
• 5.15.6. Adding Introductory Info and Initial Objectives (added, WIP)
• 5.15.7. Modification of Content Settings and its subsections (added)
• 5.16.2.2. Specific fields for Contracts (modified, added info on custom employers)

0.9.32 The following sections were added or modified:


• 5.15.8. Logging: Logs as New Types of Cargo (added)
• 5.17.2. Rules for a target zone of a Gateway. Extra zones (warning added)
• 5.15.1.3. Garage: ...GarageEntrance and ...GarageExit zones (warning added)
• 5.17. Regions with Multiple Maps (minor changes)
• 5.18. Custom Images for Regions and Maps (minor changes)

0.9.34 The following sections were added or modified:


• 5.15.8. Logging: Logs as New Types of Cargo (modified)
• 5.15.6. Adding Introductory Info and Initial Objectives (modified)
• 5.15.1.8. Craft and Generator features: …StorehouseCraft and …Energy zones
(added)
• 5.18. Custom Images for Regions and Maps (transparency mask for
GlobalMapRegionIcon added)
• 5.16.1.7.1. Metal Detector and “Should be discovered by metallodetector” option (was
added, current status: work in progress).
• 5.21. Console Mods Requirements was heavily updated and moved into a separate
guide (Console_Requirements_for_Mods.pdf in the same documentation package)

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).

0.9.36 The following sections were added or modified:


• 5.16.1.8. Delivery of Cabins to Living Area (“livingAreaInfo” section) (added)
• 5.15.1.9. Living Area feature: …LivingArea zones (added)
• 5.17.4. Locking Objectives based on Exploration (added)
• 5.16.1.7. Spawning Cargo on a Map (“spawnCargoOnStageActive” section) (modified)
• Appendix A: List of Addons and Addon-Trucks Mapping (added as a separate file:
Addons_List.xlsx in the same documentation package).

0.9.37 The following sections were added or modified:


• 5.16.4. Custom Employers (added)
• 5.15.1.10. Ressuply Repair Parts in Hard Mode: …ResupplyRepairParts zones
(added)
• 5.15.1.2. Fuel Station & Repairing: ...FuelStation & ...AutoRepairAndRestore zones
(modified)

0.9.38 The following sections were added or modified:


• 5.8.7. Custom overlays (added)
• 2. Installation and First Launch (modified)

0.9.39 The following sections were added or modified:


• 3.8. Snapping panel (added)
• 3. UI Overview (modified)

0.9.40 The following sections were added or modified:


• 5.3.2. Custom Materials (added, link to the "Custom Level Entities: Models,
Overlays, and PbrMaterials" guide)

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)

0.9.42 The following sections were added or 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)

Info on "Water as a Resource" feature:


• 5.15.1.14. Water Station zones: …WaterStation zones (added)
• 5.24. Water as a Resource (added), with the following subsections:

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)

Info on "Collaborative Work" feature:


• 5.25. Collaborative Work on Maps (added), with the following subsections:
• 5.25.1. Map pieces. Their subfolders in the "data" folder (added)
• 5.25.2. Chunks. Selecting a chunk to work with (added)
• 5.25.3. General Process of Collaboration (added), with subsections on nuances
• 5.25.4. Working with External tools for Texture Maps (added), with subsections:
• 5.25.4.1. Combine chunks in directory
• 5.25.4.2. Separate chunks from directory
• 5.25.5. Working with Version Control Systems

0.9.43 The following sections were added or modified:


• 5.16.3.1. Adding Smoke (added).
• 5.24. Water as a Resource (modified).
• 5.15.1.3.1. Setting up a Repairable (Upgradeable) Garage (modified)
• 5.15.1.3. Garage: ...GarageEntrance and ...GarageExit zones (modified)
• 5.15.7.3. Custom Prices for Trucks and Upgrades (modified)
• 5.11.1. How to identify IDs of truck parts (modified)

Also, some broken links in the Guide were fixed.

0.9.44 The following sections were added or modified:


• 5.7.2. Custom Brushes (added).
• 5.15.1.15. Gateway zones: …Gateway zones (added).
• 5.17. Regions with Multiple Maps (screenshots updated)
• 5.17.2. Rules for a target zone of a Gateway. Extra zone (modified).

0.9.45 The following sections were added or modified:


• 5.15.10. Selection of a Country for a Map (added).
• 6. Packing a Map (updated)
• 8. Publishing a Map (updated)
• 5.17. Regions with Multiple Maps (updated)

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.

2. Installation and First Launch


The Editor is installed along with the game itself. You can find it in the folder of the
installed game, typically at the following (or similar) directory:
• C:\Program Files\Epic Games\SnowRunner\en_us\Sources\BinEditor\, if you
installed the game through Epic Games Launcher;
• C:\Program Files\Steam\steamapps\common\SnowRunner\Sources\BinEditor,
if you installed the game through Steam.

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.

To open the Editor, you need to launch SnowRunnerEditor.exe in this folder:

No configuration is necessary, you can just launch it.

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

The UI of the editor consists of the following:

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.

3.1. Toolbar buttons

Button Name Shortcut Description

Save CTRL + S Saves the map and updates the data.stg file.

Wireframe CTRL + W Enables/disables rendering of the map in the wireframe


mode.

Grid CTRL + G Shows/hides the planar grid.

Night Enables/disables the night mode. In the night mode, you


can see how your level looks at night (lights, etc).

Fog Enables/disables the fog.

Statistics CTRL + T Shows/hides the graphics statistics of the level:


camera position, camera direction vector, amount of
Draw Indexed Primitives (DIPs, “drawcalls”), faces,
models, and so on.

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.

Reload CTRL + R Reloads models, textures, settings of the materials,


Resources XML classes, XMLs of the map and its references, and
other meta-data.

Open File ALT + SHIFT + O Displays a dialog that allows you to quickly find and
open a file from the Media folder.

Duplicate CTRL + D Duplicates the object selected in the Editor.


selected

Pauses/enables the default animations that may exist


for the models in the Editor. For example, if you add the
windmill model, and then disable and enable this option
and Rebuild the level, you will see the animated
windmill:

It can be also used when viewing Trucks (see 11.3.


Viewing XML file of the Class).

Quick mode Enables/disables the Quick Mode in the Editor. This


mode allows you to rebuild your map faster. If this
button is activated, then the grass will not be calculated
during the rebuild and there will be no grass in the
terrain blocks that were rebuilt.

No references If this button is activated, the Editor will ignore


references during the rebuild of the map. The map will
not contain visuals of the references if this mode was
enabled before the rebuild.

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 rotation Enables/disables the rotation around the selection


basis center. I.e. when this option is selected, multiple
selected objects will rotate as a whole when you rotate
them; when disabled, every object will rotate relative its
own center.

WARNING: Enabling this option will block selection of


individual points of overlays.

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.

Enable Enables/disables the auto-rebuild of the terrain. If this


autorebuild option is activated, the terrain will be rebuilt each time
terrain you switch from one brush to another.

Show Shows/hides the distribution mask in the main view of


Distribution the Editor when the particular distribution is selected.
mask For details on distributions and their masks, see 5.7.
Adding Multiple Objects via Distribution.

Show colored Enables/disables the highlighted circle below the mouse


brush circle pointer when the particular brush is selected.

Show snow Shows/hides the snow coverage of the level in the


Editor.

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.

Hide Strings Shows/hides the names of the objects displayed next to


them in the main window of the scene.

Hide AABB Show/hides the Axis-Aligned minimum Bounding Boxes


(AABBs) of objects on the map (models, plants, etc.).
This option works for even not selected objects when
the camera is near to them.

Show Displays the map of heightmap angles for the level.


Heightmap

16
Angles

Enables/disables the Ruler tool, which allows you to


create splines and measure distances. After enabling
the tool, you can add points to the ruler spline by right-
clicking and selecting Add before and Add after in the
context menu. The spline works similarly to the
mechanism of overlays (see 5.8. Adding Overlays).

It allows you to increase or decrease the brightness of


the preview of the level in the appearing dialog. It is
used for previewing the level in the Editor only.
Particularly, it is useful to decrease brightness when
working with snowy levels.

Pack terrain Packs your map and generates the .zip and .pak files.
For details, see 6. Packing a Map

Collision Highlights incorrect collisions of models and plants. See


Notification 5.5.2. Types of models. Their behavior and collisions.

Zone settings Allows you to configure zones and objectives of your


map. For details, see 5.15. Adding Zones and 5.16.
Adding Objectives.

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.

Delete Allows you to delete duplicates of models and plants


duplicates that are located at precisely one point of the map.

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.

3.2. Camera Controls


● Left-click – select an object
● Left-double-click – fly to an object
● Right-click – context menu
● Mouse wheel – zoom in/out relative to the object under cursor
● Left mouse drag – rotate around the object under the cursor
● Ctrl + Left mouse drag – strafe the camera
● Shift + Left mouse drag – pan the camera
● Alt + Left mouse drag – rotate around the center of the selected object

NOTE: However, when a brush is selected, the left-click and right-click behavior is
different, see below.

3.3. Typical Brush dialog


Brushes of various types are frequently used in the Editor. They allow you to add the
mud, snow, paint layers of the materials, paint distribution maps for plants, and so on.
When you will be painting with a brush, the Brush dialog will appear within the main
panel of the scene. The particular properties (modes of the brush, etc.) displayed in this
dialog depend on the particular brush. However, most of the brushes look pretty similar:

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.

3.4. Selection of Multiple Objects


The Editor supports the selection of multiple objects of the same type (e.g. Models,
Plants, etc.)
To select multiple objects, hold CTRL while clicking on them (either in the main window
or in the Scene View panel). Objects will be displayed as selected in the Scene View
panel, and names of the selected objects will be displayed in the main window next to
the pivot, which is common for the selected objects:

19
To select adjacent objects in the Scene View panel, hold SHIFT while selecting them.

3.5. Groups & Copying Them Between Maps


When you are working with objects in the Editor, you can use Groups as categories for
them in the hierarchy of objects. These groups can contain only objects of the same type
(e.g. only models, or only plants, etc.).

For example, you can add a group for a set of buildings:

To add a group and assign an object to it:


1. Right-click the necessary section in the Scene View hierarchy (e.g. Models) and
select Add Group from the context menu.

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.

c. After doing this, the object will be moved to the group.

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.

3.6. Typical Context Menu


Right-clicking the main window of the scene or right-clicking the section/object in the
Scene View panel will open the context menu.

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.

The list of most frequently used commands is shown below:

Command Description

Reload Reloads the terrain. Any unsaved changes will be lost.

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 Model Adds a new Model, see 5.5. Adding Models.

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 Reference Adds a new Reference, see 5.10. Adding References.

Add Truck Adds a new Truck, see 5.11. Adding Trucks.

Add Sound Adds a new Sound, see 5.12. Adding Sounds.

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.

… - Duplicate Duplicates the selected object.

… - Replace Replaces the right-clicked object with another object.

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.

The Settings menu:


● Ignore Warnings - enabling this option will hide warnings and errors that are
generated while working with the Editor. If this option is enabled, the “CAUTION!
Error messages are disabled.” label is displayed at the top of the main window
of the scene. If it is disabled, errors and warnings will be displayed as new dialog
windows. Even if they are hidden, you can find them in the log, which is
displayed in the Output panel.
● Show Snow By Up Vector - this option enables the snow cover effect for
models and plants on the scene, according to their texture settings.

The Help menu:


● Guides - opens the folder with PDF files of guides for SnowRunner™.

3.8. Snapping panel


The Snapping panel allows you to snap a currently selected object to particular
coordinates and rotation angles. Particularly, you can set the step with which you will
change the position and rotation of the object.

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.

The full path to it is typically similar to the following:


C:\Users\<name_of_user>\Documents\My Games\SnowRunner\Media\prebuild

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.

In this folder, each level corresponds to the <name_of_the_level>.xml file (e.g.


level_test_map_1.xml). It is the main file of the level and the file you need to click in the
File View panel of the Editor to open the corresponding map. The folder with the same
name (e.g. level_test_map_1) contains all additional source data of the level, its source
textures, and so on.

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

For more details on packing, see 6. Packing a Map.

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.

4.2. Naming conventions


● Names of levels must start with the level_ prefix.
● Names of references must start with the ref_ prefix.

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).

5.1.1. Terrain Properties


If the Terrain section is selected in the Scene View, you can see the parameters of the
terrain in the lower part of the Scene View panel:

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.

The parameters are the following:


● Blocks section:
○ Number X - the number of blocks along the X-axis. Maximum value: 84
○ Number Z - the number of blocks along the Z-axis. Maximum value: 84
○ Max Height - the maximum height of the level.
● Mud Type - currently not used.
● Mutator - allows you to specify the ID of the mutator that will be applied to all
references imported to this map (to meet its settings). For more details, see
5.10.3. Usage of Mutators below.
● Procedural snow coverage - sets the coefficient for the procedural snow
coverage on the surfaces of models and terrain layers (except the snow layer
itself). The higher the value, the greater will be the amount of procedural snow on
the surfaces. This parameter works only if the system considers the level as
"snowy" (i.e. after painting with the depth of snow somewhere, see 5.2.7. Snow).
● Sun Static Direction - sets the direction of the static sun. The word “static” is
important here since the light from this static sun will be baked into the lightmap
(shadows from it will not change during the day). Static lightmap shadows are
rendered at the distance greater than 50 meters from the camera. At a distance
that is less than 50 meters - more sincere dynamic shadows are used. These
dynamic shadows change simultaneously with the change of the daytime presets
in the game, according to the direction of the “dynamic” sun (the SunDir
parameter in the daytime preset). For info on daytime presets, see below.
● Sky Preset - the preset for the sky on the level. The existing sky presets can be
found in the [media]\classes\skies\ folder of the initial.pak archive.
Possible values:
○ sky_ru_02 - the sky of Taymyr
○ sky_us_01 - the sky of Michigan
○ sky_us_02 - the sky of Alaska.
● Ambient Preset - the name of the file with sound presets for the environment of
the map (“ambient sounds”). In particular, there are presets of sounds for specific
weather and terrain, including river sounds. There are two options here:
○ If you want to use one of the existing in-game presets here:
Files with presets are stored in the initial.pak archive, inside the
\[media]\classes\ambients\ directory. In this case, in this field, we simply
specify the name of the preset that is most suitable for our map. I.e., the
available values for this field are as follows:
■ snd_amb_us_autumn - autumn preset
■ snd_amb_us_winter - winter preset
■ snd_amb_ru_summer - summer preset

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.

5.1.2. Scene Properties


After selecting the Scene section in the Scene View panel, in the lower part of this panel, you can set
the speed of the in-game time that will be used for the scene. This parameter is not used outside the
Editor (i.e. it is not used inside the game itself). However, in the Editor, it affects the playback speed of
the animations of objects and allows you to make them faster or slower.

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.

5.2. "Geometry" Brushes for Terrain


Geometry is the subsection of the Terrain section in the Scene View panel.

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.

5.2.0. Context menu of the “Geometry” section


The context menu of the Geometry section contains a set of commands that can be
helpful in some cases. To open this menu, right-click the Geometry section in the Scene
View.

For the description of these commands, see 5.2.0.N subsections below.

5.2.0.1. Copy Source Heightmap: Creation of Terrain by Third-Party Tool


The Copy Source Heightmap command is useful if you want to use the heightmap from
some third-party tool and want to generate terrain for your map based on it.
Particularly:
When you create a new terrain in the Editor, it creates the _height_source.png texture
in the source folder of the level (Media\prebuild\<level_name>). This texture has 1
channel and it must be 16-bit. If necessary, you can generate the heightmap for your
map using a third-party tool and save the resulting heightmap to this texture. To add
heightmap from this texture to your map in the Editor, you can use the Copy Source
Heightmap command.

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.4. Restore version "mud" from "data.stg": Restoring Mud Data


The Restore version "mud" from "data.stg" command restores the mud data if it has
become corrupted. This command overwrites the mud file (where the mud data is
stored) with the data from the data.stg file, which contains all level data (including mud)
in the binary format. The data.stg file is updated each time you save the level.

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.

To paint with this brush hold the right mouse button.

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).

Properties that can be changed with this brush:


● Foam - adds foam to the water surface.
● Speed - sets the speed of the water, separately from its direction (flow). By default, the
flow direction goes from the 0 point of the River object to the next points (1, 2, etc.).
● Flow - Overrides the direction of the water flow, when the River object has the
UseFlowMap parameter set to True. See 5.9. Adding Rivers and Water Objects 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.

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).

5.2.6. Water Mud

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.

5.2.8. RefMergeMask (only for References)


The Geometry > RefMergeMask brush is used for references. It is hidden in the UI by
default. For details on it, see 5.10.2. RefMergeMask brush and 5.10. Adding References
below.

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).

5.3.1. Material properties


Properties of the material can be specified at the lower part of the Scene View panel (after selecting
this material in the Scene View panel).

Some brief notes on these properties:

AlbedoWetnessMult - the coefficient that determines how much the existing wetness
will darken the texture of the terrain.

RoughnessWetnessMult - the coefficient that determines how much the existing


wetness will affect the roughness of the texture of the terrain.

About Layer 1, Layer 2, Layer 3 sections and these layers:


● To specify the particular layer, click [press] next to the [Choose file] field.
● On selecting layers:
○ as the first layer (Layer 1) we recommend choosing grass
○ as the second layer (Layer 2) we recommend choosing ground or rock or
gravel.
○ on snowy levels, the third layer (Layer 3) should always be the
snow_layer.
● Materials with the _snowy suffix in the name are designed specifically for winter
levels.

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

HM blending contrast - the smoothness of the border when blending layers.


Recommended values:
● for soft surfaces - 0.7-0.8
● for hard surfaces - 0.8-0.9

5.3.2. Custom Materials


Along with creating all sorts of various PBR materials with layers based on pre-defined
textures (provided with the Editor), you can create so-called “Custom PBR Materials”,
i.e. base layers of your PBR material on custom textures created by yourself.
To do this, you will need to create textures and XML class of your material, and place
them in correct subfolders of the Media folder.

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.

To create snow/ice coverage on the map:


1. Create a PBR Material that contains the snow_layer. The snow_layer texture
must be selected as Layer 3 of this material. Other layers are up to you, but
probably you will want to select textures in a winter setting for them. See 5.3.
Assigning PBR Materials to Terrain and 5.3.1. Material properties for details.
2. Paint with Layer 3 (snow_layer) the areas of the map you want to cover with
snow. See 5.3 and 5.3.1 for details.
3. Using the Geometry > Snow brush, add the depth to the snow in the areas
painted with the snow_layer. For more details, see 5.2.7. Snow.
After using this brush, perform Rebuild Terrain.
4. Since you have painted snow depth in some areas, the Editor will consider that
your map is snowy and will automatically display additional layers within the
Brush available for your PBR Material. Particularly, you will see the soft_snow
and crust_snow layers there (see 5.3.1. Material properties for details). Usage
of these layers is the following:
○ 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.
NOTE: These layers change only 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.
5. Paint the necessary areas with the soft_snow and crust_snow layers.
6. Now, if your map contains some hard surfaces (e.g. winter asphalt, winter stone,
ice) as layers of your PBR Material, you can make them icy by painting them
with the Geometry > Wetness brush, see 5.2.2. Wetness.
7. When your level is considered snowy, you can also change the amount of
procedural snow on the surfaces of models and terrain layers (except the snow
layer itself). This is done with the help of the Procedural snow coverage
parameter of the Terrain (see 5.1.1. Terrain Properties).
8. If you enable the Settings > Show Snow By Up Vector option in the main
menu, you will view the snow cover effect for models and plants on the scene,
according to their texture settings.
Frozen rivers, lakes, and other ice surfaces are created as a terrain with the material
containing either ice_01 or ice_02 texture as a layer. They are not created as regular
River objects.
Falling snow and other weather conditions are specified in the Daytime Presets (see
5.1.1. Terrain Properties).

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.

Using this technique, you can create a frozen swamp:

Or, a shallow frozen river:

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.

After doing this, the model selection window will be opened:

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.

5.5.1. Recommendations for models


● Models with us suffixes are typically used for US maps.
● Models with rus suffixes are typically used for Russian maps.
● farplane objects correspond to mountains used for far planes.
● Regarding scale for rocks:
○ rock_03 - recommended scale value: 3-5
○ rock_04 - recommended scale value: 6-10
○ rock_05 - recommended scale value: 4-7
○ rock_06 - recommended scale value: 6-10
○ rock_07 - recommended scale value: 1-2
● For recommendations on placing your models and taking into account their
types, see 5.5.2 below.

5.5.2. Types of models. Their behavior and collisions


There are three main types of models in the game basing on their properties:
1. Static - these models do not move, they have no animations, they are not
breakable. They do not participate in the physics of the game, except for the fact
that they have collision meshes and the truck may collide with them.

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:

1. Types of all models and plants are visible in the Editor.


For all models and plants the system displays their type of physical behavior
(Collision Type) next to their labels:

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.

b. red – if the dynamic model intersects with other models.

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.

5.5.3. Interesting Models: Creatures, People, etc.


You can add various creatures, people and other interesting models to your map to
enhance its atmosphere or give a point of interest to the player.

The current list of such models is the following:


• air_balloon1, air_balloon2, air_balloon3, air_balloon4, air_balloon5 – air
baloons
• anim_rus_garage_07 – an old garage with an animated figure of man within.
• bear_01 – a static figure of a white bear.
• bird_crow, bird_crow_notshy – a static figure of a crow.
• birds_flying_01 – an animated group of flying birds.
• birds_sea_01 – an animated group of flying birds (sea birds).
• cat_01, cat_01_notshy – a static figure of a cat.
• fireflies_animated_01 – an animated group of fireflies.
• fish_01_animated, fish_animated_us09, fish_static_us09 – animated and
static fishes that can be placed within a River.
• fish_man_notshy – a boat with a figure of a fisherman.
• hunter_01_notshy – a figure of a hunter.
• mushroomer_01_notshy – a figure of a mushroom hunter.
• ufo_01 – a UFO.
• us_boat_09_us06_animated – a small fishing boat rocking on the waves.
• wolf, wolf_close, wolf_notshy – a static wolf figure.
• wolf2 – shiny eyes of a wolf in the darkness (eyes are active at night).
• yeti_snow_man – a static figure of Yeti (the Snowman).

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).

To create a new Distribution object:

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.

5.7.1. Recommendations for painting with Distributions


● When painting plants in the Density mode, the recommended Value = 1.
● When painting rocks/debris in the Density mode, the recommended Value = 0.7.
To make the rocks more chaotic, you can use, for example, the following Scale
settings for painting:
○ Size = 0.6
○ Value = 1.0
○ Falloff = 0.07
○ Autofade = false
○ Randomize = true
● When painting canes (Canes) in the Density mode, recommended Value = 0.6.
● We recommend setting the Falloff value close to 0.
● The higher the mountains, the smaller the trees. On distant high mountains, we
recommend you to use the mature trees, but with a lower Scale value. This will
allow them to disappear from a greater distance, and then the silhouette of the
mountain will be visible longer.

5.7.2. Custom Brushes


By default, when you are selecting Brushes for a Distribution you are limited to the the
set of predefined brushes that come with the Editor and their settings.
However, if necessary, you can add your own, custom brushes to the predefined list.

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.

Scenario #1: Custom brush based on existing models


The process of creating a custom brush based on existing models is rather simple.
You need to:
1. Create the Media\classes\editor folder.
2. Create the additional brushes.xml file there.

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:

Scenario #2: Custom brush based on custom models


Setting up a custom brush based on custom models will be described in the next
iteration of the "Custom Level Entities: Models, Overlays, and PbrMaterials" guide.
The gathering of info and corresponding update of this guide on this subject is currently
in progress.

In short, in this case, along with the additional brushes.xml file


(Media\classes\editor\brushes.xml), you will need to add all required for custom
models used by the brush:
• Model meshes in the FBX format and XML files of these meshes – in
Media\meshes\plants or Media\meshes\grass or Media\meshes\models –
depending on the brush type.
• XML files of the classes of these models – in Media\classes\plants or
Media\classes\grass or Media\classes\models – depending on the brush type.
• All necessary textures – in Media\textures\plants or Media\textures\grass or
Media\textures\models – depending on the brush type.

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.

After doing this, the overlay selection window will appear.

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.

5.8.1. Important Limitation: “1 road type per terrain block”


The engine of the game has a technical limitation: it can render only one textural overlay
(an overlay that is rendered over terrain) within 1 terrain block.
So, you are not able to use different types of roads within 1 terrain block. The border of
the terrain block is marked by the red cube that appears after clicking the terrain with the
left mouse button.
If you add multiple types of roads to a single block, then the part of them may become
invisible. However, you can add textural and non-textural overlays to one block (e.g. the
road + wires).

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.

5.8.3. “ApplyOffset”: Adding ruts and bumps


The overlay also has the ApplyOffset parameter. If it is turned on, the road will change
a little bit the terrain under the road: the elevations, ruts, and other types of unevenness
will be added to it. The particular type of change in the terrain depends on the type of
road. By default, this option is enabled, if you turn it off - the road will become flatter.
When you change the value of this parameter, you need to perform the Rebuild Terrain
operation to see the result.

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:

5.8.5. Wires: Adding and connecting them


As you can see, there are wires in the list of overlays (their names start with wire_, e.g.
wire_double); however, overlays do not contain poles these wires are attached to.
The process of adding poles and their wires is the following:
1. Add poles, either as separate models (see 5.5. above), or massively, using the Brushes
parameter of an overlay. Place them as you need.
2. Add an overlay of the wires.
3. Snap each point of the wire overlay to the necessary snapping point on the poles. There
may be multiple snapping points there.
To snap the point of the wire overlay to the snapping point of the pole:
a. Select the point of the wire overlay.
b. Move it maximally close to the snapping point of the pole, and:
i. while moving it close, hold the B button - for snapping.
ii. or, hold the V button - for fine-tuning of the snapping.
c. After one point is snapped, perform the same operations with the next one.

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.

5.8.6. Recommendations for overlays


● Typically, for US roads, you need to use roads with us suffixes in their names.
For winter maps, you can use roads with _sn, snow, snowy suffixes.
● When working with overlays, which are not roads, but 3D geometry, you should
not move the points of the overlay too close to each other. Otherwise, breaks are
possible.
● If you paint wetness on the winter asphalt roads (see 5.2.2. Wetness above),
they will be covered with ice.

5.8.7. Custom overlays


You can also create custom overlays, integrate them with the Editor and use for creating
maps along with regular overlays. For details on how to create a custom overlay please
refer to the “3. Custom overlays” chapter of the “Custom Level Entities. Models,
Overlays” guide for details, available as Custom_Level_Entities_Models_Overlays.pdf
of the same documentation package).

5.8.8. Invisible overlays


Sometimes, you need to mark some route within the level (either for yourself or for other
modders who you are working on the map with), but do not want this route be visible for
the player in the game.

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.

The process of creation of a River object is typically the following:


1. Prepare a deepening of the terrain, which we will fill with water.

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.

5.9.1. Important Limitation and Recommendations for Rivers


You can add multiple rivers to the map. However, two rivers should have the same
settings, if they are within the same terrain block.
You cannot merge rivers with and without the defined Flow. The river colors (Clean
Type and Muddy Type) of the merged rivers should also match. Otherwise, one of the
rivers within a terrain block will use river colors of another river and there will be a sharp
border in the color of the river on the edge of the terrain block:

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.

5.9.2. Adding River Sounds via “RiverMarkup”


The river should not be silent in the game. To add sounds to the river, you can use the
RiverMarkup tool.

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.

To add a “sound riverbed” to the river, do the following:


1. Right-click the Rivers section in the Scene View panel.
2. In the appearing context menu, select Add RiverMarkup.
3. Move the created RiverMarkup object to the river.
4. Similarly to overlays (see 5.8), add points to the curve of the RiverMarkup object
by right-clicking the RiverMarkup object and selecting Add Node. Similarly to
overlays, move these points on the map, positioning a curve of the RiverMarkup
object along the riverbed.

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.

The process of configuring Background Water is the following:


1. Make a standard River object on the edge of the map (in the standard way, see
5.9. Adding Rivers and Water Objects).
To set up background water correctly, we recommend you to make this River
object flat, i.e. use the same Y coordinate for all of its points.

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).

4. Rebuild the terrain, pack your map, and test it.

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).

2. Perform the Rebuild Terrain operation for the reference.

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.

After that, you can add a reference to your map.


To do this:
1. Right-click the terrain (or, the References section in the Scene View panel), and select
Add Reference in the context menu.
2. In the appeared standard open dialog, select the .xml file of the map of the reference. By
default, this dialog shows all source .xml files of your maps (in the prebuild folder, see
4. File Paths and Naming above).

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).

5.10.1. Reference properties


To edit reference properties, select it in the References list in the Scene View panel.
After doing this, you can edit the properties of the selected reference in the lower part of
the Scene View panel.

The properties are the following:


● Position - the coordinates of the reference on your map.
● HeightOffset - the shift in the height that can be set for the terrain of the
reference. Using this field, you can increase or decrease all terrain of the
reference (as a whole).
● Angle - the angle of rotation of the reference on your map.
● Layer - the layer of the reference on the map that can be used in the case of the
intersection of the references to determine what reference should be on top and
what reference settings should have more priority. The higher the number of the
layer is, the more priority the reference will have.
● Flatten - whether or not the reference should flatten the terrain below it. If this
parameter is True, the initial terrain of your map below the reference will be
flattened, then the terrain of the reference will be applied above it, and the terrain
on the edges of the reference will be normalized to fit into the terrain of the other
part of your map. If this parameter is False, then the terrain of the reference (its
height) is simply added to the terrain (height) of the initial map in this place.
● ApplyMaterials - whether or not the reference should substitute the initial
materials of the map below it with its own materials. Please note that if this
parameter is True, the materials will be substituted for all terrain blocks the

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.

For recommendations on the setup of these properties, see 5.10.4. Recommendations


for the references below.

5.10.2. RefMergeMask brush


The RefMergeMask brush is used for references. It allows you to create a mask for
merging a reference with your map. This mask will affect the merging of objects of the
reference, its plants, materials, height with the corresponding properties of your map. The
created mask is stored in the _ref_merge.tga texture. However, this mask will be used
only if the ApplyMergeMap property of the reference is set to “True”.

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.

5.10.3. Usage of Mutators


Mutators allow you to transform all references imported to a map to meet its settings.
This is done by the substitution of the initial content of the reference with the content of
the same type but matching the target map.
Particularly, using mutators, you can substitute such things as models, layers of
materials, brushes used within distributions, standalone plants, and overlays.

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.

Generally, there are two types of references:


● Type #1 - “natural” references, where there is no water or objects
● Type #2 - references that contain water or objects.
There are two sets of typical values of reference properties for these types.

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.

5.10.5. Set of In-Game References Provided with the Editor


With the Editor, we provide the set of references that were used for the creation of
original game levels. You can use these references for your custom maps.

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).

● Position/Rotation - these fields specify the current coordinates and rotation


angles of the truck.
● Id - the identifier of this truck in the game.
● Land - automatically sets the truck on the terrain surface.
● Damage% - the amount of damage dealt to the functional components of the truck
(engine, suspension, wheels, etc.).
● Visual Damage% - the amount of damage that will be visually displayed on the
truck (scuffs, dents, and so on).
● Fuel% - how much fuel the truck has.
● Locked - if this option is enabled, the player cannot use the truck, until he/she
finds it on the map.
● Active - allows you to select the truck in which the player will be spawned on the
map (the value must be True in this case). There can be only one Active truck on
the map. The default value for this field is False.
● Install Default addons - this option automatically installs all default addons to the
truck.

5.11.1. How to identify IDs of truck parts


When creating the truck in the Editor, you need to know the IDs of all truck parts, add-
ons, etc. to fill in some of the fields. You can view these IDs in the game itself.

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).

To view the IDs of truck parts in the game:


1. Open the Proving Grounds, by selecting MODS > Select map > any Proving
Grounds map.
2. At the Proving Grounds, select Garage in the TOOLS menu.

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.

5.11.2. Allowing player to purchase trucks from all countries


By default, all maps have a limitation that allows the player to purchase trucks from the
particular country only: it can be either US or Russia. For maps that are part of the
Region, this country is specified when creating this Region (see 5.17).

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.

5.11.3. Custom Trucks


Currently, there is no ability to include custom trucks in the map mod package, they
need to be provided to the player as separate mods.

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:

You can specify the following properties:


● Name - The internal name of the sound actor in the Editor.
● Sound file - the sound that this actor will play. Since our actor is a 3D
sound source, the sound file for it must be MONO. In this field, you need

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

● 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).
● Distance section - the section that sets the sound distances (in meters):
○ (Distance) Min - the sound volume will be played at its maximum
within a sphere with a center in the source of the sound and a
radius equal to the value of this parameter. For example, in the
screenshot of the properties above, there will be maximum volume
within a radius of 10 meters from the actor.
○ (Distance) Max - the hearing distance. The sound volume will
change from its maximum value to zero between Distance Min
and Distance Max.
● Loop delay (Min, Max) section - delay in seconds for the recurred
playback of the sound. If both Min and Max values are zero, then the
sound will play continuously, without a pause. If these values are not
equal to zero, then, after the playback of the sound is finished, there will
be a pause. The length of this pause will be in the range of [Min, Max]
seconds (a random value will be taken from this range). After the pause,
the sound will be played again.
● 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

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.

5.12.1. Adding Series of Sounds


When configuring a sound actor (or a sound domain, see 5.13 below), you can specify
not a single specific sound file to be played, but a random alternation of the sounds from
a specific set. For example, the barking of a dog can be played as a series of barking
sounds, where each successive sound will be different from the previous one.

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.

The format of custom sound files must be the following:


• 44 kHz, 16 bit, stored as .wav files.
Whether it is Mono or Stereo – depends on the purpose of the sound.

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).

To use a custom sound file, do the following:


1. In the Media folder, create the sounds directory. This will be the root folder for
all your custom sound files.
For example, the full path to this folder may be similar to the following:
C:\Users\<username>\Documents\My Games\SnowRunner\Media\sounds\

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

4. In the Sound file parameter of the properties of a sound actor or a sound


domain, specify the path to the sound file, including its name without the file
extension. The path must be specified relative to the Media\sounds directory,
with “/” as path delimiters and without the file extension.
For example: my_sound OR my_directory/my_sound

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.

Properties of a SoundDomain are the following:


● Name - the internal name of the sound domain in the Editor.
● Sound file - the looped stereo sound that this domain will play. 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).
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 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.

5.13.2. OneShotSoundDomain Properties


For a general description of an OneShotSoundDomain, see 5.13. Adding Sound
Domains.

Properties of an OneShotSoundDomain are the following:


● Name - the internal name of the sound domain in the Editor.
● Sound File - the sound or the series of sounds this domain will play. Typically,
for an OneShotSoundDomain, the suffix __<N> in the file name is also omitted
(to play a series of sounds, see 5.12.1). 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). 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 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.

5.13.3. NoMusicSoundDomain Properties


For a general description of a NoMusicSoundDomain, see 5.13. Adding Sound
Domains.

Properties of a NoMusicSoundDomain are the following:


● Name - the internal name of the sound domain in the Editor.

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.

5.14.1. Adding Music


To add custom music to your map:
1. Prepare your music files.
a. Format:
44 kHz, Stereo, 16 bit, stored as .wav files.
The recommended volume level for the music is -7db.

b. Amount of files and their naming:


Typically, we prepare a separate music track for each time of the day and
a separate track for the Garage. We name these tracks using the name of
the level as a suffix (see below). This seems to be a good convention.

Name of the file Description For example

<levelname>_day Track for the day. aspen_day.wav

<levelname>_evening Track for the evening. aspen_evening.wav

<levelname>_morning Track for the morning. aspen_morning.wav

<levelname>_night Track for the night. aspen_night.wav

garage_<levelname> Track for the Garage garage_aspen.wav

However, if you want, you can use only one or two tracks and name them
as you like.

c. Length of the track:


The length of each music track is up to you. Please note that each music
track will be played on repeat.

2. Put your music files into the Media\sounds\music\<name_of_level> folder:


a. Create the Media\sounds\music folder (if you have not created it
before).
For more details on the location of the Media folder, see 4. File Paths and
Naming.

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.

4. Open your level in the Editor, and repack it.

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).

5.14.2. Adding Ambient Sounds


There are two types of ambient sounds in the game:
● Ambient sounds played within the particular areas of the map. These
sounds can be implemented using Sound Domains. For details, see 5.13. Adding
Sound Domains.
● Ambient sounds that are played within the whole map. These ambient
sounds are described in this section.

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.

5.14.2.1. Contents of the Ambient Preset XML file


First of all, let’s review the typical contents of the XML file of the Ambient Preset:

<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>

<Volume> and <Interval> tags:


The content of these tags does not change, typically. We recommend the following
values for it:
<Volume Min="0.6" Max="0.6" FadeTime="3.0"/>
<Interval Min="1.0" Max="1.0" />
In previous versions of the game, the volume of ambient sounds was changing from Min
to Max. However, in SnowRunner, we do not want it to change, so we set equal values
for Min and Max here. FadeTime - is the time interval between the adjacent ambient
sounds, in seconds. It is also typically set to 3.0 seconds, which is a recommended
value.
The <Interval> tag also has the Min and Max values. If these values are different, the
system takes the random value from the [Min, Max] interval, and this value defines the
interval of time (in seconds), within which the volume level will be defined by the value
from <Volume> tag (also the random value from the Volume’s [Min, Max] interval). The
system also remembers the current volume level, so, after the new volume level for the
next interval is selected, the current volume level is changed smoothly to the new value.
After the time defined by Interval’s value passes, the system starts this algorithm from
the beginning, i.e., selects a new Interval value, etc.
This algorithm is used to make ambient sounds more diverse. In the original game, we
do not need it (and we set equal values for Min and Max of Interval ), since we solved
this problem by a large number of various ambient sounds. However, it may be helpful
for mods, since for mods the number of ambient sounds is typically less.

<DayForest>, <DayWind>, <NightForest>, and <NightWind> tags:


The particular set of sounds from the preset that will be selected for playback to the
player depends on:
● the in-game time, i.e. whether it is a day (DAY) or night (NIGHT).

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.

Main sound loops of “condition subpresets” and <RandomSet> tags:


For each of these condition subpresets (<DayForest>, <DayWind>, etc.) you can
specify two types of sounds:
1. Main sound loop, which will be played constantly. It is specified in the Sound
attribute of the corresponding subpreset. Typically, from the point of view of the
file structure, it is not a series of sounds, but a single sound file (long loop).
However, if necessary, you can use here a series of sounds too (see 5.12.1).
For example:
<DayWind Sound="amb/my_level_1/day_wind_loop">
...
</DayWind>
Where:
● Sound - the sound or the series of sounds this condition subpreset will
play on repeat. You need to specify the path to the file of the sound here,
relative to the Media\sounds\ folder and without the file extension.
For example: E.g., amb/my_level_1/day_wind_loop for
Media\sounds\amb\my_level_1\day_wind_loop.wav.
For more info on the properties of sound files and their location, see
below.

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.

The parameters of this tag are the following:


● Sound2D - the 2D sound that will be played inside the “sound riverbed”
defined by the RiverMarkup (see 5.9.2). I.e., the sound which is played
when the player is close to the river. This must be a Mono sound and it
must be looped.
As with other sound fields in the preset, you need to specify the path to
the file of the sound here, relative to the Media\sounds\ folder and
without the file extension.
● Sound3D - the 3D sound that will be played outside the “sound riverbed”
defined by the RiverMarkup (see 5.9.2). I.e., the sound which is played
when the player is far from the river. This must be a Mono sound and it
must be looped.
As with other sound fields in the preset, you need to specify the path to
the file of the sound here, relative to the Media\sounds\ folder and
without the file extension.
● MaxDist - the maximum distance, at which the sound of the river can be
heard by the player (in meters). See Dist3D below.
● Dist2D - the distance from the “sound riverbed”, at which only the 2D
sound of the river is played. See Dist3D below.
● Dist3D - the distance from the “sound riverbed”, at which the 2D sound of
the river starts to be blended with its 3D sound.
I.e., the following rules are used:
○ when the player is farther than MaxDist from the “sound riverbed”
- no sound of the river is played;
○ when the distance is less than MaxDist but greater than Dist3D -
the 3D sound will be played;
○ when the distance is less than Dist3D but greater than Dist2D -
the 3D sound will be blended with 2D sound;
○ when the distance is less than Dist2D - only the 2D sound will be
played.

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.

b. Format for them:


i. For main loops of each “condition subpreset”: 44 kHz, Stereo, 16
bit, .wav files.
ii. For <RandomSet> sounds: 44 kHz, Mono, 16 bit, .wav files.
iii. For sounds of the river: 44 kHz, Mono, 16 bit, .wav files. These
sounds must be looped.

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

5. Pack your map.

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.

3. Specify the ID of the zone locator.


To do this:
a. Select the created zone.
b. In the zone properties (in the lower part of the Scene View panel), specify
the ID of the zone in the Id field.
All zone IDs can contain only small Latin letters, digits, and "_".
In our example, it is “test_zone_1”:

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.

5. On the toolbar of the Editor, click the Zone Settings button ( ).

This will open the window of the specific plugin (ZoneSettingsEditor.exe) that
allows you to configure the logic of zones.

6. In the plugin window, expand the section named as your map.


7. Expand the TERRAIN LOCATORS LIST there. It will contain all zones added to
your map as zone locators. They will be named according to their IDs (e.g.

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.

b. In the appearing dialog, select the type of the zone:

After selection, click OK.

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).

5.15.1. Properties of various Zone Types


Zone properties that depend on the type of the zone are specified in the props section.
Subsections below describe these type-specific properties for every type of the zone.

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:

• ZonePropertyAutoRefuel – see 5.15.1.12. Automatic Refueling: …AutoRefuel


zones.

• ZonePropertyAutoRepairAndRestore – see 5.15.1.11. Automatic Repairing:


…AutoRepairAndRestore zones.

• ZonePropertyEnergy – see 5.15.1.8. Craft and Generator features:


…StorehouseCraft and …Energy zones.

• ZonePropertyFarmingArea – see 5.15.1.13. Farming zones: …FarmingArea


zones and 5.23. Farming in general.

• ZonePropertyFuelStation – see 5.15.1.2. Fuel Station: ...FuelStation zones.

• ZonePropertyGarageEntrance – see 5.15.1.3. Garage: ...GarageEntrance and


...GarageExit zones

• ZonePropertyGarageExit – see 5.15.1.3. Garage: ...GarageEntrance and


...GarageExit zones

• ZonePropertyGateway – see 5.17. Regions with Multiple Maps

• ZonePropertyLivingArea – see 5.15.1.9. Living Area feature: …LivingArea


zones

• ZonePropertyCargoLoading – see 5.15.1.1. Loading Cargo: ...CargoLoading


and ...ManualLoading zones

• 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.

• ZonePropertyStorehouseCraft – see 5.15.1.8. Craft and Generator features:


…StorehouseCraft and …Energy zones

142
• ZonePropertyManualLoading – see 5.15.1.1. Loading Cargo: ...CargoLoading
and ...ManualLoading zones

• ZonePropertyRecovery – see 5.15.1.7. Recover feature: …Recovery zone

• ZonePropertyResupplyRepairParts – see 5.15.1.10. Ressuply Repair Parts in


Hard Mode: …ResupplyRepairParts zones

• ZonePropertyTrailerAttach – see 5.15.1.4. Trailer Store: …TrailerAttach zones

• ZonePropertyUpgradesGiver – see 5.15.1.5. Upgrades: ...UpgradesGiver


zones

• ZonePropertyWatchpoint – see 5.15.1.6. Watchtower: ...Watchpoint zones

5.15.1.1. Loading Cargo: ...CargoLoading and ...ManualLoading zones


The ZonePropertyCargoLoading zones allow the player to load a cargo of the
particular type within them.

The properties of this zone type are the following:


● platformId - optional field, which allows you to specify the ID of the zone of the
ZonePropertyManualLoading type. Within the zone with this ID, the system will
spawn the physical cargo, which will allow the player to manually load it using the
crane. I.e., to use this feature, you need to create an additional zone, set its ID to
the value specified in the platformId field, and add the
ZonePropertyManualLoading property to the props list of this additional zone.
● cargosSettings - this list allows you to specify the types of cargo that the player
will be able to obtain in this zone. For each type of cargo, you can specify the

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.

5.15.1.1.1. Model Building Settings for ...CargoLoading zones


The modelBuildingSetting settings of the ZonePropertyCargoLoading zone allow
you to play animation after loading cargo from this zone. These settings are used for
zones where we dismantle the particular building and transform it into some pieces of
cargo.

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.

These settings inside the ZonePropertyCargoLoading zone are similar to regular


Model Building Settings (see 5.16.3. Model Building Settings), but there are some
differences in the setup since we are not building, but dismantling here.

Particularly, as opposed to regular Model Building Settings:


• Not all _objective models are valid for usage with these Model Building Settings.
You can identify the ones that can be used by the constr prefix in their names
while selecting a model in the Select Asset window.

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.

• Rules for specifying these states in the stagesProgress are different.


Particularly, as opposed to regular Model Building Settings, the value of the
state_start state must be larger than the value of the state_end state. And,
more precisely, you need to specify the initial amount of cargo of the zone (the
value of the Count If Finite field) as the value of the state_start state and 0 as
the value of the state_end state. This will tell the system to substitute the initial
model with the dismantled model when the player will get the last cargo item from
the zone. For example:

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.

5.15.1.2. Fuel Station: ...FuelStation zones


The ZonePropertyFuelStation zones work as Fuel Stations.

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.

5.15.1.3. Garage: ...GarageEntrance and ...GarageExit zones


Typically, to add a Garage to the map, you need to add two zones:
● Garage entrance – the zone with the ZonePropertyGarageEntrance property
in the props section.
● Garage exit – the zone with the ZonePropertyGarageExit property in the props
section.
However, you can add only the Garage entrance zone – in this case, it will be
automatically used as the Garage exit.

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.

5.15.1.3.1. Setting up a Repairable (Upgradeable) Garage


If necessary, you can set up a repairable (upgradeable) Garage whose functionality the
player will gradually enable by accomplishing various objectives, as a reward for them.
This process has three steps:

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.

If necessary, you can add multiple such ObjectiveRewardsUpgradeGarage sections in


rewards of a single objective or configure multiple such objectives.

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.

5.15.1.5. Upgrades: ...UpgradesGiver zones


The ZonePropertyUpgradesGiver property allows you to create the zones that give
various upgrades to the player. This property has the upgrades list where you need to
list IDs of all upgrades that will be given to the player by this zone.

NOTE: For information on IDs of the various parts of the truck, see 5.11.1. How to
identify IDs of truck parts above.

To add an upgrade to the upgrades list:


1. Click the next to the upgrades list.
2. Double-click the empty value next to the appeared numbered section.
3. Specify the ID of the upgrade there (e.g. g_scout_highway).

5.15.1.6. Watchtower: ...Watchpoint zones


The ZonePropertyWatchpoint property allows you to create a Watchtower (zone),
which the player may use to explore the map.

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.

5.15.1.6.1. cameraPos… and cameraDir... values: Hints and Tips


It is sometimes rather hard to specify the correct values of vectors for the position and
direction of the camera.
However, you can do the following:
1. Enable the Statistics option ( ) on the toolbar of the Editor. This will display
Camera statistics on the screen.
2. Put the camera manually in the correct position/direction (see 3.2 for details) and
write down the values of the position and direction vectors of the camera (see
screenshot below).
3. If you enter the same values of vectors to cameraPos... and cameraDir... fields,
they will correspond to this position/direction of the camera.

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.

5.15.1.7. Recover feature: …Recovery zone


The ZonePropertyRecovery zone works as a target point for the “RECOVER” feature
from the functions menu.
If there are multiple zones of that type, the priority field allows you to set the priority for
it. The player’s car will be recovered to the zone with the highest priority value.

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.

5.15.1.8. Craft and Generator features: …StorehouseCraft and …Energy


zones
The ZonePropertyStorehouseCraft zone allows you to enable crafting on your map.
The ZonePropertyEnergy zone allows you to set energy produced by the Generator as
one of the components that are necessary while crafting.

Settings of the ZonePropertyStorehouseCraft zone are the following:

● platformId - optional field, similar to the same property in the …CargoLoading


zones. This field allows you to specify the ID of the zone of the
ZonePropertyManualLoading type. Within the zone with this ID, the system will
spawn the physical cargo, which will allow the player to manually load it using the
crane. I.e., to use this feature, you need to create an additional zone, set its ID to
the value specified in the platformId field, and add the
ZonePropertyManualLoading property to the props list of this additional zone.

● energyZoneId - optional field, used only when crafting uses Energy as a


requirement. This field allows you to specify the ID of the zone of the
ZonePropertyEnergy type, where the player needs to deliver a Generator
(which needs to be turned on to produce Energy).

● 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:

o name – the type of the target cargo item to be crafted.

o craftCount – the amount of the target cargo item to be crafted.

o cargoComponents – the list of the required source components, with


their types (name) and required amounts (count).

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).

The UI displayed while crafting is regular:

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).

The …LivingArea zone has only one setting:


• name – the type of cargo that needs to be delivered to the zone. Typically, the
player needs to deliver Cabins, so you need to select in this drop-down list the
“CargoForkliftCaravanContainer2” type. However, if necessary, you can select
a different type of cargo here.

5.15.1.10. Ressuply Repair Parts in Hard Mode: …ResupplyRepairParts


zones
The ZonePropertyResupplyRepairParts property allows you to create Resupply
Repair Parts zones that will work specifically in Hard Mode.

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.

5.15.1.11. Automatic Repairing: …AutoRepairAndRestore zones


If a zone has the ZonePropertyAutoRepairAndRestore property in props, it allows the
player to automatically repair the vehicle. No additional properties are required.

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.

5.15.1.12. Automatic Refueling: …AutoRefuel zones


If a zone has the ZonePropertyAutoRefuel property in props, it allows the player to
automatically refuel the vehicle. No additional properties are required.

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).

5.15.1.14. Water Station zones: …WaterStation zones


The …WaterStation zones allow the player to perform various operations with water.

The …WaterStation zone has the following properties:


• stationUIName – the name of the zone for the UI. Default value of this field
corresponds to the "Water Station" as a localized string.
• stationType – the type of the zone:
o PICK_UP – these zones allow the player to fill the water tanks of their
truck (this tank can be an addon or a trailer or a semitrailer). They allow

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.

5.15.1.15. Gateway zones: …Gateway zones


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. This section describes this scenario. For the description of the initial scenario
where Gateways are placed on different maps within a Region to connect them, please
refer to the 5.17. Regions with Multiple Maps chapter and 5.17.1 and 5.17.2 particularly.

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.

However, there are some differences:


• When you are creating Gateway zones on the same map, you need to create
them not in the Regions tab of the Region settings window ( on the toolbar),
but in the regular Zone Settings window ( on the toolbar), where you specify
settings for all other zones of the individual map.
• In this case, obviously, the levelZoneLink zone will be a link to another Gateway
zone on the same map.
• There is an additional field in the Gateway properties – Travel price – which
allows you to specify the additional cost of the gateway transition for the player,
see below. This field is available only for Gateways located on the same map.

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.

• extraZoneToPlaceTrucks – the extra zone that will be used if the dimensions of


the initial zone of the gateway are insufficient for the transitioned vehicles.
• extraZoneToPlaceWinch – the extra zone that will be used for both the main
truck and trucks or trailers that are connected to it by the winch, if the dimensions
of the initial zone of the gateway are insufficient.

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.

5.15.3. List of Icons for Zones


Below you can find the list of in-game icons that can be used for zones (the Icon 30x30
and Icon 40x40 fields in the zone locator properties, see above).

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.

Preview Icon 30x30 Icon 40x40

airportImg30 airportImg

bunkerImg30 bunkerImg

bunkerAltImg30 bunkerAltImg

climbRaceImg30 climbRaceImg40

constructionBlockageImg30 constructionBlockageImg

constructionBorderBoothImg30 constructionBorderBoothImg

constructionCargoImg30 constructionCargoImg

(for lost cargo)

constructionHardHatImg30 constructionHardHatImg

(for building objects)

constructionTrash30 constructionTrash40

constructionWarehouseImg30 constructionWarehouseImg

controlCenterImg30 controlCenterImg40

curciutRaceImg30 curciutRaceImg40

162
craftCrafting30 craftCraftinging40
/ craftCraftingMarker40

craftLivingArea30 craftLivingAreaMarker40

(for living area)

drillingSiteImg30 drillingSiteImg

experimentalFarm30 experimentalFarm40

factoryImg30 factoryImg

farmImg30 farmImg

fuelStationImg30 fuelStationImg
/ fuelStationImg40

fuelStationAlt2Img30 fuelStationAlt2Img

(without the outline)

fuelStationAltImg30 fuelStationAltImg40

(without the outline)

garageBlockImg30 (no icon for 40x40 dimensions)

(30x30, without the outline)

garageImg30 garageImg
/ garageImg40

garageNoImg30 (no icon for 40x40 dimensions)

(30x30, without the outline)

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

(for pick_up and transit water


station zones, see 5.24)

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

(without the outline)

allVehicleImg30 allVehicleImg

heavyDutyVehicleImg30 heavyDutyVehicleImg

heavyVehicleImg30 heavyVehicleImg

highwayVehicleImg30 highwayVehicleImg

offroadVehicleImg30 offroadVehicleImg

166
scoutVehicleImg30 scoutVehicleImg

troubleAltVehicleImg30 troubleAltVehicleImg

contestImg30 contestImg

taskNewImg30 taskNewImg40

taskImg30 taskImg40

taskSubImg30 taskSubImg40

5.15.4. Adding Fog of War: "isNeedToBeCloacked" flag


Along with specifying zone properties, the ZoneSettingsEditor.exe plugin also allows
you to add the “Fog of War” to your mini-map, which is displayed as black color there.

To add the fog of war to your map:


1. On the toolbar of the Editor, click the Zone Settings button ( ).

2. In the appearing dialog of the plugin, enable the isNeedToBeCloacked option.

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).

5.15.5. Enable or Disable the Dev Menu (TOOLS menu)


When you are testing your map locally (see 7. Testing a Map in the Game), you are
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.

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.).

5.15.6. Adding Introductory Info and Initial Objectives


The Zone Settings plugin allows you to specify some introductory info for the map in the
pop-up, which will be shown to the player just after he/she is spawned on it.

168
The settings of this pop-up can be configured in the popupSettings section (see below).

Particularly, you can configure:


• uiTitle – the title of the pop-up.
• uiText – the text to be displayed in the pop-up. Please note that the dimensions
of the pop-up are fixed and the game does not adjust its size to the length of the
text inside it. Thus, to look good with an image of standard size, the length of the
text should be near 1200 symbols with spaces.
• uiIcon – the image to be displayed in the pop-up. Its properties should be the
following:
o Format of the image: PNG
o Dimensions of the image: 1188x326 px
o Folder to put the image to: Media\prebuild\<MapName>\ui\textures
(i.e. you need to put the image to the \ui\textures subfolder within the
folder of the target map in prebuild).
In the uiIcon field, you need to specify the name of the file of this image without
the extension (e.g. intro_img for intro_img.png).
Please note that the game will not center this image in the pop-up or change its
dimensions to match the pop-up size, please use the recommended image
dimensions listed above or similar values.
• objectives – the list with names of the objectives (tasks, contests, or contracts)
that will be activated immediately after spawning of the player to the map. All of
them will be activated simultaneously.

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.

5.15.7. Modification of Content Settings


The lower part of the zone settings plugin allows you to modify the following settings of
the map:
• Locked and unlocked trucks and upgrades
• Starting parameters of the player
• Custom prices for trucks and upgrades

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.

The process here is the following:


• Initially, we have the default set of available trucks/upgrades and trucks/upgrades
that become available after the particular level of the player.
• If we add the particular truck/upgrade to the map and set the “Lock” value next to
its ID in this window, then this truck/upgrade will be locked on this map by
default. However, it will become available to the player when he/she finds it on
the map.
• If we do not add the particular truck/upgrade to the map and set the “Lock” value
next to its ID, then this truck/upgrade will be permanently locked on this map. I.e.,
the player will not be able to use it at all.
• If we have already added the particular truck/upgrade to this list with the “Lock”
value next to it, then we can temporarily remove this lock by changing the option
next to it to “Unlock”. For example, we can do this for debug purposes, to avoid
re-entering its ID when we will want to lock it again. However, if a truck/upgrade
is initially available only after the particular level, this will not change after the
“Unlock” value is set for it.

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).

5.15.7.2. Starting Parameters of the Player


The Starting Parameters section allows you to specify the starting parameters of the
player on your map:
• Starting Level – specifies the starting level of the player on your map.
• Starting Money – specifies the starting amount of money the player will have on
your map.
The default value of these fields is “-1”, which corresponds to the default starting level
(“1”) and the default amount of money (“5000”).

5.15.7.3. Custom Prices for Trucks and Upgrades


The Custom Prices section allows you to specify custom prices for trucks and
upgrades. Specified prices will override default prices for these items.

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.

5.15.8. Logging: Logs as New Types of Cargo


Logging is based on logs of different kinds as new types of cargo. Starting with the 13.34
version of the game, you will find logs in the typical drop-down lists of cargo types. I.e., if
you browse the list of cargo types within the ZonePropertyCargoLoading zone (see
5.15.1.1 above), you will find them there.

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.

The names of these new cargo types are the following:


• CargoLogsLong – corresponds to Long Logs
• CargoLogsMedium – corresponds to Medium Logs
• CargoLogsShort – corresponds to Short Logs

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.

5.15.9. Manual Unloading Zones


Manual unloading zones have an empty props section. However, they require a specific
setup of the location of the corresponding delivery zone and a link to the manual
unloading zone in the settings of the Stage. See 5.16.1.1.2. Manual Unloading of Cargo
below for details.

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.

Important note on IDs used:


● In the fields of the objectives where you need to specify the link to the zone (e.g.
globalZoneId), you need to specify it in the following format:
name_of_the_map || ID_of_the_zone
For example: level_test_map_5 || test_zone_1

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.

Notes on names and descriptions:


● Ui Desc fields – allow you to specify descriptions of an objective and particular
assignments of the objective throughout the UI.

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.

Note on activation on Tasks and Contests:


• taskGiverZone - Do not forget to create a special zone where the player can
activate a Task or a Contest! Otherwise, the player will not be able to take this

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.

You need to add at least one stage to your objective.

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.

5.16.1.1. Delivery of Goods (“actions > zoneToFill” section)


The group of fields in the actions section corresponds to the “delivery of goods”
assignment.
For each zone that you need to deliver the goods to, add a separate entry to the
zoneToFill list.
The ID of this zone is specified in the globalZoneId field. If you want to specify some
additional zones where the player may deliver the goods, specify their IDs in the
additionalUnloadZones list.
The cargo that needs to be delivered is specified in the cargo list (ID of cargo + its
amount).
For example, the assignment of delivering two cargo units of barrels to one of two zones
(delivery_zone, delivery_zone_2) will look like the following:

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.

5.16.1.1.2. Manual Unloading of Cargo


To set up manual unloading of the cargo, you need to create an additional zone that will
interact with the player. This zone must be placed around the target cargo delivery zone
(specified in the globalZoneId field, see 5.16.1.1 above).

Typically, the setup of these two zones is similar to the following:

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.

For our example, the setup may be the following:

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).

The full set of options in afterStageFinished field is the following:


• REWARD - give the truck involved in the assignment as a reward to the player
after the objective is finished.
• DETACH - after the stage is finished, the system will detach the truck involved in
the assignment (if it has been attached to the player’s vehicle using the winch or
as a trailer).
• DESTROY - after the stage is finished, the system will remove the truck involved
in the assignment from the map.
• DO_NOTHING – after the stage is finished, the system will do nothing. I.e., the
system will not destroy the truck, detach it, or give it as a reward. This option is
especially actual for Contests since for Contests usage of the DESTROY and
REWARD options is inappropriate.

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.

5.16.1.3. Repairing the Truck (“truckRepair” section)


The group of fields in the truckRepair section corresponds to the “repairing of a truck”
assignment.
Similarly to truckDelivery, you need to place the 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 or destroy it (see above).

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.

5.16.1.5. Visiting All Zones from the List (“vizitAllZones” section)


The group of fields in the vizitAllZones section corresponds to the assignment where
the player needs to visit all zones from the specified list.

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.

5.16.1.6. Seismograph Usage (“Seismograph Settings” section)


The group of fields in the Seismograph Settings section corresponds to the assignment
where the player needs to use the seismograph in all zones from the specified list.
The properties of this assignment are identical to vizitAllZones (see above).

5.16.1.7. Spawning Cargo on a Map (“spawnCargoOnStageActive” section)


The spawnCargoOnStageActive section does not correspond to an assignment.
It allows you to create a zone where the system will be spawning cargo as a physical
object. After manual loading with the crane, the spawned cargo can be used for the
“delivery of the goods” assignment.

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).

NOTE: Cargo spawned by the spawnCargoOnStageActive feature can be loaded to


the truck only manually, by the crane. For automatic loading of the cargo, use the
...CargoLoading zone (see 5.15.1.1 above).

WARNING: The spawnCargoOnStageActive section must be added to the Stage


where other assignments (delivery, visit all zones, living area, etc.) do exist. If there is
only the spawnCargoOnStageActive section within the Stage and there are no other
assignments within the same Stage, this Stage will be skipped and no cargo will be
spawned.

There are additional limitations for spawning cargo using spawnCargoOnStageActive


in the case of Regional Contracts, see WARNING in the 5.17.4 below.

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.

5.16.1.7.1. Metal Detector and “Should be discovered by metallodetector” option


The Should be discovered by metallodetector option in the
spawnCargoOnStageActive stage will allow you to mark the spawned cargo as
searchable by the metal detector.

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.

Hint #2: Hiding all cargo of the particular CargoType


If you want to hide white markers of the type of the cargo for all cargo of the particular
CargoType, while creating an objective for metal detector, you can do it by disabling the
ignoreHidingCargoWhenNotTracked option in this spawnCargoOnStageActive
stage.

WARNING: Disabling the ignoreHidingCargoWhenNotTracked option will hide all


cargo of the CargoType specified in this spawnCargoOnStageActive > cargos section
on all map until this metal detector objective will not be accomplished – even the pieces
of the same cargo that are not used within this objective. I.e., disabling this option should
be used with care, since it may break accomplishment of other objectives.

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.

TIP: To avoid negative effects of disabled ignoreHidingCargoWhenNotTracked, we


recommend you to use unique CargoTypes for all objectives for metal detector.

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.

Hint #4: Sample stage of a simple metal detector objective


Below is the sample stage of a simple metal detector objective, with disabled
ignoreHidingCargoWhenNotTracked option.

5.16.1.8. Delivery of Cabins to Living Area (“livingAreaInfo” section)


The group of fields in the livingAreaInfo section corresponds to the assignment where
the player needs to deliver some cargo (typically Cabins) to the Living Area zone.

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.

3. Ensure that you have added the spawnCargoOnStageActive section with a


sufficient number of cargo items (of the same cargo type) to be spawned.
See 5.16.1.7 above for details.
Please note that models of cabins (e.g. cargo_cabin_rus_01) that were added
to the map manually in the Editor will not interact with the LivingArea zone. They

189
may be used for decorative purposes. Only the cargo items spawned with the
help of spawnCargoOnStageActive sections will interact with it correctly.

WARNING: The spawnCargoOnStageActive section must be added to the


Stage where other assignments (delivery, visit all zones, living area, etc.) do
exist. If there is only the spawnCargoOnStageActive section within the Stage
and there are no other assignments within the same Stage, this Stage will be
skipped and no cargo will be spawned.

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.

5.16.1.9. Farming Assignment (“farmingInfo” section)


See 5.23.3. Step 3: Creating an Objective for a Farming Area that fully describes the
farmingInfo section.

190
5.16.2. Other fields of Objectives

5.16.2.1. Common fields (for all objectives)


● Name – The name of the objective is specified when you create a new Contract,
Task, or Contest in the corresponding list. In the plugin, it is displayed not as the
field, but as the name of the section (see screenshot below).
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.

● Ui Desc – the description of your objective.

● 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.

● Reward Description – the description of the reward received after


accomplishing this objective.

● Recommendation – you can select one of the standard in-game


recommendations for this objective here. The corresponding recommendation
will be displayed to the player in the UI.

● Additional message below Recommendation – (optional field) Some message


related to the objective that you want to display below the Recommendation text
(but with the same formatting), see above.

● 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).

● minimapList – This drop-down is used for tweaking the UI of an objective


(shown to the player on the minimap) a bit. It has two possible values:
○ TINY – makes the area used for displaying Stages of an objective smaller
and allows the player to scroll them.
○ DEFAULT – the stages of the objective are displayed as usual.

● isNeedRaceMusic – This option was made specifically for DLC7 ("Season 7:


Compete & Conquer"). It allows you to switch regular music that is played on
your map to the predefined racing music used in DLC7.

● 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.

● Stages – see 5.16.1. Stages above.

● ModelBuildingSettings – see 5.16.3 below.

● 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.

○ ObjectiveRewardMoney – the amount of money granted as a reward.

○ ObjectiveRewardItem – here you need to specify the ID of the type of


the necessary upgrade (for details, see 5.11.1. How to identify IDs of
truck parts). Alternatively, you can specify here the ID of the type of the
truck if you want to give it as a reward (e.g. chevrolet_kodiakc70).

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).

○ ObjectiveRewardOpenZoneProperties – we can open the particular


zone to the player as a reward. 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).
■ props - properties of this zone, see 5.15.1. Properties of various
Zone Types for details.
NOTE: You do not need to create a duplicate of this zone in the
TERRAIN LOCATORS LIST of the zone settings plugin. However,
you need to create a zone locator with the specified ID for this
zone in the Editor (steps 2-3 in the 5.15. Adding Zones).

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.

○ ObjectiveRewardUpdateZoneProperties – as a reward, we can


dynamically change the properties of a zone. Particularly, you will need to
specify:
■ zoneSettings – the properties that will be added to the particular
zone. Particularly, you will 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).
● props - properties of this zone that will be added, see
5.15.1. Properties of various Zone Types for details.

■ zoneSettingsToRemove – the properties that will be removed


from the particular zone. Particularly, you will 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).
● props - properties of this zone that will be removed, see
5.15.1. Properties of various Zone Types for details.

WARNING: For zoneSettings / zoneSettingsToRemove,


you do not need to create a duplicate of this zone in the
TERRAIN LOCATORS LIST of the zone settings plugin.
However, you need to create a zone locator with the
specified ID for this zone in the Editor (steps 2-3 in the
5.15. Adding Zones).

○ ObjectiveRewardsUpgradeGarage – allows you to activate a certain


functionality area of an upgradeable Garage as a reward. See 5.15.1.3.1.
Setting up a Repairable (Upgradeable) Garage above for details.

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.

○ For Contests: ObjectiveRewardsByTime – here you can set 3 types of


rewards (Bronze, Silver, and Gold) given to the player based on the time
of the accomplishment of the objective. For each type, you specify:
■ Time limit - time limit for this type of reward, in seconds.
■ Experience - the amount of granted XP.
■ Money - the amount of given money.
■ Possible Item reward - the ID of the type of the necessary
upgrade. Or, the ID of the type of the truck if you want to give it as
a reward (see …Item above).

● trucksWithoutForceGrounding – this optional section allows you to list the


trucks that will not be correctly positioned according to the height of the terrain.
To add a truck to this list, assign an Id to it, and add this Id to the list.

5.16.2.2. Specific fields for Contracts


● employer - the employer of the contract. This field is mandatory for a contract.
In this field, you can:
○ Select one of the existing employers from the list, e.g. “Husky”,
“KolskyRegionalGov”, etc.
○ Specify a custom employer, which you need to create. See 5.16.4.
Custom Employers below for details.

● failReasons – specified similarly to failReasons for Contests, as described in


5.16.2.4. Specific fields for Contests below. However, not all failReasons that
are valid for Contests can be used for Contracts, see WARNING below.

WARNING: For Contracts, such stages as truckDelivery, repairTruck,


changeTruck, livingAreaInfo, spawnCargoOnStageActive are totally
prohibited for usage when failReasons are specified for a Contract. The correct
work of failReasons for a Contract is guaranteed only for Contracts with only the
visitAllZones stages. All other stages in Contracts with failReasons can be
used only on your own risk. Please always carefully test your map mod with such
Contracts before uploading it to public.

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.

5.16.2.4. Specific fields for Contests


WARNING: Your contests should not contain the changeTruck stage in them. The
usage of this stage is prohibited for contests. Otherwise, you will create a contest that
the player will not be able to accomplish, due to the default ChangeTruckFailReason,
which you cannot remove (see below).

● 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.

○ ChangeTruckFailReason - failure due to changing the truck during the


objective.

○ CockpitFailReason - failure due to switching to the cockpit view during


the objective.

○ DamageFailReason - failure by the amount of the received damage. The


damage limit is specified in the maxDamage field.

○ GarageFailReason - failure due to entering the Garage during the


objective.

○ HoursFailReason - failure by time, specified as the period of time during


which the player needs to finish the Contest. When specifying the time of
the beginning of the contest (startHour) and the maximum time when it
needs to be accomplished (finishHour), you need to specify hours as
integers and in 24-hour format. For example, the following settings will set
the contest to start at 2:00 AM and will set its deadline to 3:00 AM.

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.

○ RecoveryFailReason - failure due to usage of the Recovery feature by


the player during the objective.

○ TimeFailReason - failure by time. The time limit (in seconds) is specified


in the timeLimitSec field.

WARNING: All created Contests have 3 default failReasons:


ChangeTruckFailReason, RecoveryFailReason, and
GarageFailReason (the in-game contests have the same fail reasons).
You cannot remove them, but you can specify additional failReasons, if
necessary.

● 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.

● needToStartTimerInGiverZone – This option was implemented specifically for


racing Contests. By default, it is enabled, which means that the timer of a
Contest starts when the player activates (or restarts) it in the taskGiverZone of
this Contest. However, sometimes, you may want to start the timer not directly
after the activation or restart of the Contest, but after the particular actions have
been done by the player. For example, you may want to start it when the player
reaches the special starting zone of the race (by accomplishing the
corresponding visitAllZones Stage of this Contest). In this case, you will need to
disable the needToStartTimerInGiverZone for the Contest, which will tell the
game to start the timer at the beginning of the first Stage where the
needToStartTimer is enabled. However, by default, needToStartTimer is
enabled for every Stage. So, you will need to disable not only
needToStartTimerInGiverZone for the Contest as a whole, but also disable
needToStartTimer for the first few Stages where you don’t want the timer to
start. In our example, you will need to disable it for the first visitAllZones Stage
corresponding to the player reaching the starting zone.
See also: the needToStartTimer in 5.16.1. Stages above.

● recoverContestZone – this section was developed specifically for racing


Contests of the DLC7 ("Season 7: Compete & Conquer"). Its globalZoneId field

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.

5.16.3. Model Building Settings


The Model Building Settings fields allow you to link the process of “building” some
object on the map to the process of accomplishing stages by the player. The same
process of substituting one model on the map with another one and playing the
corresponding animation can be used in the game not only for “building”, but for other
scenarios too (“repairing” some object, etc.). In the text below, we will use the term
“build” meaning any action of that type.

Usage of this functionality requires appropriate animations (e.g. the animation of


repairing the bridge) and the model setup. Therefore, currently, you can use this
functionality for models where these things are already configured. Typically, these
models can be identified by the _objective suffix in their names and you can find them
by this suffix in the Select Asset window when adding a model.

For example, you can use the bridge_wooden_big_02_objective model.

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.

For example, in the bridge_wooden_big_02_objective.xml model class, you will find


such states as build_stage_0 and build_stage_1:

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).

Particularly, the Model Building Settings (Depend On Cargo) fields there:


● levelName - this field is filled in automatically and contains the name of the map.
● modelTag - specify here the same tag that you specified for the model in Editor
(see above). For example, the “bridge_tag” that we have used 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).

WARNING: Names of model states must be specified without spaces, otherwise


they will not work.

● 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.

● unloadBlockedZoneId – (optional field) allows you to specify a zone that will be


blocked for unloading if there is a truck, trailer, or cargo in this zone. Sometimes
this could be necessary to avoid clipping and visual artifacts when you are
“building” something.

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.

And, in this case, the necessary settings will be the following:

These settings will work as described above.

NOTE: In the game, the bridge_wooden_big_02_objective model has no


build_stage_complete state. So, please treat these settings as an illustrative example
only.

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.

However, there are few nuances:


• Values of the Name attribute of the Subset tags – and, correspondingly, the
names of states in stagesProgress – for smoke cubes are specific:
o "stage_visible" – corresponds to smoke on.
o "stage_hidden" – corresponds to smoke off.
• The sources of the smoke – models of cubes themselves – are visible on map
as white cubes and have collision. So, they should be placed below the terrain.
• You can enable and disable multiple smokes at once by specifying the same
Tag for them in the properties of their cubes.

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).

5.16.4. Custom Employers


If necessary, you can use custom employers in your Contracts, along with the in-game
ones ("Husky", "KolskyRegionalGov", and so on).

To create a custom employer:


1. In the Zone Settings dialog, expand the objectiveSettings section and click
next to its employer subsection.

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.

4. In the new record, specify the properties of the new employer:


• UiName – the UI name of the employer that will be shown for the player
in the UI of the game. If the UiName field is not specified, the internal
name of the employer specified at Step 2 above will be shown in UI.

NOTE #1 (On Localization): If you want to localize the UI name of the


employer to the languages supported by the game, you can specify the
UI_IDENTIFIER of the employer name in the UiName field (or as internal

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.

• Employer Logo – the name of the small logo of the employer.


• Employer Background – the name of the large logo of the employer.

NOTE #2 (On Images and Their Names): As values of these image


fields, you need to specify the names of corresponding image files without
their extensions. For example, lunar_waters_inc_small should be
specified for Employer Logo if the name of the image file is
“lunar_waters_inc_small.png”. For requirements to format, dimensions,
and location of these image files, see below.

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).

To link a Contract to the created custom employer:


1. In the Zone Settings dialog, expand the properties of a target Contract.

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.

The process described below is an illustration of the setup of a region:

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.

Then, we will need to do the following:


1. Prepare level_map_1:
a. Open it in the Editor.
b. In the Editor, create all necessary zone locators, including zone locators
for Gateway zones.
In our example, there will be two zone locators with the following IDs:
i. zone_1 (Fuel station)
ii. gateway_1 (the zone that will be the gateway in the future)
c. Since we want this map to be the starting map of the region, we need to
add an active truck to this map (see 5.11 for details).
d. So, our first map may look like the following in the Editor:

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.

WARNING: If you do not open the Zone Settings Plugin, the


TERRAIN LOCATORS LIST will not be populated with zones. In
this case, the system will have no information about the zones.

f. In our example, the zone properties of our first map will look like the
following:

g. Now, you need to pack your level_map_1 map.

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:

c. Do not forget to pack your level_map_2 map too.


You can also publish this map as a separate mod, if necessary.

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).

e. GlobalMapRegionBG (optional) - the background for the Region on the


Global Map screen, see 5.18 below for details.

f. GlobalMapRegionIcon (optional) - the icon for the Region in the Global


Map screen, see 5.18 below for details.

g. Enable Dev Menu – this option is similar to the isEnableDevMenu


option for the particular map (see 5.15.5 above for details), but on the
level of the region. I.e., if it is enabled, the Dev Menu will be enabled for
all maps of the region.

h. Ignore Country Purchase Block – this option is similar to the


isIgnoreCountryPurchaseBlock option for the particular map (see
5.11.2 above for details), but on the level of the region. I.e., if it is
enabled, you will allow the player to purchase trucks from all countries on
all maps of the region.

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):

The process of configuration of a regional zone is pretty much similar to the


regular process of zone configuration, see 5.15. Adding Zones.

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:

To configure the gateway_2 zone, we will need to do almost the same.


However, we will link the gateway_2 zone to the gateway_1 zone:

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.

So, the main field in the ZonePropertyGateway (properties of a gateway) is:


● levelZoneLink - the target zone on another map 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. After selection, the selected zone will be
displayed in the field in the following format:
name_of_the_map || ID_of_the_zone
For example: level_map_2 || gateway_2

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).

NOTE: For descriptions of the extraZoneToPlaceTrucks and extraZoneToPlaceWinch


fields and instructions on setting up an extra zone, see 5.17.2. Rules for a target zone of
a Gateway. Extra zone below.

5.17.2. Rules for a target zone of a Gateway. Extra zone


To avoid issues during the transition of a player via the created gateway, the zone
locator of the gateway’s target zone should met the following requirements:
• This zone locator should not have models of any kind inside it (e.g. no rocks, no
lampposts, no fences, and so on). Otherwise, the truck or a trailer of the player
can inappropriately collide with these models during the transition.
• This zone locator should not contain any plants with enabled collisions (e.g. no
trees, no bushes, and so on). The reason for that is the same – the vehicle can
collide with them and this may result in inappropriate behavior.
• The size of a zone locator (i.e. Length... and Width in 5.15.2. Zone Locator
properties) should be typically larger than the size of regular zone locators.

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.

This zone should be selected in the extraZoneToPlaceTrucks and


extraZoneToPlaceWinch fields of the gateway settings.

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).

For example, if we have gateway_1 on level_map_1 and gateway_2 on level_map_2,


and these gateways are linked to each other, then their extra zone settings will look like
the following:

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.

WARNING: The zone specified in the extraZoneToPlaceTrucks and


extraZoneToPlaceWinch fields must have empty props sections in its settings, both on
the level of region and the level of the particular map. I.e. this zone should be used by
the gateway only and should not be used in any other way. Otherwise, the gateway may
stop working correctly.

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.

NOTE:The current behavior of passing gateways with a truck or trailer on a winch


is the following:
1. During gateway transition, the game detaches anything that was
connected by the winch.
2. If there is a sufficient space in the initial gateway zone, the game will put
both the main truck and the truck/trailer that was on the winch in the initial
gateway zone. They will spawned there in the "ghost mode" and will not
interfere with each other.
3. If the space in the initial gateway zone is insufficient, the game will put
both the main truck and the truck/trailer that was on the winch in the
extraZoneToPlaceWinch zone. They also will spawned there in the
"ghost mode" there.

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.

5.17.4. Locking Objectives based on Exploration


The Blocked By Map field in the settings of the objective allows you to lock or hide the
objective until the player opens the particular map of the Region.

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.

To set up these pictures for a map or a region:

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

* WARNING: For the GlobalMapRegionIcon image to match the UI of


the Global Map screen, its transparency mask should be the following:

PNG image of the mask is available here:


https://drive.google.com/file/d/1aR_Og0xrtq_ATgi_B93hqoBdI_qvNUsS/view

2. Put the pictures to required directories:


a. Pictures for a Region (GlobalMapRegionBG, GlobalMapRegionIcon)
should be put here: Media\prebuild\<RegionName>\ui\textures
b. Pictures for a Map (globalMapPreview, saveSlotMapPreview) should
be put here: Media\prebuild\<MapName>\ui\textures

NOTE: Please note that there should be two separate \ui\textures folders: one
for a map and one for a region.

3. In each image field (GlobalMapRegionBG, GlobalMapRegionIcon,


globalMapPreview, saveSlotMapPreview) in the settings of a Region or a Map
(see above for info on the location of the fields in dialogs), specify the name of
the necessary picture without extension.
E.g. my_region_image for the my_region_image.png

4. Repack the map or region in a standard way.

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.

For details on localization, see https://snowrunner.mod.io/guides/uiname-uidesc-names-


descriptions-and-their-localization.

5.20. Custom Maps in COOP


There is only one requirement for a map mod to be available in COOP: it should
contain a Garage.
All custom maps that contain a Garage should work in COOP.

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).

Therefore, if you are creating a map targeted to a multiplayer, we recommend you to


allow the player to open the Garage somewhere at the beginning of the map.

5.21. Console Mods Requirements


For requirements and recommendations on creating mods for consoles,
see the “Console Requirements for Mods” guide
(Console_Requirements_for_Mods.pdf in the same documentation package).

5.22. Custom Cargo


For instructions on creating Custom Cargo and adding it to mods of maps and trucks,
please refer to the “Creating Custom Cargo” guide (Creating_Custom_Cargo.pdf in
the same documentation package).

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

5.23.1. Step 1: Creating a Zone for a Farming Area


First of all, you need to create a zone for a Farming Area. This is done almost in a
standard way:
1. You create a Zone in the Zones section in the Scene View panel (see 5.15.
Adding Zones for details).
2. Importantly, you need to place it the location on the map where you want to
create a farming area. And, you need to resize this precisely to the dimensions
of the future 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).

NOTE #2: In previous versions of the Editor, the ZonePropertyFarmingArea


property did have some (internal) properties, but in the current version they are
removed, since they need not to be specified manually.

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.

5.23.2. Step 2: Creating Distributions for a Farming Area


Now, you need to create a group of distributions for your farming area.

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.

WARNING: Regardless of the fact


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.

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.

3. Importantly, specify the name of this group of distributions in the Distributions


group name field of the zone that you have created for your farming area (see
the 3rd clause in Step 1 above). This will link the zone to the distributions group.

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.

5.23.3. Step 3: Creating an Objective for a Farming Area


After you have created the zone and the group of distributions for your farming area, you
can finally create an objective for it.

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).

Similarly to other assignments, farming assignments are described as Stages.

Particularly, every farming assignment needs to be described within the separate


farmingInfo section in the Stages list. Below comes the description of all fields of this
section.

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.

The properties of farmingInfo section are the following:

The main properties of the farmingInfo section are the following:

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.

neededState value Sequence number of Typical value of


Distribution the State field of
the Distribution

FIELD_STATE_DEFAULT The first (initial) distribution 0


that is visible before any
farming activities.

FIELD_STATE_PLOWED The second distribution. 1

FIELD_STATE_SOWN The third distribution. 2

FIELD_STATE_SOWN_GROWN The forth distribution. 3

FIELD_STATE_COMPLETE The fifth distribution. 4

FIELD_STATE_COMPLETE_GROWN The sixth distribution. 5

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.

• tolerance – this coefficient, with possible values from 0 to 1, defines the


percentage of the farming field area that can be omitted by the player when they
perform the stage. Indirectly, this value defines the required percentage of the
farming field that the player needs to pass with the requiredTrailer to
accomplish the Stage. The formula for the required percentage is the following:
req_percentage = (1 – tolerance) * 100%
For example, if you want the player to harvest the field with the Harvester and set
tolerance for this Stage to 0.3, then the player needs to perform this harvesting
on the (1 – 0.3) * 100% = 70% percents of the field and this will be enough for the
player to accomplish the 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.

WARNING: For Stages with enabled hideStageFromUi option, the value of


tolerance (see above) must be equal to 1. This will allow the game to perform
the Stage automatically.

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.

5.23.4. Custom Trailers for Farming Stages


Along with regular farming trailers that are provided with Editor (trailer_cultivator,
trailer_harvester, and trailer_planter), you are able to create your own custom mods of
farming trailers and use them on your maps. Their ceation is similar to the creation of
regular non-farming trailers, you just need to add some properties to the XML of the
class of the trailer.

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.

NOTE: The water tank of the truck can be a specific addon/trailer/semitrailer.

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.

5.24.1. PICK_UP Water Stations


PICK_UP Water Station zones allow the player to "pick up" water, i.e. to fill the water
tanks of their truck from the zone reservoir.

NOTE: For these zones, water cannot go in the reverse direction, i.e. the player cannot
fill the zone reservoir from the truck tank.

Setting up this zone is rather simple:


1. In the stationUIName field of ZonePropertyWaterStation, you set up the name
of the zone (e.g. "River Water") or leave the default one.
2. In stationType – select PICK_UP.

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).

5.24.2. DROP Water Stations


DROP Water Station zones allow the player to "drop" water, i.e. to fill the water reservoir
of the zone from their truck tank.

NOTE: For these zones, water cannot go in the reverse direction, i.e. the player cannot
fill the truck tank from the zone reservoir.

Setting up this zone is also a simple process:


1. In the stationUIName field of ZonePropertyWaterStation, you set up the name
of the zone (e.g. "Water Storage Tank") or leave the default one.
2. In stationType – select DROP.
3. In Water – specify the amount of water, in liters, that is initially available in the
reservoir of this zone. The player will be able to add water to this amount, but
will not be able to take water from it. To specify an infinite initial amount (e.g. in
case of the river), you can specify the "-1" value, but this case is non-typical for
the DROP zones. The amount of water for DROP zones that are used in
objectives should be set to “0” (it is reset on the activation of the objective, see
5.24.4. Objectives: Water Delivery).
4. In Capacity – specify the maximum capacity of the water reservoir of this zone.
The player will be able to add water to the zone reservoir until it will be totally
full. Specified Capacity must be greater than current amount (Water). The "-1"
value will set the capacity of this water reservoir to infinity, but this case is non-
typical for the DROP zones.
5. For the Is water delivery objective zone option:
• If this DROP zone is used as a target zone in a water delivery objective –
enable the Is water delivery objective zone option. 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. For details, see 5.24.4.
Objectives: Water Delivery.

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.

5.24.3. TRANSIT Water Stations


TRANSIT Water Station zones allow the player to immediately transfer water from one
TRANSIT zone to another.

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).

Setting up the TRANSIT zone is also rather simple:


1. In the stationUIName field of ZonePropertyWaterStation, you set up the name
of the zone (e.g. "Water Reservoir, Gate A") or leave the default one.
2. In stationType – select TRANSIT.
3. In Water – specify the amount of water, in liters, that will be initially available in
the common reservoir of this zone and all of its interconnected zones. The
player will be able to add water to this amount and will be able to take water
from it, using any of the interconnected TRANSIT zones. To specify an infinite
initial amount, you can specify the "-1" value, but this case is non-typical for the
TRANSIT zones.
4. In Capacity – specify the maximum capacity of the common water reservoir of
this zone and all of its interconnected zones. The player will be able to add water
to the reservoir until it will be totally full. Specified Capacity must be greater than
current amount (Water). The "-1" value will set the capacity of this water
reservoir to infinity, but this case is non-typical for the TRANSIT zones.
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. Create all other TRANSIT zones that you want to link with the current one and
add all of them to the list of Shared Water Zones of the current TRANSIT zone.

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).

WARNING: All properties of the interconnected TRANSIT zones (except the


stationUIName) must be the same. If values of the Water and Capacity fields of the
interconnected zones are not the same, they will operate not correctly.

5.24.4. Objectives: Water Delivery


Objectives that require delivery of the Water from the player to a target zone are set up
similarly to regular delivery objectives.

NOTE: See 5.16.1.1 above for details of regular delivery objectives.

Particularly, you set up a Stage as if for the regular delivery, but:

• select the zone of the DROP Water Station type in the globalZoneId field.

WARNING: The DROP type in the ZonePropertyWaterStation prop is


mandatory for the target delivery zone.

• select "CargoWater" as the name of cargo in the CargoPack.


• specify the target amount of water, in liters, to be delivered in the Amount of
cargo in the CargoPack.

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.

5.24.5. Custom Addons and Trailers: Water as Cargo


You can create your own, custom addons, trailers, and semitrailers that will allow the
player to work with Water as cargo.

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.

5.25.1. Map pieces. Their subfolders in the "data" folder


NOTE: The name of a map must start with the level_ prefix. E.g. level_my_map_01

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.

3. Enable the Show zone for work ( ) option on the Toolbar.


4. The area of the necessary chunk will appear as a regular map, without any
colorization. All other parts of the map will be colored with red.

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.

5.25.3. General Process of Collaboration


Using features described in 5.25.1 and 5.25.2 above, you can establish a collaboration
process that, in general, will be similar to the following:

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.

5.25.3.1. Collaboration: Distributions


When you add a new Distribution (see 5.7 below) to your level, the Editor automatically:

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:

Or, from the XML file of the subgroup:

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).

5.25.3.2. Collaboration: PBR Materials


In SnowRunner, we have fixed maximum amount of PBR Materials (see 5.3) and fixed
maximum amount of their layers: maximum 4 materials, with maximum 4 layers each.

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.

5.25.3.4. Collaboration: Rivers and Overlays


Rivers and Overlays are created for all map pieces at once. Their data is stored in the
data\River и data\Overlay folders.

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.

5.25.3.6. Collaboration: Zones


A zone is defined by two entities: its locator and its zone properties. They are stored in
different locations.

The data of zone locator is stored in the Media\prebuild\<level_name>\_zones.xml.


However, if a zone is within a particular group (see 3.5), the same info on the zone
locator is stored in the Media\prebuild\<level_name>\subgroups folder, in the XML file
of the group.

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

5.25.3.7. Collaboration: Objectives


Objectives use settings of zones (names, etc.) in their settings. The data on objectives is
stored in the objective_settings.json file within the Media\levels\<level_name> folder.

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.

5.25.3.8. Collaboration: Content Settings


Content settings (starting level, starting money, locks/unlocks, custom prices) are stored
in the content_settings.json file of the Media\levels\<level_name> folder.

257
If a modder modifies them, the corresponding JSON pieces need to be sent to all other
modders.

5.25.3.9. Collaboration: References


Data on References is stored withtin the map pieces corresponding to them (e.g. within
the corresponding data\0_0 … data\3_3 folders), similarly to data on Trucks, Models,
and Plants.

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.

5.25.4. Working with External Tools for Texture Maps


All textures used by SnowRunner™ Editor are also divided into smaller ones according
to conventional map pieces and stored withtin the data\0_0 … data\3_3 folders
corresponding to these map pieces. You can find them there as a set of .tga (or .dds)
files.

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.

5.25.4.1. Combine chunks in directory


The "Combine chunks in directory" command is available in the context menu, which
can be opened by right-clicking an object or terrain.

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.

This command performs the reverse operation to "Combine chunks in directory":


1. At the first execution, it creates the applyTexture folder within the folder of your
level, allowing you to put your modified whole-map-sized textures to it.
2. After that, at the second execution, it divides all these large textures into smaller
ones that correspond to map pieces and puts them to corresponding data\0_0
… data\3_3 folders.

NOTE: After the execution of this command, all textures in the applyTexture folder are
removed.

5.25.5. Working with Version Control Systems


You can use a Version Control System (VCS) for your collaborative work by storing
there all necessary sources of the map. The general process and nuances listed above
will not change in this case, but the process of exchanging changes will be much
simplier.

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.

The full path to this folder is typically similar to the following:


C:\Users\<name_of_user>\Documents\My Games\SnowRunner\Media\Mods

260
The set of .zip files – that are intended for uploading to mod.io – will be created in the
Media\levels folder:

Particularly, in this folder, there will be such archives as:


• <name_of_map>_pc.zip – .zip package for PC platform.
• <name_of_map>_playstation_4.zip – .zip package for PlayStation 4 platform.
• <name_of_map>_playstation_5.zip – .zip package for PlayStation 5 platform.
• <name_of_map>_xbox_one.zip – .zip package for Xbox One platform.
• <name_of_map>_xbox_series.zip – .zip package for Xbox Series X|S platform.
• <name_of_map>_nx64.zip – .zip package for Nintendo Switch platform.

These particular .zip files you can upload to SnowRunner’s mod.io


(https://mod.io/g/snowrunner) in a standard way, see 8. Publishing a Map below.

7. Testing a Map in the Game


Directly after packing, you can test your map in the game.

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.

These .zip files can be uploaded to SnowRunner’s mod.io (https://mod.io/g/snowrunner)


the same way truck mods are uploaded.
For details, see section 4 at the “Quick Guide – Adding Trucks” guide (Quick_Guide_-
_Adding_Trucks.pdf in the same documentation package).

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.

9. Downloading Map Mods from mod.io


To download a map mod from mod.io, you need to subscribe to it and activate it in the
game. This is done the same way as it is done for trucks. For details, see section 5 at
the “Quick Guide – Adding Trucks” guide (Quick_Guide_-_Adding_Trucks.pdf in the
same documentation package).

263
After that, you will be able to play on the activated maps.

10. Playing on Map Mods from mod.io


After your map mod is successfully installed and activated (see 9. above), you will be
able to play on it.
To do this:
1. Open NEW GAME > CUSTOM SCENARIOS in the main menu.
2. Find the downloaded map there.

3. Select it (by clicking it) and press ENTER.

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.

5. After a loading screen, you will be spawned to the downloaded map.

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.

This feature can be useful due to the following:


● The Editor loads the truck faster than the game. You do not need to load the
level to view the truck.
● For the truck, you can open:
○ The XML file of the mesh - to view the Fbx file of the truck with textures.
○ The XML file of the class - to view the whole truck with wheels, damage
areas, light settings, and so on.
● You can open XML files of meshes and view Fbx files not only for trucks, but also
for plants, the driver, and so on. However, the XML file of the class can be
opened for trucks only.
● When you open the XML file of the mesh, you can ensure that:
○ the model of the truck exported from the 3D package is correct.
○ paths of textures specified in the XML file of the mesh are correct.
You can open the XML file of the mesh before creating the XML of the class.
● When you open the XML file of the class, you can see most errors that occur due
to the incorrect XML files of all classes that form the description of the truck
(truck itself, suspension, gearbox, wheels, etc).
● In the game, you cannot see the collision objects. In the Editor, they are
displayed, so you can check that the model of the truck was exported correctly.
● You can see the hierarchy of the skeleton of the truck with parented collision
objects.

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 full path to this folder is typically similar to the following:


C:\Users\<name_of_user>\Documents\My Games\SnowRunner\Media\Mods\

Along with .pak files of the maps, this folder contains:


• folders with source files of the truck mods
• their .zip files (for uploading to snowrunner.mod.io, see
Quick_Guide_-_Adding_Trucks.pdf in the same documentation package).

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.

11.4. Viewing Errors


If the Settings > Ignore warnings option is not selected in the main menu of the Editor,
errors will be displayed to the user as pop-up windows.
Along with that, errors are displayed to the user in the log within the Output panel.

You can select errors there and copy them to buffer by pressing CTRL+C, then paste
where necessary by pressing CTRL+V.

11.5. Viewing XML files of Meshes for Other Objects


Using Editor, you can open XML files of meshes and view Fbx files not only for trucks,
but also for plants, the driver, and so on.
For example, you can open the XML file of the mesh of the bumper and view its Fbx
model:

270
The XML file of the class can be opened for trucks only.

11.6. Viewing the Snow Cover Effect for a Truck


Using the Settings > Show Snow By Up Vector option in the main menu, you can
enable the snow cover effect for the truck, according to its material settings.
For more details on the snow cover effect settings, see the “7.2. <Material>” section of
the Integration of Trucks and Addons guide (it is available as
Integration_of_Trucks_and_Addons.pdf in the same documentation package).

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.

Appendix B: Stages of a Sample Farming Contract


A working sample costs a ten thousand of words, so below you can find screenshots of all Stages of a contract for the sample farming area that was
used as illustration in 5.23. Farming. We hope that these pics will help you to build your own working sample and transform it into something you like.
If you have already noticed that this sample is actually almost duplicating the first farming tutorial from DLC8, you are on the right track.

The stages are the following, see below:


• Stage 0 – truckDelivery: Deliver the Cultivator
• Stage 1 – farmingInfo: Cultivate the field
• Stage 2 – truckDelivery: Deliver the Planter
• Stage 3 – farmingInfo: Seed the field
• Stage 4 – farmingInfo: (hidden automatic step)
• Stage 5 – truckDelivery: Deliver the Harvester
• Stage 6 – farmingInfo: Harverst the field
• Stage 7 – farmingInfo: (hidden automatic step)

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

You might also like