Showing preview only (763K chars total). Download the full file or copy to clipboard to get everything.
Repository: SmartlyDressedGames/U3-Docs
Branch: latest
Commit: 897318870b5e
Files: 178
Total size: 716.0 KB
Directory structure:
gitextract_ui58d88c/
├── .editorconfig
├── .gitignore
├── .readthedocs.yaml
├── Makefile
├── README.md
├── _extensions/
│ └── unturned_lexer.py
├── _static/
│ ├── css/
│ │ ├── custom.css
│ │ └── toctree_collapse.css
│ └── js/
│ └── toctree_collapse.js
├── about/
│ ├── getting-started.rst
│ ├── launch-options.rst
│ └── steam-workshop.rst
├── assets/
│ ├── airdrop-asset.rst
│ ├── animal-asset.rst
│ ├── animation.rst
│ ├── asset-bundle-custom-data.rst
│ ├── asset-bundles.rst
│ ├── asset-definitions.rst
│ ├── asset-validation.rst
│ ├── character-mesh-replacement.rst
│ ├── crafting-asset.rst
│ ├── crafting-blacklist-asset.rst
│ ├── curated-items.rst
│ ├── data-file-format.rst
│ ├── effect-asset.rst
│ ├── foliage-asset.rst
│ ├── layers.rst
│ ├── level-asset.rst
│ ├── material-palette-asset.rst
│ ├── mod-hooks.rst
│ ├── mythical-asset.rst
│ ├── object-asset.rst
│ ├── outfit-asset.rst
│ ├── physics-material-asset.rst
│ ├── redirector-asset.rst
│ ├── resource-asset.rst
│ ├── road-asset.rst
│ ├── server-browser-curation-asset.rst
│ ├── spawn-asset.rst
│ ├── stereo-song-asset.rst
│ ├── tag-asset.rst
│ ├── unity-upgrade.rst
│ ├── vehicle-asset.rst
│ ├── vehicle-physics-profile-asset.rst
│ ├── vehicle-redirector-asset.rst
│ ├── weather-asset.rst
│ └── zombie-difficulty-asset.rst
├── conf.py
├── data/
│ ├── asset-ptr.rst
│ ├── bitmask.rst
│ ├── built-in-types.rst
│ ├── color.rst
│ ├── enum/
│ │ ├── eassettype.rst
│ │ ├── ebatterymode.rst
│ │ ├── eitemorigin.rst
│ │ ├── eitemrarity.rst
│ │ ├── eitemtype.rst
│ │ ├── elightingvision.rst
│ │ ├── enpcholiday.rst
│ │ ├── eobjectchart.rst
│ │ ├── eobjecttype.rst
│ │ ├── eslottype.rst
│ │ └── index.rst
│ ├── flag.rst
│ ├── guid.rst
│ ├── master-bundle-ptr.rst
│ ├── rich-text.rst
│ ├── struct/
│ │ ├── index.rst
│ │ └── playerspotlightconfig.rst
│ └── vector3.rst
├── img/
│ └── WorkshopMapIDs.csv
├── index.rst
├── items/
│ ├── actions.rst
│ ├── arrest-end-asset.rst
│ ├── arrest-start-asset.rst
│ ├── backpack-asset.rst
│ ├── bag-asset.rst
│ ├── barrel-asset.rst
│ ├── barricade-asset.rst
│ ├── beacon-asset.rst
│ ├── blueprints.rst
│ ├── blueprints_inputitem.rst
│ ├── blueprints_outputitem.rst
│ ├── box-asset.rst
│ ├── caliber-asset.rst
│ ├── charge-asset.rst
│ ├── clothing-asset.rst
│ ├── cloud-asset.rst
│ ├── consumeable-asset.rst
│ ├── detonator-asset.rst
│ ├── farm-asset.rst
│ ├── filter-asset.rst
│ ├── fisher-asset.rst
│ ├── fishing-catchable-properties.rst
│ ├── food-asset.rst
│ ├── fuel-asset.rst
│ ├── gear-asset.rst
│ ├── generator-asset.rst
│ ├── glasses-asset.rst
│ ├── grip-asset.rst
│ ├── grower-asset.rst
│ ├── gun-asset.rst
│ ├── hat-asset.rst
│ ├── introduction.rst
│ ├── key-asset.rst
│ ├── library-asset.rst
│ ├── magazine-asset.rst
│ ├── map-asset.rst
│ ├── mask-asset.rst
│ ├── medical-asset.rst
│ ├── melee-asset.rst
│ ├── oil-pump-asset.rst
│ ├── optic-asset.rst
│ ├── pants-asset.rst
│ ├── placeable-asset.rst
│ ├── refill-asset.rst
│ ├── sentry-asset.rst
│ ├── shirt-asset.rst
│ ├── sight-asset.rst
│ ├── storage-asset.rst
│ ├── structure-asset.rst
│ ├── supply-asset.rst
│ ├── tactical-asset.rst
│ ├── tank-asset.rst
│ ├── throwable-asset.rst
│ ├── tire-asset.rst
│ ├── tool-asset.rst
│ ├── trap-asset.rst
│ ├── vehicle-lockpick-tool-asset.rst
│ ├── vehicle-paint-tool-asset.rst
│ ├── vehicle-repair-tool-asset.rst
│ ├── vest-asset.rst
│ ├── water-asset.rst
│ └── weapon-asset.rst
├── make.bat
├── mapping/
│ ├── charts.rst
│ ├── curated-maps.rst
│ ├── editor-asset-redirectors.rst
│ ├── favorite-searches.rst
│ ├── level-batching.rst
│ ├── level-config.rst
│ └── manual-object-culling.rst
├── npcs/
│ ├── conditions.rst
│ ├── currency-asset.rst
│ ├── dialogue-asset.rst
│ ├── introduction.rst
│ ├── npc-asset.rst
│ ├── quest-asset.rst
│ ├── rewards-list-asset.rst
│ ├── rewards.rst
│ └── vendor-asset.rst
├── requirements.in
├── requirements.txt
├── sdg/
│ ├── dat-editing-code.rst
│ ├── hosting-servers-using-private-workshop-files.rst
│ ├── legacy-id-availability.rst
│ ├── source-code.rst
│ ├── test-steam-items.rst
│ ├── unity-project.rst
│ └── using-git.rst
└── servers/
├── bookmark-host.rst
├── command-io.rst
├── debugging-exceptions.rst
├── dedicated-workshop-update-monitor.rst
├── fake-ip.rst
├── game-server-login-tokens.rst
├── glazier.rst
├── openmod.rst
├── port-forwarding.rst
├── rocket.rst
├── server-auto-restart.rst
├── server-browser-curation.rst
├── server-codes.rst
├── server-configuration.rst
├── server-hosting-rules.rst
├── server-hosting.rst
├── server-update-notifications.rst
└── steamcmd.rst
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: https://editorconfig.org/
# Special property to stop .editorconfig files search.
root = true
# Default values for all files.
[*]
indent_style = tab
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .gitignore
================================================
# Sphinx output folder as specified in Makefile and make.bat
/_build/
# Temporary Visual Studio Code config files
/.vscode/
# Generated Python files, e.g., in the _extensions directory
__pycache__/
# Virtual environment files
/.venv/
================================================
FILE: .readthedocs.yaml
================================================
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# These fields are in the order they are mentioned in the RTD docs.
version: 2
# Build PDF and ePub versions for offline use (HTMLzip might be too big to build?)
formats:
- epub
- pdf
build:
os: ubuntu-22.04
tools:
python: "3.11"
python:
install:
- requirements: requirements.txt
sphinx:
configuration: conf.py
fail_on_warning: true # Make warnings more visible by forcing build to fail
================================================
FILE: Makefile
================================================
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
================================================
FILE: README.md
================================================
Unturned Documentation
======================
These are the source files for *Unturned*'s modding documentation.
The built documentation is hosted by [Read the Docs](https://readthedocs.org/) here: https://docs.smartlydressedgames.com/
Offline Downloads
-----------------
PDF and ePub versions of the documentation can be [downloaded](https://readthedocs.org/projects/unturned/downloads/) for offline use.
Contributing
------------
Anyone can contribute towards *Unturned*'s modding documentation. This repository has three branches – **latest**, **stable**, and **old-markdown-archive** – although contributions should only be made towards the "latest" branch.
- **latest**: Always has the latest documentation, including upcoming features that might not be available on the current version of the game.
- **stable**: Occassionally updated with the additions to the "latest" branch.
- **old-markdown-archive**: Contains old documentation, in markdown files (rather than reStructuredText). This documentation does not appear on the online documentation site, and is only kept for historical purposes. Its contents may be removed in the future.
The online documentation pages are generated from .rst (reStructuredText) files. These files are stored in root, but are organized into folders based on where those files appear in the table of contents. For example, the [level-asset.rst](/assets/level-asset.rst) file is located in the "assets" folder.
### Styleguide
Most documentation files are formatted similarly. Some important notes:
- Content block directives can be used to add notes, warnings, tips, and other admonitions.
- Internal links should use the `:ref:` command, usually pointing towards a custom anchor.
- Properties in the asset manual pages use one of two formats. Older pages follow a `**Name** *data type*: Description` format. Depending on the data type, it may be hyperlinked instead, or may include required (or possible) values. Newer pages follow a table-based format. These formats should not be mixed on the same page, but continuing to use the legacy format on pages that have not been converted yet is acceptable.
- Images from the Unity editor should crop out any unnecessary information. This usually includes the Title Bar (which includes details such as the Unity version, project name, and window buttons), and the Toolbar.
- The `code-block` directive can be used to display example code with syntax highlighting. Common languages include `cs`, `json`, `text`, `shell`, `bat`, and `unturneddat` (alias: `unturnedasset`).
- Including links to our Unturned Wiki (`https://unturned.wiki.gg/`) can be helpful. Wiki articles linked in the Unturned Documentation should have the "[Category:Pages linked from Unturned Documentation](https://unturned.wiki/wiki/Category:Pages_linked_from_Unturned_Documentation)" hidden tracking category added to them.
Building the Docs
-----------------
This section explains how to build a local copy of the documentation. Our documentation is written in [reStructuredText](https://www.writethedocs.org/guide/writing/reStructuredText/) and converted to HTML through [Sphinx](https://github.com/sphinx-doc/sphinx).
We recommend using [Visual Studio Code](https://code.visualstudio.com/) with the [reStructuredText extension](https://docs.restructuredtext.net/) (by LeXtudio Inc.), and the [Esbonio extension](https://docs.esbon.io/en/latest/index.html) (by Swyddfa) to benefit from live preview and syntax highlighting.
Use the same version of Python as configured in `.readthedocs.yaml`. If you have multiple Python versions installed, you may need to manually specify the Python Interpreter that should be used.
1. Clone the Unturned Docs repository:
```shell
git clone https://github.com/SmartlyDressedGames/Unturned-Docs.git
```
2. Change directory to the Unturned Docs repository:
```shell
cd Unturned-Docs
```
3. *(Optional)* Set up a virtual environment. Virtual environments prevent potential conflicts between the Python packages installed in `requirements.txt` and any Python packages installed on your system.
1. Create the virtual environment:
```shell
py -3.11 -m venv .venv
```
2. Activate the virtual environment:
```shell
.\.venv\Scripts\Activate.ps1
```
3. Your terminal prompt will show `(venv)` at the beginning if activation worked.
4. Download packages from `requirements.txt`:
```shell
pip install -r requirements.txt
```
Alternatively, `pip-sync` can be used to ensure installed packages are *exactly* the same – by adding, upgrading, or removing any packages as necessary. **Doing this outside of the virtual environment is not recommended:**
```shell
pip-sync requirements.txt
```
5. Build the documentation:
```shell
.\make html
```
Alternatively, you can build the documentation by running `sphinx-build` manually. This command is more cross-platform:
```shell
sphinx-build -b html ./ _build/html
```
You can now browse the documentation by opening `.../Unturned-Docs/_build/html/index.html` in your web browser. If Esbonio was installed, you can also preview the documentation in Visual Studio Code.
Configure Esbonio for a virtual environment
---------------------------------------------
Esbonio v1.0.0 in a virtual environment on Windows may fail to import packages from the venv and instead used Esbonio's bundled Python environment. This causes misleading `ModuleNotFoundError` errors to appear for packages installed in the virtual environment.
You can force Esbonio to use the virtual environment by configuring your `.vscode/settings.json`:
```json
{
"esbonio.sphinx.pythonCommand": {
"command": ["${venv:.venv}"]
}
}
```
Updating the `requirements.txt` file
------------------------------------
Packages (including specific versions) can be pinned in `requirements.in`. This file is used to automatically generate `requirements.txt`.
Run the following command to generate a new `requirements.txt` file afterwards:
```shell
pip-compile requirements.in
```
Locally updating the TOC
------------------------
Sometimes, the Table of Contents will fail to update after changes have been made. This is an issue with the Esbonio extension, but it can be safely ignored as it should only affect your local preview of the project pages.
If needed, you can force Esbonio to rebuild these pages. Delete the files at `%APPDATA%\Code\User\workspaceStorage\...\swyddfa.esbonio\sphinx`, run `make html`, and restart the Sphinx language server (e.g., by closing and reopening Visual Studio Code, or by clicking the "Sphinx" button in the bottom-right).
================================================
FILE: _extensions/unturned_lexer.py
================================================
"""
unturned_lexer
~~~~~~~~~~~~~~
Lexer for Unturned's .dat and .asset files.
https://pygments.org/docs/lexerdevelopment/
"""
__all__ = ['UnturnedLexer']
from pygments.lexer import RegexLexer, bygroups
from pygments.token import *
class UnturnedLexer(RegexLexer):
name = 'UnturnedDat'
aliases = ['unturneddat', 'unturnedasset']
filenames = ['*.asset', '*.dat']
tokens = {
'root': [
(r'("(?:\\.|[^"])*")(?:(\s*)(//.*)$)?', bygroups(String, Whitespace, Comment)), # Quoted key or value – optionally, a comment (inline) can be matched too.
(r'(^\s*)(//.*)$', bygroups(Whitespace, Comment)), # Comment (newline).
(r'(^\s*)(\w+)\b', bygroups(Whitespace, Name.Class)), # "Key" in a key-value pair, or a "flag".
(r'(^\s*)([\[\]\{\}])', bygroups(Whitespace, Name.Decorator)), # Brackets (dictionaries, lists).
(r'true|false', Name.Builtin), # Boolean.
(r'(#)([a-fA-F0-9]{6})', bygroups(Operator, Number)), # Color (hex triplet).
(r'[-,\(\)]', Operator), # Punctuation for numbers (negatives, commas, vector3).
(r'\b(\d+\.?\d*|\d*\.?\d+)\b', Number), # Number (integer, float) – this doesn't capture values such as "1." or ".1" currently. It could be changed to do so, but we may need to make separate rules for integers and floats, and possibly GUIDs as well.
(r'\S+', Text), # Match remaining non-whitespace.
(r'\n|\s+', Whitespace), # Match remaining whitespace – line breaks must be matched first, otherwise \s+ is too greedy and breaks preceding rules relying on whitespace.
]
}
def setup(sphinx):
sphinx.add_lexer("unturneddat", UnturnedLexer)
sphinx.add_lexer("unturnedasset", UnturnedLexer)
================================================
FILE: _static/css/custom.css
================================================
/* Custom tweaks to the Read the Docs Sphinx Theme.
* Less generic styling should be placed in its own stylesheet.
*/
/* Tables should take up the entire available horizontal space within their container. */
.wy-table-responsive table {
width: 100%;
}
/* COMMENTED OUT - Wrapping table contents.
* This was the "intended fix" before simply maxing table width.
* May be worth revisiting the idea for mobile devices, where horizontal scrolling can be cumbersome.
*//*
@media screen and (min-width: 769px) {
.wy-table-responsive { overflow: visible; }
.wy-table-responsive table td { white-space: normal; }
}
*/
/* Fix unreadable text when selection version from sidebar. */
select option {
background: #343131 !important;
}
================================================
FILE: _static/css/toctree_collapse.css
================================================
/* CSS for toctree_collapse.js script.
* TOC sections are "collapsed" by default, and only displayed when they've been "toggled".
*/
.wy-menu-vertical .caption {
cursor: pointer;
}
.wy-menu-vertical .caption .caption-text:before {
content: "❯"; /* ⮞ ⮚ ❯ */
display: inline-block;
transition: transform 0.25s;
transform-origin: 25% 50%;
width: 16px;
height: 32px;
}
.wy-menu-vertical .caption.toggled .caption-text:before {
transform: rotate(90deg);
}
.wy-menu-vertical .caption + ul {
display: none;
}
.wy-menu-vertical .caption.toggled + ul {
display: block;
}
================================================
FILE: _static/js/toctree_collapse.js
================================================
// Allows for collapsing TOC sections.
// Styling handled by toctree_collapse.css stylesheet.
$(function() {
let browsing = false; // Is the reader currently on a page included in the TOC?
// Selects elements from the navigation menu (TOC).
const headings = document.querySelectorAll(".wy-menu-vertical .caption[role=heading]");
headings.forEach(caption => {
const ulist = caption.nextElementSibling;
// Toggle state when clicked.
caption.addEventListener("click", () => {
caption.classList.toggle("toggled");
});
// Expand current section be browsed.
if (ulist.classList.contains("current")) {
caption.classList.add("toggled");
browsing = true;
}
});
// If the reader isn't browsing, just expand the first section instead.
if (browsing == false) {
headings[0].classList.add("toggled");
}
});
================================================
FILE: about/getting-started.rst
================================================
.. _doc_getting_started:
Getting Started
===============
To get started with creating mods for *Unturned*, or hosting your own multiplayer server, certain tools need to be downloaded first. This page provides an explanation for the different types of tools you may need – depending on what you are trying to do.
Installing Unturned
-------------------
*Unturned* must be downloaded in order to create, publish, and update mods. The game can be downloaded for free from `Steam <https://store.steampowered.com/app/304930/>`_.
Not only do the game files include some of the tools necessary for creating your own custom content, but the game's official assets can also be used as an example when creating your own items, objects, or other game assets.
Adding *Unturned* to your Steam Library will also add the *Unturned Dedicated Server* application, which is necessary to host multiplayer servers. Although some server hosts may prefer to :ref:`download this tool through SteamCMD <doc_server_hosting>` instead.
.. _doc_getting_started:installing_unity:
Installing Unity
----------------
Installing the Unity Editor is required for exporting custom content for the game. We recommend using the same version as *Unturned*, which currently uses version **2022.3.62f3**. Unity can be `downloaded from their website <https://unity.com/releases/editor/archive>`_.
Although most 2022.3 LTS versions should be compatible, and some older LTS versions *can* be used with some additional setup, those versions might not function as intended.
When installing a Unity version, you will have the option to install some optional modules. You should at least install:
- **Linux Build Support (Mono)** – Adds support for your mod on Linux devices.
- **Mac Build Support (Mono)** – Adds support for your mod on macOS devices.
Once Unity is installed, a project can be created to house custom content. At this point, it is recommended to import Unturned's provided Unity packages.
Unity Packages
--------------
Unturned provides multiple Unity packages with the base installation of the game. These packages include examples that can be referenced when creating custom content, and provide the tools necessary to export content from Unity.
These Unity packages are located in the ``.../Unturned/Extras/Sources`` directory, and are regularly updated alongside any major updates to the game.
#. Open your Unity project.
#. Select **Assets > Import Package > Custom Package...** from the toolbar.
#. In the file browser, navigate to the ``.../Unturned/Extras/Sources`` directory.
#. Import the ``Project.unitypackage`` file; importing the ``ExampleAssets.unitypackage`` file is optional.
When importing a Unity package, all of the items in the package will be installed by default. You may deselect any items that you do not want to import.
Project.unitypackage
````````````````````
This package contains the bare-bones required to export custom content:
- Default Project Settings
- :ref:`Asset Bundling Tools <doc_asset_bundles>`
- :ref:`Mod Hooks <doc_assets_mod_hooks>` (optional)
ExampleAssets.unitypackage
``````````````````````````
This package contains vanilla content examples, and several useful prefabs:
- ``CoreMasterBundle`` directory has an example of each type of vanilla asset.
- ``Game/Sources/Animations`` directory has all of the vanilla item animations.
- ``Resources/Characters/Preview.prefab`` is helpful for previewing clothes.
.. warning:: Custom content should not be placed into the CoreMasterBundle directory. Instead, create a separate directory to house your custom content.
Other Tools
-----------
Modders will need a few more tools on hand to create custom content.
Text editors
````````````
A text editor (e.g., Notepad) or a code editor (e.g., Notepad++ or Visual Studio Code) is required to write the game data files used by assets. Code editors often include other useful tools, such as being able to search-and-replace content across multiple files at once.
We *do not* recommend using a word processor (e.g., Microsoft Word, LibreOffice, or WordPad). Such programs are not intended intended for writing plain text files, and it is easy to accidentally add unwanted characters when not used properly.
If you are unsure what you should use, Notepad comes installed on all Windows systems by default, and lacks any additional tools or features that (while helpful) may be confusing for an inexperienced user.
Image editing software
``````````````````````
To create custom textures for your modded content – such as for new shirts or pants, materials for custom objects, or 2D effects – you will need an image editing software that supports transparency. Some free image editors include Paint.NET, GIMP, and Krita.
Blender
```````
A 3D modeling tool such as Blender is required to create custom models (and animations). Blender is the same tool we use for *Unturned*, although it is not strictly required.
================================================
FILE: about/launch-options.rst
================================================
.. _doc_launch_options:
Launch Options
==============
**Launch options** can be added to *Unturned* to change certain game settings before running the game. This allows for recovering from certain problems (such as an unwanted resolution or UI scale), troubleshooting a wide range of issues, or toggling settings not available from in-game.
This article lists the launch options available for *Unturned*. You can `add launch options <https://help.steampowered.com/en/faqs/view/7D01-D2DD-D75E-2955>`_ through your Steam Library.
#. Right-click **Unturned** in your Steam Library.
#. Select the **Properties...** button.
#. On the **General** tab, find the **Launch Options** field near the bottom.
#. Type options separated by spaces. For example, ``-TimeOverlay -Width=1920 -Height=1080`` will enable the TimeOverlay flag, set Width to 1920, and set Height to 1080.
Game Options
------------
Some of the launch options are primarily intended for use with the Unturned Dedicated Server tool.
**+connect**: Connect to a server, in the format of ``+connect <ip address>:<port>``.
**-Cinematic**: Turns off many level-of-detail optimizations. This has a significant performance cost.
Effects include:
- 4 km draw distance and sun shadow range.
- LOD groups always show their highest quality. (High LOD bias.)
- Lights are always visible. (Turns off light LODs.)
- Objects and resources are always visible. (No landmarks or culling volumes.)
- Terrains always use splatmap shaders. (No basemap fallback texture.)
- Terrains always use max-quality heightmaps. (No mesh simplification.)
- Sun shadowmaps use GPU max supported resolution. (16,384 x 16,384 on some modern GPUs.)
- Planar reflections render at 100% resolution. (Rather than 50%.)
**-DisableCullingVolumes**: Disable object culling distance overrides. Please refer to :ref:`Manual Object Culling <doc_mapping_culling>` for more details.
**-DisableLightLODs**: Disable fadeout of dynamic lights. Could be useful for high-quality screenshots.
**-EnableCharacterControllerOverlapRecovery**: When enabled, ``CharacterControllerExtension.CheckedMove`` passes through to ``CharacterController.Move``, and ``CharacterController.enableOverlapRecovery = true``. Using this can improve performance – which can be useful for servers – but it makes out-of-bounds exploits much easier. This can cause more problems than it solves so it's not enabled by default.
**-EnableWheeledVehicleGizmos**: Draw locally driven vehicle's wheel torque, RPM, slip, expected RPM, etc.
**-FullscreenMode=**: Window mode override.
**-FallbackGizmos**: Use 3D Unity line renderer component for debug visualization rather than pixel-perfect lines. Performance with these is lower than the default, so only intended for cases where the default is unimplemented.
**-FarClipDistance** *float*: [16.0, 2048.0] overrides the maximum draw distance in the graphics menu. By default the lowest max draw distance is 614.4 meters which is slightly higher than the network distance of 512.0 meters. Useful for players who are willing to gain performance at a significant gameplay disadvantage.
**-ForceTrustClient**: Disables movement validation (e.g., position difference between ticks matches speed) for vehicles. Using this is not recommended! It is easier for cheaters to fly cars with movement limits disabled. This flag should eventually be removed when(/if) vehicle movement is made server authoritative.
**-FrameRateLimit=** *int*: Overrides the frame rate limit specified in the display menu. Negative values disable the limit. Useful if game is running at thousands of FPS on the loading screen and overheats.
**-GameSense**: GameSense integration.
**-Glazier=** *enum* (``IMGUI``, ``UIToolkit``): Use a different UI system instead of the default uGUI. Accepted values are ``IMGUI`` (legacy) and ``UIToolkit`` (experimental). For more information, refer to: :ref:`doc_glazier`.
**-h** *int*: Alias of ``-height``.
**-height** *int*: Override in-game resolution height.
**-Holiday=** *enum* (``AprilFools``, ``Christmas``, ``Halloween``, ``HW``, ``PrideMonth``, ``Valentines``, ``XMAS``, ``LunarNewYear``, ``LNY``, ``UnturnedAnniversary``): Override the active holiday.
**-HostPlayerLimit=** *int*: Clamps max number of players to this number. Useful for hosting providers.
**-LegacyConsole**: Use the legacy console rather than the default threaded console.
**-LogAssemblyResolve**: Log when the resolution of an assembly fails. Useful when working with non-Rocket plugins.
**-LogBadMessages**: Log when the game ignores a network message, including from whom. This is only recommended if trying to narrow down whether a connection is trying to waste time on the game thread by potentially exploiting something. By default the server automatically disconnects clients that are sending invalid messages, whereas the instances logged by this option could potentially be false positives.
**-LogBallisticDropConversion**: Log automatic change of older gun assets' Ballistic_Drop property to Bullet_Gravity_Multiplier. Useful when manually updating older guns to the new property.
**-LogGunSpreadConversion**: Log automatic change of older gun assets' Spread_Hip property to Spread_Angle_Degrees. Useful when manually updating older guns to the new property.
**-LogLevelBatchingTextureAtlasExclusions**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.
**-LogSpawnTablesAfterLoadingLevel**: Log all spawn chances.
**-LogVehicleWheelConfigurations**: Log automatic creation of vehicle asset's ``WheelConfigurations`` property for older vehicles. Useful when converting vehicles to the new format.
**-ModulesPath** *string*: If set, search for ``.dll`` and ``.module`` files in this directory instead of in ``Unturned/Modules``.
**-NetTransport=** *enum* (``SteamNetworking``, ``SteamNetworkingSockets``): SteamNetworkingSockets was used to enable the `ISteamNetworkingSockets <https://partner.steamgames.com/doc/api/ISteamNetworkingSockets>`_ networking API, but this has since become default. SteamNetworking can be used to revert to the older, deprecated `ISteamNetworking <https://partner.steamgames.com/doc/api/ISteamNetworking>`_ networking API.
**-NoDefaultLog**: Disables log file creation unless a plugin calls setLogFilePath.
**-NoDeferAssets**: Disable the deferring of loading vehicles and level objects until map load time, and instead load on startup.
**-NoPreserveMissingObjects**: By default, the level editor keeps objects and foliage whose assets are missing. If this option is enabled, any missing assets are deleted instead.
**-NoSteamTextFiltering**: Disable Steam text filter, and instead revert to the old naïve filter.
**-NoWorkshopSubscriptions**: Disable loading of all Steam Workshop subscriptions. This can be helpful when troubleshooting issues.
**-OfflineOnly**: Disables requests to the internet. For LAN servers, it skips the Steam backend connection and uses locally-cached Workshop items.
**-ParseAssetMetadata**: Enables parsing asset file metadata like comments and line numbers. Useful for development (e.g., error messages) at the cost of slower loading and increased memory usage. Plugin developers building on this feature may be interested in :ref:`doc_dat_editing_code`.
**-PreviewLevelBatchingTextureAtlas**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.
**-PreviewLevelBatchingUniqueMaterials**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.
**-RazerChroma**: Enable Razer Chroma integration on compatible devices.
**-RefreshRate=**: Monitor refresh rate override.
.. _doc_launch_options:resaveassets:
**-ResaveAssets**: Danger! Only use this if you have a backup of your custom assets, ideally in version control. Here be dragons:
Depends on the **-ParseAssetMetadata** launch option also being enabled.
This is our first experiment with automatically patching asset files. It will attempt to preserve comments and line numbers in your files (this is why asset metadata is needed). However, certain comments may not be preserved. In particular, comments with blank lines surrounding them.
At the time of writing (2025-05-06) the game will convert blueprints from the legacy (Blueprint_*** prefix) format to newer list-based format. It cannot yet auto-convert blueprints with NPC conditions or rewards because we haven't written conversion code for those yet, but it's on our wishlist.
**-ResetSteamStatsAndAchievements**: Reset all progress on Steam achievements and stats.
**-SkipAssets**: Disable loading asset bundles and Workshop content. This is useful for quickly iterating on serverside code.
**-ScrollViewSensitivity** *float*: Multiplier for uGUI scroll view distance travelled when rolling the mouse wheel.
**-TimeOverlay**: Show seconds since startup under FPS in the upper-left corner.
**-ui_scale**: UI scale override. A common usage is to set UI scale back to its default scaling, with ``-ui_scale 1``.
**-UnlockSteamAchievements**: Unlocks all Steam achievements. This is intended for achievement hunters who've moved on from the game but want to maintain their previous 100% completion status.
**-UnredactedLogs**: By default, player IPs in BattlEye's logging and the public IP for Workshop downloads are redacted. This option turns that off.
**-UseLevelBatching** *bool*: Overrides whether level batching can be enabled. Per-level support for level batching is still required. For example ``-UseLevelBatching=false`` disables it. Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.
**-ValidateAssets**: Perform :ref:`additional health checks <doc_asset_validation>` on assets during start-up.
**-ValidateLevelBatchingUVs**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.
**-w** *int*: Alias of ``-width``.
**-width** *int*: Override in-game resolution width.
Unity Options
-------------
Unity's built-in command-line arguments take priority over *Unturned*'s equivalents. Some of the more relevant Unity arguments are mentioned below, but the rest can be found in the `Unity User Manual <https://docs.unity3d.com/2019.4/Documentation/Manual/PlayerCommandLineArguments.html>`_.
**-batchmode**: Run in batch mode.
**-force-glcore**: Force OpenGL.
**-force-vulkan**: Force Vulkan.
**-nographics**: Do not initialize the graphics device when running in batch mode.
================================================
FILE: about/steam-workshop.rst
================================================
.. _doc_steam_workshop:
Steam Workshop
==============
The **Steam Workshop** allows for sharing user-generated content (such as new maps, items, localizations, and other in-game content). This type of content is typically known as a *mod*, or *modification*. Players can download mods by clicking the Subscribe button on the detail page for the item.
Players can start exploring the Steam Workshop from its `Home page <https://steamcommunity.com/app/304930/workshop/>`_, or learn more about the features utilized by *Unturned* from the `About page <https://steamcommunity.com/workshop/about/?appid=304930>`_.
Browsing
--------
There are several tabs and additional filters in the Steam Workshop, to help players find the type of user-generated content they are interested in.
Content under the `Mods <https://steamcommunity.com/workshop/browse/?appid=304930§ion=readytouseitems>`_ tab can be downloaded by clicking the "Subscribe" button. This content will then be available the next time you launch the game. Some mods may conflict with each other, or may not be compatible with the latest version of the game. We recommend reading the description for each mod you are interested in, in case the mod author has included helpful information.
Content under the `Stockpile Submissions <https://steamcommunity.com/workshop/browse/?appid=304930§ion=mtxitems>`_ tab cannot be downloaded. Instead, we may incorporate some of these submissions—such as new skins or cosmetics—into the actual game. Players can vote on whether they would like to see a specific submission added into the game. Accepted items may be made available for purchase, or otherwise be unlockable within the game.
The `Collections <https://steamcommunity.com/workshop/browse/?appid=304930§ion=collections>`_ tab contains groups of mods, which can be quickly and easily downloaded together. These are sometimes referred to as *modpacks*. For example, you may find a collection that adds several medieval-themed mods that are all compatible with each other.
Creating Mods
-------------
Refer to ":ref:`doc_getting_started`" for more information about what tools are needed to create mods. Afterwards, documentation for individual types of content can be found later on in the documentation.
Publishing Mods
---------------
When you are ready to publish your mod, launch the game and navigate to Workshop tab of the main menu. Click the "Submit" button to begin the submission process.
You will see the following fields when attempting to publish a mod:
#. | **Name** – This will be displayed in the Steam Workshop, and some other locations, as the name of your mod.
#. | **Collection Path** – Specify a valid file path to a folder containing your mod. For example, to upload a map you would copy your map's folder into a new folder, and then provide the path to that new folder in this field.
#. | **Preview Image** – Specify a valid path to a .PNG or .JPG file, which will be used as the preview image for your mod. This is displayed in the Steam Workshop, and some other locations.
#. | **Change Note** – This is an optional field. When a change note is included, that text will be added to the "Change Notes" tab of your mod's Workshop page. We recommend using this field when updating your mod.
#. | **Asset Type** – Choose what type of mod you are uploading. Players will be able to filter for your mod based on its asset type. Some options have "sub-types", such as the specific item a skin is intended for.
#. | **Visibility** – This defines who can view your mod once it has been published. You will usually set this to "Public", so that other players can see and download your mod. Although the other options can be helpful if you want to make a few changes before making the mod public.
#. | **Allowed IPs** – This is an optional field. By including an IP address in this field, only the servers with that IP address will be able to automatically download and update the mod via the WorkshopDownloadConfig.json file available to dedicated servers. It is unlikely that you will want to use this field.
#. | **Workshop Section** – Choose which section this mod should be published under. "Ready-to-Use" should be used for mods that other players can immediately download and enjoy. "Curated" should be used for skins or cosmetics that other players can vote on, and we may choose to incorporate into the game.
Before you can publish any mods, you must have accepted the `Steam Subscriber Agreement and Supplemental Workshop Terms <https://steamcommunity.com/sharedfiles/workshoplegalagreement/?appid=304930>`_. If you have agreed to those terms, you will now be able to click the "Create" button and publish your mod.
Updating Mods
-------------
Mods can be updated from the same interface used for publishing mods.
Fill in the fields similar to before. We recommend including information about your update in the "Change Note" field. Note that the "Name" and "Preview Image" fields can be left blank while updating, which will leave them unchanged.
Once the fields have been filled out, select an existing upload from the list of your published mods at the bottom. Your mod will begin updating.
================================================
FILE: assets/airdrop-asset.rst
================================================
.. _doc_assets_airdrop:
Airdrop Assets
==============
Overrides the care package model seen falling from the dropship, as well as the barricade spawned when it lands on the ground. Referenced by the :ref:`Level Asset <doc_assets_level>`.
**Type** *string*: ``SDG.Unturned.AirdropAsset``
**Landed_Barricade** :ref:`Asset Pointer <doc_data_assetptr>`: Barricade item storage asset. Pivot point of the spawned barricade matches the pivot point of the care package as it hit the ground.
**Carepackage_Prefab** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Model to spawn falling.
================================================
FILE: assets/animal-asset.rst
================================================
.. _doc_assets_animal:
Animal Assets
=============
**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.
**Type** *enum* (``Animal``)
**ID** *uint16*: Must be a unique identifier.
Animal Properties
-----------------
**Health** *uint16*: Total health value.
**Regen** *float*: How often health should be regenerated, in seconds. After the specified amount of time passes, the animal regains 1 health. Defaults to 10 seconds.
**Damage** *byte*: Damage dealt to the player per attack.
**Behaviour** *enum* (``Defense``, ``Offense``, ``Ignore``): AI behavior type. Defense AI will run away when alerted, Offense AI will attack when alerted, and Ignore AI will run away when attacked.
**Speed_Run** *float*: Running speed in m/s.
**Speed_Walk** *float*: Walking speed in m/s.
**Horizontal\_Attack\_Range** *float*: Maximum attack range on the horizontal plane. Defaults to 2.25 meters.
**Horizontal\_Vehicle\_Attack\_Range** *float*: Maximum attack range on the horizontal plane, when the target is inside a vehicle. Defaults to 4.4 meters squared.
**Vertical\_Attack\_Range** *float*: Maximum vertical attack range. Defaults to 2 meters.
**Attack\_Interval** *float*: Minimum seconds between attacks. Defaults to one second. If the attack duration is longer than the attack interval then the attack duration is used instead.
**Roars** *int*: Total number of roar sounds in Unity. A roar sound is played when the animal attacks.
**Panics** *int*: Total number of panic sounds in Unity. A panic sound is played when the animal is startled.
**Should_Prevent_Move_During_Startle** *bool*: If true, animal won't start moving until startle animation finishes. Defaults to false.
**Attack\_Anim\_Variants** *int*: Total number of attack animations in Unity. Defaults to 1.
**Eat\_Anim\_Variants** *int*: Total number of eat animations in Unity. Defaults to 1.
**Glance\_Anim\_Variants** *int*: Total number of glance animations in Unity. Defaults to 2.
**Startle\_Anim\_Variants** *int*: Total number of startle animations in Unity. Defaults to 1.
**Should\_Play\_Anims\_On\_Dedicated\_Server** *bool*: If animations are needed on the server, such as due to having complicated triggers tied to the attack animations. Defaults to false.
Drops
-----
**Reward_ID** *uint16*: ID of the item spawn table to use.
**Reward_XP** *uint*: Amount of experience to reward.
**Reward_Min** *byte*: Minimum amount of item drops to reward. Defaults to 3.
**Reward_Max** *byte*: Maximum amount of item drops to reward. Defaults to 4.
**Meat** *uint16*: ID of item to spawn when animal is killed. Deprecated in favor of Reward_ID.
**Pelt** *uint16*: ID of item to spawn when animal is killed. Deprecated in favor of Reward_ID.
Localization
------------
**Name** *string*: Animal name in user interfaces.
================================================
FILE: assets/animation.rst
================================================
.. _doc_assets_animation:
Animation
=========
Unturned's character rig is terrible – so using existing animations is recommended for your sanity.
Export
------
1. Ensure scene unit system is metric with unit scale set to 1.0 and length set to meters.
2. Select the Skeleton node.
3. File > Export > FBX
4. Selected Objects: True
5. Apply Scale: FBX Units Scale
6. Add Leaf Bones: False
7. Primary Bone Axis: +X
8. Secondary Bone Axis: -Y
Note that the Item.prefab from Unity is attached to the left or right hook with a local rotation of (0, 0, 90).
================================================
FILE: assets/asset-bundle-custom-data.rst
================================================
.. _doc_asset_bundle_custom_data:
Asset Bundle Custom Data
========================
Unity ``ScriptableObject`` which can optionally be created in a :ref:`Master Bundle's <doc_asset_bundles>` root for Unturned-specific asset bundle metadata.
``Owner Workshop File Id`` *uint64*: ID of a file published to the Steam Workshop. If Unturned is loading this asset bundle from a Steam workshop file but the file ID does not match then loading will be canceled. Prevents the asset bundle from being easily copied/stolen.
How to Set Owner Workshop File
------------------------------
1. Within the Unity project window find your master bundle's root folder. This is the same as the Asset_Prefix specified in your MasterBundle.dat file. For example Hawaii's root folder is Assets/HawaiiMasterBundle.
2. Create the ``AssetBundleCustomData`` object by Right Clicking > Create > Unturned > Asset Bundle Custom Data
3. Find your workshop file's ID. This is the number after ``https://steamcommunity.com/sharedfiles/filedetails/?id=`` in the URL of your workshop file's page.
4. Set ``Owner Workshop File Id`` to match your workshop file's ID.
5. (optional) Check that Unturned is finding the custom data by looking for "Loaded (your asset bundle name) custom data from (path)" in the log file, or "Tried loading (your asset bundle name) optional custom data from (path)" in the case it is not found.
================================================
FILE: assets/asset-bundles.rst
================================================
.. _doc_asset_bundles:
Asset Bundles
=============
The game loads textures, audio, meshes, prefabs, etc. from **Unity Asset Bundles** at runtime. How these are setup and used has evolved over the years from individual
\*.unity3d bundles to
\*.content bundles to
\*.masterbundle files.
:ref:`Master bundles <doc_asset_bundles:master_bundles>` should be used for essentially all new projects.
Tool Setup
----------
Prior to using any of these tools they must be imported into a Unity project
#. Inside Unity open the Assets > Import Package > Custom Package... wizard.
#. Find the Unturned installation directory.
#. Navigate to the Extras/Sources directory.
#. Import the Project.unitypackage.
.. _doc_asset_bundles:master_bundles:
Master Bundles
--------------
Master bundles are the most efficient way for your assets to be packaged and distributed. They should be used for essentially any project that you plan to share with other players.
There are only a few asset types that are unsupported by master bundles.
File Setup
``````````
Master bundles can be loaded from any directory the game loads \*.dat files from. Unless an override is specified, the nearest master bundle in the file hierarchy is used. While loading each directory is checked for a MasterBundle.dat file signalling the presence of a master bundle. For example, refer to the core.masterbundle in the Bundles directory.
MasterBundle.dat can set the following keys:
.. code-block:: unturneddat
// Name of asset bundle file in the same directory as MasterBundle.dat.
Asset_Bundle_Name core.masterbundle
// Path to the asset bundle within Unity.
// Unity subfolders should match 1:1 with dat subfolders.
Asset_Prefix Assets/CoreMasterBundle
// Version 3 is Unity 2018.4 LTS. Older versions have shader consolidation enabled for backwards compatibility.
Asset_Bundle_Version 3
Individual asset \*.dats can set the following keys:
.. code-block:: unturneddat
// Name of master bundle to load files from.
Master_Bundle_Override core.masterbundle
// If included, look for an individual *.unity3d asset bundle instead.
Exclude_From_Master_Bundle
// Path within master bundle to load files from.
// Used by notes to share a common object prefab.
Bundle_Override_Path /Objects/Medium/Furniture/Note
// If true, path within master bundle appends asset file name as subdirectory.
// For example:
// Guns/Eaglefire.asset → Guns/Eaglefire/Item.prefab
Bundle_Path_Include_Filename true
Tool Usage
``````````
1. Follow *Tool Setup* instructions.
2. Open the tool from the Window > Unturned > Master Bundle Tool menu.
3. Select directories of assets in the Project window.
4. In the Inspector window tag them in any asset bundle.
5. Click the checkbox next to an asset bundle's name in the tool to mark it as a master bundle. This filters the list of asset bundles to show, and tracks an export path associated with it.
6. Click the ... to choose a destination for the bundle file.
7. Click Export.
8. (optional) When redistributing the asset bundle the "multiplatform" toggle should be enabled. This ensures the appropriate shaders for each platform are included, and exports a ".hash" file so the server can validate client asset bundle integrity.
Motivations
```````````
When upgrading to Unity 2017.4 LTS it became apparent that all asset bundles would have to be re-exported from Unity due to shader compatibility changes. This would be an incredible amount of files, so it was time to re-approach the \*.content issue in a way that could quickly convert all existing content. This was handled by keeping the file hierarchy 1:1 and guessing the file extension for the by-name loading.
Individual Asset Bundles
------------------------
Most official files have transitioned to the master bundle system, but some use individual asset bundles (\*.unity3d). For example:
- Per-map road textures.
- Colors used by charts.
- Level ambience.
Tool Usage
``````````
1. Follow *Tool Setup* instructions.
2. Open the tool from the Window > Unturned > Bundle Tool menu.
3. Select individual assets or directories of assets in the Project window.
4. Click Grab to preview which assets will be exported.
5. Click Bundle to choose a destination for the asset bundle file.
Motivations
```````````
When beginning development of 3.0, it was key to support runtime loading of custom modded content. At the time files in asset bundles were loaded by name without extension, so each game type looked for specific names like "Item", "Object", "Animal", etc. The .unity3d extension was chosen for web browser compatibility. Obviously this system did not age well.
Content Bundles (\*.content)
----------------------------
.. deprecated:: 3.22.4.0
This format was historically used by terrain, material palettes, and radio songs. After the April 23, 2021 patch (version 3.21.15.0) these assets can all use master bundles instead. As of the February 25, 2022 patch (version 3.22.4.0) any remaining support for content bundles has been removed. New references should use a master bundle name and relative path for the "Name" and "Path" properties.
Reusing Content Bundles
```````````````````````
Although it is preferable to properly migrate older assets into master bundles, preexisting content bundles can be easily reused as a master bundle. Rename the
\*.content file to be
\*.masterbundle file instead. Then, add a corresponding MasterBundle.dat file as described in the file setup for master bundles.
================================================
FILE: assets/asset-definitions.rst
================================================
.. _doc_asset_definitions:
Asset Definitions
=================
Unturned **asset definitions** associate game data with Unity asset bundles. They are stored in ``.dat`` or ``.asset`` files.
For information about the file format please refer to :ref:`Data File Format <doc_data_file_format>`.
Header
------
Each asset has a common ``GUID`` and ``Type`` header:
**GUID** :ref:`GUID <doc_data_guid>`: Unique ID used to link assets together. If left empty the game will prepend a newly generated GUID during startup.
**Type** *string*: Specific guides will list individual type names. This determines which keys the game will read. It can also be set to the fully qualified name of any class in any module.
.. note::
``Type`` and ``GUID`` can either be specified in the root dictionary (default), or in a ``Metadata`` sub-dictionary. For example this is valid as well:
.. code-block:: text
Metadata
{
GUID 7e4b847061b64272b42ea8869fd053c7
Type SDG.Unturned.Asset
}
If ``GUID`` is specified in the ``Metadata`` sub-dictionary the game cannot (as of 2023-04-13) automatically prepend a newly generated one during startup.
Body
----
The body contains any class properties. Individual asset type documentation elaborates on these.
**ID** *uint16*: 16-bit identifier. Unfortunately this ID must be unique within each category of assets (vehicles, items, animals, etc). Objects are the exception from this legacy restriction because they have been upgraded to fully use GUIDs.
Optionally the body properties can be placed into an ``Asset`` sub-dictionary. For example:
.. code-block:: text
GUID [...]
Type [...]
Asset
{
ID [...]
Key1 Value
Key2 Value
}
Is equivalent to:
.. code-block:: text
GUID [...]
Type [...]
ID [...]
Key1 Value
Key2 Value
Unity Asset Bundles
-------------------
Each Unturned asset is associated with a Unity asset bundle. If there is a master bundle in the file hierarchy that takes priority, otherwise a ``.unity3d`` bundle with the same name as the ``.dat`` file is used. There are several keys available to control the asset bundle:
**Asset_Bundle_Version** *int*: Indicates which version of Unity this ``.unity3d`` bundle was built for. When Unturned upgrades Unity versions it tries to maintain backwards compatibility based on this number. ``1`` is Unity 5.5, ``2`` is 2017.4 LTS, and ``3`` is 2018 LTS and 2019 LTS, ``4`` is 2020 LTS, ``5`` is 2021 LTS, and ``6`` is latest (Unity 2022 LTS).
**Master_Bundle_Override** *string*: Name of a master bundle to use rather than the ``.unity3d`` bundle or master bundle found in the hierarchy.
**Exclude_From_Master_Bundle** *string*: If this key exists the asset will look for a ``.unity3d`` bundle instead of the hierarchy.
**Bundle_Override_Path** *string*: Path within the master bundle to load rather than this asset's file path.
Localization
------------
Each asset looks for a localization ``.dat`` file in the same directory based on the current language. For example: ``English.dat`` or ``French.dat``.
Loading Order
-------------
When scanning a folder for assets the game checks in this order:
1. Is there a ``.asset`` file with the same name as the folder? e.g. Eaglefire.asset in the Eaglefire folder
2. Is there a ``.dat`` file with the same name as the folder? e.g. Eaglefire.dat in the Eaglefire folder
3. Is there an ``Asset.dat`` file?
4. Otherwise, load all files with the ``.asset`` extension in the folder.
================================================
FILE: assets/asset-validation.rst
================================================
.. _doc_asset_validation:
Asset Validation
================
During startup the game runs fast basic health checks on assets while loading, but there are a variety of slower tests available. These can be enabled with the ``-ValidateAssets`` command-line flag. Errors are logged to the Client.log file, as well as to the Asset Errors menu.
**Navmesh Readable**: Object navmeshes should have the CPU Readable flag enabled in Unity. This is required for Recast to be able to generate the level navmesh.
**Mesh Readable**: Most non-navmesh meshes do not need to have the CPU Readable flag enabled in Unity. This is not currently enforced however, as the core content has lots of cases which still need cleaning up.
**Missing Meshes**: Mesh filters without a mesh, or mesh renderers without a mesh filter are found and logged.
**Mesh Vertex Counts**: Meshes with unusually high numbers of vertices are recommended to be optimized. Typically this is simply a matter of removing unused faces and vertices. Colliders have a lower recommended target because collision against complex meshes is slower than rendering complex meshes.
**Missing Materials**: Renderers without materials are found and logged. One exception to this is "DepthMask" renderers which are set by the game.
**Material Counts**: Renderers with high numbers of materials are recommended to be merged and simplified. Each individual material needs to be rendered separately (usually), so less materials is better. Good practice is to have one material for each render type on an object, i.e. a material for the opaque surfaces and a material for the transparent surfaces (if any).
**Texture Readable**: Most textures do not need to have the CPU Readable flag enabled in Unity. Disabling means a copy is not kept in RAM. One exception is shirt and pants textures which are layered on the CPU.
**Texture NPOT**: Most textures should have power-of-two dimensions, e.g. 1 x 2, 4 x 4, 64 x 32, etc. GPUs are best equipped for drawing these resolutions. Unity has import options for scaling up or down to the nearest power of two.
**Audio Samples**: Long audio clips with high frequencies are found and logged. Generally the clips are fairly small files.
================================================
FILE: assets/character-mesh-replacement.rst
================================================
.. _doc_character_mesh_replacement:
Character Mesh Replacement
==========================
The player's character mesh can be entirely replaced with a special :ref:`shirt item <doc_item_asset_shirt>`. There's an example CharacterMeshReplacementTest item (ID 1522), as well as example source files in the ExampleAssets.unitypackage under the Shirts directory.
Two limitations are that it must be a shirt because only shirts are loaded for first person (1P) views, and the 1P model should only contain the arms because the rest of the body is not animated.
Properties Reference
--------------------
* **Has_1P_Character_Mesh_Override**: true
* **Character_Mesh_3P_Override_LODs**: >0
* **Has_Character_Material_Override**: true
* **Hair_Visible**: true/false
* **Beard_Visible**: true/false
If ``Has_1P_Character_Mesh_Override`` is true then the game will try to load a prefab named "Character_Mesh_1P_Override_0". This should have a MeshFilter component with the first person arms replacement mesh.
If ``Character_Mesh_3P_Override_LODs`` is greater than zero then the game will try to load prefabs for each LOD index (e.g., Character_Mesh_3P_Override_0). These should have MeshFilter components for the third person replacement meshes.
If ``Has_Character_Material_Override`` is true then the game will try to load a material named "Character_Material_Override" to replace the 1P and 3P mesh materials. Without this, equipped shirt and pants textures will be used by default.
================================================
FILE: assets/crafting-asset.rst
================================================
.. _doc_assets_crafting:
Crafting Assets
===============
This asset defines blueprints outside of an item asset. This may be useful for organizational purposes or blueprints without a clear "owner" item. For example, if a blueprint has multiple inputs and outputs it might not make sense to include in a specific item asset.
**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.
**Type** ``SDG.Unturned.CraftingAsset``
Properties
----------
The same :ref:`Blueprints <doc_item_asset_blueprints>` property as items. However, only the V2 blueprints format is supported here.
================================================
FILE: assets/crafting-blacklist-asset.rst
================================================
.. _doc_assets_crafting_blacklist:
Crafting Blacklist Assets
=========================
Prevents specific items or blueprints from being used while crafting. They are hidden from the item quick actions menu and recipe list.
**Type** *string*: ``SDG.Unturned.CraftingBlacklistAsset``
**Input_Items** array of Item :ref:`Asset Pointers <doc_data_assetptr>`: Any blueprints consuming these items cannot be crafted. For example (blacklisted items are highlighted):
.. code-block:: unturnedasset
:linenos:
:emphasize-lines: 4, 7-10, 13-16
Input_Items
[
// Orange Hoodie
"GUID" "67c76cdf16024bf68b6e5d14d4c617ab"
// Individual items can also be enclosed in brackets { }
{
// Eaglefire
GUID b03d581a5c1a490f995f8deba57b0f17
}
// Jeans
dab78cc4d66645bfb8169be7c15cf876
55c69817a31448b685c7f788ec7d2d0c
bdae9d26ca704d729b2b0f34812d2a36
67a6ec52e4b24ffd89f75ceee0eb5179
]
**Output_Items** array of Item :ref:`Asset Pointers <doc_data_assetptr>`: Any blueprints generating these items cannot be crafted.
**Blueprints** array: Prevent specific individual blueprints from being crafted. Each entry has an ``Item`` :ref:`Asset Pointer <doc_data_assetptr>` and one of ``BlueprintName`` string or ``Blueprint`` index. For example, to prevent the Chef Hat from being salvaged:
.. code-block:: unturnedasset
Blueprints
[
{
Item a6099002318e4d58b8e59d431bcf1b8a
BlueprintName Salvage
}
]
.. note:: ``BlueprintName`` should be used instead of ``Blueprint`` (index) where possible because the index may change if the item's Blueprints list is reorganized. This requires specifying a ``Name`` in the blueprint, however.
**Allow_Core_Blueprints** *bool*: Defaults to ``true``. If ``false``, blueprints from the vanilla/built-in items are not allowed.
================================================
FILE: assets/curated-items.rst
================================================
.. _doc_curated_items:
Curated Items
=============
Community-created items (such as skins and cosmetics) can be submitted to the :ref:`doc_steam_workshop` for consideration to be incorporated into the actual game. These items can be found under the `Stockpile Submissions <https://steamcommunity.com/workshop/browse/?appid=304930§ion=mtxitems>`_ tab, where other players can vote on whether they would like to see a specific submission added into the game.
Accepted items may be made available for purchase, or otherwise be unlockable within the game. Most accepted items are sold in the `Stockpile <https://store.steampowered.com/itemstore/304930/>`_ (also known as the item store).
The default revenue share is 25%, but for items associated with maps (e.g., the `Elver Map Bundle <https://store.steampowered.com/itemstore/304930/detail/1103/>`_) the revenue share is 50%. Your own split of that revenue share may be lower when an item has multiple contributors – such as when your item was created by multiple people, or if your item is added as part of bundle that contains many different peoples' items.
Requirements
------------
For the tools necessary to start creating skins or cosmetics, refer to the :ref:`doc_getting_started` page. Some additional preparation is needed compared to creating mods:
#. Follow the submission guidelines.
#. Organize your Unity project.
#. Create your cosmetic or skin.
#. Specify a Mythical effect placement (if your item is a cosmetic).
#. Export a Unity package.
#. Submit your item to the :ref:`doc_steam_workshop`.
Guidelines
----------
.. |ico1| image:: /img/1e1e1e.png
:width: 15px
.. |ico2| image:: /img/f0f0f0.png
:width: 15px
Most of these guidelines are intended to help promote consistency with *Unturned*'s art style. Here are the guidelines you should keep in mind:
#. | Avoid high contrast colors. They're often painful to look at, especially when the item appears in harsh lighting.
#. | Do not go darker than |ico1| #1e1e1e or brighter than |ico2| #f0f0f0. Both extremes of brightness (and fully saturated colors) don't play nicely with the game's lighting. Most official content uses medium-intensity colors.
#. | Edges of clothing should have a slightly darker border that is one pixel wide. This can be easily seen on official clothing items, along the cuffs and bottom hem of shirts.
#. | Flat textures meant to blend into the terrain (e.g., similar to the in-game ghillie suit) should not be used. Instead, you can incorporated patterned camouflage into your items.
#. | Textures should be kept to a reasonable resolution. Ideally, 2048x2048 scaled down to 1024x1024 for large items (e.g., the Maplestrike), and 1024x1024 scaled down to 512x512 for small items (e.g., the Cobra).
#. | Avoid using high metallic or smoothness values. Unturned does not use reflection probes, and the only sources of metallic reflection data are limited to optional features like skybox reflections and screen-space reflections.
#. | Corners of models should not be beveled. Most models have sharp edges (e.g., 90°). There is not a hard limit on vertex, triangle, or polygon count because anything matching the game's art style will naturally have a reasonable number.
#. | Skins with custom models should generally respect the original item's silhouette. Be mindful that attachments (such as barrels, tacticals, sights, and grips) should still work on the custom model *and* look good.
#. | Cosmetics should avoid potentially confusing players. For example: if a hat looks like hair, it should have some additional accessory or detail to help distinguish it as a cosmetic. Otherwise, it would look like the player isn't wearing any item at all.
#. | Only submit content that you created yourself. Do not use copyrighted material or trademarks that you do not own or have permission to use.
#. | We do not support custom shaders, i.e., shaders not included in the vanilla game cannot be used.
#. | Unfortunately, physics do not play well with the Unturned character, and cannot be used on cosmetics at this time.
Remember: these are just guidelines. Except in specific cases (such as copyright infringement), we may occasionally accept items that break some of these guidelines. However, these are the things we are looking for in submissions. Sticking to these guidelines will help your chances of getting your item accepted.
Unity Project Organization
--------------------------
Organizing your project into two separate folders: one for your exported asset-bundled files (e.g., an ``Item.prefab``) and one for your imported sources (e.g., a ``.blend`` file) is greatly appreciated. This makes it much easier for us to ensure only the necessary assets are included in the game.
For reference: all of the base game's asset-bundled files are in the ``Assets/CoreMasterBundle`` folder, and all of the source files are in the ``Assets/Game/Sources`` folder.
Cosmetics
`````````
Some additional notes exist for organizing cosmetic items.
- | Map-related cosmetics are in per-map folders, and prefixed with the map's name. For example, Arid's "`Arrowhead <https://unturned.wiki.gg/wiki/Arrowhead>`_" exported files are located in ``Assets/CoreMasterBundle/Items/Arid/Arid_Arrowhead`` and the source files are in ``Assets/Game/Sources/Items/Arid``.
- | Outfits have their items in a per-outfit folder, and are prefixed with the outfit name. For example, the "`Cultist's Mask <https://unturned.wiki.gg/wiki/Cultist%27s_Mask>`_" exported files are in a per-outfit folder and prefixed with the outfit name. For example, the Cultist bundle's mask item export files are located in ``Assets/CoreMasterBundle/Items/Outfits/Cultist/Cultist_Mask`` and the source files are in ``Assets/Game/Sources/Items/Outfits/Cultist``.
- | Miscellaneous items are in the folder matching their type. For example, the "`Backpack Turtle <https://unturned.wiki.gg/wiki/Backpack_Turtle>`_" exported files are located in ``Assets/CoreMasterBundle/Items/Backpacks/Turtle_Backpack`` and the source files are in ``Assets/Game/Sources/Items/Backpacks/Turtle_Backpack``.
Exporting Unity Package
-----------------------
Since the assets for accepted cosmetics are included in the game's core asset bundle, a ``.unitypackage`` file is required along with the regular ``.dat`` files for items. To export the package:
#. Select the folders containing your ``Item.prefab`` files (or equivalent asset-bundled files for other types of items). For example, if we were submitting our official Fedora item then we would select the ``Assets/CoreMasterBundle/Items/Hats/Fedora`` folder.
#. Right-click in the **Project** window.
#. Click **Export Package...**.
#. Ensure **Include dependencies** is checked to include the source files that aren't directly placed in the asset bundles (i.e., the meshes, materials, textures, etc.).
.. note::
The Unity package is in *addition* to the regular asset ``.dat`` and ``English.dat`` files required for items to work. Including the ``.dat`` files from your setup is useful for keeping the accepted version consistent. While not strictly necessary, including a name and description in the English text file is appreciated and will probably be used.
Creating Cosmetics
------------------
In terms of setup, cosmetics are identical to actual in-game clothing items. The main difference between cosmetics and clothing is that the former does not offer any benefits to the player, appear over most worn clothing items, and can have their visibility toggled at will by the player.
Since these are otherwise identical, we recommend referencing the clothing items included in the ExampleAssets.unitypackage in order to create your cosmetic items.
Mythical Effect Placement
`````````````````````````
.. figure:: /img/EffectTransform.png
Example "Effect" transform positioning and orientation.
Most cosmetic items will want to support mythical effects. You will need to add an "Effect" child transform to both the Item.prefab and the clothing prefab (i.e., Backpack.prefab, Glasses.prefab, Hat.prefab, Mask.prefab, or Vest.prefab) for your item to support this.
The orientation is rather unfortunate: +Z is the mythical's up direction and +Y is the mythical's forward direction.
Creating Skins
--------------
Any item in *Unturned* could support skins, but not every item does at this time. We recommend only creating skins for items that are already skinnable. This includes most weapons, along with a few miscellaneous items such as Canned Beans and the Detonator. The unwrapped meshes are included as part of the ExampleAssets.unitypackage.
At the very least, you will want to create a custom albedo for your skin. You can also add custom metallic or emission textures. When eventually uploading your skin to the Steam Workshop, please make sure you follow the "Exporting Unity Package" steps to include your source files! This allows us to add any extra needed assets, or fix minor issues.
.. figure:: /img/FiestaAugewehrBundles.png
The Fiesta Augewehr skin includes all four types of materials.
Unless your skin includes a custom mesh (as detailed in a later section), your asset-bundled files will not include a prefab. Instead, skins will include the material(s) used by the item and any attachments attached to it.
- | **Primary**: The ``Skin_Primary.mat`` is the material used by the skinned item itself. Every skin should have a single primary material.
- | **Secondary**: Each ``Skin_Secondary_#.mat`` included in the bundle files is for a specific attachment (where the ``#`` is the attachment's legacy ID). Skins can have multiple secondary materials. When creating skins for sniper rifles, you will usually want to include at least one secondary material for a scope.
- | **Attachment**: The ``Skin_Attachment.mat`` (also called the "layered attachments material") is used when a secondary material has not been provided for an attachment that has texture masks. For example, the 8x Scope has its mount and knobs masked out.
- | **Tertiary**: The ``Skin_Tertiary.mat`` (also called the "fallback attachments materials") is used when none of the other included materials are applicable for an attached attachment. You will usually want to include a tertiary material if your skin has an attachments material.
.. figure:: /img/FallbackLayered.png
Notice how some parts of the 8x Scope retains some of its original texture when a Layered Attachments material is included, while the Fallback Attachments material completely covers it.
Although most skins keep their layered (Skin_Attachment.mat) and fallback (Skin_Tertiary.mat) textures identical, this is not required. Some skins have fairly different secondary, attachment, and tertiary materials. The Bloodsport Calling Card, Bouquet Bluntforce, and Vortex Augewehr are good examples of this.
Custom Models
`````````````
Skins can override an item's original model with a custom one. If you create a skin that does this, it's more likely to be accepted if your custom model still respects the original silhouette of the item. By extension, things like attachments and stat counters should still look good when attached to the item.
Setting this up in Unity is simple. Your asset-bundled files should include a ``Override_Mesh_#.prefab`` (where ``#`` is the LOD's index). For example, ``Override_Mesh_0.prefab``. This prefab simply includes a Mesh Filter component that is linked to your custom model.
Using Collections
-----------------
Collections allow for grouping multiple item submissions together, making it easier for users to discover and rate similar content when browsing the Steam Workshop. Creators often use collections to group skins that all share a similar pattern together.
Some creators may create collections when they want to showcase different versions of their item (e.g., palette swaps). While these *could* be combined into a single submission, having them separate allows for players to vote on the specific version(s) they would like to see accepted into the game.
Another way of using collections is to organize submissions that were designed to be used together. For example, a bunch of individual cosmetic items that would form a complete outfit. Creating a collection that contains each individual item allows players to vote on the specific item(s) they would like to see, and makes it easier for us to accept only a couple pieces from an outfit (e.g., when choosing items for a new box). You may also consider using an :ref:`OutfitAsset <doc_assets_outfit>` to create a preview image that can be used on the Workshop page for the outfit's collection or its related items.
================================================
FILE: assets/data-file-format.rst
================================================
.. _doc_data_file_format:
Data File Format
================
This article describes the syntax of Unturned's ``.dat`` and ``.asset`` files.
Each line is a key-value pair separated by a space. The key and/or value can optionally be in quotes. For example:
.. code-block:: unturneddat
Key1 First value
"Key2 in quotes" Second value
Key3 "Third value"
Will be parsed as:
.. code-block:: text
"Key1" = "First value"
"Key2 in quotes" = "Second value"
"Key3" = "Third value"
The only reason to quote a value is to enable comments on the same line. Quotation marks within a quoted key/value can be escaped with a ``\`` backslash. For example ``"a \"b\" c"`` is parsed with quotation marks around ``b``. Keys support quotes in case a space is required, but no keys in the vanilla game use spaces.
.. note::
Keys are case-insensitive. i.e., ``Use_Cool_Option true`` and ``UsE_cOoL_oPtIoN true`` are identical. Keys should be unique within their dictionary.
Acceptable values for a key will depend on their data type. Most—but not all—properties will use one of the :ref:`C# built-in types <doc_data_builtin_types>`.
Objects / Dictionaries
----------------------
Each series of key-value pairs is a dictionary (sometimes called an object). The top level of the file is treated as a dictionary, and child dictionaries can be added with ``{ }`` curly braces. Adding ``{`` on the line after a key opens a dictionary, and the matching ``}`` closes it.
In this example ``object1`` is a child dictionary in the root dictionary, and ``object2`` is a grand-child:
.. code-block:: unturneddat
object1
{
object2
{
key value
}
}
Arrays / Lists
--------------
Lists (sometimes called an array) can be added with ``[ ]`` square brackets. Adding ``[`` on the line after a key opens a list, and the matching ``]`` closes it.
In this example ``values`` is a list of strings:
.. code-block:: unturneddat
values
[
first value
second value
third value
]
Lists can also contain dictionaries as seen in this example:
.. code-block:: unturneddat
List_Of_Objects
[
{
x 1
y 2
}
{
x 3
y 4
}
]
.. note::
Many older asset properties predate the addition of lists. In these cases arrays/lists are typically handled by a key specifying the number of items, and then appending the index number to each element's key. For example:
.. code-block:: unturneddat
// Total number of elements in old-style list
Elements 2
// First element has an index of 0
Element_0 A
// Second element has an index of 1
Element_1 B
Comments
--------
Lines starting with ``//`` are comments, which means they are excluded from parsing. Comments can be useful for adding helpful, explanatory notes inside an asset. Comments can also be added to the end of a line if the value is quoted.
For example these comments are valid:
.. code-block:: unturneddat
// a comment
key1 value1
key2 "value2" // in-line comment
Whereas this comment will not be excluded from the value:
.. code-block:: unturneddat
key value // this is not treated as a comment because the value is not in quotes
FAQ (Frequently Asked Questions)
--------------------------------
**Q. How do I write a multi-line value?**
The ``\n`` escape sequence starts a new line. For example:
.. code-block:: unturneddat
Text First line\nSecond line
Will set the value of ``Text`` to:
.. code-block:: text
First line
Second line
**Q. How do I write an in-line comment after a value containing quotation marks?**
In-line comments require the value to enclosed in quotation marks, so quotation marks in the value must be escaped with ``\"``:
.. code-block:: unturneddat
// The parser will read the comment as part of the value because it doesn't know where the value ends.
Text Why use so-called "scare quotes" instead of /s? // Comment here
// The parser will exclude the comment from the value and replace the \" with quotation marks.
Text "Why use so-called \"scare quotes\" instead of /s?" // Comment here
**Q. Why can't I start a list or dictionary on the same line as a key?**
This is—unfortunately—not supported because it would break backwards compatibility with the oldest ``.dat`` files. Older files may have ``[`` or ``{`` as the first letter of a value.
As an example of the problem:
.. code-block:: text
SomeDictionary {
SomeList [
]
}
Instead, the opening ``[`` or ``{`` must be placed on the next line:
.. code-block:: unturneddat
SomeDictionary
{
SomeList
[
]
}
History
-------
Prior to the 3.23.6.0 update there were two sets of custom Unturned syntax: "v1" for ``.dat`` files, and "v2" for ``.asset`` files. Assets using v1 syntax only supported key-value pairs, whereas v2 introduced dictionaries, lists, and required keys/values to be quoted.
This is why ``{`` and ``[`` must be on a new line, as existing v1 assets may have ``{`` or ``[`` as the first character of a value.
================================================
FILE: assets/effect-asset.rst
================================================
.. _doc_assets_effect:
Effect Assets
=============
**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.
**Type** *enum* (``Effect``)
**ID** *uint16*: Must be a unique identifier.
General data
------------
**Blast** *uint16* or *GUID*: ID or GUID of effect.
**Lifetime** *float*: Duration of the effect.
**Lifetime_Spread** *float*: Variation on the duration of the effect. A random value is chosen between the specified spread value, and the negative of that spread value. Default is 4 seconds.
**Gore** *bool*: Effect is hidden when gore is disabled.
**OneShotAudio** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: AudioClip or OneShotAudioDefinition to play alongside effect. Useful for audio-only effects, in which case Effect prefab is unnecessary and can be excluded.
**Static** *flag*: Disable randomized audio pitch change.
**Randomize_Rotation** *bool*: Rolls the effect around the hit axis. Defaults to true.
**Spawn_On_Dedicated_Server** *flag*: Spawn effect on server.
**Relevant_Distance** *float*: How far away players can be before an asset effect should not be sent to them, measured in meters. Players within this radius will be sent the effect in multiplayer.
**Preload** *byte*: Total number of the effect to pre-instantiate in the effect pool to reduce hitching when first used.
**Is_Music** *bool*: Placeholder to disable music when used in an ambiance volume if music option is disabled. Once the audio settings menu is separated out there will be a volume multiplier for music.
Camera shake
------------
**CameraShake_MagnitudeDegrees** *float*: The amount of camera shake inflicted upon affected players, in degrees.
**CameraShake_Radius** *float*: Players within the radius around the effect are affected by other camera shake properties.
Splatters
---------
**Splatter** *int*: Total number of splatter textures in Unity.
**Splatters** *int*: Total number of splatters to spawn.
**Splatter_Lifetime** *float*: Duration of the splatter.
**Splatter_Lifetime_Spread** *float*: Variation on the duration of each individual splatter after effect spawn. A random value is chosen between the specified spread value, and the negative of that spread value. Default is 1 second.
**Splatter_Liquid** *flag*: Splatters are visible regardless of effect graphics settings being disabled, and slightly changes the direction of each splatter.
**Splatter_Temperature** *enum* (``Acid``, ``Burning``, ``Warm``): Temperature status effect caused when standing in the effect.
**Splatter_Preload** *byte*: Total number of the splatter effects to pre-instantiate in the effect pool to reduce hitching when first used.
================================================
FILE: assets/foliage-asset.rst
================================================
.. _doc_assets_foliage:
Foliage Assets
==============
There are sub-types of foliage asset for different uses, most notably instanced meshes (grass, pebbles) and resources (trees). Unlike the older system, tree baking cannot be configured directly within the level editor yet, but there are two benefits to separating baking settings from the trees themselves:
1. Different biomes or levels can use the same trees with different parameters. For example a dense forest material with less dense forest surrounding it, or using tree assets from a different map with custom configuration.
2. Eventually the resource system should be converted into a regular objects (this will be automatic) but most objects do not need foliage parameters.
FoliageResourceInfoAsset Properties Reference
---------------------------------------------
**Type** *string*: ``SDG.Framework.Foliage.FoliageResourceInfoAsset``
**Resource** :ref:`Asset Pointer <doc_data_assetptr>`: actual tree to spawn.
**Obstruction_Radius** *float*: spawn position is invalid if a sphere with this radius overlaps anything.
**Density** *float*: this value is poorly named. One tree will try to spawn per this many square meters. For example a value of 4 will spawn approximately once per 2m x 2m area.
**Min_Weight** *float*: [0, 1] only spawn if landscape material weight is greater than this value.
**Max_Weight** *float*: [0, 1] only spawn if landscape material weight is less than this value.
**Min_Angle** *float*: [0, 90] degrees only spawn if surface angle is greater than this value. For example a boulder only spawning on slopes steeper than 45 degrees.
**Max_Angle** *float*: [0, 90] degrees only spawn if surface angle is less than this value. For example a tree not growing on slopes steeper than 30 degrees.
**Uniform_Scale** *bool*: If true, max and min scale are floats rather than vector3. This enables an optimization for instanced mesh foliage (like grass), packing more instances per batch.
Upgrade Devkit Foliage from V1 to V2
------------------------------------
.. note::
Maps with auto-converted terrain from the 3.22.8.0 update will have already been converted to V2.
V1 of devkit foliage saved each small, individual region into their own files, which made maps slow to copy, download, and install. V2 fixes this by storing pointers for each region into a single file, at the cost of RAM in the map editor.
Following the 3.22.20.0 update, maps using v1 foliage will automatically update to v2 the next time they are saved, without needing to use the ``-SaveFoliageUsingV2`` command-line argument. The older v1 foliage files are still kept in the map's Foliage directory as a backup. These v1 files can be manually removed after having converted to v2, in order to free up space.
================================================
FILE: assets/layers.rst
================================================
.. _doc_assets_layers:
Layers
======
Upfront: obviously Unturned makes poor use of Unity's Layers. This document exists as much for my personal reference as yours. My only defense is that these layers are entrenched from the earliest versions back in 2013, when I was 15 or 16.
Overview
--------
Built-in Layers
- **0 Default**
- **1 TransparentFX**
- **2 Ignore Raycast**
- **4 Water**: ocean and water tiles.
- **5 UI**: menus with :ref:`uGUI glazier <doc_glazier>` as well as plugin custom menus.
User Layers
- **8 Logic**: Clickable overlays like the position, rotation and scale handles. Editor debug visuals that can be seen through walls are on this layer.
- **9 Player**: Character capsule (not body hitboxes). Exists for all players server-side, but only the local player client-side.
- **10 Enemy**: Player body hitboxes.
- **11 Viewmodel**: Local first-person arms and weapon.
- **12 Debris**: Typically small simulated objects like ragdolls, grenades, falling tree trunks, destroyed structures, and fragmented objects.
- **13 Item**: Dropped interactable items.
- **14 Resource**: Trees and boulders. Barricades attached to vehicles are moved to this layer.
- **15 Large**: Large props placed in the level editor.
- **16 Medium**: Medium props placed in the level editor.
- **17 Small**: Small props without collision placed in the level editor.
- **18 Sky**: Distant effects without collision like the clouds and stars.
- **19 Environment**: Roads, grass and pebbles.
- **20 Ground**: Landscape / terrain.
- **21 Clip**: Invisible collision.
- **22 Navmesh**: Invisible zombie-only collision. Navmesh graphs are generated from this collision, but the collision is also loaded on the server to help push zombies around.
- **23 Entity**: Zombie and animal body hitboxes.
- **24 Agent**: Zombie and animal character capsules (not body hitboxes).
- **25 Ladder**: Invisible climbable trigger.
- **26 Vehicle**: All vehicle colliders.
- **27 Barricade**: Barricade item placed in the world. Barricades attached to vehicles are moved to the Resource layer.
- **28 Structure**: Structure item placed in the world.
- **29 Tire**: Wheel colliders. Allows wheels to mask what they collide with.
- **30 Trap**: Typically trigger colliders including rocket launcher projectiles and kill volumes.
- **31 Ground2**: No longer used after old maps were converted to terrain tiles. Previously this was for out-of-bounds terrain. Reserved for future use.
Layer Collision Matrix
----------------------
Note that these comments do **NOT** apply to collision queries like raycasts, spherecasts, etc.
No physics collision:
- **Default**
- **TransparentFX**
- **Ignore Raycast**
- **Water**
- **UI**
- **Logic**
- **Enemy**
- **Viewmodel**
- **Small**
- **Sky**
- **Environment**
- **Ground**
- **Entity**
- **Ladder**
- **Ground2**
Has physics collision:
- **Player**: Character controller layer is used by Unity as the underlying query mask.
- **Debris**
- **Item**
- **Resource**
- **Large**
- **Medium**
- **Environment**
- **Ground**
- **Clip**: Collides with Player and Vehicle for its original purpose. Makeshift vehicles have invisible colliders on this layer to expand their simulation size without affecting barricade placement, so Clip also collides with some of the same layers as Vehicle.
- **Navmesh**
- **Agent**: Character controller layer is used by Unity as the underlying query mask.
- **Vehicle**
- **Barricade**
- **Structure**
- **Tire**: Wheel collider layer is used by Unity as the underlying query mask.
- **Trap**
================================================
FILE: assets/level-asset.rst
================================================
.. _doc_assets_level:
Level Assets
============
Each map can be associated with a **Level Asset**. These assets contain gameplay information not necessary for the main menus. Refer to :ref:`Level Config <doc_mapping_config>` for information on linking a level asset to a map.
For examples, check the ``Assets/Levels`` directory.
**Type** *string*: ``SDG.Unturned.LevelAsset``
**Dropship** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Overrides the model seen flying over the map when a care package is dropped.
**Airdrop** :ref:`Asset Pointer <doc_data_assetptr>`: Asset pointer to an :ref:`Airdrop Asset <doc_assets_airdrop>`. Overrides the falling care package model.
**Crafting_Blacklists** array of :ref:`Asset Pointers <doc_data_assetptr>`: Asset pointers to :ref:`Crafting Blacklist(s) <doc_assets_crafting_blacklist>`. Prevents specific items or blueprints from being used while crafting in the level.
**Min_Stealth_Radius** *float*: Player stealth skill level cannot reduce minimum detection distance below this value.
**Weather_Types** *array*: Determines which weather can occur naturally. Refer to schedulable weather properties. If weather is using legacy weather the default rain and snow will be included.
**Perpetual_Weather_Asset** :ref:`Asset Pointer <doc_data_assetptr>`: Asset pointer to a :ref:`Weather Asset <doc_assets_weather>`. Overrides weather scheduling.
**Global_Weather_Mask** :ref:`u32 Mask <doc_data_bitmask>`: Fallback weather mask while player is not inside an ambience volume. Defaults to 0xFFFFFFFF.
**Skills** *array*: Overrides skill default and max levels. Refer to skill rule properties.
**Skillset_Loadouts** *dictionary*: Overrides per-skillset starting items. Can be used to prevent skillset default items in singleplayer. Server "Loadout" command takes priority over this option. Please refer to Skillset Loadout properties below for more details.
**TerrainColors** *array*: Specifies which colors are too similar to terrain colors. Please refer to Terrain Color Properties below.
**Enable_Admin_Faster_Salvage_Duration** *bool*: By default, players in singleplayer and admins in multiplayer have a faster salvage time.
**Has_Clouds** *bool*: Disables clouds in skybox when false. Defaults to true.
**Loading_Screen_Music** *array*: Randomly selected. Refer to music properties.
**Should_Animate_Background_Image** *bool*: If true, the background image moves left/right with loading progress. Defaults to false because maps have important information on the loading screen.
**Death_Music** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Audio clip played after death.
**UnderwaterFogDensity** *float*: Overrides fog effect intensity while the camera is underwater. Defaults to ``0.075``.
**Allow_Building_In_Safezone_In_Singleplayer** *bool*: If true, players can bypass safezone's no-buildables mode in singleplayer. Defaults to false.
**Tags** :ref:`list <doc_data_file_format>` of :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_tag`: Blueprints can test for these tags as an alternative to ``Map`` name check. May be extended in the future.
.. _doc_assets_level:supports_fishing_volumes:
**Supports_Fishing_Volumes** *bool*: If true, this level has assigned fishing spawn tables to water volumes (or set the default table). Defaults to false.
**Default_Fish_Spawn_Table** :ref:`Asset Pointer <doc_data_assetptr>`: Fishing rods using per-water-volume fishing spawn table fallback to this table.
Cloud Override Properties
-------------------------
When clouds are disabled (``Has_Clouds false``), these properties can be used to control a custom particle system using the cloud color and intensity from the lighting settings.
.. warning:: Custom clouds are *not* recommended as they behave inconsistently at lower max draw distances.
Early versions of 3.x had a very high max draw distance (~8 km). The sun, moon, clouds, and stars were 3D objects scaled almost to the edge of the far clip plane.
Later versions combined these details into a skybox shader which enabled the max draw distance to be configured by players, but at the cost of reduced customization.
As a workaround, mappers created 3D cloud particles attached to the camera. Distant particles were cut off at the far clip plane, but a shader with the ``ZClip False`` resolved this.
Unfortunately, it seems after the engine update in 3.25.9.2 this workaround broke: the particle system can be culled at low draw distances. This is understandable from the engine's perspective, as using the particle system's origin for culling is suboptimal. As of March 2026 we're not aware of a workaround to force the particle system to render.
**CloudOverride_Prefab** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Prefab to instantiate and attach to lighting.
**CloudOverride_ParticleSystems** *list*: Dictionaries describing particle systems in ``CloudOverride_Prefab`` with the following additional properties:
**Path** *string*: Path to a Particle System component relative to ``CloudOverride_Prefab``. This renderer should likely use the Unturned "Particles/Standard Surface (ZClip False)" shader to prevent a harsh transition with low max draw distance.
**RateOverTimeScale** *float*: Particle System's emission rate is multiplied by current time of day's cloud slider value (between zero and one) scaled by this value.
**MaterialColorPropertyNames** *list*: Particle System's material instance will have these color properties set to the current time of day's cloud color. Defaults to just _Color.
**WarmupTime** *float*: When restarting the particle system it is simulated this number of seconds. Alternative to enabling Particle System's ``Prewarm`` option. Defaults to zero.
For example:
.. code-block:: unturnedasset
:linenos:
CloudOverride_ParticleSystems
[
{
Path System1
RateOverTimeScale 1.5
WarmupTime 10
MaterialColorPropertyNames
[
_Color
_EmissionColor
]
}
{
Path System2
RateOverTimeScale 3
MaterialColorPropertyNames
[
_Color
_EmissionColor
]
}
]
Schedulable Weather Properties
------------------------------
**Asset** :ref:`Asset Pointer <doc_data_assetptr>`: Points to a :ref:`Weather Asset <doc_assets_weather>`.
**Min_Frequency** *float*: When chosen to be the next scheduled weather event, minimum number of in-game days before it will start.
**Max_Frequency** *float*: When chosen to be the next scheduled weather event, maximum number of in-game days before it will start.
**Min_Duration** *float*: Minimum number of in-game days before the weather event will end.
**Max_Duration** *float*: Maximum number of in-game days before the weather event will end.
Skill Rule Properties
---------------------
**Id** *string*: Name of skill, for example Sharpshooter.
**Default_Level** *int*: Skill level when player spawns. The ``Spawn_With_Max_Skills`` gameplay config option takes priority.
**Max_Unlockable_Level** *int*: Maximum skill level attainable through gameplay. Higher levels are hidden in the skills menu.
**Base_Cost** *int*: If set, overrides XP cost to purchase first level of the skill.
**Per_Level_Cost_Increase** *int*: If set, overrides XP cost increase with each level. Added to ``Base_Cost`` after the first level.
**Cost_Multiplier** *float*: Multiplier for total XP upgrade cost.
.. code-block:: unturnedasset
:linenos:
Skills
[
{
Id Overkill
Default_Level 0
Max_Unlockable_Level 0
}
{
Id Parkour
Default_Level 2
Max_Unlockable_Level 2
}
{
Id Crafting
Default_Level 1
Max_Unlockable_Level 3
Cost_Multiplier 5
}
]
Skillset Loadout Properties
---------------------------
Can contain the following keys: ``None``, ``Fire``, ``Police``, ``Army``, ``Farm``, ``Fish``, ``Camp``, ``Work``, ``Chef``, ``Thief``, ``Medic``
Each key is a list of items with the following properties:
**Asset**: :ref:`Asset Pointer <doc_data_assetptr>`: Item or spawn table to grant an item from.
**Amount** *int*: Number of times to grant this item. Defaults to 1.
**Origin** :ref:`EItemOrigin <doc_data_eitemorigin>`: Determines starting state of the item. Defaults to World.
Example:
.. code-block:: unturnedasset
:linenos:
Skillset_Loadouts
{
Army
[
{
// Eaglefire at max quality with full ammo
Asset 4
Origin Admin
}
{
// Military magazine x2 with random ammo
Asset dbfb1d0d11ca438e9dffb95f76e61274
Amount 2
}
]
// Other skillsets will spawn with nothing
}
Terrain Color Properties
------------------------
**Color** :ref:`color <doc_data_color>`: Actual base color/albedo of terrain material. Players will be kicked from multiplayer servers if their customized skin color is too similar to the value of this property.
**HueThreshold** :ref:`float32 <doc_data_builtin_types>`: Values are clamped from 0 to 1. If difference between hues is greater than this threshold, the colors are not too similar.
**SaturationThreshold** :ref:`float32 <doc_data_builtin_types>`: Values are clamped from 0 to 1. If difference between saturations is greater than this threshold, the colors are not too similar.
**ValueThreshold** :ref:`float32 <doc_data_builtin_types>`: Values are clamped from 0 to 1. If difference between values is greater than this threshold, the colors are not too similar.
Music Properties
----------------
**Loop** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Looping audio clip played until loading finishes.
**Outro** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Audio clip played once loading finishes.
================================================
FILE: assets/material-palette-asset.rst
================================================
.. _doc_assets_material_palette:
Material Palette Assets
=======================
The ``MaterialPaletteAsset`` type allows an object to have multiple potential materials that it can use. A random material from the material palette is chosen every time the object is spawned in the level editor. In the level editor, material palettes can also be manually assigned to a selected object.
Metadata
--------
**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.
**Type** *string*: ``SDG.Unturned.MaterialPaletteAsset``
Material Palette Properties
---------------------------
**Materials** *array* of :ref:`Master Bundle Pointer <doc_data_masterbundleptr>` *dictionaries*: Each dictionary in the list should point to a material bundled in Unity.
.. code-block:: unturnedasset
"Asset"
{
"Materials"
[
{
"Name" "core.masterbundle"
"Path" "Objects/Material_Palettes/House/House_00.mat"
}
{
"Name" "core.masterbundle"
"Path" "Objects/Material_Palettes/House/House_01.mat"
}
]
}
================================================
FILE: assets/mod-hooks.rst
================================================
.. _doc_assets_mod_hooks:
Mod Hooks
=========
Overview
--------
Script Components can be added to Game Objects in Unity and exported in Asset Bundles *IF* they match a script in the base game code. These intentionally exportable scripts are referred to as **Mod Hooks**. They can be imported into a Unity project from the Project.unitypackage, and added to game objects inside the Unturned components menu. Each script makes several Events available which can drive other component properties like visibility or play an animation.
Each script documents its purpose and members within its \*.cs file.
Originally proposed and coined by VitaxaRusModding in this GitHub issue: `Link <https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/435>`_
Event Listeners
---------------
Activation Event Hook
`````````````````````
Events when a component or game object are enabled and disabled. Useful for extending toggleable actions in the base game.
Binary Random Component
```````````````````````
When triggered will invoke one of two events depending on percentage probability. For example with a probability of 0.05 the OnTrue event will be invoked 5% of the time, and OnFalse will be invoked the remaining 95% of times.
Collision Damage
``````````````````
Damages players when they overlap a trigger collider.
Collision Event Hook
````````````````````
Events for player overlaps with a trigger collider. Primarily useful for server-side objects as collisions are not triggered by other players client-side, but this limitation may be resolved in the future.
Destroy Event Hook
``````````````````
Event when a component or game object is removed from the scene.
Explosion Spawner
`````````````````
Allows Unity events to apply damage in a sphere. (doesn't have any visual effects)
Intended to replace unsupported/unintentional use of ``Grenade.cs`` and ``Rocket.cs`` scripts.
Gun Attachment Event Hook
`````````````````````````
Allows gun item game objects (including children) to receive events when sights, tacticals, grips, barrels, and magazines are attached, replaced, and/or detached.
.. _doc_assets_mod_hooks:iobs_event_hook:
Interactable Object Binary State Event Hook (IOBS)
``````````````````````````````````````````````````
(IOBS for short) are any prop placed from the level editor which can have F pressed on them to open, close, turn on/off, etc. This hook can be added to any GameObject within an IOBS to trigger events during state changes, and even control the IOBS from client and server side.
Interactable Object Quest Event Hook
````````````````````````````````````
This hook can be added to any GameObject within a Dropper, Note, or Quest Interactable Object. Its event is triggered when the corresponding interactable is successfully used. Note that the event is only triggered on the authority side (i.e., the server or singleplayer) and not on the client.
.. _doc_assets_mod_hooks:npc_global_event_hook:
NPC Global Event Hook
`````````````````````
Event triggered when corresponding :ref:`NPC Event reward <doc_npc_asset_rewards:event>` type is triggered. For example, when any NPC Event with ID "Fireworks" is broadcast all of the components with event ID "Fireworks" will have their corresponding Unity event triggered as well, in this case perhaps to spawn a fireworks effect.
Text Chat Event Hook
````````````````````
Event when a text chat message passes certain filters such as channel, within a radius, and containing a secret phrase. Only fired on the server.
Timer Event Hook
````````````````
Allows events to set or cancel a timer, and triggers an event when the timer expires.
Useable Event Hook
```````````````````
Events for EquipableItem prefab of any item type. These events are fired on server and client.
Useable Gun Event Hook
``````````````````````
Events for EquipableItem prefab. Supersedes VehicleTurretEventHook. These events are fired on server and client.
Vehicle Event Hook
``````````````````
Events for driver entering and exiting the vehicle. These events are fired on server and client.
Vehicle Gear Shift Event Hook
``````````````````````````````
Events for vehicle gearbox entering and exiting a target gear.
Vehicle Health Event Hook
``````````````````````````
Events for vehicle health passing a comparison against a target number.
Vehicle Turret Event Hook
`````````````````````````
Events for Turret\_# GameObjects in the vehicle when guns are used. These events are fired on server and client.
Weather Event Hook
``````````````````
Events for day, night, full moon, and weather. These events are fired on server and client.
Custom Weather Event Hook
`````````````````````````
Events for a specific custom :ref:`Weather Asset <doc_assets_weather>`. Any map can have an unlimited number of weather types and weather listeners.
Event Instigators
-----------------
Airdrop Spawner
```````````````
Allows Unity events to call in an airdrop. Optionally overrides the cargo and destination.
Barricade Spawner
`````````````````
Allows Unity events to place barricades.
Client Text Chat Messenger
``````````````````````````
Allows Unity events to request a text chat message be sent on behalf of the client. For example, to execute a command.
The ``UnityEvents.Allow_Client_Messages`` and/or ``UnityEvents.Allow_Client_Commands`` settings must be enabled in the :ref:`doc_servers_server_configuration` before these can be triggered. This ensures hosts are aware of their usage. Singleplayer defaults to enabled.
Item Spawner
```````````````
Allows Unity events to spawn dropped items.
Server Text Chat Messenger
``````````````````````````
Allows Unity events to broadcast messages from the server. Icons and rich text are optional. Can also execute commands that are not available (yet) to NPCs like changing the weather or triggering an airdrop.
The ``UnityEvents.Allow_Server_Messages`` and/or ``UnityEvents.Allow_Server_Commands`` settings must be enabled in the :ref:`doc_servers_server_configuration` before these can be triggered. This ensures hosts are aware of their usage. Singleplayer defaults to enabled.
Effect Spawner
``````````````
Allows Unity events to spawn effect assets. When the ``AuthorityOnly`` field is enabled only the server will spawn effects and replicate them to clients.
Mob Alert Spawner
`````````````````
Allows Unity events to startle nearby animals and zombies.
Optionally uses a nearby player as the origin of the alert.
NPC Global Event Messenger
``````````````````````````
Allows Unity events to broadcast Event NPC rewards. The ``NPC Global Event Hook`` can then listen for these events.
Vehicle Spawner
```````````````
Allows Unity events to spawn a vehicle. Optionally overrides the paint color.
Misc
----
Barricade Destroyer
````````````````````
Forcefully removes barricades within a sphere, optionally playing their Explosion effects and/or spawning their Item_Dropped_On_Destroy item(s).
Fall Damage Override
````````````````````
Allows any game object to override the fall damage when a character lands on it or one of its descendants.
Crafting Tag Provider
`````````````````````
Allows the following entities to modify which crafting tags (workstations) are available to nearby players:
- Barricades
- Structures
- Vehicles
- Resources
- Objects
This component is used by vanilla for Heat Source backwards compatibility.
Crafting Tag Modifier
`````````````````````
Linked from a Crafting Tag Provider. Allows Unity events to modify which crafting tags (workstations) are available to nearby players.
As an example: the automatic Heat Source backwards compatibility adds a Crafting Tag Modifier to the Fire game object with an Activation Requirement of Invert and Mode Remove. This removes the Heat Source tag while the Fire is inactive.
Music Audio Source
```````````````````
Reassigns a sibling Audio Source's output audio mixer group to the vanilla Music mixer, respecting the player's volume preferences.
Repeat
``````
Repeats an event a configurable or random number of times. Essentially a for-loop for Unity events.
================================================
FILE: assets/mythical-asset.rst
================================================
.. _doc_assets_mythical:
Mythical Effect Assets
======================
**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.
**Type** *enum* (``Mythic``)
**ID** *uint16*: Must be a unique identifier.
.. note:: At the time of writing (2025-02-04) mythical effects aren't moddable, sorry! This document is primarily for item creators working on curated updates, as well as preparation for eventual open sourcing.
When testing, we recommend attaching your mythicals to some items' Effect transform in the editor and resetting the local transform. This helps visualize how they will appear in-game.
Unity Prefabs
-------------
**System_Area**: Instantiated multiple times to cover a larger area. Mythical shirts and pants attach them to character bones, and mythical vehicle skins attach them to several points on the surface. As such, this shouldn't rely on any specific orientation. Layer should be set to Enemy.
**System_Hook**: Attached to a cosmetic item's "Effect" prefab. Layer should be set to Enemy.
.. figure:: /img/EffectTransform.png
Example "Effect" transform positioning and orientation.
For silly legacy reasons the orientation is rather unfortunate: +Z is the mythical's up direction and +Y is the mythical's forward direction.
**System_Third**: Attached to third-person weapon skin. Unlike for cosmetics, +Z is forward and +Y is up. It may be helpful to increase particle size to make them more visible over the shoulder. Emission typically uses a box of size 25x25x50 cm. Layer should be set to Item.
**System_First**: Attached to first-person weapon skin. Particles should be smaller than usual, and try to avoid the up direction to reduce blocking the player's aim. First-person particles are typically half the size, but use the same emission shape size as third-person. Layer should be set to Viewmodel.
Localization
------------
**Particle_Tag_Name** *string*: When a mythical item is crafted with this effect, this is the display name shown in the inventory.
================================================
FILE: assets/object-asset.rst
================================================
.. _doc_assets_object:
Object Assets
=============
**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.
**Type** :ref:`EObjectType <doc_data_eobjecttype>`: The object's type is used for sorting, pathfinding, collision, and culling. Small objects are used for clutter and decoration, medium objects fill out the layout, and large objects make up the level. When using the ``NPC`` enumerator, refer to the documentation for :ref:`doc_object_asset_npc` as well.
**ID** *uint16*: Must be a unique identifier.
Object Properties
-----------------
**Add_Kill_Triggers** *bool*: If true, this adds a kill volume inside the object that will kill players who clip inside it. This is helpful for preventing out-of-bounds exploits, such as players trying to build bases inside boulder objects.
**Add_Night_Light_Script** *flag*: Adds a script to the object that looks for a transform named "Light". During the night, the light will be turned on. During the day, the light will be turned off.
**Allow_Structures** *flag*: Structures can be built on top of this object. For example, a fake grass object may want to use this property.
**Causes_Fall_Damage** *bool*: Whether or not players should take fall damage when landing on this object. Defaults to true.
**Chart** *enum* (:ref:`doc_data_eobjectchart`): When an object obstructs the terrain, it can appear on a map's chart view. The pixel sampled for the object's color on the chart view can be set or overridden with this property. By default, ``Type Large`` objects use the same pixel as the ``Large`` enumerator, and ``Type Medium`` objects use the same pixel as the ``Medium`` enumerator. Defaults to ``Ignore`` when using ``Type NPC`` or ``Type Decal``. Otherwise, defaults to ``None``.
**Christmas_Redirect** :ref:`doc_data_guid`: GUID of the object that should appear during the Festive holiday.
**Collision_Important** *flag*: Prevent collision from being disabled. When using ``Type Large``, this flag is automatically included.
**Exclude_From_Level_Batching** *bool*: Exclude this object from :ref:`level batching <doc_mapping_batching>`. This property may be helpful when using elaborate setups with Unity Event components. Defaults to true when using ``Type Decal`` or ``Type NPC``.
**Foliage** :ref:`GUID <doc_data_guid>`: GUID of a :ref:`foliage asset <doc_assets_foliage>`. This property is useful for objects such as fake grass, which may want foliage to bake on top of the object similar to terrain materials.
**Fuel** *flag*: Fuel can be siphoned from this object. Deprecated in favor of ``Interactability Fuel``.
**Halloween_Redirect** :ref:`doc_data_guid`: GUID of the object that should appear during the Halloween holiday.
**Has_Clip_Prefab** *bool*: Whether or not the object has a Clip.prefab. If the object should use the same prefab on the server as on the client, set to false. For example, most official content uses ``Has_Clip_Prefab false``. Defaults to true.
**Holiday_Restriction** *enum* (:ref:`doc_data_enpcholiday`): If a valid value is specified, then this object will only be visible during the corresponding holiday. The specified holiday will be appended to the object's user-friendly name. Defaults to ``None``.
**Is_Gore** *bool*: Whether or not this object should be visible if the player has disabled "Show Blood Splatters".
**Is_Clutter** *bool*: Defaults to false. If true, object is not instantiated when player has the "Load Clutter" graphics option disabled.
.. warning:: Objects the player can collide with should never be clutter. Otherwise, the player will "rubberband" on these objects in multiplayer.
**Landmark_Quality** *enum* (``Off``, ``Low``, ``Medium``, ``High``, ``Ultra``): The value that the "Landmarks" graphical setting must be set to in order to see a low detail model of this object from far away distances. Defaults to ``Low``.
**Load_Nav_On_Server** *bool*: If true, Nav game object will be instantiated in singleplayer and on dedicated server. Useful for objects which need to affect navmesh baking without colliding with zombies during gameplay. Defaults to true for "medium" and "large" objects.
**Load_Nav_In_Editor** *bool*: If true, Nav game object will be instantiated in the level editor. Useful for objects which need collision with zombies during gameplay without affecting navmesh baking. Defaults to true for "medium" and "large" objects.
**Material_Palette** :ref:`doc_data_guid`: GUID of the :ref:`Material Palette Asset <doc_assets_material_palette>` that should be used by the object.
**Refill** *flag*: Water can be siphoned from this object. Deprecated in favor of ``Interactability Water``.
**Snowshoe** *flag*: This object should not leave a footprint when baking materials.
**Soft** *flag*: Vehicles should not take damage when colliding with this object.
**Use_Water_Height_Transparent_Sort** *flag*: Useful for transparent objects, such as glass.
**Exclude_From_Satellite_Capture** *bool*: If true, object will be hidden when rendering GPS/satellite view. Defaults to true if ``Holiday_Restriction`` is other than ``None``.
Decals
``````
**Decal_Alpha** *flag*: This flag should be set if the decal has a transparent texture. Requires ``Type Decal``.
**Decal_X** *float*: Override the scale of the decal, on the 𝘟-axis. Requires ``Type Decal``.
**Decal_Y** *float*: Override the scale of the decal, on the 𝘠-axis. Requires ``Type Decal``.
**Decal_LOD_Bias** *float*: Multiplier for the LOD's switching distance. Defaults to 1. Requires ``Type Decal``.
Interior Culling
````````````````
**Exclude_From_Culling_Volumes** *bool*: If set to true, this object will not be managed by culling volumes. For example, the aerospace facility on the Germany map is excluded from culling volumes, so that manually-placed culling volumes can hide large objects like shipping containers without accidentally hiding the giant aerospace facility itself.
**LOD** *enum* (``None``, ``Mesh``, ``Area``): How interior culling should be determined. Using the ``Mesh`` enumerator will use the mesh bounds to determine what is inside the object. For concave objects, you can use the ``Area`` enumerator instead and add multiple Occlusion Area components for the interior volumes.
**LOD_Bias** *float*: Multiplier on the threshold distance for interior culling. Requires that ``LOD`` has been set.
**LOD_Center_X** float: Offset for the culling volume's local position, on the 𝘟-axis. Requires that ``LOD`` has been set.
**LOD_Center_Y** float: Offset for the culling volume's local position, on the 𝘠-axis. Requires that ``LOD`` has been set.
**LOD_Center_Z** float: Offset for the culling volume's local position, on the 𝘡-axis. Requires that ``LOD`` has been set.
**LOD_Size_X** float: Offset for the culling volume's size, on the 𝘟-axis. Requires that ``LOD`` has been set.
**LOD_Size_Y** float: Offset for the culling volume's size, on the 𝘠-axis. Requires that ``LOD`` has been set.
**LOD_Size_Z** float: Offset for the culling volume's size, on the 𝘡-axis. Requires that ``LOD`` has been set.
Interactables
`````````````
**Interactability** *enum* (``None``, ``Binary_State``, ``Dropper``, ``Note``, ``Water``, ``Fuel``, ``Rubble``, ``NPC``, ``Quest``, ``Dialogue``): All ``Interactability_`` properties will require that this property has been set. The enumerator selected for this property will affect which properties can be used, how these properties will function when used, and how this object will behave in-game. Defaults to the ``NPC`` enumerator when using ``Type NPC``, otherwise this property will default to ``None``.
- ``Binary_State`` objects will change between their two states when interacted with – such as an open or closed door.
- ``Dropper`` objects can spawn items when interacted with.
- ``Note`` objects can display lines of text when interacted with.
- ``Water`` objects can be siphoned for water, and ``Fuel`` objects can be siphoned for fuel.
- ``Rubble`` objects are destructible. It is preferable to use ``Rubble Destroy`` instead of ``Interactability Rubble``.
- ``NPC`` objects can provide access to dialogue, quests, and vendors.
- ``Quest`` objects can be interacted with, but unlike other options they have no additional functionality.
- ``Dialogue`` objects open the dialogue screen - similar to NPCs - with a non-NPC appearance and custom interact text.
.. note::
Although ``Interactability`` properties can be used to create a destructible object, it is preferable to use ``Rubble`` properties as they are more specific. This allows for creating destructible objects that are also interactable.
**Interactability_Animation_Component_Path** *string*: (``Binary_State``-only) Transform path relative to object root with Animation component. Defaults to "Root".
**Interactability_Blade_ID** *byte*: When using ``Interactability Rubble``, weapons are unable to damage this object unless they have a matching ``BladeID_#`` value. Defaults to 0.
**Interactability_Delay** *float*: In seconds, the cooldown before the object can be interacted with again.
**Interactability_Dialogue** :ref:`doc_data_guid`: Dialogue asset to open for ``Interactability Dialogue`` mode. By default the object's name is used as the character name in dialog, but this can be overridden with the ``Dialogue_Name`` option in the localization file.
**Interactability_Drops** *byte*: Total number of items dropped from an object using ``Interactability Dropper``. This property is used in conjunction with ``Interactability_Drop_#``. Defaults to 0. It is preferable to use the ``Interactability_Reward_ID`` property instead.
**Interactability_Drop_#** *uint16*: ID of an item that should be dropped. This property is used in conjunction with ``Interactability_Drops``.
**Interactability_Editor** *enum* (``None``, ``Toggle``): Determines how this interactable object should appear in the level editor. If this is set to ``Toggle``, then the object's alternative state will be shown. Defaults to ``None``.
**Interactability_Effect** :ref:`doc_data_guid` or *uint16*: GUID or legacy ID of an :ref:`EffectAsset <doc_assets_effect>` to play when interacted with. When using ``Interactability Rubble``, this effect is played when a section of the object is destroyed.
**Interactability_Emissive_Material_Mode** *enum* (``Auto`` or ``None``): (``Binary_State``-only). Defaults to ``Auto``, creating a material instance for child renderer of ``Toggle`` game object. The downside of ``Auto`` is exclusion from the level batching texture atlas. When set to ``None``, no material instance is created.
**Interactability_Finale** :ref:`doc_data_guid` or *uint16*: GUID or legacy ID of an :ref:`EffectAsset <doc_assets_effect>` to play when all sections of the object using ``Interactability Rubble`` are destroyed. If this property is used, then all of the dead object's sections will also be hidden when fully destroyed.
**Interactability_Health** *uint16*: Total amount of health each section of the object has, when using ``Interactability Rubble``. Defaults to 0.
**Interactability_Hint** *enum* (``Door``, ``Switch``, ``Fire``, ``Generator``, ``Use``, ``Custom``): Localization key to use for the interact prompt. Setting this to ``Custom`` allows for displaying custom text instead, when used in conjunction with ``Interact``.
**Interactability_Invulnerable** *flag*: This resource cannot be damaged by lower-power :ref:`doc_item_asset_weapon` that do not have the ``Invulnerable`` flag, when using ``Interactability Rubble``.
**Interactability_Nav** *enum* (``None``, ``On``, ``Off``): When using ``Binary_State``, controls how on/off state affects ``Nav`` game object. Defaults to ``None`` which doesn't affect Nav. ``On`` activates Nav when object is in the on state and deactivates in the off state. (``Off`` does the opposite.)
.. note:: When ``Interactability_Nav`` is combined with ``Rubble_Nav_Mode``, the Nav game object is only active if **both** activate it. (i.e., AND)
**Interactability_Power** *enum* (``None``, ``Toggle``, ``Stay``): Whether or not this object must be powered to be usable. When set to ``None``, this object cannot be powered. When set to ``Toggle``, the object must be powered to be interacted with. When set to ``Stay``, the object must be powered to remain on. For example, a door might use ``Toggle`` if it should remain open after it loses power, while a streetlight might use ``Stay`` so that the light turns off when it loses power. Defaults to ``None``.
**Interactability_Proof_Explosion** *flag*: Immune to area-of-effect explosive damage, when using ``Interactability Rubble``.
**Interactability_Remote** *flag*: Disables the ability for players to interact with this via a button prompt.
**Interactability_Reset** *float*: Delay before an interacted object resets, or a destroyed object respawns, in seconds.
**Interactability_Resource** *uint16*: When using ``Interactability Fuel`` or ``Interactability Water``, this value is how many units of fuel or water is stored in the object. Defaults to 0.
**Interactability_Reward_ID** *uint16*: ID of an item :ref:`spawn table <doc_assets_spawn>` to use for rewards, when using ``Interactability Rubble``. Defaults to 0.
**Interactability_RewardItem_Origin** :ref:`doc_data_eitemorigin`: When using ``Interactability Dropper``, overrides the dropped item's state. For example, setting the origin to ``Admin`` will cause items to spawn at full quality. Defaults to ``Nature``.
**Interactability_Rewards_Min** *byte*: Minimum amount of item drops to reward, when using ``Interactability Rubble``. Defaults to 1.
**Interactability_Rewards_Max** *byte*: Maximum amount of item drops to reward, when using ``Interactability Rubble``. Defaults to 1.
**Interactability_Reward_Probability** *float*: Probability of receiving a reward, as a decimal-to-percent chance, when using ``Interactability Rubble``. Defaults to 1.
**Interactability_Reward_XP** *uint32*: Amount of experience to reward when the object using ``Interactability Rubble`` is destroyed.
**Interactability_Text_Lines** *uint16*: Total number of lines to display when an object using ``Interactability Note`` is interacted with. This property is used in conjunction with ``Interactability_Text_Line_#``. Defaults to 0.
Rubble
``````
**Rubble** *enum* (``None``, ``Destroy``): The destruction mode that should be used, although the only functional option for this is ``Destroy``. All ``Rubble_`` properties require that this property has been set.
**Rubble_All_Sections_Destroyed_Alert_Radius** *float*: If set, alert nearby enemies when all sections are destroyed.
**Rubble_Blade_ID** *byte*: Weapons are unable to damage this object unless they have a matching ``BladeID_#`` value. Defaults to 0.
**Rubble_Can_Zombies_Damage** *bool*: If true, zombies can attack this object if it's blocking them. Defaults to false.
**Rubble_Editor** *enum* (``Alive``, ``Dead``): Determines how this destructible object should appear in the level editor. If this is set to ``Dead``, the fully destroyed state of the object will be shown. Defaults to ``Alive``.
**Rubble_Effect** :ref:`doc_data_guid` or *uint16*: GUID or legacy ID of an :ref:`EffectAsset <doc_assets_effect>` to play when a section of the destructible object is destroyed.
**Rubble_Finale** :ref:`doc_data_guid` or *uint16*: GUID or legacy ID of an :ref:`EffectAsset <doc_assets_effect>` to play when all sections of the destructible object are destroyed. If this property is used, then all of the dead object's sections will also be hidden when fully destroyed.
**Rubble_Health** *uint16*: Total amount of health each section of the object has. Defaults to 0.
**Rubble_Invulnerable** *flag*: This resource cannot be damaged by lower-power :ref:`doc_item_asset_weapon` that do not have the ``Invulnerable`` flag.
**Rubble_Nav_Mode** *enum* (``Unaffected``, ``DeactivateIfAllDead``): Defaults to ``Unaffected``. ``DeactivateIfAllDead`` deactivates the Nav game object when all rubble sections are destroyed, but keeps it active otherwise.
.. note:: When ``Rubble_Nav_Mode`` is combined with ``Interactability_Nav``, the Nav game object is only active if **both** activate it. (i.e., AND)
**Rubble_Proof_Explosion** *flag*: Immune to area-of-effect explosive damage.
**Rubble_Reset** *float*: Delay before a destroyed object respawns, in seconds.
**Rubble_Respawn_All_Sections_Simultaneously** *bool*: If true, all sections respawn at the same time. Defaults to false.
**Rubble_Reward_ID** *uint16*: ID of an item :ref:`spawn table <doc_assets_spawn>` to use for rewards. Defaults to 0.
**Rubble_Rewards_Min** *byte*: Minimum amount of item drops to reward. Defaults to 1.
**Rubble_Rewards_Max** *byte*: Maximum amount of item drops to reward. Defaults to 1.
**Rubble_Reward_Probability** *float*: Probability of receiving a reward, as a decimal-to-percent chance. Defaults to 1.
**Rubble_Reward_XP** *uint32*: Amount of experience to reward when the destructible object is destroyed.
**Rubble_Section_Destroyed_Alert_Radius** *float*: If set, alert nearby enemies when an individual section is destroyed. Not used when the final section is destroyed—in that case, **Rubble_All_Sections_Destroyed_Alert_Radius** applies instead.
**Rubble_Zombie_Damage_Multiplier** *float*: Multiplier for damage from zombies if RubbleCanZombiesDamage is true.
Conditions and Rewards
``````````````````````
:ref:`Conditions <doc_npc_asset_conditions>` can be used to control the visibility of an object. For example, if an object should only be visible after a certain quest has been completed. These properties do not have a unique prefix, and instead use the standard ``Conditions`` and ``Condition_#`` property names.
Conditions and :ref:`rewards <doc_npc_asset_rewards>` can also be tied to the interactability of an object. An object could become interactable during a quest, and then trigger rewards (such as completing the quest) once it has been interacted with. These properties are prefixed with ``Interactability_``. For example, ``Interactability_Conditions`` and ``Interactability_Reward_#``.
Localization
------------
**Name** *string*: Object name in user interfaces.
**Interact** *string*: When an interactable object is using ``Interactability_Hint Custom``, this property is used to set the text that should be displayed as the interact prompt for the object.
**Interactability_Text_Line_#** :ref:`doc_data_richtext`: A line of text that should be displayed when an object using ``Interactability Note`` is interacted with. This property is used in conjunction with ``Interactability_Text_Lines``.
**Dialogue_Name** *string*: Overrides character name in dialogue. Defaults to the object name.
================================================
FILE: assets/outfit-asset.rst
================================================
.. _doc_assets_outfit:
Outfit Assets
=============
The OutfitAsset class allows for defining a selection of clothing items that should be worn together when generating preview images for outfits. Outfit preview images can be generated with the \[F1] menu available from the Workshop section of the main menu.
Metadata
--------
**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.
**Type** *string*: ``SDG.Unturned.OutfitAsset``
Outfit Properties
-----------------
**Items** *array* of :ref:`Asset Pointers <doc_data_assetptr>`: Asset pointers to clothing item(s). These clothing items will be worn together in any preview images generated of this outfit. For example:
.. code-block:: unturnedasset
"Asset"
{
"Items"
[
// Top
"9fd6032f9a24404eaf28961fc7f2d289"
// Bottom
"d4ec52a157f746edbc3a4df8ae79ddef"
// Mask
"1adc30f0dbf246eba1c0c6a183206aad"
// Hat
"daf02a225ebc4b76ae51ca485706e470"
]
}
================================================
FILE: assets/physics-material-asset.rst
================================================
.. _doc_assets_physics_material:
Physics Material Assets
=======================
Work-in-progress feature to allow custom physics effects rather than hardcoding them.
The ``PhysicsMaterialAsset`` type associates gameplay properties and effects with custom Unity "physic" materials. For example if none of the built-in physics materials has appropriate effects for the surface of Mars, a custom Unity physics material named "MarsDirt" could be created. Then a physics material asset with ``UnityName`` set to "MarsDirt" and ``Fallback`` of 33650ff924b34f8d9c5a0fd97418cd3e (built-in gravel) could add custom effects for the Martian surfaces.
The ``PhysicsMaterialExtensionAsset`` type can be used to insert custom properties into built-in physics materials. For example if a custom laser gun should leave burn marks on the hit surface rather than bullet holes, an extension asset can set the ``Base`` property to a built-in physics material to add custom effects.
Properties
----------
**Type** *string*: ``SDG.Unturned.PhysicsMaterialAsset`` or ``SDG.Unturned.PhysicsMaterialExtensionAsset``
**UnityName** *string* or ``UnityNames`` *string array*: Names of Unity "physic" materials to associate with this asset. Not set by extension assets. Multiple names can be specified as an array because the old built-in physics materials had several variants for special cases that should now be handled by these assets.
**Fallback** :ref:`Asset Pointer <doc_data_assetptr>`: Points to a different physics material asset. Fallbacks are used when a property is not set. For example the snow physics material does not have a bullet casing bounce audio clip, so the gravel fallback is used instead.
**Base** :ref:`Asset Pointer <doc_data_assetptr>`: Points to a physics material asset to extend. Properties from the extension asset will be appended to the base asset.
**AudioDefs** *dictionary*: pairs of key/name and :ref:`Master Bundle Pointer <doc_data_masterbundleptr>` to OneShotAudioDefinition. For example the ``ParticleSystemCollisionAudio`` component ``MaterialPropertyName`` is referring to these keys. Official properties include:
- BulletCasingBounce: used by vanilla non-shotgun particle collision audio.
- BulletImpact: fired bullet hitting surface.
- BipedLand: player landing on a surface after falling. Could be used for other two-legged characters in the future.
- FootstepWalk: individual non-sprinting footstep.
- FootstepRun: individual sprinting footstep.
- LegacyImpact: will probably be phased-out. Still used by vehicle bumper collision and as a fallback for melee impact.
- MeleeImpact: melee attack hitting surface.
- ShotgunShellBounce: used by vanilla shotgun particle collision audio.
- ZombieBipedLand: zombie equivalent of BipedLand. If unassigned, BipedLand is used with 85% pitch scaling.
- ZombieFootstepRun: zombie equivalent of FootstepRun. If unassigned, FootstepRun is used with 85% pitch scaling.
- ZombieFootstepWalk: zombie equivalent of FootstepWalk. If unassigned, FootstepWalk is used with 85% pitch scaling.
- MegaZombieFootstep: mega zombie footstep sound. If unassigned, FootstepWalk is used with 72% pitch scaling and +50% volume.
- MegaZombieLand: mega zombie landing sound. If unassigned, BipedLand is used with 72% pitch scaling and +50% volume.
**TireMotionEffect** :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`Effect Asset <doc_assets_effect>`: Effect to spawn while driving on this material. Its transform is set to the ground hit position with the Z axis aligned to the wheel's up vector and rotated according to forward/reverse speed. The vanilla effects use the rate over distance emission mode.
**IsArable** *bool*: If true, crops can be planted on this material.
**HasOil** *bool*: If true, oil drills can be placed on this material. Note at the time of writing (2022-02-10) oil drills can only be placed on terrain materials.
**Character_Friction_Mode** *enum* (``ImmediatelyResponsive``, ``Custom``): If custom the acceleration, deceleration, and max speed properties are used. Replacement for the hardcoded ice and slippery metal plate.
**Character_Acceleration_Multiplier** *float*: Default acceleration is equal to the target move speed.
**Character_Deceleration_Multiplier** *float*: Default deceleration is 2m/s².
``Character_Max_Speed_Multiplier`` *float*: Allows speed to reach up to this multiplied by the target move speed.
================================================
FILE: assets/redirector-asset.rst
================================================
.. _doc_asset_redirector:
Redirector Assets
=================
**Redirector Assets** are a special asset type only used when resolving asset references (GUIDs and legacy IDs). When an asset reference points to a redirector, the asset system instead returns the asset pointed to by the redirector.
.. note:: Most features do not save the resolved asset, instead they save the original asset reference. This means, for example, that redirecting some objects and re-saving a level will save the original object references, not the redirected objects.
Game Data File
--------------
Note that ``TargetAsset`` is required for this asset to function.
Properties
``````````
.. list-table::
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`AssetCategory <doc_asset_redirector:assetcategory>`
- :ref:`enum <doc_data_builtin_types>`
- ``None``
* - :ref:`TargetAsset <doc_asset_redirector:targetasset>`
- :ref:`GUID <doc_data_guid>`
-
Property Descriptions
`````````````````````
.. _doc_asset_redirector:assetcategory:
AssetCategory :ref:`EAssetType <doc_data_eassettype>` ``None``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If set, an asset's legacy ID can be redirected as well. For example: a redirector with ``AssetCategory Item`` that is pointing to an asset with the legacy ID of ``4``, would be found when using ``/give 4``.
----
.. _doc_asset_redirector:targetasset:
TargetAsset :ref:`GUID <doc_data_guid>`
:::::::::::::::::::::::::::::::::::::::
GUID of actual asset to use when an asset reference points to the redirector asset.
================================================
FILE: assets/resource-asset.rst
================================================
.. _doc_assets_resource:
Resource Assets
===============
**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.
**Type** *enum* (``Resource``)
**ID** *uint16*: Must be a unique identifier.
Resource Properties
-------------------
**Auto_Skybox** *flag*: Generate and assign a material and texture to the resource's Skybox prefab. The mesh should have custom normals to match the lighting. For example, vanilla pine trees have upward normals, whereas spherical trees have outward normals.
**BladeID** *byte*: Weapons are unable to damage this resource unless they have a matching ``BladeID_#`` value. Defaults to 0.
**Bypass_ID_Limit** *flag*: Allows for using an ``ID`` value within the range reserved for official content.
**Chart** *enum* (:ref:`doc_data_eobjectchart`): When a resource obstructs the terrain, it can appear on a map's chart view. The pixel sampled for the resource's color on the chart view can be set or overridden with this property. Defaults to ``None``, and will sample (14, 0) from the Layer_Strip.
**Christmas_Redirect** :ref:`doc_data_guid`: GUID of the resource that should appear during the Festive holiday.
**Debris_Vertical_Offset** *float*: Distance along tree's local up axis to offset debris spawn position. Defaults to 1.0.
**Exclude_From_Level_Batching** *bool*: Exclude this resource from :ref:`level batching <doc_mapping_batching>`. This property may be helpful when using elaborate setups with Unity Event components. Defaults to true when the ``SpeedTree`` flag is set.
**Explosion** :ref:`GUID <doc_data_guid>` or *uint16*: GUID or legacy ID of :ref:`EffectAsset <doc_assets_effect>` to play when destroyed.
**Forage** *flag*: Instead of being destroyable, this resource can be foraged from by interacting with it.
**Forage_Reward_Experience** *uint32*: Amount of experience to reward when the resource is foraged from. Defaults to 1.
**Halloween_Redirect** :ref:`doc_data_guid`: GUID of the resource that should appear during the Halloween holiday.
**Health** *uint16*: Total amount of health the resource has. Defaults to 0.
**Holiday_Restriction** *enum* (:ref:`doc_data_enpcholiday`): If a valid value is specified, then this resource will only be visible during the corresponding holiday. The specified holiday will be appended to the resource's user-friendly name. Defaults to ``None``.
**Ignore_Collision_Between_Stump_And_Debris** *bool*: If true, prevent collisions between falling tree and the stump. (i.e., debris can fall through stump) Defaults to true.
**Log** *uint16*: ID of an item that should be dropped when the resource is destroyed. Before multipliers, this item is dropped in bunches of 3 to 7. Defaults to 0. Deprecated in favor of ``Reward_ID``.
**No_Debris** *flag*: This resource does not have debris that should appear when it has been destroyed.
**RandomAngleDeviation_Max** *float*: Maximum angle in degrees away from the up direction. Defaults to 5.
**RandomAngleDeviation_Min** *float*: Minimum angle in degrees away from the up direction. For example, can be set to 0 to allow the tree to be perfectly upright, or a higher value to prevent the tree from ever being upright. Defaults to 5.
**RandomUniformScale_Max** *float*: Maximum scale. The same randomized value is used for all axes (uniform). Defaults to 1.1 for backwards compatibility.
**RandomUniformScale_Min** *float*: Minimum scale. The same randomized value is used for all axes (uniform). Defaults to 1.1 for backwards compatibility.
**Reset** *float*: Delay before respawning, in seconds.
**Reward_ID** *uint16*: ID of an item :ref:`spawn table <doc_assets_spawn>` to use for rewards. Defaults to 0.
**Reward_Min** *byte*: Minimum amount of item drops to reward. Defaults to 6.
**Reward_Max** *byte*: Maximum amount of item drops to reward. Defaults to 9.
**Reward_XP** *uint32*: Amount of experience to reward when the resource is destroyed.
**Scale** *float*: The tree's in-game scale is a random number between 1.1 and the result of ``1.1 + (Scale * 2)``.
.. deprecated:: 3.24.7.0
Scale is replaced by the ``RandomUniformScale_Min`` and ``RandomUniformScale_Max`` properties.
**SpeedTree** *flag*: This resource should be considered a SpeedTree when using higher graphical settings.
**SpeedTree_Default_LOD_Weights** *flag*: Use the default LOD weights intended for a SpeedTree.
**Stick** *uint16*: ID of an item that should be dropped when the resource is destroyed. Before multipliers, this item is dropped in bunches of 2 to 5. Defaults to 0. Deprecated in favor of ``Reward_ID``.
**Vertical_Offset** *float*: A vertical offset above or below wherever this resource is placed, in meters. Defaults to -0.75.
**Vulnerable_To_All_Melee_Weapons** *bool*: When true, this resource can be damaged by melee weapons that do not have a corresponding ``BladeID_#`` value. Defaults to false.
**Vulnerable_To_Fists** *bool*: When true, this resource can be damaged by a player's fists. Defaults to false.
Localization
------------
**Name** *string*: Resource name in user interfaces.
**Interact** *string*: Override the text shown for interactable resources using the ``Forage`` flag.
================================================
FILE: assets/road-asset.rst
================================================
.. _doc_assets_road:
Road Assets
===========
This asset allows roads to be shared between levels, and exposes some previously-unavailable properties for configuration.
Properties
----------
.. list-table::
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Chart <doc_assets_road:chart>`
- :ref:`doc_data_eobjectchart`
- ``None``
* - :ref:`Depth <doc_assets_road:depth>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`OffsetAlongNormal <doc_assets_road:offsetalongnormal>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`PhysicsMaterial <doc_assets_road:physicsmaterial>`
- :ref:`string <doc_data_builtin_types>`
- See description
* - :ref:`RepeatDistanceScale <doc_assets_road:repeatdistancescale>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`TexturePath <doc_assets_road:texturepath>`
- :ref:`string <doc_data_builtin_types>`
- See description
* - :ref:`Width <doc_assets_road:width>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`VanillaPhysicsMaterial <doc_assets_road:vanillaphysicsmaterial>`
- :ref:`enum <doc_data_builtin_types>`
- See description
----
.. _doc_assets_road:chart:
Chart :ref:`doc_data_eobjectchart` ``None``
:::::::::::::::::::::::::::::::::::::::::::
If not ``None``, overrides how road appears in chart generation.
If ``None`` (default) legacy classification is used:
- Concrete roads wider than 16 meters are ``Highway``.
- Other concrete roads are ``Road``.
- Non-concrete roads are ``Path``.
----
.. _doc_assets_road:depth:
Depth :ref:`float32 <doc_data_builtin_types>` ``0.0``
:::::::::::::::::::::::::::::::::::::::::::::::::::::
Total size along the up axis.
.. note:: If converting a legacy road configuration, please note that Depth shown in the legacy editor is actually *half* the total depth.
----
.. _doc_assets_road:offsetalongnormal:
OffsetAlongNormal :ref:`float32 <doc_data_builtin_types>` ``0.0``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Distance along the terrain surface normal to move each road vertex.
----
.. _doc_assets_road:physicsmaterial:
PhysicsMaterial :ref:`doc_data_masterbundleptr` to ``PhysicMaterial``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Unity ``PhysicMaterial`` to apply to road collider. Not used if :ref:`VanillaPhysicsMaterial <doc_assets_road:vanillaphysicsmaterial>` is assigned.
----
.. _doc_assets_road:repeatdistancescale:
RepeatDistanceScale :ref:`float32 <doc_data_builtin_types>` ``1.0``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
By default, Texture is uniformly scaled along the road according to its aspect ratio and the road's width. For example, if :ref:`Width <doc_assets_road:width>` is 8 meters and Texture is 256x128 pixels, the texture will repeat every 4 meters.
This property multiplies the distance along the road before the texture repeats.
.. note:: If converting a legacy road configuration, the repeat distance was the texture's height in pixels divided by the Height value. For example: a 64x64 pixel texture with Height of 2 would repeat every 32 meters. To calculate an equivalent RepeatDistanceScale, divide the legacy repeat distance by the road asset's Width.
----
.. _doc_assets_road:texturepath:
TexturePath :ref:`doc_data_masterbundleptr` to ``Texture2D``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If not specified, the game looks for a texture named ``Texture`` in the accompanying asset bundle.
----
.. _doc_assets_road:width:
Width :ref:`float32 <doc_data_builtin_types>` ``0.0``
:::::::::::::::::::::::::::::::::::::::::::::::::::::
Total horizontal size before the road begins tapering off into the terrain.
.. note:: If converting a legacy road configuration, please note that Width shown in the legacy editor is actually *half* the total width.
----
.. _doc_assets_road:vanillaphysicsmaterial:
VanillaPhysicsMaterial :ref:`string <doc_data_builtin_types>`
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Optional name of a built-in Unity ``PhysicMaterial`` to apply to road collider. For example, "Concrete_Static" or "Gravel_Static" for the legacy road physics materials.
================================================
FILE: assets/server-browser-curation-asset.rst
================================================
.. _doc_asset_server_browser_curation:
Server Browser Curation Assets
==============================
Most of the information for this asset type is covered in :ref:`Server Browser Curation <doc_server_browser_curation>`.
**Type**: ``ServerCuration``
**Icon**: Unlike curation lists hosted on the web, the asset can include a 32x32 Icon texture in an asset bundle.
**Name**: If a localization file is present, the display name is loaded from that instead of the asset file.
.. note:: The asset is not enabled by default when subscribed to. It needs to be enabled from the Curation menu in the Server Browser.
================================================
FILE: assets/spawn-asset.rst
================================================
.. _doc_assets_spawn:
Spawn Assets
============
The spawn asset type represents the weighted chances of an individual item, vehicle, or animal spawning at an any given spawn point. Create custom spawn tables that can be used on custom, curated, and official maps.
**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.
**Type** *enum* (``Spawn``)
**ID** *uint16*: Must be a unique identifier. IDs 1‒1000 are reserved for official content.
Tables
------
Tables are the assets spawned from the spawner, referenced by ID. These could be additional spawn tables; or individual assets like items, vehicles, and animals.
**Tables**: list of dictionaries. Each dictionary entry can contain these properties:
**Guid** :ref:`GUID <doc_data_guid>`: GUID of an asset to spawn or a spawn table to recursively spawn a child from. Used if ``LegacySpawnId`` and ``LegacyAssetId`` are both unset or zero.
**LegacySpawnId** *uint16*: ID of a spawn table to recursively spawn a child from. Use of ``Guid`` is encouraged instead to prevent ID conflicts between mods.
**LegacyAssetId** *uint16*: ID of asset to spawn. Use of ``Guid`` is encouraged instead to prevent ID conflicts between mods.
**Weight** *int32*: Weight of this entry in the table.
For example, this configuration has a 90% chance of spawning a Military Magazine and a 10% chance of spawning an Eaglefire:
.. code-block:: text
Tables
[
{
// Military Magazine
Guid dbfb1d0d11ca438e9dffb95f76e61274
Weight 180
}
{
// Eaglefire
Guid b03d581a5c1a490f995f8deba57b0f17
Weight 20
}
]
.. note:: This older format is used by most spawn assets. The newer format is recommended because it is more user-friendly, but the older format will continue to be supported.
**Tables** *int32*: Total number of children.
**Table_#_Spawn_ID** *uint16*: ID of a spawn table to recursively spawn a child from.
**Table_#_Asset_ID** *uint16*: ID of asset to spawn.
**Table_#_Weight** *int32*: Weight of this child in the table.
**Table_#_GUID** :ref:`GUID <doc_data_guid>`: GUID of an asset to spawn or a spawn table to recursively spawn a child from. Used if ``Spawn_ID`` and ``Asset_ID`` are both unset or zero.
Roots
-----
Roots are the spawners that your spawn table will attach itself to. This is useful when adding new spawn tables to preexisting spawn tables, such as those used by official maps. Tables are the things that will get spawned by your spawner. A spawner at the bottom of the chain will be entirely assetIDs, whereas one near the top will likely be entirely spawnIDs.
**Roots**: list of dictionaries. Each dictionary entry can contain these properties:
**Guid** :ref:`GUID <doc_data_guid>`: GUID of parent spawn table. Used if ``LegacySpawnId`` is unset or zero.
**LegacySpawnId** *uint16*: ID of parent spawn table. Use of ``Guid`` is encouraged instead to prevent ID conflicts between mods.
**IsOverride** *bool*: If true, zeroes the weight of default spawns in the parent spawn table. Useful for mods intended to replace official content, such as with total conversions.
**Weight** *int32*: Weight of this entry in the parent spawn table.
.. note:: This older format is used by most spawn assets. The newer format is recommended because it is more user-friendly, but the older format will continue to be supported.
**Roots** *int32*: Total number of parents.
**Root_#_Spawn_ID** *uint16*: ID of parent spawn table.
**Root_#_Override** *flag*: Zeroes the weight of default spawns in the parent spawn table. Useful for mods intended to replace official content, such as with total conversions.
**Root_#_Weight** *int32*: Weight of this entry in the parent spawn table.
**Root_#_GUID** :ref:`GUID <doc_data_guid>`: GUID of parent spawn table. Used if ``Spawn_ID`` is unset or zero.
Exporting Legacy Spawn Tables
-----------------------------
Legacy spawn tables can be created within the level editor. For the most, using the legacy spawn system is probably fine for most modded maps. But if you would like to take advantage of automatically keeping up-to-date with new official content—along with better supporting modded content on your map—then you should create spawn assets instead.
You might have already created some legacy spawn tables within the level editor. Fortunately, it is fairly straightforward to export those tables as spawn assets!
Open your map in the level editor. When you are ready to export, open the pause menu. Next to the button called "Legacy Spawns", enter a number above ``1000`` that should be used as the starting ID for your converted tables. Clicking the "Legacy Spawns" button will now generate spawn assets based on your legacy spawn tables.
This process will usually only take a couple seconds. As part of this process, all of the legacy spawn tables on your map will be automatically updated to point to your newly-created spawn assets instead. You should save the game before exiting.
These files will appear within a subfolder named "Exported_Legacy_Spawn_Tables", located within your map's folder. Root tables are prefixed with the map's name, while the converted tiers have been prefixed with the table's name. To start using your converted tables, create a folder named "Bundles" within your map folder, and move the contents of the "Exported_Legacy_Spawn_Tables" folder into it.
.. tip::
You can use the "Proxy Tables" button to generate empty spawn asset files instead! This is a quick way to get started with creating spawn assets on a newly-created map, where you do not have any legacy spawn tables that need to be converted.
Along with converting the map's legacy spawn tables, the game will generate a spreadsheet named "IDs.csv". This spreadsheet can be used to more easily keep track of the IDs of each of your spawn assets.
================================================
FILE: assets/stereo-song-asset.rst
================================================
.. _doc_assets_stereo_song:
Stereo Song Assets
==================
Defines a music track that can be played on the in-game stereo item. (Or any custom music player item for that matter.) For an example refer to ``Unturned_Theme.asset`` in the Songs folder.
Asset Properties Reference
--------------------------
**Type** *string*: ``SDG.Unturned.StereoSongAsset``
**Title** string: display text to show in the music player menu. If a localization .dat file is present the ``Name`` key will be used, or a translation reference can be used. Examples:
.. code-block:: unturnedasset
"Title" "My song"
OR
**Name** in {Language}.dat file
OR
.. code-block:: unturnedasset
"Title"
{
"Namespace" "SDG"
"Token" "Stereo_Songs.Unturned_Theme.Title"
}
**Song** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: audio clip to play. Can either be a newer master bundle pointer or an older content pointer. Examples:
.. code-block:: unturnedasset
"Song"
{
"MasterBundle" "core.masterbundle"
"AssetPath" "Effects/Ambience/Cave_0/Cave_0.ogg"
}
OR
.. code-block:: unturnedasset
"Song"
{
"Name" "core.content"
"Path" "assets/resources/bundles/songs/unturned_theme.mp3"
}
**Link_URL** *string*: Optional URL to open in web browser when external link button is clicked.
**Is_Loop** *bool*: Whether audio source should loop. Recommend **NOT** using .mp3 format for looping music.
================================================
FILE: assets/tag-asset.rst
================================================
.. _doc_assets_tag:
Tag Assets
==========
Although **tags** have some display properties, their primary purpose is to act as a unique identifier shared across multiple assets. This makes them especially useful for cross-mod compatibility.
Currently, tags are used in two ways:
1. Workstation crafting capabilities.
2. Blueprint categorization.
**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.
**Type** ``Tag``
Tag Properties
--------------
**NameColor** :ref:`color <doc_data_color>`: Optional override for color of name label in the user interface.
**HasIcon** :ref:`bool <doc_data_builtin_types>`: If true, the game will expect an Icon texture in the asset bundle. Defaults to true.
**IconPath** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Overrides where to load Icon texture from.
**TintIcon** :ref:`bool <doc_data_builtin_types>`: If true, tints the icon according to player's foreground color preference. Defaults to true. Tinted icons are typically white #ffffff to fully change color. If your icons are colorful you may want to set this to false.
Localization
------------
**Name** *string*: Display name in user interfaces.
================================================
FILE: assets/unity-upgrade.rst
================================================
.. _doc_unity_upgrade:
Upgrading Unity Version
=======================
This page covers the various engine upgrades that *Unturned* has undergone, and the important changes from them. While much of the older information is unlikely to still be relevant, it may provide some insight on the off chance that you are updating a particularly old mod, or referencing a tutorial created for a previous Unity version.
From Unity 5 LTS to 2017 LTS
----------------------------
The upgrade from Unity 5.5 to 2017.4 was a large change, and any mods created in Unity 5 are no longer compatible with the game. For archival purposes, the Unity 5.5 LTS version of the game remains available from the "unity-5.5" beta branch.
There were two key reasons for going through an engine upgrade. First, Unity 2017 marked the start of Unity's annual releases as they focused on stability, and performance could be improved by removing workarounds for some now-resolved Unity bugs. Second, Apple deprecated their OpenGL support, so supporting 2017.4's Metal graphics API would be important for macOS players.
Master bundles were introduced to make updating mods easier.
Master Bundles
``````````````
Rather than exporting each bundle as individual .unity3d files, you can now export multiple bundles into a combined **.masterbundle**. Master bundles are not required, but they are more efficient when it comes to time and performance. However, they are not *required*, and you may find it easier to quickly iterate on a .unity3d bundle.
If the game detects a master bundle file, it will load bundles from sub-directories using their relative folder path.
For example, ``MyModBundles/Items/Guns/MyGunItem.dat`` could be the path to an item's .dat file. If ``MyModBundles`` contains a master bundle, it will try to load all Unity files using the relative path ``/Items/Guns``. It is important for .dat folders and Unity folders to line up, 1:1.
Installing the Tools
````````````````````
Copy all of the files from ``Unturned/Bundles/Sources/Tools`` into the ``.../Assets/Editor`` directory of your Unity project. The **MasterBundleTool** will now be available from **Window > Unturned**. To use this tool, first assign your folder to an AssetBundle, and then export your bundles to a location that contains a corresponding MasterBundle.dat file.
Shaders can be imported from the ``All_Shaders.unitypackage`` (also located in a subdirectory of ``Sources``). We recommend using official shaders to improve compatibility with base game content.
Exporting from Unity
````````````````````
.. attention::
This section of the documentation is admittedly rather old, and it should eventually be moved to a better spot. Fortunately—these steps are still accurate, and the information below has been revised recently. *[2024 November]*
Exporting requires some initial setup within Unity and the target location for your exported master bundle.
In Unity, select the folder within the Project Browser that contains your bundles. Assign it to an AssetBundle from the Inspector. If you haven't created one yet, this is the time to do so. For example, vanilla/official bundles are in an AssetBundle named "core.masterbundle", while the curated Hawaii map's bundles are in "hawaii.masterbundle".
Open the Master Bundle Tool. Select your AssetBundle from the dropdown. If your mod should be fully compatible with MacOS and Linux devices, you will need to check the "Multi-platform" option before exporting.
.. tip::
When you're still working on your mod, you don't need to enable multi-platform support! This option can be toggled at any time. By only enabling this for release candidates, you can cut down on build time while you're still iterating.
Clicking the "..." button will let you select a target location to export the master bundle into. Before you can proceed, you will need a MasterBundle.dat file in that location.
Navigate to your target location. Any folder that would contain a master bundle needs a **MasterBundle.dat** file. When the game traverses the file hierarchy, it will check for this file, and if present it will assume all sub-folders should be redirected into that master bundle.
Create this file at your target location. You should configure the following options in your MasterBundle.dat file:
- | **Asset_Bundle_Name**: Filename of the Windows master bundle exported from Unity. For example, ``hawaii.masterbundle``.
- | **Asset_Prefix**: Filepath to the folder you selected as an AssetBundle in Unity. For example, your path could be ``Assets/MyModBundles``. In which case, the game could look for an item in ``Assets/MyModBundles/Items/Guns``.
.. note::
Bundled assets have a few optional properties they can use. The **Exclude_From_Master_Bundle** flag will cause that .dat file to ignore any parent MasterBundles in the folder hierarchy, and instead look for an individual .unity3d file. The **Master_Bundle_Override** property lets you specify the name of a master bundle to redirect to. **Bundle_Override_Path** can be used to have multiple items share the same setup in Unity (such as how the vanilla note objects share the same model), or combined with the previous property to use models from other master bundles (e.g., if you wanted to use the Eaglefire's model but give it custom stats).
Back in Unity, you can now export your master bundle.
Troubleshooting
```````````````
Colors too light or dark in-game
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Most likely the Color Space setting in your Unity project needs adjusting. Navigate to Edit > Project Settings > Player. Under the Other Settings section change Color Space to Linear.
If that doesn't work, double-check that sRGB is enabled on your textures.
Devkit Foliage
~~~~~~~~~~~~~~
Materials default to instancing disabled now, so enable the Instancing flag in the Unity material inspector and rebuild the asset bundle.
From Unity 2017 LTS to 2018 LTS
-------------------------------
For archival purposes, the Unity 2017.4 LTS version of the game remains available from the "unity-2017.4" beta branch.
Asset Bundles
`````````````
Older .unity3d/.content/.masterbundle files should work properly without needing any update unless they use custom shaders. The game automatically tries to consolidate their shaders with the latest versions during loading. Once re-exported, Asset_Bundle_Version can be set to 3 in MasterBundle.dat or individual .dat files to disable this shader consolidation step.
Some of the slower asset checks like finding missing meshes have been made optional. Running the game with the "-ValidateAssets" command-line option enables them, and is recommended while working on new content.
Unity Packages
``````````````
All example content has been updated for 2018 LTS, and now has a consistent export process to ensure the contents are kept valid. What were once individual packages (e.g. All_Shaders.unitypackage) have been merged into a single ExampleAssets.unitypackage in the Extras/Sources/Examples directory.
Logging / Server Console
````````````````````````
Usage of Unity's built-in Debug.Log has been replaced with logging to the Client.log or Server_XYZ.log files in the Logs folder. This works around conflict with standard output on the Linux server, so -logfile redirect workarounds should no longer be necessary. -ThreadedConsole implementation has been made the default, but can be disabled by -LegacyConsole.
Workshop
````````
Uploads from 2018 LTS are incompatible with past versions of the game, and a warning message is shown when loading newer content in the 2017 LTS version.
Platforms
`````````
Linux 32-bit and MacOS 32-bit have been removed in favor of the 64-bit versions. Servers that were still using the outdated Linux 32-bit depot should update to the 64-bit Linux dedicated server.
Headless server files have been removed from the player Linux depot, and are instead only in the dedicated server Linux depot. Windows headless mode is now supported in 2018 LTS, and is enabled for the Windows dedicated server depot.
From Unity 2018 LTS to 2019 LTS
-------------------------------
There are very few notable changes from this upgrade. For archival purposes, the Unity 2018 LTS version of the game remains available from the "unity-2018" beta branch.
By default, Unity no longer supports importing multiple animations from a single .blend file. Exporting to an exchange format like .fbx is recommended.
.. tip::
This is recommended for meshes/models as well! The base game has always handled its own assets like this, as well.
You can find more details in `case #1186253 <https://issuetracker.unity3d.com/issues/using-multiple-animation-clips-in-blender-not-all-animation-clips-are-imported-using-a-blend-file>`_ on the Unity issue tracker.
================================================
FILE: assets/vehicle-asset.rst
================================================
.. _doc_assets_vehicle:
Vehicle Assets
==============
The **VehicleAsset** class is used by vehicles. These can be driven by players, have support for gun turrets, can function as a storage container for items, and more.
Game Data File
--------------
The ``GUID`` and ``Type`` properties are required by all vehicle assets. Many vehicle assets will want to include ``Engine`` and ``Rarity`` as well. The ``ID`` property used to be required, but this is no longer necessary.
Any properties from parent classes that are required—or recommended—are listed in the table below.
.. list-table::
:widths: 30 40 30
:header-rows: 1
* - Class
- Property Name
- Required Value
* - :ref:`Asset <doc_assets_vehicle>`
- :ref:`GUID <doc_assets_vehicle:guid>`
-
* - :ref:`Asset <doc_assets_vehicle>`
- :ref:`ID <doc_assets_vehicle:id>`
-
* - :ref:`Asset <doc_assets_vehicle>`
- :ref:`Type <doc_assets_vehicle:type>`
- ``Vehicle``
* - :ref:`VehicleAsset <doc_assets_vehicle>`
- :ref:`Engine <doc_assets_vehicle:engine>`
-
Properties
``````````
.. list-table:: Uncategorized
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`AdditionalTransparentSections <doc_assets_vehicle:additionaltransparentsections>`
- :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`
-
* - :ref:`Bicycle <doc_assets_vehicle:bicycle>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Bicycle_Anim_Speed <doc_assets_vehicle:bicycle_anim_speed>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Buildable_Placement_Rule <doc_assets_vehicle:buildable_placement_rule>`
- :ref:`EVehicleBuildablePlacementRule <doc_assets_vehicle:evehiclebuildableplacementrule>`
- ``None``
* - :ref:`Bypass_Hash_Verification <doc_assets_vehicle:bypass_hash_verification>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Cam_Driver_Offset <doc_assets_vehicle:cam_driver_offset>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Cam_Follow_Distance <doc_assets_vehicle:cam_follow_distance>`
- :ref:`float32 <doc_data_builtin_types>`
- ``5.5``
* - :ref:`Cam_Passenger_Offset <doc_assets_vehicle:cam_passenger_offset>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Can_Be_Locked <doc_assets_vehicle:can_be_locked>`
- :ref:`bool <doc_data_builtin_types>`
- ``true``
* - :ref:`Crawler <doc_assets_vehicle:crawler>`
- :ref:`flag <doc_data_flag>`
- *deprecated*
* - :ref:`CrawlerTrackTilingMaterials <doc_assets_vehicle:crawlertracktilingmaterials>`
- :ref:`list of CrawlerTrackTilingMaterial <doc_assets_vehicle:crawlertracktilingmaterial_dictionary>`
-
* - :ref:`Drops_Max <doc_assets_vehicle:drops_max>`
- :ref:`uint8 <doc_data_builtin_types>`
- ``7``
* - :ref:`Drops_Min <doc_assets_vehicle:drops_min>`
- :ref:`uint8 <doc_data_builtin_types>`
- ``3``
* - :ref:`Drops_Table_ID <doc_assets_vehicle:drops_table_id>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``962``
* - :ref:`Engine <doc_assets_vehicle:engine>`
- :ref:`EEngine <doc_assets_vehicle:eengine>`
- ``Car``
* - :ref:`Exit <doc_assets_vehicle:exit>`
- :ref:`float32 <doc_data_builtin_types>`
- ``2``
* - :ref:`GUID <doc_assets_vehicle:guid>`
- :ref:`doc_data_guid`
-
* - :ref:`Has_Clip_Prefab <doc_assets_vehicle:has_clip_prefab>`
- :ref:`bool <doc_data_builtin_types>`
- ``true``
* - :ref:`Has_Horn <doc_assets_vehicle:has_horn>`
- :ref:`bool <doc_data_builtin_types>`
- See description
* - :ref:`HornAudioClip <doc_assets_vehicle:hornaudioclip>`
- :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`
-
* - :ref:`ID <doc_assets_vehicle:id>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
* - :ref:`IgnitionAudioClip <doc_assets_vehicle:ignitionaudioclip>`
- :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`
-
* - :ref:`LockMouse <doc_assets_vehicle:lockmouse>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Num_Steering_Tires <doc_assets_vehicle:num_steering_tires>`
- :ref:`int32 <doc_data_builtin_types>`
- *deprecated*
* - :ref:`Rarity <doc_assets_vehicle:rarity>`
- :ref:`doc_data_eitemrarity`
- ``Common``
* - :ref:`Reclined <doc_assets_vehicle:reclined>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Should_Spawn_Seat_Capsules <doc_assets_vehicle:should_spawn_seat_capsules>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`Steering_Tire_# <doc_assets_vehicle:steering_tire_#>`
- :ref:`int32 <doc_data_builtin_types>`
- *deprecated*
* - :ref:`Tire_ID <doc_assets_vehicle:tire_id>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``1451``
* - :ref:`Trunk_Storage_X <doc_assets_vehicle:trunk_storage_x>`
- :ref:`uint8 <doc_data_builtin_types>`
- ``0``
* - :ref:`Trunk_Storage_Y <doc_assets_vehicle:trunk_storage_y>`
- :ref:`uint8 <doc_data_builtin_types>`
- ``0``
* - :ref:`Valid_Speed_Down <doc_assets_vehicle:valid_speed_down>`
- :ref:`float32 <doc_data_builtin_types>`
-
* - :ref:`Valid_Speed_Horizontal <doc_assets_vehicle:valid_speed_horizontal>`
- :ref:`float32 <doc_data_builtin_types>`
-
* - :ref:`Valid_Speed_Up <doc_assets_vehicle:valid_speed_up>`
- :ref:`float32 <doc_data_builtin_types>`
-
* - :ref:`Zip <doc_assets_vehicle:zip>`
- :ref:`flag <doc_data_flag>`
-
.. list-table:: Handling
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Air_Steer_Max <doc_assets_vehicle:air_steer_max>`
- :ref:`float32 <doc_data_builtin_types>`
- See description
* - :ref:`Air_Steer_Min <doc_assets_vehicle:air_steer_min>`
- :ref:`float32 <doc_data_builtin_types>`
- See description
* - :ref:`Air_Turn_Responsiveness <doc_assets_vehicle:air_turn_responsiveness>`
- :ref:`float32 <doc_data_builtin_types>`
- ``2``
* - :ref:`Brake <doc_assets_vehicle:brake>`
- :ref:`float32 <doc_data_builtin_types>`
-
* - :ref:`Center_Of_Mass <doc_assets_vehicle:center_of_mass>`
- :ref:`vector3 <doc_data_vector3>`
-
* - :ref:`Carjack_Force_Multiplier <doc_assets_vehicle:carjack_force_multiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`CrawlerTrackSteering_Torque <doc_assets_vehicle:crawlertracksteering_torque>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`CrawlerTrackSteering_SidewaysFrictionMultiplier <doc_assets_vehicle:crawlertracksteering_sidewaysfrictionmultiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`CrawlerTrackSteering_MaxSpeedScale <doc_assets_vehicle:crawlertracksteering_maxspeedscale>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`Engine_Force_Multiplier <doc_assets_vehicle:engine_force_multiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`Lift <doc_assets_vehicle:lift>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Override_Center_Of_Mass <doc_assets_vehicle:override_center_of_mass>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`Physics_Profile <doc_assets_vehicle:physics_profile>`
- :ref:`GUID <doc_data_guid>`
- See description
* - :ref:`RollAngularVelocityDamping <doc_assets_vehicle:rollangularvelocitydamping>`
- :ref:`float32 <doc_data_builtin_types>`
- ``-1.0``
* - :ref:`Sleds <doc_assets_vehicle:sleds>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Speed_Max <doc_assets_vehicle:speed_max>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Speed_Min <doc_assets_vehicle:speed_min>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Steering_Angle_FullSpeed_Factor <doc_assets_vehicle:steering_angle_fullspeed_factor>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Steering_Angle_Max <doc_assets_vehicle:steering_angle_max>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Steering_Angle_Turn_Speed <doc_assets_vehicle:steering_angle_turn_speed>`
- :ref:`float32 <doc_data_builtin_types>`
- See description
* - :ref:`Steering_LeaningForceMultiplier <doc_assets_vehicle:steering_leaningforcemultiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``-1.0``
* - :ref:`Steering_LeaningForce_ScaleWithSpeed <doc_assets_vehicle:steering_leaningforce_scalewithspeed>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`Steering_LeaningForce_SpeedExponent <doc_assets_vehicle:steering_leaningforce_speedexponent>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`Traction <doc_assets_vehicle:traction>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Wheel_Collider_Mass_Override <doc_assets_vehicle:wheel_collider_mass_override>`
- :ref:`float32 <doc_data_builtin_types>`
- ``null``
* - :ref:`WheelBalancing_ForceMultiplier <doc_assets_vehicle:wheelbalancing_forcemultiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``-1.0``
* - :ref:`WheelBalancing_UprightExponent <doc_assets_vehicle:wheelbalancing_uprightexponent>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.5``
* - :ref:`WheelConfigurations <doc_assets_vehicle:wheelconfigurations>`
- :ref:`list of VehicleWheelConfiguration <doc_assets_vehicle:vehiclewheelconfiguration_dictionary>`
-
.. list-table:: Engine RPM and Gears
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`EngineIdleRPM <doc_assets_vehicle:engineidlerpm>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1000.0``
* - :ref:`EngineMaxRPM <doc_assets_vehicle:enginemaxrpm>`
- :ref:`float32 <doc_data_builtin_types>`
- ``7000.0``
* - :ref:`EngineMaxTorque <doc_assets_vehicle:enginemaxtorque>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`EngineRPM_DecreaseRate <doc_assets_vehicle:enginerpm_decreaserate>`
- :ref:`float32 <doc_data_builtin_types>`
- ``-1.0``
* - :ref:`EngineRPM_IncreaseRate <doc_assets_vehicle:enginerpm_increaserate>`
- :ref:`float32 <doc_data_builtin_types>`
- ``-1.0``
* - :ref:`EngineRPMMismatch_TorqueReduction_Enabled <doc_assets_vehicle:enginerpmmismatch_torquereduction_enabled>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`EngineRPMMismatch_TorqueReduction_Threshold <doc_assets_vehicle:enginerpmmismatch_torquereduction_threshold>`
- :ref:`float <doc_data_builtin_types>`
- ``0.0``
* - :ref:`EngineRPMMismatch_GearShift_PreventShifting <doc_assets_vehicle:enginerpmmismatch_gearshift_preventshifting>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`EngineRpmMismatch_GearShift_UpMinThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_upminthreshold>`
- :ref:`float <doc_data_builtin_types>`
- ``0.0``
* - :ref:`EngineRpmMismatch_GearShift_UpMaxThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_upmaxthreshold>`
- :ref:`float <doc_data_builtin_types>`
- ``0.0``
* - :ref:`EngineRpmMismatch_GearShift_DownMinThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_downminthreshold>`
- :ref:`float <doc_data_builtin_types>`
- ``0.0``
* - :ref:`EngineRpmMismatch_GearShift_DownMaxThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_downmaxthreshold>`
- :ref:`float <doc_data_builtin_types>`
- ``0.0``
* - :ref:`ForwardGearRatios <doc_assets_vehicle:forwardgearratios>`
- :ref:`list of float32 <doc_data_builtin_types>`
-
* - :ref:`GearShift_AllowSkippingGears <doc_assets_vehicle:gearshift_allowskippinggears>`
- :ref:`bool <doc_data_builtin_types>`
- ``true``
* - :ref:`GearShift_DownThresholdRPM <doc_assets_vehicle:gearshift_downthresholdrpm>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1500.0``
* - :ref:`GearShift_Duration <doc_assets_vehicle:gearshift_duration>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.5``
* - :ref:`GearShift_Interval <doc_assets_vehicle:gearshift_interval>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`GearShift_UpThresholdRPM <doc_assets_vehicle:gearshift_upthresholdrpm>`
- :ref:`float32 <doc_data_builtin_types>`
- ``5500.0``
* - :ref:`GearShift_VisibleInHUD <doc_assets_vehicle:gearshift_visibleinhud>`
- :ref:`bool <doc_data_builtin_types>`
- ``true``
* - :ref:`ReverseGearRatio <doc_assets_vehicle:reversegearratio>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
.. list-table:: Engine Sound
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`EngineSound <doc_assets_vehicle:enginesound>`
- :ref:`RpmEngineSoundConfiguration <doc_assets_vehicle:rpmenginesoundconfiguration_dictionary>`
-
* - :ref:`EngineSound_Type <doc_assets_vehicle:enginesound_type>`
- :ref:`EVehicleEngineSoundType <doc_assets_vehicle:evehicleenginesoundtype>`
- ``Legacy``
* - :ref:`Pitch_Drive <doc_assets_vehicle:pitch_drive>`
- :ref:`float32 <doc_data_builtin_types>`
-
* - :ref:`Pitch_Idle <doc_assets_vehicle:pitch_idle>`
- :ref:`float32 <doc_data_builtin_types>`
-
.. list-table:: Health and Armor
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Bumper_AnimalDamage <doc_assets_vehicle:bumper_animaldamage>`
- :ref:`float32 <doc_data_builtin_types>`
- ``15.0``
* - :ref:`Bumper_Invulnerable <doc_assets_vehicle:bumper_invulnerable>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Bumper_Multiplier <doc_assets_vehicle:bumper_multiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`Bumper_ObjectDamage <doc_assets_vehicle:bumper_objectdamage>`
- :ref:`float32 <doc_data_builtin_types>`
- ``30.0``
* - :ref:`Bumper_PlayerDamage <doc_assets_vehicle:bumper_playerdamage>`
- :ref:`float32 <doc_data_builtin_types>`
- ``10.0``
* - :ref:`Bumper_ResourceDamage <doc_assets_vehicle:bumper_resourcedamage>`
- :ref:`float32 <doc_data_builtin_types>`
- ``85.0``
* - :ref:`Bumper_SelfDamageMultiplier <doc_assets_vehicle:bumper_selfdamagemultiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`Bumper_SpeedDamageThreshold <doc_assets_vehicle:bumper_speeddamagethreshold>`
- :ref:`float32 <doc_data_builtin_types>`
- ``3.0``
* - :ref:`Bumper_ZombieDamage <doc_assets_vehicle:bumper_zombiedamage>`
- :ref:`float32 <doc_data_builtin_types>`
- ``15.0``
* - :ref:`Can_Repair_While_Seated <doc_assets_vehicle:can_repair_while_seated>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`Child_Explosion_Armor_Multiplier <doc_assets_vehicle:child_explosion_armor_multiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.2``
* - :ref:`Environment_Invulnerable <doc_assets_vehicle:environment_invulnerable>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Explosions_Invulnerable <doc_assets_vehicle:explosions_invulnerable>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Health <doc_assets_vehicle:health>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
* - :ref:`Health_Max <doc_assets_vehicle:health_max>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
* - :ref:`Health_Min <doc_assets_vehicle:health_min>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
* - :ref:`Invulnerable <doc_assets_vehicle:invulnerable>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Passenger_Explosion_Armor <doc_assets_vehicle:passenger_explosion_armor>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1``
* - :ref:`Tires_Invulnerable <doc_assets_vehicle:tires_invulnerable>`
- :ref:`flag <doc_data_flag>`
-
.. list-table:: Fuel
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Fuel <doc_assets_vehicle:fuel>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
* - :ref:`Fuel_Burn_Rate <doc_assets_vehicle:fuel_burn_rate>`
- :ref:`float32 <doc_data_builtin_types>`
- See description
* - :ref:`Fuel_Min <doc_assets_vehicle:fuel_min>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
* - :ref:`Fuel_Max <doc_assets_vehicle:fuel_max>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
.. list-table:: Battery
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Battery_Burn_Rate <doc_assets_vehicle:battery_burn_rate>`
- :ref:`float32 <doc_data_builtin_types>`
- ``20``
* - :ref:`Battery_Charge_Rate <doc_assets_vehicle:battery_charge_rate>`
- :ref:`float32 <doc_data_builtin_types>`
- ``20``
* - :ref:`Battery_Powered <doc_assets_vehicle:battery_powered>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Battery_Spawn_Charge_Multiplier <doc_assets_vehicle:battery_spawn_charge_multiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1``
* - :ref:`BatteryMode_Driving <doc_assets_vehicle:batterymode_driving>`
- :ref:`doc_data_ebatterymode`
- ``Charge``
* - :ref:`BatteryMode_Empty <doc_assets_vehicle:batterymode_empty>`
- :ref:`doc_data_ebatterymode`
- ``None``
* - :ref:`BatteryMode_Headlights <doc_assets_vehicle:batterymode_headlights>`
- :ref:`doc_data_ebatterymode`
- ``Burn``
* - :ref:`BatteryMode_Sirens <doc_assets_vehicle:batterymode_sirens>`
- :ref:`doc_data_ebatterymode`
- ``Burn``
* - :ref:`Can_Steal_Battery <doc_assets_vehicle:can_steal_battery>`
- :ref:`bool <doc_data_builtin_types>`
- ``true``
* - :ref:`Cannot_Spawn_With_Battery <doc_assets_vehicle:cannot_spawn_with_battery>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Default_Battery <doc_assets_vehicle:default_battery>`
- :ref:`doc_data_guid`
- ``098b13be34a7411db7736b7f866ada69``
.. list-table:: Stamina
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Stamina_Boost <doc_assets_vehicle:stamina_boost>`
- :ref:`float32 <doc_data_builtin_types>`
-
* - :ref:`Stamina_Powered <doc_assets_vehicle:stamina_powered>`
- :ref:`flag <doc_data_flag>`
-
.. list-table:: Paintability
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`DefaultPaintColor_Configuration <doc_assets_vehicle:defaultpaintcolor_configuration>`
- :ref:`VehicleRandomPaintColorConfiguration <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_dictionary>`
-
* - :ref:`DefaultPaintColor_Mode <doc_assets_vehicle:defaultpaintcolor_mode>`
- :ref:`EVehicleDefaultPaintColorMode <doc_assets_vehicle:evehicledefaultpaintcolormode>`
- See description
* - :ref:`DefaultPaintColors <doc_assets_vehicle:defaultpaintcolors>`
- :ref:`list of colors <doc_data_color>`
-
* - :ref:`IsPaintable <doc_assets_vehicle:ispaintable>`
- :ref:`bool <doc_data_builtin_types>`
-
* - :ref:`PaintableSections <doc_assets_vehicle:paintablesections>`
- :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`
-
.. list-table:: Explosion
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Explosion <doc_assets_vehicle:explosion>`
- :ref:`GUID <doc_data_guid>` or :ref:`uint16 <doc_data_builtin_types>`
-
* - :ref:`ExplosionBurnMaterialSections <doc_assets_vehicle:explosionburnmaterialsections>`
- :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`
-
* - :ref:`Explosion_Force_Multiplier <doc_assets_vehicle:explosion_force_multiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`Explosion_Max_Force <doc_assets_vehicle:explosion_max_force>`
- :ref:`vector3 <doc_data_vector3>`
- ``(0, 1024, 0)``
* - :ref:`Explosion_Min_Force <doc_assets_vehicle:explosion_min_force>`
- :ref:`vector3 <doc_data_vector3>`
- ``(0, 1024, 0)``
* - :ref:`ShouldExplosionBurnMaterials <doc_assets_vehicle:shouldexplosionburnmaterials>`
- :ref:`bool <doc_data_builtin_types>`
- See description
* - :ref:`ShouldExplosionCauseDamage <doc_assets_vehicle:shouldexplosioncausedamage>`
- :ref:`bool <doc_data_builtin_types>`
- See description
.. list-table:: Turret
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Turret_#_Ignore_Aim_Camera <doc_assets_vehicle:turret_ignore_aim_camera>`
- :ref:`flag <doc_data_flag>`
-
* - :ref:`Turret_#_Item_ID <doc_assets_vehicle:turret_item_id>`
- :ref:`uint16 <doc_data_builtin_types>`
- ``0``
* - :ref:`Turret_#_Pitch_Max <doc_assets_vehicle:turret_pitch_max>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Turret_#_Pitch_Min <doc_assets_vehicle:turret_pitch_min>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Turret_#_Seat_Index <doc_assets_vehicle:turret_seat_index>`
- :ref:`uint8 <doc_data_builtin_types>`
- ``0``
* - :ref:`Turret_#_Yaw_Max <doc_assets_vehicle:turret_yaw_max>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Turret_#_Yaw_Min <doc_assets_vehicle:turret_yaw_min>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Turrets <doc_assets_vehicle:turrets>`
- :ref:`uint8 <doc_data_builtin_types>`
- ``0``
.. list-table:: Train
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Train_Car_Length <doc_assets_vehicle:train_car_length>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Train_Track_Offset <doc_assets_vehicle:train_track_offset>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
* - :ref:`Train_Wheel_Offset <doc_assets_vehicle:train_wheel_offset>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
.. list-table:: Economy
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Shared_Skin_Lookup_ID <doc_assets_vehicle:shared_skin_lookup_id>`
- :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`
- See description
* - :ref:`Shared_Skin_Name <doc_assets_vehicle:shared_skin_name>`
- :ref:`string <doc_data_builtin_types>`
-
* - :ref:`Size2_Z <doc_assets_vehicle:size2_z>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0``
.. _doc_assets_vehicle:eengine:
EEngine Enumeration
```````````````````
.. list-table::
:widths: 25 75
:header-rows: 1
* - Named Value
- Description
* - ``Car``
- This vehicle is part of the Car category.
* - ``Plane``
- This vehicle is part of the Plane category.
* - ``Blimp``
- This vehicle is part of the Blimp category.
* - ``Boat``
- This vehicle is part of the Boat category.
* - ``Train``
- This vehicle is part of the Train category.
.. _doc_assets_vehicle:evehiclebuildableplacementrule:
EVehicleBuildablePlacementRule Enumeration
``````````````````````````````````````````
.. list-table::
:widths: 25 75
:header-rows: 1
* - Named Value
- Description
* - ``None``
- Vehicle does not override placement. This means that barricades can be attached *unless* the barricade sets :ref:`Allow_Placement_On_Vehicle <doc_item_asset_barricade>` to ``false`` (e.g., beds and sentry guns are often set to ``false``).
* - ``AlwaysAllow``
- Vehicle allows any barricade to be placed on it, regardless of the barricade's :ref:`Allow_Placement_On_Vehicle <doc_item_asset_barricade>` setting. Trains used to use this option, but it can be exploited to move beds into out-of-bounds areas (e.g., into other objects).
* - ``Block``
- Vehicle prevents any barricade form being placed on it.
.. _doc_assets_vehicle:evehicledefaultpaintcolormode:
EVehicleDefaultPaintColorMode
`````````````````````````````
.. list-table::
:widths: 25 75
:header-rows: 1
* - Named Value
- Description
* - ``None``
- Not configured.
* - ``List``
- Pick from the :ref:`DefaultPaintColors <doc_assets_vehicle:defaultpaintcolors>` list.
* - ``RandomHueOrGrayscale``
- Pick a random HSV using :ref:`DefaultPaintColor_Configuration <doc_assets_vehicle:defaultpaintcolor_configuration>`.
.. _doc_assets_vehicle:evehicleenginesoundtype:
EVehicleEngineSoundType Enumeration
```````````````````````````````````
.. list-table::
:widths: 25 75
:header-rows: 1
* - Named Value
- Description
* - ``Legacy``
- Default.
* - ``EngineRPMSimple``
- Set pitch and volume of a single clip according to engine RPM.
.. _doc_assets_vehicle:ewheelmotioneffectsmode:
EWheelMotionEffectsMode Enumeration
```````````````````````````````````
.. list-table::
:widths: 25 75
:header-rows: 1
* - Named Value
- Description
* - ``None``
- Turn off motion effects. Default for wheels not using collider pose.
* - ``BothDirections``
- Enable motion effects. Default for wheels using collider pose.
* - ``ForwardOnly``
- Enable motion effects, but turn them off while moving backward.
* - ``BackwardOnly``
- Enable motion effects, but turn them off while moving forward.
.. _doc_assets_vehicle:ewheelsteeringmode:
EWheelSteeringMode Enumeration
``````````````````````````````
.. list-table::
:widths: 25 75
:header-rows: 1
* - Named Value
- Description
* - ``None``
- Wheel does not affect steering.
* - ``SteeringAngle``
- Set WheelCollider steering angle according to Steer_Min and Steer_Max.
* - ``CrawlerTrack``
- Increase or decrease motor torque to rotate vehicle in-place.
.. _doc_assets_vehicle:ecrawlertrackforwardmode:
ECrawlerTrackForwardMode Enumeration
````````````````````````````````````
.. list-table::
:widths: 25 75
:header-rows: 1
* - Named Value
- Description
* - ``Auto``
- Assigns a forward mode based on wheel collider position. Wheels on the left side are ``Clockwise`` and wheels on the right side are ``CounterClockwise``.
* - ``Clockwise``
- Positive motor torque on this wheel rotates the vehicle clockwise.
* - ``CounterClockwise``
- Positive motor torque on this wheel rotates the vehicle counter-clockwise.
.. _doc_assets_vehicle:crawlertracktilingmaterial_dictionary:
CrawlerTrackTilingMaterial Dictionary
`````````````````````````````````````
.. list-table::
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Path <doc_assets_vehicle:crawlertracktilingmaterial_path>`
- :ref:`string <doc_data_builtin_types>`
-
* - :ref:`MaterialIndex <doc_assets_vehicle:crawlertracktilingmaterial_materialindex>`
- :ref:`int32 <doc_data_builtin_types>`
- ``0``
* - :ref:`WheelIndices <doc_assets_vehicle:crawlertracktilingmaterial_wheelindices>`
- :ref:`list of int32 <doc_data_builtin_types>`
-
* - :ref:`RepeatDistance <doc_assets_vehicle:crawlertracktilingmaterial_repeatdistance>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`UV_Direction <doc_assets_vehicle:crawlertracktilingmaterial_uv_direction>`
- :ref:`Vector2 <doc_data_builtin_types>`
- ``(0.0, 0.0)``
.. _doc_assets_vehicle:paintablevehiclesection_dictionary:
PaintableVehicleSection Dictionary
``````````````````````````````````
.. list-table::
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`Path <doc_assets_vehicle:paintablevehiclesection_path>`
- :ref:`string <doc_data_builtin_types>`
-
* - :ref:`MaterialIndex <doc_assets_vehicle:paintablevehiclesection_materialindex>`
- :ref:`int32 <doc_data_builtin_types>`
- ``0``
* - :ref:`AllMaterials <doc_assets_vehicle:paintablevehiclesection_allmaterials>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
.. _doc_assets_vehicle:rpmenginesoundconfiguration_dictionary:
RpmEngineSoundConfiguration Dictionary
``````````````````````````````````````
.. list-table::
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`IdlePitch <doc_assets_vehicle:rpmenginesoundconfiguration_idlepitch>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`IdleVolume <doc_assets_vehicle:rpmenginesoundconfiguration_idlevolume>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`MaxPitch <doc_assets_vehicle:rpmenginesoundconfiguration_maxpitch>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`MaxVolume <doc_assets_vehicle:rpmenginesoundconfiguration_maxvolume>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
.. _doc_assets_vehicle:vehiclerandompaintcolorconfiguration_dictionary:
VehicleRandomPaintColorConfiguration Dictionary
```````````````````````````````````````````````
.. list-table::
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`MinSaturation <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_minsaturation>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`MaxSaturation <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_maxsaturation>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`MinValue <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_minvalue>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`MaxValue <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_maxvalue>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`GrayscaleChance <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_grayscalechance>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
.. _doc_assets_vehicle:vehiclewheelconfiguration_dictionary:
VehicleWheelConfiguration Dictionary
````````````````````````````````````
.. list-table::
:widths: 40 40 20
:header-rows: 1
* - Property Name
- Type
- Default Value
* - :ref:`CanExplode <doc_assets_vehicle:wheelconfiguration_canexplode>`
- :ref:`bool <doc_data_builtin_types>`
- ``true``
* - :ref:`CopyColliderRpmIndex <doc_assets_vehicle:wheelconfiguration_copycolliderrpmindex>`
- :ref:`int32 <doc_data_builtin_types>`
- ``-1``
* - :ref:`CrawlerTrackForwardMode <doc_assets_vehicle:wheelconfiguration_crawlertrackforwardmode>`
- :ref:`doc_assets_vehicle:ecrawlertrackforwardmode`
- ``Auto``
* - :ref:`IsColliderPowered <doc_assets_vehicle:wheelconfiguration_iscolliderpowered>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`IsModelSteered <doc_assets_vehicle:wheelconfiguration_ismodelsteered>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`ModelPath <doc_assets_vehicle:wheelconfiguration_modelpath>`
- :ref:`string <doc_data_builtin_types>`
-
* - :ref:`ModelRadius <doc_assets_vehicle:wheelconfiguration_modelradius>`
- :ref:`float32 <doc_data_builtin_types>`
- ``-1.0``
* - :ref:`ModelSuspensionOffset <doc_assets_vehicle:wheelconfiguration_modelsuspensionoffset>`
- :ref:`float32 <doc_data_builtin_types>`
- ``0.0``
* - :ref:`ModelSuspensionSpeed <doc_assets_vehicle:wheelconfiguration_modelsuspensionspeed>`
- :ref:`float32 <doc_data_builtin_types>`
- ``-1.0``
* - :ref:`ModelUseColliderPose <doc_assets_vehicle:wheelconfiguration_modelusecolliderpose>`
- :ref:`bool <doc_data_builtin_types>`
- ``false``
* - :ref:`MotionEffects <doc_assets_vehicle:wheelconfiguration_motioneffects>`
- :ref:`doc_assets_vehicle:ewheelmotioneffectsmode`
- See description
* - :ref:`SteeringAngleMultiplier <doc_assets_vehicle:wheelconfiguration_steeringanglemultiplier>`
- :ref:`float32 <doc_data_builtin_types>`
- ``1.0``
* - :ref:`SteeringMode <doc_assets_vehicle:wheelconfiguration_steeringmode>`
- :ref:`doc_assets_vehicle:ewheelsteeringmode`
- ``None``
* - :ref:`WheelColliderPath <doc_assets_vehicle:wheelconfiguration_wheelcolliderpath>`
- :ref:`string <doc_data_builtin_types>`
-
Property Descriptions
`````````````````````
.. _doc_assets_vehicle:additionaltransparentsections:
AdditionalTransparentSections :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Materials to register as needing transparent sorting. Their render queue is periodically updated according to whether their pivot point is underwater.
----
.. _doc_assets_vehicle:air_steer_max:
Air_Steer_Max :ref:`float32 <doc_data_builtin_types>`
:::::::::::::::::::::::::::::::::::::::::::::::::::::
The angle to turn when moving quickly, when using ``Engine Plane``. Defaults to the value of ``Steer_Max``.
----
.. _doc_assets_vehicle:air_steer_min:
Air_Steer_Min :ref:`float32 <doc_data_builtin_types>`
:::::::::::::::::::::::::::::::::::::::::::::::::::::
The angle to turn when moving slowly, when using ``Engine Plane``. Defaults to the value of ``Steer_Min``.
----
.. _doc_assets_vehicle:air_turn_responsiveness:
Air_Turn_Responsiveness :ref:`float32 <doc_data_builtin_types>` ``2``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Sensitivity on steering while airborne, when using ``Engine Plane``.
----
.. _doc_assets_vehicle:battery_burn_rate:
Battery_Burn_Rate :ref:`float32 <doc_data_builtin_types>` ``20``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
This controls the rate at which battery charge decreases per second.
----
.. _doc_assets_vehicle:battery_charge_rate:
Battery_Charge_Rate :ref:`float32 <doc_data_builtin_types>` ``20``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
This controls the rate at which battery charge increases per second.
----
.. _doc_assets_vehicle:battery_powered:
Battery_Powered :ref:`flag <doc_data_flag>`
:::::::::::::::::::::::::::::::::::::::::::
The vehicle does not use fuel. For example, this flag is useful for creating electric vehicles.
----
.. _doc_assets_vehicle:battery_spawn_charge_multiplier:
Battery_Spawn_Charge_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Battery charge on a newly-spawned vehicle is multiplied by this [0, 1] number. Setting this to a number less than ``1`` will result in the vehicle spawning with less battery charge than normal.
----
.. _doc_assets_vehicle:batterymode_driving:
BatteryMode_Driving :ref:`doc_data_ebatterymode` ``Charge``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
How the vehicle battery should behave when a player is driving it.
----
.. _doc_assets_vehicle:batterymode_empty:
BatteryMode_Empty :ref:`doc_data_ebatterymode` ``None``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
How the vehicle battery should behave when the vehicle is empty.
----
.. _doc_assets_vehicle:batterymode_headlights:
BatteryMode_Headlights :ref:`doc_data_ebatterymode` ``Burn``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
How the vehicle battery should behave when the headlights are on.
----
.. _doc_assets_vehicle:batterymode_sirens:
BatteryMode_Sirens :ref:`doc_data_ebatterymode` ``Burn``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
How the vehicle battery should behave when the siren is on.
----
.. _doc_assets_vehicle:bicycle:
Bicycle :ref:`flag <doc_data_flag>`
:::::::::::::::::::::::::::::::::::
Player character should use a bicycling animation.
----
.. _doc_assets_vehicle:bicycle_anim_speed:
Bicycle_Anim_Speed :ref:`float32 <doc_data_builtin_types>` ``0``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Multiplier on the speed of the bicycling animation.
----
.. _doc_assets_vehicle:brake:
Brake :ref:`float32 <doc_data_builtin_types>`
:::::::::::::::::::::::::::::::::::::::::::::
The amount of braking force to apply.
----
.. _doc_assets_vehicle:buildable_placement_rule:
Buildable_Placement_Rule :ref:`EVehicleBuildablePlacementRule <doc_assets_vehicle:evehiclebuildableplacementrule>` ``None``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
This property overrides how barricades can be attached to the vehicle. View the :ref:`EVehicleBuildablePlacementRule <doc_assets_vehicle:evehiclebuildableplacementrule>` documentation for more information about the behavior of each option. Note that the ``Bypass_Buildable_Mobility`` gameplay config option, when ``true``, will always take priority over this property.
The ``Supports_Mobile_Buildables`` flag predates this property, and has since been deprecated. Its behavior can be replicated by using this property with the ``AlwaysAllow`` value instead.
----
.. _doc_assets_vehicle:bumper_animaldamage:
Bumper_AnimalDamage :ref:`float32 <doc_data_builtin_types>` ``15``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Base damage to animals when traveling at 1 m/s (before speed and other multipliers apply).
----
.. _doc_assets_vehicle:bumper_invulnerable:
Bumper_Invulnerable :ref:`flag <doc_data_flag>`
:::::::::::::::::::::::::::::::::::::::::::::::
The vehicle cannot be damaged by collisions (such as with other vehicles, objects, placeables, or entities).
----
.. _doc_assets_vehicle:bumper_multiplier:
Bumper_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1.0``
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Multiplies vehicle speed (in m/s) at time of collision. If result is less than ``Bumper_SpeedDamageThreshold``, no damage is applied.
The multiplied speed is applied to outgoing damage. For example: if speed is 4 m/s with a ``Bumper_Multiplier`` of 2 and a base damage of 10, 80 damage is applied.
----
.. _doc_assets_vehicle:bumper_objectdamage:
Bumper_ObjectDamage :ref:`float32 <doc_data_builtin_types>` ``30``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Base damage to objects when traveling at 1 m/s (before speed and other multipliers apply).
----
.. _doc_assets_vehicle:bumper_playerdamage:
Bumper_PlayerDamage :ref:`float32 <doc_data_builtin_types>` ``10``
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Base damage to players when traveling at 1 m/s (before speed and other multipliers apply).
----
gitextract_ui58d88c/
├── .editorconfig
├── .gitignore
├── .readthedocs.yaml
├── Makefile
├── README.md
├── _extensions/
│ └── unturned_lexer.py
├── _static/
│ ├── css/
│ │ ├── custom.css
│ │ └── toctree_collapse.css
│ └── js/
│ └── toctree_collapse.js
├── about/
│ ├── getting-started.rst
│ ├── launch-options.rst
│ └── steam-workshop.rst
├── assets/
│ ├── airdrop-asset.rst
│ ├── animal-asset.rst
│ ├── animation.rst
│ ├── asset-bundle-custom-data.rst
│ ├── asset-bundles.rst
│ ├── asset-definitions.rst
│ ├── asset-validation.rst
│ ├── character-mesh-replacement.rst
│ ├── crafting-asset.rst
│ ├── crafting-blacklist-asset.rst
│ ├── curated-items.rst
│ ├── data-file-format.rst
│ ├── effect-asset.rst
│ ├── foliage-asset.rst
│ ├── layers.rst
│ ├── level-asset.rst
│ ├── material-palette-asset.rst
│ ├── mod-hooks.rst
│ ├── mythical-asset.rst
│ ├── object-asset.rst
│ ├── outfit-asset.rst
│ ├── physics-material-asset.rst
│ ├── redirector-asset.rst
│ ├── resource-asset.rst
│ ├── road-asset.rst
│ ├── server-browser-curation-asset.rst
│ ├── spawn-asset.rst
│ ├── stereo-song-asset.rst
│ ├── tag-asset.rst
│ ├── unity-upgrade.rst
│ ├── vehicle-asset.rst
│ ├── vehicle-physics-profile-asset.rst
│ ├── vehicle-redirector-asset.rst
│ ├── weather-asset.rst
│ └── zombie-difficulty-asset.rst
├── conf.py
├── data/
│ ├── asset-ptr.rst
│ ├── bitmask.rst
│ ├── built-in-types.rst
│ ├── color.rst
│ ├── enum/
│ │ ├── eassettype.rst
│ │ ├── ebatterymode.rst
│ │ ├── eitemorigin.rst
│ │ ├── eitemrarity.rst
│ │ ├── eitemtype.rst
│ │ ├── elightingvision.rst
│ │ ├── enpcholiday.rst
│ │ ├── eobjectchart.rst
│ │ ├── eobjecttype.rst
│ │ ├── eslottype.rst
│ │ └── index.rst
│ ├── flag.rst
│ ├── guid.rst
│ ├── master-bundle-ptr.rst
│ ├── rich-text.rst
│ ├── struct/
│ │ ├── index.rst
│ │ └── playerspotlightconfig.rst
│ └── vector3.rst
├── img/
│ └── WorkshopMapIDs.csv
├── index.rst
├── items/
│ ├── actions.rst
│ ├── arrest-end-asset.rst
│ ├── arrest-start-asset.rst
│ ├── backpack-asset.rst
│ ├── bag-asset.rst
│ ├── barrel-asset.rst
│ ├── barricade-asset.rst
│ ├── beacon-asset.rst
│ ├── blueprints.rst
│ ├── blueprints_inputitem.rst
│ ├── blueprints_outputitem.rst
│ ├── box-asset.rst
│ ├── caliber-asset.rst
│ ├── charge-asset.rst
│ ├── clothing-asset.rst
│ ├── cloud-asset.rst
│ ├── consumeable-asset.rst
│ ├── detonator-asset.rst
│ ├── farm-asset.rst
│ ├── filter-asset.rst
│ ├── fisher-asset.rst
│ ├── fishing-catchable-properties.rst
│ ├── food-asset.rst
│ ├── fuel-asset.rst
│ ├── gear-asset.rst
│ ├── generator-asset.rst
│ ├── glasses-asset.rst
│ ├── grip-asset.rst
│ ├── grower-asset.rst
│ ├── gun-asset.rst
│ ├── hat-asset.rst
│ ├── introduction.rst
│ ├── key-asset.rst
│ ├── library-asset.rst
│ ├── magazine-asset.rst
│ ├── map-asset.rst
│ ├── mask-asset.rst
│ ├── medical-asset.rst
│ ├── melee-asset.rst
│ ├── oil-pump-asset.rst
│ ├── optic-asset.rst
│ ├── pants-asset.rst
│ ├── placeable-asset.rst
│ ├── refill-asset.rst
│ ├── sentry-asset.rst
│ ├── shirt-asset.rst
│ ├── sight-asset.rst
│ ├── storage-asset.rst
│ ├── structure-asset.rst
│ ├── supply-asset.rst
│ ├── tactical-asset.rst
│ ├── tank-asset.rst
│ ├── throwable-asset.rst
│ ├── tire-asset.rst
│ ├── tool-asset.rst
│ ├── trap-asset.rst
│ ├── vehicle-lockpick-tool-asset.rst
│ ├── vehicle-paint-tool-asset.rst
│ ├── vehicle-repair-tool-asset.rst
│ ├── vest-asset.rst
│ ├── water-asset.rst
│ └── weapon-asset.rst
├── make.bat
├── mapping/
│ ├── charts.rst
│ ├── curated-maps.rst
│ ├── editor-asset-redirectors.rst
│ ├── favorite-searches.rst
│ ├── level-batching.rst
│ ├── level-config.rst
│ └── manual-object-culling.rst
├── npcs/
│ ├── conditions.rst
│ ├── currency-asset.rst
│ ├── dialogue-asset.rst
│ ├── introduction.rst
│ ├── npc-asset.rst
│ ├── quest-asset.rst
│ ├── rewards-list-asset.rst
│ ├── rewards.rst
│ └── vendor-asset.rst
├── requirements.in
├── requirements.txt
├── sdg/
│ ├── dat-editing-code.rst
│ ├── hosting-servers-using-private-workshop-files.rst
│ ├── legacy-id-availability.rst
│ ├── source-code.rst
│ ├── test-steam-items.rst
│ ├── unity-project.rst
│ └── using-git.rst
└── servers/
├── bookmark-host.rst
├── command-io.rst
├── debugging-exceptions.rst
├── dedicated-workshop-update-monitor.rst
├── fake-ip.rst
├── game-server-login-tokens.rst
├── glazier.rst
├── openmod.rst
├── port-forwarding.rst
├── rocket.rst
├── server-auto-restart.rst
├── server-browser-curation.rst
├── server-codes.rst
├── server-configuration.rst
├── server-hosting-rules.rst
├── server-hosting.rst
├── server-update-notifications.rst
└── steamcmd.rst
SYMBOL INDEX (2 symbols across 1 files) FILE: _extensions/unturned_lexer.py class UnturnedLexer (line 13) | class UnturnedLexer(RegexLexer): function setup (line 35) | def setup(sphinx):
Condensed preview — 178 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (766K chars).
[
{
"path": ".editorconfig",
"chars": 269,
"preview": "# EditorConfig is awesome: https://editorconfig.org/\n\n# Special property to stop .editorconfig files search.\nroot = true"
},
{
"path": ".gitignore",
"chars": 237,
"preview": "# Sphinx output folder as specified in Makefile and make.bat\n/_build/\n\n# Temporary Visual Studio Code config files\n/.vsc"
},
{
"path": ".readthedocs.yaml",
"chars": 526,
"preview": "# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details\n\n# These "
},
{
"path": "Makefile",
"chars": 634,
"preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
},
{
"path": "README.md",
"chars": 6625,
"preview": "Unturned Documentation\n======================\n\nThese are the source files for *Unturned*'s modding documentation.\n\nThe b"
},
{
"path": "_extensions/unturned_lexer.py",
"chars": 1776,
"preview": "\"\"\"\n unturned_lexer\n ~~~~~~~~~~~~~~\n Lexer for Unturned's .dat and .asset files.\n https://pygments.org/docs/"
},
{
"path": "_static/css/custom.css",
"chars": 732,
"preview": "/* Custom tweaks to the Read the Docs Sphinx Theme.\n* Less generic styling should be placed in its own stylesheet.\n*/\n\n/"
},
{
"path": "_static/css/toctree_collapse.css",
"chars": 577,
"preview": "/* CSS for toctree_collapse.js script.\n* TOC sections are \"collapsed\" by default, and only displayed when they've been \""
},
{
"path": "_static/js/toctree_collapse.js",
"chars": 831,
"preview": "// Allows for collapsing TOC sections.\n// Styling handled by toctree_collapse.css stylesheet.\n\n$(function() {\n\tlet brows"
},
{
"path": "about/getting-started.rst",
"chars": 4950,
"preview": ".. _doc_getting_started:\n\nGetting Started\n===============\n\nTo get started with creating mods for *Unturned*, or hosting "
},
{
"path": "about/launch-options.rst",
"chars": 10465,
"preview": ".. _doc_launch_options:\n\nLaunch Options\n==============\n\n**Launch options** can be added to *Unturned* to change certain "
},
{
"path": "about/steam-workshop.rst",
"chars": 5205,
"preview": ".. _doc_steam_workshop:\n\nSteam Workshop\n==============\n\nThe **Steam Workshop** allows for sharing user-generated content"
},
{
"path": "assets/airdrop-asset.rst",
"chars": 592,
"preview": ".. _doc_assets_airdrop:\n\nAirdrop Assets\n==============\n\nOverrides the care package model seen falling from the dropship,"
},
{
"path": "assets/animal-asset.rst",
"chars": 2838,
"preview": ".. _doc_assets_animal:\n\nAnimal Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid"
},
{
"path": "assets/animation.rst",
"chars": 555,
"preview": ".. _doc_assets_animation:\n\nAnimation\n=========\n\nUnturned's character rig is terrible – so using existing animations is r"
},
{
"path": "assets/asset-bundle-custom-data.rst",
"chars": 1395,
"preview": ".. _doc_asset_bundle_custom_data:\n\nAsset Bundle Custom Data\n========================\n\nUnity ``ScriptableObject`` which c"
},
{
"path": "assets/asset-bundles.rst",
"chars": 5497,
"preview": ".. _doc_asset_bundles:\n\nAsset Bundles\n=============\n\nThe game loads textures, audio, meshes, prefabs, etc. from **Unity "
},
{
"path": "assets/asset-definitions.rst",
"chars": 3454,
"preview": ".. _doc_asset_definitions:\n\nAsset Definitions\n=================\n\nUnturned **asset definitions** associate game data with"
},
{
"path": "assets/asset-validation.rst",
"chars": 2219,
"preview": ".. _doc_asset_validation:\n\nAsset Validation\n================\n\nDuring startup the game runs fast basic health checks on a"
},
{
"path": "assets/character-mesh-replacement.rst",
"chars": 1481,
"preview": ".. _doc_character_mesh_replacement:\n\nCharacter Mesh Replacement\n==========================\n\nThe player's character mesh "
},
{
"path": "assets/crafting-asset.rst",
"chars": 603,
"preview": ".. _doc_assets_crafting:\n\nCrafting Assets\n===============\n\nThis asset defines blueprints outside of an item asset. This "
},
{
"path": "assets/crafting-blacklist-asset.rst",
"chars": 1785,
"preview": ".. _doc_assets_crafting_blacklist:\n\nCrafting Blacklist Assets\n=========================\n\nPrevents specific items or blue"
},
{
"path": "assets/curated-items.rst",
"chars": 12661,
"preview": ".. _doc_curated_items:\n\nCurated Items\n=============\n\nCommunity-created items (such as skins and cosmetics) can be submit"
},
{
"path": "assets/data-file-format.rst",
"chars": 4935,
"preview": ".. _doc_data_file_format:\n\nData File Format\n================\n\nThis article describes the syntax of Unturned's ``.dat`` a"
},
{
"path": "assets/effect-asset.rst",
"chars": 2690,
"preview": ".. _doc_assets_effect:\n\nEffect Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid"
},
{
"path": "assets/foliage-asset.rst",
"chars": 2781,
"preview": ".. _doc_assets_foliage:\n\nFoliage Assets\n==============\n\nThere are sub-types of foliage asset for different uses, most no"
},
{
"path": "assets/layers.rst",
"chars": 3543,
"preview": ".. _doc_assets_layers:\n\nLayers\n======\n\nUpfront: obviously Unturned makes poor use of Unity's Layers. This document exist"
},
{
"path": "assets/level-asset.rst",
"chars": 9633,
"preview": ".. _doc_assets_level:\n\nLevel Assets\n============\n\nEach map can be associated with a **Level Asset**. These assets contai"
},
{
"path": "assets/material-palette-asset.rst",
"chars": 1046,
"preview": ".. _doc_assets_material_palette:\n\nMaterial Palette Assets\n=======================\n\nThe ``MaterialPaletteAsset`` type all"
},
{
"path": "assets/mod-hooks.rst",
"chars": 8113,
"preview": ".. _doc_assets_mod_hooks:\n\nMod Hooks\n=========\n\nOverview\n--------\n\nScript Components can be added to Game Objects in Uni"
},
{
"path": "assets/mythical-asset.rst",
"chars": 2027,
"preview": ".. _doc_assets_mythical:\n\nMythical Effect Assets\n======================\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:"
},
{
"path": "assets/object-asset.rst",
"chars": 18739,
"preview": ".. _doc_assets_object:\n\nObject Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` docu"
},
{
"path": "assets/outfit-asset.rst",
"chars": 971,
"preview": ".. _doc_assets_outfit:\n\nOutfit Assets\n=============\n\nThe OutfitAsset class allows for defining a selection of clothing i"
},
{
"path": "assets/physics-material-asset.rst",
"chars": 4407,
"preview": ".. _doc_assets_physics_material:\n\nPhysics Material Assets\n=======================\n\nWork-in-progress feature to allow cus"
},
{
"path": "assets/redirector-asset.rst",
"chars": 1643,
"preview": ".. _doc_asset_redirector:\n\nRedirector Assets\n=================\n\n**Redirector Assets** are a special asset type only used"
},
{
"path": "assets/resource-asset.rst",
"chars": 5181,
"preview": ".. _doc_assets_resource:\n\nResource Assets\n===============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid"
},
{
"path": "assets/road-asset.rst",
"chars": 4358,
"preview": ".. _doc_assets_road:\n\nRoad Assets\n===========\n\nThis asset allows roads to be shared between levels, and exposes some pre"
},
{
"path": "assets/server-browser-curation-asset.rst",
"chars": 614,
"preview": ".. _doc_asset_server_browser_curation:\n\nServer Browser Curation Assets\n==============================\n\nMost of the infor"
},
{
"path": "assets/spawn-asset.rst",
"chars": 5947,
"preview": ".. _doc_assets_spawn:\n\nSpawn Assets\n============\n\nThe spawn asset type represents the weighted chances of an individual "
},
{
"path": "assets/stereo-song-asset.rst",
"chars": 1408,
"preview": ".. _doc_assets_stereo_song:\n\nStereo Song Assets\n==================\n\nDefines a music track that can be played on the in-g"
},
{
"path": "assets/tag-asset.rst",
"chars": 1188,
"preview": ".. _doc_assets_tag:\n\nTag Assets\n==========\n\nAlthough **tags** have some display properties, their primary purpose is to "
},
{
"path": "assets/unity-upgrade.rst",
"chars": 8800,
"preview": ".. _doc_unity_upgrade:\n\nUpgrading Unity Version\n=======================\n\nThis page covers the various engine upgrades th"
},
{
"path": "assets/vehicle-asset.rst",
"chars": 104024,
"preview": ".. _doc_assets_vehicle:\r\n\r\nVehicle Assets\r\n==============\r\n\r\nThe **VehicleAsset** class is used by vehicles. These can b"
},
{
"path": "assets/vehicle-physics-profile-asset.rst",
"chars": 3510,
"preview": ".. _doc_assets_vehicle_physics_profile:\n\nVehicle Physics Profile Assets\n==============================\n\nThis asset exist"
},
{
"path": "assets/vehicle-redirector-asset.rst",
"chars": 2115,
"preview": ".. _doc_asset_vehicle_redirector:\n\nVehicle Redirector Assets\n=========================\n\n**Vehicle Redirector Assets** he"
},
{
"path": "assets/weather-asset.rst",
"chars": 4953,
"preview": ".. _doc_assets_weather:\n\nWeather Assets\n==============\n\nOverrides the built-in snow and rain weather with custom events."
},
{
"path": "assets/zombie-difficulty-asset.rst",
"chars": 3939,
"preview": ".. _doc_assets_zombie_difficulty:\n\nZombie Difficulty Assets\n========================\n\nOverride the difficulty settings f"
},
{
"path": "conf.py",
"chars": 2095,
"preview": "# Configuration file for the Sphinx documentation builder.\n#\n# https://www.sphinx-doc.org/en/master/usage/configuration."
},
{
"path": "data/asset-ptr.rst",
"chars": 843,
"preview": ".. _doc_data_assetptr:\n\nAsset Pointer\n=============\n\nWhen an asset refers to another it does so using an **Asset Pointer"
},
{
"path": "data/bitmask.rst",
"chars": 304,
"preview": ".. _doc_data_bitmask:\n\nBitmask\n=======\n\n`Recommended Wikipedia Article <https://en.wikipedia.org/wiki/Mask_(computing)>`"
},
{
"path": "data/built-in-types.rst",
"chars": 1461,
"preview": ".. _doc_data_builtin_types:\n\nC# Built-in Types\n=================\n\nThe following table lists the **C# built-in types**, a"
},
{
"path": "data/color.rst",
"chars": 863,
"preview": ".. _doc_data_color:\n\nColor\n=====\n\n**Colors** can either be parsed as a single hexadecimal value (optionally prefixed wit"
},
{
"path": "data/enum/eassettype.rst",
"chars": 1140,
"preview": ".. _doc_data_eassettype:\n\nEAssetType\n==========\n\nThe EAssetType enumerated type is used as a scope for legacy IDs. Each "
},
{
"path": "data/enum/ebatterymode.rst",
"chars": 514,
"preview": ".. _doc_data_ebatterymode:\n\nEBatteryMode\n============\n\nThe EBatteryMode enumerated type is used to determine how a vehic"
},
{
"path": "data/enum/eitemorigin.rst",
"chars": 437,
"preview": ".. _doc_data_eitemorigin:\n\nEItemOrigin\n===========\n\nThe EItemOrigin enumerated type is used when spawning items.\n\nEnumer"
},
{
"path": "data/enum/eitemrarity.rst",
"chars": 879,
"preview": ".. _doc_data_eitemrarity:\n\nEItemRarity\n===========\n\nThe EItemRarity enumerated type consists of all the possible raritie"
},
{
"path": "data/enum/eitemtype.rst",
"chars": 3909,
"preview": ".. _doc_data_eitemtype:\n\nEItemType\n=========\n\nThe EItemType enumerated type consists of all the possible item types.\n\nEn"
},
{
"path": "data/enum/elightingvision.rst",
"chars": 1045,
"preview": ".. _doc_data_elightingvision:\n\nELightingVision\n===============\n\nThe ELightingVision enumerated type is used to determine"
},
{
"path": "data/enum/enpcholiday.rst",
"chars": 2471,
"preview": ".. _doc_data_enpcholiday:\n\nENPCHoliday\n===========\n\nThe ENPCHoliday enumerated type consists of all of the game's recogn"
},
{
"path": "data/enum/eobjectchart.rst",
"chars": 1115,
"preview": ".. _doc_data_eobjectchart:\n\nEObjectChart\n============\n\nThe EObjectChart enumerated type is used to determine the how an "
},
{
"path": "data/enum/eobjecttype.rst",
"chars": 624,
"preview": ".. _doc_data_eobjecttype:\n\nEObjectType\n===========\n\nThe EObjectType enumerated type consists of all the possible object "
},
{
"path": "data/enum/eslottype.rst",
"chars": 896,
"preview": ".. _doc_data_eslottype:\n\nESlotType\n=========\n\nThe ESlotType enumerated type is used for item placement in displays or on"
},
{
"path": "data/enum/index.rst",
"chars": 135,
"preview": "🗀 Enumerated Types\n===================\n\n.. Below is the table-of-content tree for the folder.\n\n.. toctree::\n\t:maxdepth: "
},
{
"path": "data/flag.rst",
"chars": 432,
"preview": ".. _doc_data_flag:\n\nFlag\n====\n\nSome asset types have properties that only look for the presence of a particular key, rat"
},
{
"path": "data/guid.rst",
"chars": 700,
"preview": ".. _doc_data_guid:\n\nGUID\n====\n\nGlobally Unique Identifiers (**GUIDs**) are 32-digit hexadecimal values used to identify "
},
{
"path": "data/master-bundle-ptr.rst",
"chars": 1029,
"preview": ".. _doc_data_masterbundleptr:\n\nMaster Bundle Pointer\n=====================\n\nIdentifies a Unity asset like a prefab, mate"
},
{
"path": "data/rich-text.rst",
"chars": 1175,
"preview": ".. _doc_data_richtext:\n\nRich Text\n=========\n\nCertain text blocks support **rich text** markup. These are tags which modi"
},
{
"path": "data/struct/index.rst",
"chars": 117,
"preview": "🗀 Structs\n==========\n\n.. Below is the table-of-content tree for the folder.\n\n.. toctree::\n\t:maxdepth: 1\n\t:glob:\n\t\n\t*\n"
},
{
"path": "data/struct/playerspotlightconfig.rst",
"chars": 2300,
"preview": ".. _doc_data_playerspotlightconfig:\n\nPlayerSpotLightConfig\n=====================\n\nThe PlayerSpotLightConfig struct conta"
},
{
"path": "data/vector3.rst",
"chars": 940,
"preview": ".. _doc_data_vector3:\n\nVector3\n=======\n\n**Vector3** (or \"3D vectors\") can either be parsed as a single value containing "
},
{
"path": "img/WorkshopMapIDs.csv",
"chars": 589,
"preview": "Workshop Map,File ID\nA6 Polaris,2898548949\nAthens Arena,1454125991\nArid,2683620106\nBelgium,1727125581\nBuak,3000549606\nBu"
},
{
"path": "index.rst",
"chars": 6878,
"preview": "Unturned Documentation\n======================\n\n.. Below is the table-of-content tree for the website,\n\twhich is hidden f"
},
{
"path": "items/actions.rst",
"chars": 6378,
"preview": ".. _doc_item_asset_actions:\n\nActions\n=======\n\nContext actions appear when a player right-clicks an item from their inven"
},
{
"path": "items/arrest-end-asset.rst",
"chars": 1666,
"preview": ".. _doc_item_asset_arrest_end:\n\nArrest End Assets\n=================\n\nThe ItemArrestEndAsset class is used for \"releaser\""
},
{
"path": "items/arrest-start-asset.rst",
"chars": 1725,
"preview": ".. _doc_item_asset_arrest_start:\n\nArrest Start Assets\n===================\n\nThe ItemArrestStartAsset class is used for \"c"
},
{
"path": "items/backpack-asset.rst",
"chars": 1783,
"preview": ".. _doc_item_asset_backpack:\n\nBackpack Assets\n===============\n\nBackpacks are created from the ItemBackpackAsset class. T"
},
{
"path": "items/bag-asset.rst",
"chars": 1049,
"preview": ".. _doc_item_asset_bag:\n\nBag Assets\n==========\n\nThe ItemBagAsset class is a base class that other classes are derived fr"
},
{
"path": "items/barrel-asset.rst",
"chars": 3173,
"preview": ".. _doc_item_asset_barrel:\n\nBarrel Assets\n=============\n\nBarrels (or \"barrel attachments\") are created from the ItemBarr"
},
{
"path": "items/barricade-asset.rst",
"chars": 8262,
"preview": ".. _doc_item_asset_barricade:\n\nBarricade Assets\n================\n\nBarricades are created from the ItemBarricadeAsset cla"
},
{
"path": "items/beacon-asset.rst",
"chars": 1625,
"preview": ".. _doc_item_asset_beacon:\n\nBeacon Assets\n=============\n\nBeacons are created from the ItemBeaconAsset class. Placing the"
},
{
"path": "items/blueprints.rst",
"chars": 27341,
"preview": ".. _doc_item_asset_blueprints:\n\nBlueprints\n==========\n\nBlueprints can be added to items. These function as \"crafting rec"
},
{
"path": "items/blueprints_inputitem.rst",
"chars": 7535,
"preview": ".. _doc_item_asset_blueprints_inputitem:\n\nBlueprint Input Items\n=====================\n\nConfiguration for a required ingr"
},
{
"path": "items/blueprints_outputitem.rst",
"chars": 2336,
"preview": ".. _doc_item_asset_blueprints_outputitem:\n\nBlueprint Output Items\n======================\n\nConfiguration for a produced i"
},
{
"path": "items/box-asset.rst",
"chars": 1496,
"preview": ".. _doc_item_asset_box:\n\nBox Assets\n==========\n\nBoxes are created from the ItemBoxAsset class. They are used to visualiz"
},
{
"path": "items/caliber-asset.rst",
"chars": 8752,
"preview": ".. _doc_item_asset_caliber:\n\nCaliber Assets\n==============\n\nThe ItemCaliberAsset class is a base class that other classe"
},
{
"path": "items/charge-asset.rst",
"chars": 1799,
"preview": ".. _doc_item_asset_charge:\n\nCharge Assets\n=============\n\nCharges (or \"remote explosives\") are created from the ItemCharg"
},
{
"path": "items/clothing-asset.rst",
"chars": 8773,
"preview": ".. _doc_item_asset_clothing:\n\nClothing Assets\n===============\n\nThe ItemClothingAsset class is a base class that other cl"
},
{
"path": "items/cloud-asset.rst",
"chars": 582,
"preview": ".. _doc_item_asset_cloud:\n\nCloud Assets\n============\n\nClouds (or \"parachutes\") are created from the ItemCloudAsset class"
},
{
"path": "items/consumeable-asset.rst",
"chars": 3245,
"preview": ".. _doc_item_asset_consumeable:\n\nConsumeable Assets\n==================\n\nConsumable items are irreversibly consumed by th"
},
{
"path": "items/detonator-asset.rst",
"chars": 735,
"preview": ".. _doc_item_asset_detonator:\n\nDetonator Assets\n================\n\nDetonators (or \"remote triggers\") are created from the"
},
{
"path": "items/farm-asset.rst",
"chars": 2294,
"preview": ".. _doc_item_asset_farm:\n\nFarm Assets\n===========\n\nFarms (or \"plants\") are created from the ItemFarmAsset class. They ar"
},
{
"path": "items/filter-asset.rst",
"chars": 690,
"preview": ".. _doc_item_asset_filter:\n\nFilter Assets\n=============\n\nFilters (or \"radiation filters\") are created from the ItemFilte"
},
{
"path": "items/fisher-asset.rst",
"chars": 2699,
"preview": ".. _doc_item_asset_fisher:\n\nFisher Assets\n=============\n\nFishers (or \"fishing poles\") are created from the ItemFisherAss"
},
{
"path": "items/fishing-catchable-properties.rst",
"chars": 2462,
"preview": ".. _doc_item_fishing_catchable_properties:\n\nFishing Catchable Properties\n============================\n\nThese options are"
},
{
"path": "items/food-asset.rst",
"chars": 598,
"preview": ".. _doc_item_asset_food:\n\nFood Assets\n===========\n\nFood items are created from the ItemFoodAsset class. They can be cons"
},
{
"path": "items/fuel-asset.rst",
"chars": 837,
"preview": ".. _doc_item_asset_fuel:\n\nFuel Assets\n===========\n\nFuel items (or \"fuel canisters\") are created from the ItemFuelAsset c"
},
{
"path": "items/gear-asset.rst",
"chars": 4453,
"preview": ".. _doc_item_asset_gear:\n\nGear Assets\n===========\n\nThe ItemGearAsset class is a base class that other classes are derive"
},
{
"path": "items/generator-asset.rst",
"chars": 938,
"preview": ".. _doc_item_asset_generator:\n\nGenerator Assets\n================\n\nGenerators are created from the ItemGeneratorAsset cla"
},
{
"path": "items/glasses-asset.rst",
"chars": 1450,
"preview": ".. _doc_item_asset_glasses:\n\nGlasses Assets\n==============\n\nGlasses are created from ItemGlassesAsset. They are clothing"
},
{
"path": "items/grip-asset.rst",
"chars": 1355,
"preview": ".. _doc_item_asset_grip:\n\nGrip Assets\n===========\n\nGrips (or \"grip attachments\") are created from the ItemGripAsset clas"
},
{
"path": "items/grower-asset.rst",
"chars": 718,
"preview": ".. _doc_item_asset_grower:\n\nGrower Assets\n=============\n\nGrowers (or \"growth supplements\") are created from the ItemGrow"
},
{
"path": "items/gun-asset.rst",
"chars": 61708,
"preview": ".. _doc_item_asset_gun:\n\nGun Assets\n==========\n\nThe ItemGunAsset class is used for ranged weapons (or \"guns\"), which can"
},
{
"path": "items/hat-asset.rst",
"chars": 1057,
"preview": ".. _doc_item_asset_hat:\n\nHat Assets\n==========\n\nThe ItemHatAsset class is used by clothing items occupying the \"hat\" slo"
},
{
"path": "items/introduction.rst",
"chars": 26145,
"preview": ".. _doc_item_asset_intro:\n\nIntroduction to Items\n=====================\n\nItems are created from the ItemAsset class. They"
},
{
"path": "items/key-asset.rst",
"chars": 698,
"preview": ".. _doc_item_asset_key:\n\nKey Assets\n==========\n\nKeys are created from the ItemKeyAsset class. They are intended to be us"
},
{
"path": "items/library-asset.rst",
"chars": 732,
"preview": ".. _doc_item_asset_library:\n\nLibrary Assets\n==============\n\nLibraries are created from the ItemLibraryAsset class. They "
},
{
"path": "items/magazine-asset.rst",
"chars": 12245,
"preview": ".. _doc_item_asset_magazine:\n\nMagazine Assets\n===============\n\nMagazines (or \"magazine attachments\") are created from th"
},
{
"path": "items/map-asset.rst",
"chars": 830,
"preview": ".. _doc_item_asset_map:\n\nMap Assets\n==========\n\nMaps and compasses are created from the ItemMapAsset class. They provide"
},
{
"path": "items/mask-asset.rst",
"chars": 758,
"preview": ".. _doc_item_asset_mask:\n\nMask Assets\n===========\n\nMasks are created from the ItemMaskAsset class. They can be worn by p"
},
{
"path": "items/medical-asset.rst",
"chars": 724,
"preview": ".. _doc_item_asset_medical:\n\nMedical Assets\n==============\n\nMedical items (or \"medicine\") are created from the ItemMedic"
},
{
"path": "items/melee-asset.rst",
"chars": 2225,
"preview": ".. _doc_item_asset_melee:\n\nMelee Assets\n============\n\nMelees (or \"melee weapons\") are created from the ItemMeleeAsset cl"
},
{
"path": "items/oil-pump-asset.rst",
"chars": 717,
"preview": ".. _doc_item_asset_oil_pump:\n\nOil Pump Assets\n===============\n\nOil pumps are created from the ItemOilPumpAsset class. Th"
},
{
"path": "items/optic-asset.rst",
"chars": 554,
"preview": ".. _doc_item_asset_optic:\n\nOptic Assets\n============\n\nOptics are created from the ItemOpticAsset class. They can modify "
},
{
"path": "items/pants-asset.rst",
"chars": 587,
"preview": ".. _doc_item_asset_pants:\n\nPants Assets\n============\n\nPants are created from the ItemPantsAsset class. They can be worn "
},
{
"path": "items/placeable-asset.rst",
"chars": 3311,
"preview": ".. _doc_item_asset_placeable:\n\nPlaceable Assets\n================\n\nThe ItemPlaceableAsset class is a base class that othe"
},
{
"path": "items/refill-asset.rst",
"chars": 3045,
"preview": ".. _doc_item_asset_refill:\n\nRefill Assets\n=============\n\nRefills (localized as \"water canisters\") are created from the I"
},
{
"path": "items/sentry-asset.rst",
"chars": 2996,
"preview": ".. _doc_item_asset_sentry:\n\nSentry Assets\n=============\n\nSentries (localized as \"robotic turrets\") are created from the "
},
{
"path": "items/shirt-asset.rst",
"chars": 1182,
"preview": ".. _doc_item_asset_shirt:\n\nShirt Assets\n============\n\nShirts are created from the ItemShirtAsset class. They can be worn"
},
{
"path": "items/sight-asset.rst",
"chars": 10427,
"preview": ".. _doc_item_asset_sight:\n\nSight Assets\n============\n\nSights (or \"sight attachments\") are created from the ItemSightAsse"
},
{
"path": "items/storage-asset.rst",
"chars": 1791,
"preview": ".. _doc_item_asset_storage:\n\nStorage Assets\n==============\n\nStorages (localized as \"item storages\") are created from the"
},
{
"path": "items/structure-asset.rst",
"chars": 4540,
"preview": ".. _doc_item_asset_structure:\n\nStructure Assets\n================\n\nStructures are created from the ItemStructureAsset cla"
},
{
"path": "items/supply-asset.rst",
"chars": 724,
"preview": ".. _doc_item_asset_supply:\n\nSupply Assets\n=============\n\nSupplies (or \"crafting supplies\") are created from the ItemSupp"
},
{
"path": "items/tactical-asset.rst",
"chars": 5916,
"preview": ".. _doc_item_asset_tactical:\n\nTactical Assets\n===============\n\nTacticals (or \"tactical attachments\") are created from th"
},
{
"path": "items/tank-asset.rst",
"chars": 1054,
"preview": ".. _doc_item_asset_tank:\n\nTank Assets\n===========\n\nTanks (localized as \"liquid storages\") are created from the ItemTankA"
},
{
"path": "items/throwable-asset.rst",
"chars": 2199,
"preview": ".. _doc_item_asset_throwable:\n\nThrowable Assets\n================\n\nThrowables are created from the ItemThrowableAsset cla"
},
{
"path": "items/tire-asset.rst",
"chars": 826,
"preview": ".. _doc_item_asset_tire:\n\nTire Assets\n===========\n\nTires (localized as \"tools\") are created from the ItemTireAsset class"
},
{
"path": "items/tool-asset.rst",
"chars": 1342,
"preview": ".. _doc_item_asset_tool:\n\nTool Assets\n===========\n\nTools are created from the ItemToolAsset class. Their functionality d"
},
{
"path": "items/trap-asset.rst",
"chars": 2393,
"preview": ".. _doc_item_asset_trap:\n\nTrap Assets\n===========\n\nTraps are created from ItemTrapAsset. They are placeable damage sourc"
},
{
"path": "items/vehicle-lockpick-tool-asset.rst",
"chars": 635,
"preview": ".. _doc_item_asset_vehicle_lockpick_tool:\n\nVehicle Lockpick Tool Assets\n=============================\n\nVehicle lockpick "
},
{
"path": "items/vehicle-paint-tool-asset.rst",
"chars": 700,
"preview": ".. _doc_item_asset_vehicle_paint_tool:\n\nVehicle Paint Tool Assets\n=========================\n\nVehicle paint tools are cre"
},
{
"path": "items/vehicle-repair-tool-asset.rst",
"chars": 749,
"preview": ".. _doc_item_asset_vehicle_repair_tool:\n\nVehicle Repair Tool Assets\n==========================\n\nVehicle repair tools (lo"
},
{
"path": "items/vest-asset.rst",
"chars": 1065,
"preview": ".. _doc_item_asset_vest:\n\nVest Assets\n===========\n\nThe ItemVestAsset class is used by clothing items occupying the \"vest"
},
{
"path": "items/water-asset.rst",
"chars": 670,
"preview": ".. _doc_item_asset_water:\n\nWater Assets\n============\n\nDrinks are created from the ItemWaterAsset class. They are consume"
},
{
"path": "items/weapon-asset.rst",
"chars": 7405,
"preview": ".. _doc_item_asset_weapon:\n\nWeapon Assets\n=============\n\nThe ItemWeaponAsset class is a base class that other classes ar"
},
{
"path": "make.bat",
"chars": 760,
"preview": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-bu"
},
{
"path": "mapping/charts.rst",
"chars": 1312,
"preview": ".. _doc_mapping_charts:\n\nCharts\n======\n\nThe Charts.unity3d file determines the colors usable by a map's chart view. This"
},
{
"path": "mapping/curated-maps.rst",
"chars": 10058,
"preview": ".. _doc_mapping_curated:\n\nCurated Maps\n============\n\n.. warning:: This program is still evolving. Some of this informati"
},
{
"path": "mapping/editor-asset-redirectors.rst",
"chars": 802,
"preview": ".. _doc_mapping_redirectors:\n\nEditor Asset Redirectors\n========================\n\n**Editor Asset Redirectors** allow for "
},
{
"path": "mapping/favorite-searches.rst",
"chars": 773,
"preview": ".. _doc_mapping_searches:\n\nFavorite Searches\n=================\n\nThe objects editor supports **Favorite Searches** which "
},
{
"path": "mapping/level-batching.rst",
"chars": 5482,
"preview": ".. _doc_mapping_batching:\n\nLevel Batching\n==============\n\nThis article is intended for map developers and explains how t"
},
{
"path": "mapping/level-config.rst",
"chars": 8570,
"preview": ".. _doc_mapping_config:\n\nLevel Config\n============\n\nEach level is associated with an optional Config.json file. These fi"
},
{
"path": "mapping/manual-object-culling.rst",
"chars": 4256,
"preview": ".. _doc_mapping_culling:\n\nManual Object Culling\n=====================\n\nThis article is intended for map developers and e"
},
{
"path": "npcs/conditions.rst",
"chars": 11126,
"preview": ".. _doc_npc_asset_conditions:\n\nConditions\n==========\n\nConditions can be held by NPCs, interactable objects, and item blu"
},
{
"path": "npcs/currency-asset.rst",
"chars": 2355,
"preview": ".. _doc_assets_currency:\n\nCurrency Assets\n===============\n\nAny collection of items with different numeric values can be "
},
{
"path": "npcs/dialogue-asset.rst",
"chars": 2836,
"preview": ".. _doc_npc_asset_dialogue:\n\nDialogue Assets\n===============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_"
},
{
"path": "npcs/introduction.rst",
"chars": 1181,
"preview": ".. _doc_npc_asset_intro:\n\nIntroduction to NPCs\n====================\n\nModders can create interactable NPC characters, wit"
},
{
"path": "npcs/npc-asset.rst",
"chars": 4462,
"preview": ".. _doc_object_asset_npc:\n\nNPC Character Assets\n====================\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GU"
},
{
"path": "npcs/quest-asset.rst",
"chars": 932,
"preview": ".. _doc_npc_asset_quest:\n\nQuest Assets\n============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid"
},
{
"path": "npcs/rewards-list-asset.rst",
"chars": 996,
"preview": ".. _doc_npc_asset_rewards_list:\n\nRewards List Assets\n===================\n\n**GUID** *32-digit hexadecimal*: Refer to :ref"
},
{
"path": "npcs/rewards.rst",
"chars": 14394,
"preview": ".. _doc_npc_asset_rewards:\n\nRewards\n=======\n\n**Rewards** can be granted by NPCs, objects, and items. Each grouping of re"
},
{
"path": "npcs/vendor-asset.rst",
"chars": 3615,
"preview": ".. _doc_npc_asset_vendor:\n\nVendor Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_g"
},
{
"path": "requirements.in",
"chars": 858,
"preview": "# Base packages\npygments==2.20.0\nsphinx==8.1.3\nsphinx_rtd_theme==3.0.2\n\n# Sphinx/RTD dependencies\n######################"
},
{
"path": "requirements.txt",
"chars": 2016,
"preview": "#\n# This file is autogenerated by pip-compile with Python 3.10\n# by the following command:\n#\n# pip-compile requiremen"
},
{
"path": "sdg/dat-editing-code.rst",
"chars": 2093,
"preview": ".. _doc_dat_editing_code:\n\nDat Editing Code\n================\n\nThis document aims to clarify some of the thought process "
},
{
"path": "sdg/hosting-servers-using-private-workshop-files.rst",
"chars": 907,
"preview": ".. _doc_hosting_servers_using_private_workshop_files:\n\nHosting Servers Using Private Workshop Files\n===================="
},
{
"path": "sdg/legacy-id-availability.rst",
"chars": 685,
"preview": ".. _doc_legacy_id_availability:\n\nLegacy ID Availability\n======================\n\nIdeally, new content should use GUIDs wh"
},
{
"path": "sdg/source-code.rst",
"chars": 3473,
"preview": ".. _doc_source_code:\n\nSource Code\n===========\n\nWe are hoping to release Unturned's source code in 2025. This would allow"
},
{
"path": "sdg/test-steam-items.rst",
"chars": 2025,
"preview": ".. _doc_test_steam_items:\n\nTesting Steam Items\n===================\n\n.. note:: Only applicable in development builds and "
},
{
"path": "sdg/unity-project.rst",
"chars": 6191,
"preview": ".. _doc_unity_project:\n\nUnity Project\n=============\n\nDownloading\n-----------\n\nUnturned's project files are stored using "
},
{
"path": "sdg/using-git.rst",
"chars": 5159,
"preview": ".. _doc_using_git:\n\nUsing Git\n=========\n\nFirst time setup:\n\n#. Fork\n#. Clone\n#. Add Upstream\n\nDevelopment loop:\n\n#. Bran"
},
{
"path": "servers/bookmark-host.rst",
"chars": 2789,
"preview": ".. _doc_servers_bookmark_host:\n\nBookmark Host\n=============\n\nConfiguring the **Bookmark Host** property along with a :re"
},
{
"path": "servers/command-io.rst",
"chars": 565,
"preview": ".. _doc_servers_command_io:\n\nCommand IO\n==========\n\nBy default Unturned executes commands from console input, and logs i"
},
{
"path": "servers/debugging-exceptions.rst",
"chars": 1347,
"preview": ".. _doc_debugging_exceptions:\n\nDebugging Exceptions\n====================\n\nIn release builds it can be difficult to narro"
},
{
"path": "servers/dedicated-workshop-update-monitor.rst",
"chars": 1018,
"preview": ".. _doc_servers_workshop_update_monitor:\n\nDedicated Workshop Update Monitor\n=================================\n\nWhen host"
},
{
"path": "servers/fake-ip.rst",
"chars": 1686,
"preview": ".. _doc_servers_fake_ip:\n\nFake IP\n=======\n\nUsing a Steam **Fake IP** allows players to join your server by IP address wi"
},
{
"path": "servers/game-server-login-tokens.rst",
"chars": 1742,
"preview": ".. _doc_servers_gslt:\n\nGame Server Login Tokens\n========================\n\nUnturned dedicated servers can be logged-in to"
},
{
"path": "servers/glazier.rst",
"chars": 3615,
"preview": ".. _doc_glazier:\n\nGlazier\n=======\n\nUnity (the game engine Unturned runs on) has three different incompatible UI systems:"
},
{
"path": "servers/openmod.rst",
"chars": 1969,
"preview": ".. _doc_servers_openmod:\n\nOpenMod\n=======\n\n`OpenMod <https://github.com/openmod/openmod>`_ is a spiritual successor to :"
},
{
"path": "servers/port-forwarding.rst",
"chars": 2843,
"preview": ".. _doc_servers_port_forward:\n\nPort Forwarding\n===============\n\n.. note:: After the 3.23.14.0 update, port forwarding is"
},
{
"path": "servers/rocket.rst",
"chars": 1618,
"preview": ".. _doc_servers_rocket:\n\nRocket\n======\n\nSDG maintains a fork of **Rocket** called the Legally Distinct Missile (or LDM) "
},
{
"path": "servers/server-auto-restart.rst",
"chars": 4148,
"preview": ".. _doc_server_auto_restart:\n\nServer Auto Restart\n===================\n\nServer maintenance can be somewhat automated with"
},
{
"path": "servers/server-browser-curation.rst",
"chars": 7303,
"preview": ".. _doc_server_browser_curation:\n\nServer Browser Curation\n=======================\n\nThis feature allows anyone to create "
},
{
"path": "servers/server-codes.rst",
"chars": 1777,
"preview": ".. _doc_servers_server_codes:\n\nServer Codes\n============\n\nA **Server Code** is a randomly generated, 17-digit numeric co"
},
{
"path": "servers/server-configuration.rst",
"chars": 4158,
"preview": ".. _doc_servers_server_configuration:\n\nServer Configuration\n====================\n\nMost server options are found in your "
},
{
"path": "servers/server-hosting-rules.rst",
"chars": 7274,
"preview": ".. _doc_server_hosting_rules:\n\nServer Hosting Rules\n====================\n\nServer hosts are able to customize their serve"
},
{
"path": "servers/server-hosting.rst",
"chars": 9331,
"preview": ".. _doc_server_hosting:\n\nSetting up a Server\n===================\n\nPlayers can host their own multiplayer servers through"
},
{
"path": "servers/server-update-notifications.rst",
"chars": 749,
"preview": ".. _doc_server_update_notifications:\n\nServer Update Notifications\n===========================\n\nChange logs are available"
},
{
"path": "servers/steamcmd.rst",
"chars": 7870,
"preview": ".. _doc_steamcmd:\n\nUsing SteamCMD (Advanced Setup)\n===============================\n\nSome servers may benefit from a more"
}
]
About this extraction
This page contains the full source code of the SmartlyDressedGames/U3-Docs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 178 files (716.0 KB), approximately 180.6k tokens, and a symbol index with 2 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.