[
  {
    "path": ".editorconfig",
    "content": "# EditorConfig is awesome: https://editorconfig.org/\n\n# Special property to stop .editorconfig files search.\nroot = true\n\n# Default values for all files.\n[*]\nindent_style = tab\nindent_size = 4\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
  },
  {
    "path": ".gitignore",
    "content": "# Sphinx output folder as specified in Makefile and make.bat\n/_build/\n\n# Temporary Visual Studio Code config files\n/.vscode/\n\n# Generated Python files, e.g., in the _extensions directory\n__pycache__/\n\n# Virtual environment files\n/.venv/\n"
  },
  {
    "path": ".readthedocs.yaml",
    "content": "# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details\n\n# These fields are in the order they are mentioned in the RTD docs.\n\nversion: 2\n\n# Build PDF and ePub versions for offline use (HTMLzip might be too big to build?)\nformats:\n  - epub\n  - pdf\n\nbuild:\n  os: ubuntu-22.04\n  tools:\n    python: \"3.11\"\n\npython:\n  install:\n    - requirements: requirements.txt\n\nsphinx:\n  configuration: conf.py\n  fail_on_warning: true # Make warnings more visible by forcing build to fail\n"
  },
  {
    "path": "Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the environment for the first two.\nSPHINXOPTS    ?=\nSPHINXBUILD   ?= sphinx-build\nSOURCEDIR     = .\nBUILDDIR      = _build\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n"
  },
  {
    "path": "README.md",
    "content": "Unturned Documentation\n======================\n\nThese are the source files for *Unturned*'s modding documentation.\n\nThe built documentation is hosted by [Read the Docs](https://readthedocs.org/) here: https://docs.smartlydressedgames.com/\n\nOffline Downloads\n-----------------\n\nPDF and ePub versions of the documentation can be [downloaded](https://readthedocs.org/projects/unturned/downloads/) for offline use.\n\nContributing\n------------\n\nAnyone 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.\n\n- **latest**: Always has the latest documentation, including upcoming features that might not be available on the current version of the game.\n\n- **stable**: Occassionally updated with the additions to the \"latest\" branch.\n\n- **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.\n\nThe 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.\n\n### Styleguide\n\nMost documentation files are formatted similarly. Some important notes:\n\n- Content block directives can be used to add notes, warnings, tips, and other admonitions.\n\n- Internal links should use the `:ref:` command, usually pointing towards a custom anchor.\n\n- 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.\n\n- 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.\n\n- 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`).\n\n- 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.\n\nBuilding the Docs\n-----------------\n\nThis 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).\n\nWe 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.\n\nUse 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.\n\n1. Clone the Unturned Docs repository:\n\n\t```shell\n\tgit clone https://github.com/SmartlyDressedGames/Unturned-Docs.git\n\t```\n\n2. Change directory to the Unturned Docs repository:\n\n\t```shell\n\tcd Unturned-Docs\n\t```\n\n3. *(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.\n\n\t1. Create the virtual environment:\n\n\t\t```shell\n\t\tpy -3.11 -m venv .venv\n\t\t```\n\n\t2. Activate the virtual environment:\n\n\t\t```shell\n\t\t.\\.venv\\Scripts\\Activate.ps1\n\t\t```\n\n\t3. Your terminal prompt will show `(venv)` at the beginning if activation worked.\n\n4. Download packages from `requirements.txt`:\n\n\t```shell\n\tpip install -r requirements.txt\n\t```\n\n\tAlternatively, `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:**\n\n\t```shell\n\tpip-sync requirements.txt\n\t```\n\n5. Build the documentation:\n\n\t```shell\n\t.\\make html\n\t```\n\n\tAlternatively, you can build the documentation by running `sphinx-build` manually. This command is more cross-platform:\n\n\t```shell\n\tsphinx-build -b html ./ _build/html\n\t```\n\nYou 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.\n\nConfigure Esbonio for a virtual environment\n---------------------------------------------\n\nEsbonio 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.\n\nYou can force Esbonio to use the virtual environment by configuring your `.vscode/settings.json`:\n\n```json\n{\n\t\"esbonio.sphinx.pythonCommand\": {\n\t\t\"command\": [\"${venv:.venv}\"]\n\t}\n}\n```\n\nUpdating the `requirements.txt` file\n------------------------------------\n\nPackages (including specific versions) can be pinned in `requirements.in`. This file is used to automatically generate `requirements.txt`.\n\nRun the following command to generate a new `requirements.txt` file afterwards:\n\n```shell\npip-compile requirements.in\n```\n\nLocally updating the TOC\n------------------------\n\nSometimes, 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.\n\nIf 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).\n"
  },
  {
    "path": "_extensions/unturned_lexer.py",
    "content": "\"\"\"\n    unturned_lexer\n    ~~~~~~~~~~~~~~\n    Lexer for Unturned's .dat and .asset files.\n    https://pygments.org/docs/lexerdevelopment/\n\"\"\"\n\n__all__ = ['UnturnedLexer']\n\nfrom pygments.lexer import RegexLexer, bygroups\nfrom pygments.token import *\n\nclass UnturnedLexer(RegexLexer):\n    name = 'UnturnedDat'\n    aliases = ['unturneddat', 'unturnedasset']\n    filenames = ['*.asset', '*.dat']\n\n    tokens = {\n        'root': [\n            (r'(\"(?:\\\\.|[^\"])*\")(?:(\\s*)(//.*)$)?', bygroups(String, Whitespace, Comment)), # Quoted key or value – optionally, a comment (inline) can be matched too.\n            (r'(^\\s*)(//.*)$', bygroups(Whitespace, Comment)), # Comment (newline).\n            (r'(^\\s*)(\\w+)\\b', bygroups(Whitespace, Name.Class)), # \"Key\" in a key-value pair, or a \"flag\".\n            (r'(^\\s*)([\\[\\]\\{\\}])', bygroups(Whitespace, Name.Decorator)), # Brackets (dictionaries, lists).\n\n            (r'true|false', Name.Builtin), # Boolean.\n            (r'(#)([a-fA-F0-9]{6})', bygroups(Operator, Number)), # Color (hex triplet).\n            (r'[-,\\(\\)]', Operator), # Punctuation for numbers (negatives, commas, vector3).\n            (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.\n\n            (r'\\S+', Text), # Match remaining non-whitespace.\n            (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.\n        ]\n    }\n\ndef setup(sphinx):\n    sphinx.add_lexer(\"unturneddat\", UnturnedLexer)\n    sphinx.add_lexer(\"unturnedasset\", UnturnedLexer)"
  },
  {
    "path": "_static/css/custom.css",
    "content": "/* Custom tweaks to the Read the Docs Sphinx Theme.\n* Less generic styling should be placed in its own stylesheet.\n*/\n\n/* Tables should take up the entire available horizontal space within their container. */\n.wy-table-responsive table {\n\twidth: 100%;\n}\n\n/* COMMENTED OUT - Wrapping table contents.\n* This was the \"intended fix\" before simply maxing table width.\n* May be worth revisiting the idea for mobile devices, where horizontal scrolling can be cumbersome.\n*//*\n@media screen and (min-width: 769px) {\n\t.wy-table-responsive { overflow: visible; }\n\t.wy-table-responsive table td { white-space: normal; }\n}\n*/\n\n/* Fix unreadable text when selection version from sidebar. */\nselect option {\n    background: #343131 !important;\n}\n"
  },
  {
    "path": "_static/css/toctree_collapse.css",
    "content": "/* CSS for toctree_collapse.js script.\n* TOC sections are \"collapsed\" by default, and only displayed when they've been \"toggled\".\n*/\n\n.wy-menu-vertical .caption {\n\tcursor: pointer;\n}\n\n.wy-menu-vertical .caption .caption-text:before {\n\tcontent: \"❯\"; /* ⮞ ⮚ ❯ */\n\tdisplay: inline-block;\n\ttransition: transform 0.25s;\n\ttransform-origin: 25% 50%;\n\twidth: 16px;\n\theight: 32px;\n}\n\n.wy-menu-vertical .caption.toggled .caption-text:before {\n\ttransform: rotate(90deg);\n}\n\n.wy-menu-vertical .caption + ul {\n\tdisplay: none;\n}\n\n.wy-menu-vertical .caption.toggled + ul {\n\tdisplay: block;\n}\n"
  },
  {
    "path": "_static/js/toctree_collapse.js",
    "content": "// Allows for collapsing TOC sections.\n// Styling handled by toctree_collapse.css stylesheet.\n\n$(function() {\n\tlet browsing = false; // Is the reader currently on a page included in the TOC?\n\n\t// Selects elements from the navigation menu (TOC).\n\tconst headings = document.querySelectorAll(\".wy-menu-vertical .caption[role=heading]\");\n\theadings.forEach(caption => {\n\t\tconst ulist = caption.nextElementSibling;\n\n\t\t// Toggle state when clicked.\n\t\tcaption.addEventListener(\"click\", () => {\n\t\t\tcaption.classList.toggle(\"toggled\");\n\t\t});\n\n\t\t// Expand current section be browsed.\n\t\tif (ulist.classList.contains(\"current\")) {\n\t\t\tcaption.classList.add(\"toggled\");\n\t\t\tbrowsing = true;\n\t\t}\n\t});\n\n\t// If the reader isn't browsing, just expand the first section instead.\n\tif (browsing == false) {\n\t\theadings[0].classList.add(\"toggled\");\n\t}\n});\n"
  },
  {
    "path": "about/getting-started.rst",
    "content": ".. _doc_getting_started:\n\nGetting Started\n===============\n\nTo 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.\n\nInstalling Unturned\n-------------------\n\n*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/>`_.\n\nNot 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.\n\nAdding *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.\n\n.. _doc_getting_started:installing_unity:\n\nInstalling Unity\n----------------\n\nInstalling 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>`_.\n\nAlthough 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.\n\nWhen installing a Unity version, you will have the option to install some optional modules. You should at least install:\n\n- **Linux Build Support (Mono)** – Adds support for your mod on Linux devices.\n- **Mac Build Support (Mono)** – Adds support for your mod on macOS devices.\n\nOnce 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.\n\nUnity Packages\n--------------\n\nUnturned 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.\n\nThese Unity packages are located in the ``.../Unturned/Extras/Sources`` directory, and are regularly updated alongside any major updates to the game.\n\n#. Open your Unity project.\n#. Select **Assets > Import Package > Custom Package...** from the toolbar.\n#. In the file browser, navigate to the ``.../Unturned/Extras/Sources`` directory.\n#. Import the ``Project.unitypackage`` file; importing the ``ExampleAssets.unitypackage`` file is optional.\n\nWhen 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.\n\nProject.unitypackage\n````````````````````\n\nThis package contains the bare-bones required to export custom content:\n\n- Default Project Settings\n- :ref:`Asset Bundling Tools <doc_asset_bundles>`\n- :ref:`Mod Hooks <doc_assets_mod_hooks>` (optional)\n\nExampleAssets.unitypackage\n``````````````````````````\n\nThis package contains vanilla content examples, and several useful prefabs:\n\n- ``CoreMasterBundle`` directory has an example of each type of vanilla asset.\n- ``Game/Sources/Animations`` directory has all of the vanilla item animations.\n- ``Resources/Characters/Preview.prefab`` is helpful for previewing clothes.\n\n.. warning:: Custom content should not be placed into the CoreMasterBundle directory. Instead, create a separate directory to house your custom content.\n\nOther Tools\n-----------\n\nModders will need a few more tools on hand to create custom content.\n\nText editors\n````````````\n\nA 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.\n\nWe *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.\n\nIf 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.\n\nImage editing software\n``````````````````````\n\nTo 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.\n\nBlender\n```````\n\nA 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.\n"
  },
  {
    "path": "about/launch-options.rst",
    "content": ".. _doc_launch_options:\n\nLaunch Options\n==============\n\n**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.\n\nThis 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.\n\n#. Right-click **Unturned** in your Steam Library.\n\n#. Select the **Properties...** button.\n\n#. On the **General** tab, find the **Launch Options** field near the bottom.\n\n#. 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.\n\nGame Options\n------------\n\nSome of the launch options are primarily intended for use with the Unturned Dedicated Server tool.\n\n**+connect**: Connect to a server, in the format of ``+connect <ip address>:<port>``.\n\n**-Cinematic**: Turns off many level-of-detail optimizations. This has a significant performance cost.\n\nEffects include:\n\n- 4 km draw distance and sun shadow range.\n- LOD groups always show their highest quality. (High LOD bias.)\n- Lights are always visible. (Turns off light LODs.)\n- Objects and resources are always visible. (No landmarks or culling volumes.)\n- Terrains always use splatmap shaders. (No basemap fallback texture.)\n- Terrains always use max-quality heightmaps. (No mesh simplification.)\n- Sun shadowmaps use GPU max supported resolution. (16,384 x 16,384 on some modern GPUs.)\n- Planar reflections render at 100% resolution. (Rather than 50%.)\n\n**-DisableCullingVolumes**: Disable object culling distance overrides. Please refer to :ref:`Manual Object Culling <doc_mapping_culling>` for more details.\n\n**-DisableLightLODs**: Disable fadeout of dynamic lights. Could be useful for high-quality screenshots.\n\n**-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.\n\n**-EnableWheeledVehicleGizmos**: Draw locally driven vehicle's wheel torque, RPM, slip, expected RPM, etc.\n\n**-FullscreenMode=**: Window mode override.\n\n**-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.\n\n**-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.\n\n**-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.\n\n**-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.\n\n**-GameSense**: GameSense integration.\n\n**-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`.\n\n**-h** *int*: Alias of ``-height``.\n\n**-height** *int*: Override in-game resolution height.\n\n**-Holiday=** *enum* (``AprilFools``, ``Christmas``, ``Halloween``, ``HW``, ``PrideMonth``, ``Valentines``, ``XMAS``, ``LunarNewYear``, ``LNY``, ``UnturnedAnniversary``): Override the active holiday.\n\n**-HostPlayerLimit=** *int*: Clamps max number of players to this number. Useful for hosting providers.\n\n**-LegacyConsole**: Use the legacy console rather than the default threaded console.\n\n**-LogAssemblyResolve**: Log when the resolution of an assembly fails. Useful when working with non-Rocket plugins.\n\n**-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.\n\n**-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.\n\n**-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.\n\n**-LogLevelBatchingTextureAtlasExclusions**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.\n\n**-LogSpawnTablesAfterLoadingLevel**: Log all spawn chances.\n\n**-LogVehicleWheelConfigurations**: Log automatic creation of vehicle asset's ``WheelConfigurations`` property for older vehicles. Useful when converting vehicles to the new format.\n\n**-ModulesPath** *string*: If set, search for ``.dll`` and ``.module`` files in this directory instead of in ``Unturned/Modules``.\n\n**-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.\n\n**-NoDefaultLog**: Disables log file creation unless a plugin calls setLogFilePath.\n\n**-NoDeferAssets**: Disable the deferring of loading vehicles and level objects until map load time, and instead load on startup.\n\n**-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.\n\n**-NoSteamTextFiltering**: Disable Steam text filter, and instead revert to the old naïve filter.\n\n**-NoWorkshopSubscriptions**: Disable loading of all Steam Workshop subscriptions. This can be helpful when troubleshooting issues.\n\n**-OfflineOnly**: Disables requests to the internet. For LAN servers, it skips the Steam backend connection and uses locally-cached Workshop items.\n\n**-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`.\n\n**-PreviewLevelBatchingTextureAtlas**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.\n\n**-PreviewLevelBatchingUniqueMaterials**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.\n\n**-RazerChroma**: Enable Razer Chroma integration on compatible devices.\n\n**-RefreshRate=**: Monitor refresh rate override.\n\n.. _doc_launch_options:resaveassets:\n\n**-ResaveAssets**: Danger! Only use this if you have a backup of your custom assets, ideally in version control. Here be dragons:\n\nDepends on the **-ParseAssetMetadata** launch option also being enabled.\n\nThis 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.\n\nAt 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.\n\n**-ResetSteamStatsAndAchievements**: Reset all progress on Steam achievements and stats.\n\n**-SkipAssets**: Disable loading asset bundles and Workshop content. This is useful for quickly iterating on serverside code.\n\n**-ScrollViewSensitivity** *float*: Multiplier for uGUI scroll view distance travelled when rolling the mouse wheel.\n\n**-TimeOverlay**: Show seconds since startup under FPS in the upper-left corner.\n\n**-ui_scale**: UI scale override. A common usage is to set UI scale back to its default scaling, with ``-ui_scale 1``.\n\n**-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.\n\n**-UnredactedLogs**: By default, player IPs in BattlEye's logging and the public IP for Workshop downloads are redacted. This option turns that off.\n\n**-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.\n\n**-ValidateAssets**: Perform :ref:`additional health checks <doc_asset_validation>` on assets during start-up.\n\n**-ValidateLevelBatchingUVs**: Please refer to :ref:`Level Batching <doc_mapping_batching>` for more details.\n\n**-w** *int*: Alias of ``-width``.\n\n**-width** *int*: Override in-game resolution width.\n\nUnity Options\n-------------\n\nUnity'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>`_.\n\n**-batchmode**: Run in batch mode.\n\n**-force-glcore**: Force OpenGL.\n\n**-force-vulkan**: Force Vulkan.\n\n**-nographics**: Do not initialize the graphics device when running in batch mode.\n"
  },
  {
    "path": "about/steam-workshop.rst",
    "content": ".. _doc_steam_workshop:\n\nSteam Workshop\n==============\n\nThe **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.\n\nPlayers 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>`_.\n\nBrowsing\n--------\n\nThere are several tabs and additional filters in the Steam Workshop, to help players find the type of user-generated content they are interested in.\n\nContent under the `Mods <https://steamcommunity.com/workshop/browse/?appid=304930&section=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.\n\nContent under the `Stockpile Submissions <https://steamcommunity.com/workshop/browse/?appid=304930&section=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.\n\nThe `Collections <https://steamcommunity.com/workshop/browse/?appid=304930&section=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.\n\nCreating Mods\n-------------\n\nRefer 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.\n\nPublishing Mods\n---------------\n\nWhen 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.\n\nYou will see the following fields when attempting to publish a mod:\n\n#. | **Name** – This will be displayed in the Steam Workshop, and some other locations, as the name of your mod.\n\n#. | **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.\n\n#. | **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.\n\n#. | **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.\n\n#. | **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.\n\n#. | **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.\n\n#. | **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.\n\n#. | **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.\n\nBefore 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.\n\nUpdating Mods\n-------------\n\nMods can be updated from the same interface used for publishing mods.\n\nFill 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.\n\nOnce 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.\n"
  },
  {
    "path": "assets/airdrop-asset.rst",
    "content": ".. _doc_assets_airdrop:\n\nAirdrop Assets\n==============\n\nOverrides 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>`.\n\n**Type** *string*: ``SDG.Unturned.AirdropAsset``\n\n**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.\n\n**Carepackage_Prefab** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Model to spawn falling.\n"
  },
  {
    "path": "assets/animal-asset.rst",
    "content": ".. _doc_assets_animal:\n\nAnimal Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Animal``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nAnimal Properties\n-----------------\n\n**Health** *uint16*: Total health value.\n\n**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.\n\n**Damage** *byte*: Damage dealt to the player per attack.\n\n**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.\n\n**Speed_Run** *float*: Running speed in m/s.\n\n**Speed_Walk** *float*: Walking speed in m/s.\n\n**Horizontal\\_Attack\\_Range** *float*: Maximum attack range on the horizontal plane. Defaults to 2.25 meters.\n\n**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.\n\n**Vertical\\_Attack\\_Range** *float*: Maximum vertical attack range. Defaults to 2 meters.\n\n**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.\n\n**Roars** *int*: Total number of roar sounds in Unity. A roar sound is played when the animal attacks.\n\n**Panics** *int*: Total number of panic sounds in Unity. A panic sound is played when the animal is startled.\n\n**Should_Prevent_Move_During_Startle** *bool*: If true, animal won't start moving until startle animation finishes. Defaults to false.\n\n**Attack\\_Anim\\_Variants** *int*: Total number of attack animations in Unity. Defaults to 1.\n\n**Eat\\_Anim\\_Variants** *int*: Total number of eat animations in Unity. Defaults to 1.\n\n**Glance\\_Anim\\_Variants** *int*: Total number of glance animations in Unity. Defaults to 2.\n\n**Startle\\_Anim\\_Variants** *int*: Total number of startle animations in Unity. Defaults to 1.\n\n**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.\n\nDrops\n-----\n\n**Reward_ID** *uint16*: ID of the item spawn table to use.\n\n**Reward_XP** *uint*: Amount of experience to reward.\n\n**Reward_Min** *byte*: Minimum amount of item drops to reward. Defaults to 3.\n\n**Reward_Max** *byte*: Maximum amount of item drops to reward. Defaults to 4.\n\n**Meat** *uint16*: ID of item to spawn when animal is killed. Deprecated in favor of Reward_ID.\n\n**Pelt** *uint16*: ID of item to spawn when animal is killed. Deprecated in favor of Reward_ID.\n\nLocalization\n------------\n\n**Name** *string*: Animal name in user interfaces.\n"
  },
  {
    "path": "assets/animation.rst",
    "content": ".. _doc_assets_animation:\n\nAnimation\n=========\n\nUnturned's character rig is terrible – so using existing animations is recommended for your sanity.\n\nExport\n------\n\n1. Ensure scene unit system is metric with unit scale set to 1.0 and length set to meters.\n2. Select the Skeleton node.\n3. File > Export > FBX\n4. Selected Objects: True\n5. Apply Scale: FBX Units Scale\n6. Add Leaf Bones: False\n7. Primary Bone Axis: +X\n8. Secondary Bone Axis: -Y\n\nNote that the Item.prefab from Unity is attached to the left or right hook with a local rotation of (0, 0, 90).\n"
  },
  {
    "path": "assets/asset-bundle-custom-data.rst",
    "content": ".. _doc_asset_bundle_custom_data:\n\nAsset Bundle Custom Data\n========================\n\nUnity ``ScriptableObject`` which can optionally be created in a :ref:`Master Bundle's <doc_asset_bundles>` root for Unturned-specific asset bundle metadata.\n\n``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.\n\nHow to Set Owner Workshop File\n------------------------------\n\n1. 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.\n\n2. Create the ``AssetBundleCustomData`` object by Right Clicking > Create > Unturned > Asset Bundle Custom Data\n\n3. 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.\n\n4. Set ``Owner Workshop File Id`` to match your workshop file's ID.\n\n5. (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.\n"
  },
  {
    "path": "assets/asset-bundles.rst",
    "content": ".. _doc_asset_bundles:\n\nAsset Bundles\n=============\n\nThe 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\n\\*.unity3d bundles to\n\\*.content bundles to\n\\*.masterbundle files.\n\n:ref:`Master bundles <doc_asset_bundles:master_bundles>` should be used for essentially all new projects.\n\nTool Setup\n----------\n\nPrior to using any of these tools they must be imported into a Unity project\n\n#. Inside Unity open the Assets > Import Package > Custom Package... wizard.\n#. Find the Unturned installation directory.\n#. Navigate to the Extras/Sources directory.\n#. Import the Project.unitypackage.\n\n.. _doc_asset_bundles:master_bundles:\n\nMaster Bundles\n--------------\n\nMaster 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.\n\nThere are only a few asset types that are unsupported by master bundles.\n\nFile Setup\n``````````\n\nMaster 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.\n\nMasterBundle.dat can set the following keys:\n\n.. code-block:: unturneddat\n\n\t// Name of asset bundle file in the same directory as MasterBundle.dat.\n\tAsset_Bundle_Name core.masterbundle\n\n\t// Path to the asset bundle within Unity.\n\t// Unity subfolders should match 1:1 with dat subfolders.\n\tAsset_Prefix Assets/CoreMasterBundle\n\n\t// Version 3 is Unity 2018.4 LTS. Older versions have shader consolidation enabled for backwards compatibility.\n\tAsset_Bundle_Version 3\n\nIndividual asset \\*.dats can set the following keys:\n\n.. code-block:: unturneddat\n\n\t// Name of master bundle to load files from.\n\tMaster_Bundle_Override core.masterbundle\n\n\t// If included, look for an individual *.unity3d asset bundle instead.\n\tExclude_From_Master_Bundle\n\n\t// Path within master bundle to load files from.\n\t// Used by notes to share a common object prefab.\n\tBundle_Override_Path /Objects/Medium/Furniture/Note\n\n\t// If true, path within master bundle appends asset file name as subdirectory.\n\t// For example:\n\t// Guns/Eaglefire.asset → Guns/Eaglefire/Item.prefab\n\tBundle_Path_Include_Filename true\n\nTool Usage\n``````````\n\n1. Follow *Tool Setup* instructions.\n2. Open the tool from the Window > Unturned > Master Bundle Tool menu.\n3. Select directories of assets in the Project window.\n4. In the Inspector window tag them in any asset bundle.\n5. 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.\n6. Click the ... to choose a destination for the bundle file.\n7. Click Export.\n8. (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.\n\nMotivations\n```````````\n\nWhen 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.\n\nIndividual Asset Bundles\n------------------------\n\nMost official files have transitioned to the master bundle system, but some use individual asset bundles (\\*.unity3d). For example:\n\n- Per-map road textures.\n- Colors used by charts.\n- Level ambience.\n\nTool Usage\n``````````\n\n1. Follow *Tool Setup* instructions.\n2. Open the tool from the Window > Unturned > Bundle Tool menu.\n3. Select individual assets or directories of assets in the Project window.\n4. Click Grab to preview which assets will be exported.\n5. Click Bundle to choose a destination for the asset bundle file.\n\nMotivations\n```````````\n\nWhen 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.\n\nContent Bundles (\\*.content)\n----------------------------\n\n.. deprecated:: 3.22.4.0\n\nThis 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.\n\nReusing Content Bundles\n```````````````````````\n\nAlthough it is preferable to properly migrate older assets into master bundles, preexisting content bundles can be easily reused as a master bundle. Rename the\n\\*.content file to be\n\\*.masterbundle file instead. Then, add a corresponding MasterBundle.dat file as described in the file setup for master bundles.\n"
  },
  {
    "path": "assets/asset-definitions.rst",
    "content": ".. _doc_asset_definitions:\n\nAsset Definitions\n=================\n\nUnturned **asset definitions** associate game data with Unity asset bundles. They are stored in ``.dat`` or ``.asset`` files.\n\nFor information about the file format please refer to :ref:`Data File Format <doc_data_file_format>`.\n\nHeader\n------\n\nEach asset has a common ``GUID`` and ``Type`` header:\n\n**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.\n\n**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.\n\n.. note::\n\n\t``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:\n\n\t.. code-block:: text\n\n\t\tMetadata\n\t\t{\n\t\t\tGUID 7e4b847061b64272b42ea8869fd053c7\n\t\t\tType SDG.Unturned.Asset\n\t\t}\n\n\tIf ``GUID`` is specified in the ``Metadata`` sub-dictionary the game cannot (as of 2023-04-13) automatically prepend a newly generated one during startup.\n\nBody\n----\n\nThe body contains any class properties. Individual asset type documentation elaborates on these.\n\n**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.\n\nOptionally the body properties can be placed into an ``Asset`` sub-dictionary. For example:\n\n.. code-block:: text\n\n\tGUID [...]\n\tType [...]\n\tAsset\n\t{\n\t\tID [...]\n\t\tKey1 Value\n\t\tKey2 Value\n\t}\n\nIs equivalent to:\n\n.. code-block:: text\n\n\tGUID [...]\n\tType [...]\n\tID [...]\n\tKey1 Value\n\tKey2 Value\n\nUnity Asset Bundles\n-------------------\n\nEach 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:\n\n**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).\n\n**Master_Bundle_Override** *string*: Name of a master bundle to use rather than the ``.unity3d`` bundle or master bundle found in the hierarchy.\n\n**Exclude_From_Master_Bundle** *string*: If this key exists the asset will look for a ``.unity3d`` bundle instead of the hierarchy.\n\n**Bundle_Override_Path** *string*: Path within the master bundle to load rather than this asset's file path.\n\nLocalization\n------------\n\nEach asset looks for a localization ``.dat`` file in the same directory based on the current language. For example: ``English.dat`` or ``French.dat``.\n\nLoading Order\n-------------\n\nWhen scanning a folder for assets the game checks in this order:\n\n1. Is there a ``.asset`` file with the same name as the folder? e.g. Eaglefire.asset in the Eaglefire folder\n2. Is there a ``.dat`` file with the same name as the folder? e.g. Eaglefire.dat in the Eaglefire folder\n3. Is there an ``Asset.dat`` file?\n4. Otherwise, load all files with the ``.asset`` extension in the folder.\n"
  },
  {
    "path": "assets/asset-validation.rst",
    "content": ".. _doc_asset_validation:\n\nAsset Validation\n================\n\nDuring 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.\n\n**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.\n\n**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.\n\n**Missing Meshes**: Mesh filters without a mesh, or mesh renderers without a mesh filter are found and logged.\n\n**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.\n\n**Missing Materials**: Renderers without materials are found and logged. One exception to this is \"DepthMask\" renderers which are set by the game.\n\n**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).\n\n**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.\n\n**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.\n\n**Audio Samples**: Long audio clips with high frequencies are found and logged. Generally the clips are fairly small files.\n"
  },
  {
    "path": "assets/character-mesh-replacement.rst",
    "content": ".. _doc_character_mesh_replacement:\n\nCharacter Mesh Replacement\n==========================\n\nThe 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.\n\nTwo 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.\n\nProperties Reference\n--------------------\n\n* **Has_1P_Character_Mesh_Override**: true\n* **Character_Mesh_3P_Override_LODs**: >0\n* **Has_Character_Material_Override**: true\n* **Hair_Visible**: true/false\n* **Beard_Visible**: true/false\n\nIf ``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.\n\nIf ``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.\n\nIf ``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.\n"
  },
  {
    "path": "assets/crafting-asset.rst",
    "content": ".. _doc_assets_crafting:\n\nCrafting Assets\n===============\n\nThis 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.\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.\n\n**Type** ``SDG.Unturned.CraftingAsset``\n\nProperties\n----------\n\nThe same :ref:`Blueprints <doc_item_asset_blueprints>` property as items. However, only the V2 blueprints format is supported here.\n"
  },
  {
    "path": "assets/crafting-blacklist-asset.rst",
    "content": ".. _doc_assets_crafting_blacklist:\n\nCrafting Blacklist Assets\n=========================\n\nPrevents specific items or blueprints from being used while crafting. They are hidden from the item quick actions menu and recipe list.\n\n**Type** *string*: ``SDG.Unturned.CraftingBlacklistAsset``\n\n**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):\n\n.. code-block:: unturnedasset\n\t:linenos:\n\t:emphasize-lines: 4, 7-10, 13-16\n\n\tInput_Items\n\t[\n\t\t// Orange Hoodie\n\t\t\"GUID\" \"67c76cdf16024bf68b6e5d14d4c617ab\"\n\n\t\t// Individual items can also be enclosed in brackets { }\n\t\t{\n\t\t\t// Eaglefire\n\t\t\tGUID b03d581a5c1a490f995f8deba57b0f17\n\t\t}\n\n\t\t// Jeans\n\t\tdab78cc4d66645bfb8169be7c15cf876\n\t\t55c69817a31448b685c7f788ec7d2d0c\n\t\tbdae9d26ca704d729b2b0f34812d2a36\n\t\t67a6ec52e4b24ffd89f75ceee0eb5179\n\t]\n\n**Output_Items** array of Item :ref:`Asset Pointers <doc_data_assetptr>`: Any blueprints generating these items cannot be crafted.\n\n**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:\n\n.. code-block:: unturnedasset\n\n\tBlueprints\n\t[\n\t\t{\n\t\t\tItem a6099002318e4d58b8e59d431bcf1b8a\n\t\t\tBlueprintName Salvage\n\t\t}\n\t]\n\n.. 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.\n\n**Allow_Core_Blueprints** *bool*: Defaults to ``true``. If ``false``, blueprints from the vanilla/built-in items are not allowed.\n"
  },
  {
    "path": "assets/curated-items.rst",
    "content": ".. _doc_curated_items:\n\nCurated Items\n=============\n\nCommunity-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&section=mtxitems>`_ tab, where other players can vote on whether they would like to see a specific submission added into the game.\n\nAccepted 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).\n\nThe 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.\n\nRequirements\n------------\n\nFor 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:\n\n#. Follow the submission guidelines.\n#. Organize your Unity project.\n#. Create your cosmetic or skin.\n#. Specify a Mythical effect placement (if your item is a cosmetic).\n#. Export a Unity package.\n#. Submit your item to the :ref:`doc_steam_workshop`.\n\nGuidelines\n----------\n\n.. |ico1| image:: /img/1e1e1e.png\n\t:width: 15px\n.. |ico2| image:: /img/f0f0f0.png\n\t:width: 15px\n\nMost of these guidelines are intended to help promote consistency with *Unturned*'s art style. Here are the guidelines you should keep in mind:\n\n#. | Avoid high contrast colors. They're often painful to look at, especially when the item appears in harsh lighting.\n\n#. | 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.\n\n#. | 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.\n\n#. | 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.\n\n#. | 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).\n\n#. | 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.\n\n#. | 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.\n\n#. | 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.\n\n#. | 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.\n\n#. | Only submit content that you created yourself. Do not use copyrighted material or trademarks that you do not own or have permission to use.\n\n#. | We do not support custom shaders, i.e., shaders not included in the vanilla game cannot be used.\n\n#. | Unfortunately, physics do not play well with the Unturned character, and cannot be used on cosmetics at this time.\n\nRemember: 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.\n\nUnity Project Organization\n--------------------------\n\nOrganizing 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.\n\nFor 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.\n\nCosmetics\n`````````\n\nSome additional notes exist for organizing cosmetic items.\n\n- | 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``.\n- | 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``.\n- | 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``.\n\nExporting Unity Package\n-----------------------\n\nSince 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:\n\n#. 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.\n#. Right-click in the **Project** window.\n#. Click **Export Package...**.\n#. 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.).\n\n.. note::\n\n\tThe 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.\n\nCreating Cosmetics\n------------------\n\nIn 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.\n\nSince these are otherwise identical, we recommend referencing the clothing items included in the ExampleAssets.unitypackage in order to create your cosmetic items.\n\nMythical Effect Placement\n`````````````````````````\n\n.. figure:: /img/EffectTransform.png\n\n\tExample \"Effect\" transform positioning and orientation.\n\nMost 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.\n\nThe orientation is rather unfortunate: +Z is the mythical's up direction and +Y is the mythical's forward direction.\n\nCreating Skins\n--------------\n\nAny 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.\n\nAt 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.\n\n.. figure:: /img/FiestaAugewehrBundles.png\n\n\tThe Fiesta Augewehr skin includes all four types of materials.\n\nUnless 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.\n\n- | **Primary**: The ``Skin_Primary.mat`` is the material used by the skinned item itself. Every skin should have a single primary material.\n- | **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.\n- | **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.\n- | **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.\n\n.. figure:: /img/FallbackLayered.png\n\n\tNotice 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.\n\nAlthough 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.\n\nCustom Models\n`````````````\n\nSkins 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.\n\nSetting 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.\n\nUsing Collections\n-----------------\n\nCollections 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.\n\nSome 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.\n\nAnother 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.\n"
  },
  {
    "path": "assets/data-file-format.rst",
    "content": ".. _doc_data_file_format:\n\nData File Format\n================\n\nThis article describes the syntax of Unturned's ``.dat`` and ``.asset`` files.\n\nEach line is a key-value pair separated by a space. The key and/or value can optionally be in quotes. For example:\n\n.. code-block:: unturneddat\n\n\tKey1 First value\n\t\"Key2 in quotes\" Second value\n\tKey3 \"Third value\"\n\nWill be parsed as:\n\n.. code-block:: text\n\n\t\"Key1\" = \"First value\"\n\t\"Key2 in quotes\" = \"Second value\"\n\t\"Key3\" = \"Third value\"\n\nThe 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.\n\n.. note::\n\n\tKeys are case-insensitive. i.e., ``Use_Cool_Option true`` and ``UsE_cOoL_oPtIoN true`` are identical. Keys should be unique within their dictionary.\n\nAcceptable 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>`.\n\nObjects / Dictionaries\n----------------------\n\nEach 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.\n\nIn this example ``object1`` is a child dictionary in the root dictionary, and ``object2`` is a grand-child:\n\n.. code-block:: unturneddat\n\n\tobject1\n\t{\n\t\tobject2\n\t\t{\n\t\t\tkey value\n\t\t}\n\t}\n\nArrays / Lists\n--------------\n\nLists (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.\n\nIn this example ``values`` is a list of strings:\n\n.. code-block:: unturneddat\n\n\tvalues\n\t[\n\t\tfirst value\n\t\tsecond value\n\t\tthird value\n\t]\n\nLists can also contain dictionaries as seen in this example:\n\n.. code-block:: unturneddat\n\n\tList_Of_Objects\n\t[\n\t\t{\n\t\t\tx 1\n\t\t\ty 2\n\t\t}\n\t\t{\n\t\t\tx 3\n\t\t\ty 4\n\t\t}\n\t]\n\n.. note::\n\n\tMany 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:\n\n\t.. code-block:: unturneddat\n\n\t\t// Total number of elements in old-style list\n\t\tElements 2\n\n\t\t// First element has an index of 0\n\t\tElement_0 A\n\n\t\t// Second element has an index of 1\n\t\tElement_1 B\n\nComments\n--------\n\nLines 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.\n\nFor example these comments are valid:\n\n.. code-block:: unturneddat\n\n\t// a comment\n\tkey1 value1\n\tkey2 \"value2\" // in-line comment\n\nWhereas this comment will not be excluded from the value:\n\n.. code-block:: unturneddat\n\n\tkey value // this is not treated as a comment because the value is not in quotes\n\nFAQ (Frequently Asked Questions)\n--------------------------------\n\n**Q. How do I write a multi-line value?**\n\nThe ``\\n`` escape sequence starts a new line. For example:\n\n.. code-block:: unturneddat\n\n\tText First line\\nSecond line\n\nWill set the value of ``Text`` to:\n\n.. code-block:: text\n\n\tFirst line\n\tSecond line\n\n\n**Q. How do I write an in-line comment after a value containing quotation marks?**\n\nIn-line comments require the value to enclosed in quotation marks, so quotation marks in the value must be escaped with ``\\\"``:\n\n.. code-block:: unturneddat\n\n\t// The parser will read the comment as part of the value because it doesn't know where the value ends.\n\tText Why use so-called \"scare quotes\" instead of /s? // Comment here\n\n\t// The parser will exclude the comment from the value and replace the \\\" with quotation marks.\n\tText \"Why use so-called \\\"scare quotes\\\" instead of /s?\" // Comment here\n\n**Q. Why can't I start a list or dictionary on the same line as a key?**\n\nThis 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.\n\nAs an example of the problem:\n\n.. code-block:: text\n\n\tSomeDictionary {\n\t\tSomeList [\n\t\t]\n\t}\n\nInstead, the opening ``[`` or ``{`` must be placed on the next line:\n\n.. code-block:: unturneddat\n\n\tSomeDictionary\n\t{\n\t\tSomeList\n\t\t[\n\t\t]\n\t}\n\nHistory\n-------\n\nPrior 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.\n\nThis is why ``{`` and ``[`` must be on a new line, as existing v1 assets may have ``{`` or ``[`` as the first character of a value.\n"
  },
  {
    "path": "assets/effect-asset.rst",
    "content": ".. _doc_assets_effect:\n\nEffect Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Effect``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nGeneral data\n------------\n\n**Blast** *uint16* or *GUID*: ID or GUID of effect.\n\n**Lifetime** *float*: Duration of the effect.\n\n**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.\n\n**Gore** *bool*: Effect is hidden when gore is disabled.\n\n**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.\n\n**Static** *flag*: Disable randomized audio pitch change.\n\n**Randomize_Rotation** *bool*: Rolls the effect around the hit axis. Defaults to true.\n\n**Spawn_On_Dedicated_Server** *flag*: Spawn effect on server.\n\n**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.\n\n**Preload** *byte*: Total number of the effect to pre-instantiate in the effect pool to reduce hitching when first used.\n\n**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.\n\nCamera shake\n------------\n\n**CameraShake_MagnitudeDegrees** *float*: The amount of camera shake inflicted upon affected players, in degrees.\n\n**CameraShake_Radius** *float*: Players within the radius around the effect are affected by other camera shake properties.\n\nSplatters\n---------\n\n**Splatter** *int*: Total number of splatter textures in Unity.\n\n**Splatters** *int*: Total number of splatters to spawn.\n\n**Splatter_Lifetime** *float*: Duration of the splatter.\n\n**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.\n\n**Splatter_Liquid** *flag*: Splatters are visible regardless of effect graphics settings being disabled, and slightly changes the direction of each splatter.\n\n**Splatter_Temperature** *enum* (``Acid``, ``Burning``, ``Warm``): Temperature status effect caused when standing in the effect.\n\n**Splatter_Preload** *byte*: Total number of the splatter effects to pre-instantiate in the effect pool to reduce hitching when first used.\n"
  },
  {
    "path": "assets/foliage-asset.rst",
    "content": ".. _doc_assets_foliage:\n\nFoliage Assets\n==============\n\nThere 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:\n\n1. 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.\n2. Eventually the resource system should be converted into a regular objects (this will be automatic) but most objects do not need foliage parameters.\n\nFoliageResourceInfoAsset Properties Reference\n---------------------------------------------\n\n**Type** *string*: ``SDG.Framework.Foliage.FoliageResourceInfoAsset``\n\n**Resource** :ref:`Asset Pointer <doc_data_assetptr>`: actual tree to spawn.\n\n**Obstruction_Radius** *float*: spawn position is invalid if a sphere with this radius overlaps anything.\n\n**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.\n\n**Min_Weight** *float*: [0, 1] only spawn if landscape material weight is greater than this value.\n\n**Max_Weight** *float*: [0, 1] only spawn if landscape material weight is less than this value.\n\n**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.\n\n**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.\n\n**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.\n\nUpgrade Devkit Foliage from V1 to V2\n------------------------------------\n\n.. note::\n\t\n\tMaps with auto-converted terrain from the 3.22.8.0 update will have already been converted to V2.\n\nV1 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.\n\nFollowing 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.\n"
  },
  {
    "path": "assets/layers.rst",
    "content": ".. _doc_assets_layers:\n\nLayers\n======\n\nUpfront: 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.\n\nOverview\n--------\n\nBuilt-in Layers\n\n- **0 Default**\n- **1 TransparentFX**\n- **2 Ignore Raycast**\n- **4 Water**: ocean and water tiles.\n- **5 UI**: menus with :ref:`uGUI glazier <doc_glazier>` as well as plugin custom menus.\n\nUser Layers\n\n- **8 Logic**: Clickable overlays like the position, rotation and scale handles. Editor debug visuals that can be seen through walls are on this layer.\n- **9 Player**: Character capsule (not body hitboxes). Exists for all players server-side, but only the local player client-side.\n- **10 Enemy**: Player body hitboxes.\n- **11 Viewmodel**: Local first-person arms and weapon.\n- **12 Debris**: Typically small simulated objects like ragdolls, grenades, falling tree trunks, destroyed structures, and fragmented objects.\n- **13 Item**: Dropped interactable items.\n- **14 Resource**: Trees and boulders. Barricades attached to vehicles are moved to this layer.\n- **15 Large**: Large props placed in the level editor.\n- **16 Medium**: Medium props placed in the level editor.\n- **17 Small**: Small props without collision placed in the level editor.\n- **18 Sky**: Distant effects without collision like the clouds and stars.\n- **19 Environment**: Roads, grass and pebbles.\n- **20 Ground**: Landscape / terrain.\n- **21 Clip**: Invisible collision.\n- **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.\n- **23 Entity**: Zombie and animal body hitboxes.\n- **24 Agent**: Zombie and animal character capsules (not body hitboxes).\n- **25 Ladder**: Invisible climbable trigger.\n- **26 Vehicle**: All vehicle colliders.\n- **27 Barricade**: Barricade item placed in the world. Barricades attached to vehicles are moved to the Resource layer.\n- **28 Structure**: Structure item placed in the world.\n- **29 Tire**: Wheel colliders. Allows wheels to mask what they collide with.\n- **30 Trap**: Typically trigger colliders including rocket launcher projectiles and kill volumes.\n- **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.\n\nLayer Collision Matrix\n----------------------\n\nNote that these comments do **NOT** apply to collision queries like raycasts, spherecasts, etc.\n\nNo physics collision:\n\n- **Default**\n- **TransparentFX**\n- **Ignore Raycast**\n- **Water**\n- **UI**\n- **Logic**\n- **Enemy**\n- **Viewmodel**\n- **Small**\n- **Sky**\n- **Environment**\n- **Ground**\n- **Entity**\n- **Ladder**\n- **Ground2**\n\nHas physics collision:\n\n- **Player**: Character controller layer is used by Unity as the underlying query mask.\n- **Debris**\n- **Item**\n- **Resource**\n- **Large**\n- **Medium**\n- **Environment**\n- **Ground**\n- **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.\n- **Navmesh**\n- **Agent**: Character controller layer is used by Unity as the underlying query mask.\n- **Vehicle**\n- **Barricade**\n- **Structure**\n- **Tire**: Wheel collider layer is used by Unity as the underlying query mask.\n- **Trap**\n"
  },
  {
    "path": "assets/level-asset.rst",
    "content": ".. _doc_assets_level:\n\nLevel Assets\n============\n\nEach 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.\n\nFor examples, check the ``Assets/Levels`` directory.\n\n**Type** *string*: ``SDG.Unturned.LevelAsset``\n\n**Dropship** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Overrides the model seen flying over the map when a care package is dropped.\n\n**Airdrop** :ref:`Asset Pointer <doc_data_assetptr>`: Asset pointer to an :ref:`Airdrop Asset <doc_assets_airdrop>`. Overrides the falling care package model.\n\n**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.\n\n**Min_Stealth_Radius** *float*: Player stealth skill level cannot reduce minimum detection distance below this value.\n\n**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.\n\n**Perpetual_Weather_Asset** :ref:`Asset Pointer <doc_data_assetptr>`: Asset pointer to a :ref:`Weather Asset <doc_assets_weather>`. Overrides weather scheduling.\n\n**Global_Weather_Mask** :ref:`u32 Mask <doc_data_bitmask>`: Fallback weather mask while player is not inside an ambience volume. Defaults to 0xFFFFFFFF.\n\n**Skills** *array*: Overrides skill default and max levels. Refer to skill rule properties.\n\n**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.\n\n**TerrainColors** *array*: Specifies which colors are too similar to terrain colors. Please refer to Terrain Color Properties below.\n\n**Enable_Admin_Faster_Salvage_Duration** *bool*: By default, players in singleplayer and admins in multiplayer have a faster salvage time.\n\n**Has_Clouds** *bool*: Disables clouds in skybox when false. Defaults to true.\n\n**Loading_Screen_Music** *array*: Randomly selected. Refer to music properties.\n\n**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.\n\n**Death_Music** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Audio clip played after death.\n\n**UnderwaterFogDensity** *float*: Overrides fog effect intensity while the camera is underwater. Defaults to ``0.075``.\n\n**Allow_Building_In_Safezone_In_Singleplayer** *bool*: If true, players can bypass safezone's no-buildables mode in singleplayer. Defaults to false.\n\n**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.\n\n.. _doc_assets_level:supports_fishing_volumes:\n\n**Supports_Fishing_Volumes** *bool*: If true, this level has assigned fishing spawn tables to water volumes (or set the default table). Defaults to false.\n\n**Default_Fish_Spawn_Table** :ref:`Asset Pointer <doc_data_assetptr>`: Fishing rods using per-water-volume fishing spawn table fallback to this table.\n\nCloud Override Properties\n-------------------------\n\nWhen 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.\n\n.. warning:: Custom clouds are *not* recommended as they behave inconsistently at lower max draw distances.\n\n\tEarly 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.\n\n\tLater 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.\n\n\tAs 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.\n\n\tUnfortunately, 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.\n\n**CloudOverride_Prefab** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Prefab to instantiate and attach to lighting.\n\n**CloudOverride_ParticleSystems** *list*: Dictionaries describing particle systems in ``CloudOverride_Prefab`` with the following additional properties:\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\nFor example:\n\n.. code-block:: unturnedasset\n\t:linenos:\n\n\tCloudOverride_ParticleSystems\n\t[\n\t\t{\n\t\t\tPath System1\n\t\t\tRateOverTimeScale 1.5\n\t\t\tWarmupTime 10\n\t\t\tMaterialColorPropertyNames\n\t\t\t[\n\t\t\t\t_Color\n\t\t\t\t_EmissionColor\n\t\t\t]\n\t\t}\n\t\t{\n\t\t\tPath System2\n\t\t\tRateOverTimeScale 3\n\t\t\tMaterialColorPropertyNames\n\t\t\t[\n\t\t\t\t_Color\n\t\t\t\t_EmissionColor\n\t\t\t]\n\t\t}\n\t]\n\nSchedulable Weather Properties\n------------------------------\n\n**Asset** :ref:`Asset Pointer <doc_data_assetptr>`: Points to a :ref:`Weather Asset <doc_assets_weather>`.\n\n**Min_Frequency** *float*: When chosen to be the next scheduled weather event, minimum number of in-game days before it will start.\n\n**Max_Frequency** *float*: When chosen to be the next scheduled weather event, maximum number of in-game days before it will start.\n\n**Min_Duration** *float*: Minimum number of in-game days before the weather event will end.\n\n**Max_Duration** *float*: Maximum number of in-game days before the weather event will end.\n\nSkill Rule Properties\n---------------------\n\n**Id** *string*: Name of skill, for example Sharpshooter.\n\n**Default_Level** *int*: Skill level when player spawns. The ``Spawn_With_Max_Skills`` gameplay config option takes priority.\n\n**Max_Unlockable_Level** *int*: Maximum skill level attainable through gameplay. Higher levels are hidden in the skills menu.\n\n**Base_Cost** *int*: If set, overrides XP cost to purchase first level of the skill.\n\n**Per_Level_Cost_Increase** *int*: If set, overrides XP cost increase with each level. Added to ``Base_Cost`` after the first level.\n\n**Cost_Multiplier** *float*: Multiplier for total XP upgrade cost.\n\n.. code-block:: unturnedasset\n\t:linenos:\n\n\tSkills\n\t[\n\t\t{\n\t\t\tId Overkill\n\t\t\tDefault_Level 0\n\t\t\tMax_Unlockable_Level 0\n\t\t}\n\t\t{\n\t\t\tId Parkour\n\t\t\tDefault_Level 2\n\t\t\tMax_Unlockable_Level 2\n\t\t}\n\t\t{\n\t\t\tId Crafting\n\t\t\tDefault_Level 1\n\t\t\tMax_Unlockable_Level 3\n\t\t\tCost_Multiplier 5\n\t\t}\n\t]\n\nSkillset Loadout Properties\n---------------------------\n\nCan contain the following keys: ``None``, ``Fire``, ``Police``, ``Army``, ``Farm``, ``Fish``, ``Camp``, ``Work``, ``Chef``, ``Thief``, ``Medic``\n\nEach key is a list of items with the following properties:\n\n**Asset**: :ref:`Asset Pointer <doc_data_assetptr>`: Item or spawn table to grant an item from.\n\n**Amount** *int*: Number of times to grant this item. Defaults to 1.\n\n**Origin** :ref:`EItemOrigin <doc_data_eitemorigin>`: Determines starting state of the item. Defaults to World.\n\nExample:\n\n.. code-block:: unturnedasset\n\t:linenos:\n\n\tSkillset_Loadouts\n\t{\n\t\tArmy\n\t\t[\n\t\t\t{\n\t\t\t\t// Eaglefire at max quality with full ammo\n\t\t\t\tAsset 4\n\t\t\t\tOrigin Admin\n\t\t\t}\n\t\t\t{\n\t\t\t\t// Military magazine x2 with random ammo\n\t\t\t\tAsset dbfb1d0d11ca438e9dffb95f76e61274\n\t\t\t\tAmount 2\n\t\t\t}\n\t\t]\n\n\t\t// Other skillsets will spawn with nothing\n\t}\n\nTerrain Color Properties\n------------------------\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\nMusic Properties\n----------------\n\n**Loop** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Looping audio clip played until loading finishes.\n\n**Outro** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Audio clip played once loading finishes.\n"
  },
  {
    "path": "assets/material-palette-asset.rst",
    "content": ".. _doc_assets_material_palette:\n\nMaterial Palette Assets\n=======================\n\nThe ``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.\n\nMetadata\n--------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *string*: ``SDG.Unturned.MaterialPaletteAsset``\n\nMaterial Palette Properties\n---------------------------\n\n**Materials** *array* of :ref:`Master Bundle Pointer <doc_data_masterbundleptr>` *dictionaries*: Each dictionary in the list should point to a material bundled in Unity.\n\n.. code-block:: unturnedasset\n\t\n\t\"Asset\"\n\t{\n\t\t\"Materials\"\n\t\t[\n\t\t\t{\n\t\t\t\t\"Name\" \"core.masterbundle\"\n\t\t\t\t\"Path\" \"Objects/Material_Palettes/House/House_00.mat\"\n\t\t\t}\n\t\t\t{\n\t\t\t\t\"Name\" \"core.masterbundle\"\n\t\t\t\t\"Path\" \"Objects/Material_Palettes/House/House_01.mat\"\n\t\t\t}\n\t\t]\n\t}\n"
  },
  {
    "path": "assets/mod-hooks.rst",
    "content": ".. _doc_assets_mod_hooks:\n\nMod Hooks\n=========\n\nOverview\n--------\n\nScript 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.\n\nEach script documents its purpose and members within its \\*.cs file.\n\nOriginally proposed and coined by VitaxaRusModding in this GitHub issue: `Link <https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/435>`_\n\nEvent Listeners\n---------------\n\nActivation Event Hook\n`````````````````````\n\nEvents when a component or game object are enabled and disabled. Useful for extending toggleable actions in the base game.\n\nBinary Random Component\n```````````````````````\n\nWhen 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.\n\nCollision Damage\n``````````````````\n\nDamages players when they overlap a trigger collider.\n\nCollision Event Hook\n````````````````````\n\nEvents 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.\n\nDestroy Event Hook\n``````````````````\n\nEvent when a component or game object is removed from the scene.\n\nExplosion Spawner\n`````````````````\n\nAllows Unity events to apply damage in a sphere. (doesn't have any visual effects)\n\nIntended to replace unsupported/unintentional use of ``Grenade.cs`` and ``Rocket.cs`` scripts.\n\nGun Attachment Event Hook\n`````````````````````````\n\nAllows gun item game objects (including children) to receive events when sights, tacticals, grips, barrels, and magazines are attached, replaced, and/or detached.\n\n.. _doc_assets_mod_hooks:iobs_event_hook:\n\nInteractable Object Binary State Event Hook (IOBS)\n``````````````````````````````````````````````````\n\n(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.\n\nInteractable Object Quest Event Hook\n````````````````````````````````````\n\nThis 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.\n\n.. _doc_assets_mod_hooks:npc_global_event_hook:\n\nNPC Global Event Hook\n`````````````````````\n\nEvent 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.\n\nText Chat Event Hook\n````````````````````\n\nEvent when a text chat message passes certain filters such as channel, within a radius, and containing a secret phrase. Only fired on the server.\n\nTimer Event Hook\n````````````````\n\nAllows events to set or cancel a timer, and triggers an event when the timer expires.\n\nUseable Event Hook\n```````````````````\n\nEvents for EquipableItem prefab of any item type. These events are fired on server and client.\n\nUseable Gun Event Hook\n``````````````````````\n\nEvents for EquipableItem prefab. Supersedes VehicleTurretEventHook. These events are fired on server and client.\n\nVehicle Event Hook\n``````````````````\n\nEvents for driver entering and exiting the vehicle. These events are fired on server and client.\n\nVehicle Gear Shift Event Hook\n``````````````````````````````\n\nEvents for vehicle gearbox entering and exiting a target gear.\n\nVehicle Health Event Hook\n``````````````````````````\n\nEvents for vehicle health passing a comparison against a target number.\n\nVehicle Turret Event Hook\n`````````````````````````\n\nEvents for Turret\\_# GameObjects in the vehicle when guns are used. These events are fired on server and client.\n\nWeather Event Hook\n``````````````````\n\nEvents for day, night, full moon, and weather. These events are fired on server and client.\n\nCustom Weather Event Hook\n`````````````````````````\n\nEvents for a specific custom :ref:`Weather Asset <doc_assets_weather>`. Any map can have an unlimited number of weather types and weather listeners.\n\nEvent Instigators\n-----------------\n\nAirdrop Spawner\n```````````````\n\nAllows Unity events to call in an airdrop. Optionally overrides the cargo and destination.\n\nBarricade Spawner\n`````````````````\n\nAllows Unity events to place barricades.\n\nClient Text Chat Messenger\n``````````````````````````\n\nAllows Unity events to request a text chat message be sent on behalf of the client. For example, to execute a command.\n\nThe ``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.\n\nItem Spawner\n```````````````\n\nAllows Unity events to spawn dropped items.\n\nServer Text Chat Messenger\n``````````````````````````\n\nAllows 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.\n\nThe ``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.\n\nEffect Spawner\n``````````````\n\nAllows Unity events to spawn effect assets. When the ``AuthorityOnly`` field is enabled only the server will spawn effects and replicate them to clients.\n\nMob Alert Spawner\n`````````````````\n\nAllows Unity events to startle nearby animals and zombies.\n\nOptionally uses a nearby player as the origin of the alert.\n\nNPC Global Event Messenger\n``````````````````````````\n\nAllows Unity events to broadcast Event NPC rewards. The ``NPC Global Event Hook`` can then listen for these events.\n\nVehicle Spawner\n```````````````\n\nAllows Unity events to spawn a vehicle. Optionally overrides the paint color.\n\nMisc\n----\n\nBarricade Destroyer\n````````````````````\n\nForcefully removes barricades within a sphere, optionally playing their Explosion effects and/or spawning their Item_Dropped_On_Destroy item(s).\n\nFall Damage Override\n````````````````````\n\nAllows any game object to override the fall damage when a character lands on it or one of its descendants.\n\nCrafting Tag Provider\n`````````````````````\n\nAllows the following entities to modify which crafting tags (workstations) are available to nearby players:\n\n- Barricades\n- Structures\n- Vehicles\n- Resources\n- Objects\n\nThis component is used by vanilla for Heat Source backwards compatibility.\n\nCrafting Tag Modifier\n`````````````````````\n\nLinked from a Crafting Tag Provider. Allows Unity events to modify which crafting tags (workstations) are available to nearby players.\n\nAs 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.\n\nMusic Audio Source\n```````````````````\n\nReassigns a sibling Audio Source's output audio mixer group to the vanilla Music mixer, respecting the player's volume preferences.\n\nRepeat\n``````\n\nRepeats an event a configurable or random number of times. Essentially a for-loop for Unity events.\n"
  },
  {
    "path": "assets/mythical-asset.rst",
    "content": ".. _doc_assets_mythical:\n\nMythical Effect Assets\n======================\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Mythic``)\n\n**ID** *uint16*: Must be a unique identifier.\n\n.. 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.\n\nWhen 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.\n\nUnity Prefabs\n-------------\n\n**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.\n\n**System_Hook**: Attached to a cosmetic item's \"Effect\" prefab. Layer should be set to Enemy.\n\n.. figure:: /img/EffectTransform.png\n\n\tExample \"Effect\" transform positioning and orientation.\n\nFor silly legacy reasons the orientation is rather unfortunate: +Z is the mythical's up direction and +Y is the mythical's forward direction.\n\n**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.\n\n**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.\n\nLocalization\n------------\n\n**Particle_Tag_Name** *string*: When a mythical item is crafted with this effect, this is the display name shown in the inventory.\n"
  },
  {
    "path": "assets/object-asset.rst",
    "content": ".. _doc_assets_object:\n\nObject Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.\n\n**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.\n\n**ID** *uint16*: Must be a unique identifier.\n\nObject Properties\n-----------------\n\n**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.\n\n**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.\n\n**Allow_Structures** *flag*: Structures can be built on top of this object. For example, a fake grass object may want to use this property.\n\n**Causes_Fall_Damage** *bool*: Whether or not players should take fall damage when landing on this object. Defaults to true.\n\n**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``.\n\n**Christmas_Redirect** :ref:`doc_data_guid`: GUID of the object that should appear during the Festive holiday.\n\n**Collision_Important** *flag*: Prevent collision from being disabled. When using ``Type Large``, this flag is automatically included.\n\n**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``.\n\n**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.\n\n**Fuel** *flag*: Fuel can be siphoned from this object. Deprecated in favor of ``Interactability Fuel``.\n\n**Halloween_Redirect** :ref:`doc_data_guid`: GUID of the object that should appear during the Halloween holiday.\n\n**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.\n\n**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``.\n\n**Is_Gore** *bool*: Whether or not this object should be visible if the player has disabled \"Show Blood Splatters\".\n\n**Is_Clutter** *bool*: Defaults to false. If true, object is not instantiated when player has the \"Load Clutter\" graphics option disabled.\n\n.. warning:: Objects the player can collide with should never be clutter. Otherwise, the player will \"rubberband\" on these objects in multiplayer.\n\n**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``.\n\n**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.\n\n**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.\n\n**Material_Palette** :ref:`doc_data_guid`: GUID of the :ref:`Material Palette Asset <doc_assets_material_palette>` that should be used by the object.\n\n**Refill** *flag*: Water can be siphoned from this object. Deprecated in favor of ``Interactability Water``.\n\n**Snowshoe** *flag*: This object should not leave a footprint when baking materials.\n\n**Soft** *flag*: Vehicles should not take damage when colliding with this object.\n\n**Use_Water_Height_Transparent_Sort** *flag*: Useful for transparent objects, such as glass.\n\n**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``.\n\nDecals\n``````\n\n**Decal_Alpha** *flag*: This flag should be set if the decal has a transparent texture. Requires ``Type Decal``.\n\n**Decal_X** *float*: Override the scale of the decal, on the 𝘟-axis. Requires ``Type Decal``.\n\n**Decal_Y** *float*: Override the scale of the decal, on the 𝘠-axis. Requires ``Type Decal``.\n\n**Decal_LOD_Bias** *float*: Multiplier for the LOD's switching distance. Defaults to 1. Requires ``Type Decal``.\n\nInterior Culling\n````````````````\n\n**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.\n\n**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.\n\n**LOD_Bias** *float*: Multiplier on the threshold distance for interior culling. Requires that ``LOD`` has been set.\n\n**LOD_Center_X** float: Offset for the culling volume's local position, on the 𝘟-axis. Requires that ``LOD`` has been set.\n\n**LOD_Center_Y** float: Offset for the culling volume's local position, on the 𝘠-axis. Requires that ``LOD`` has been set.\n\n**LOD_Center_Z** float: Offset for the culling volume's local position, on the 𝘡-axis. Requires that ``LOD`` has been set.\n\n**LOD_Size_X** float: Offset for the culling volume's size, on the 𝘟-axis. Requires that ``LOD`` has been set.\n\n**LOD_Size_Y** float: Offset for the culling volume's size, on the 𝘠-axis. Requires that ``LOD`` has been set.\n\n**LOD_Size_Z** float: Offset for the culling volume's size, on the 𝘡-axis. Requires that ``LOD`` has been set.\n\nInteractables\n`````````````\n\n**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``.\n\n- ``Binary_State`` objects will change between their two states when interacted with – such as an open or closed door.\n- ``Dropper`` objects can spawn items when interacted with.\n- ``Note`` objects can display lines of text when interacted with.\n- ``Water`` objects can be siphoned for water, and ``Fuel`` objects can be siphoned for fuel.\n- ``Rubble`` objects are destructible. It is preferable to use ``Rubble Destroy`` instead of ``Interactability Rubble``.\n- ``NPC`` objects can provide access to dialogue, quests, and vendors.\n- ``Quest`` objects can be interacted with, but unlike other options they have no additional functionality.\n- ``Dialogue`` objects open the dialogue screen - similar to NPCs - with a non-NPC appearance and custom interact text.\n\n.. note::\n\n\tAlthough ``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.\n\n\n**Interactability_Animation_Component_Path** *string*: (``Binary_State``-only) Transform path relative to object root with Animation component. Defaults to \"Root\".\n\n**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.\n\n**Interactability_Delay** *float*: In seconds, the cooldown before the object can be interacted with again.\n\n**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.\n\n**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.\n\n**Interactability_Drop_#** *uint16*: ID of an item that should be dropped. This property is used in conjunction with ``Interactability_Drops``.\n\n**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``.\n\n**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.\n\n**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.\n\n**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.\n\n**Interactability_Health** *uint16*: Total amount of health each section of the object has, when using ``Interactability Rubble``. Defaults to 0.\n\n**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``.\n\n**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``.\n\n**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.)\n\n.. note:: When ``Interactability_Nav`` is combined with ``Rubble_Nav_Mode``, the Nav game object is only active if **both** activate it. (i.e., AND)\n\n**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``.\n\n**Interactability_Proof_Explosion** *flag*: Immune to area-of-effect explosive damage, when using ``Interactability Rubble``.\n\n**Interactability_Remote** *flag*: Disables the ability for players to interact with this via a button prompt.\n\n**Interactability_Reset** *float*: Delay before an interacted object resets, or a destroyed object respawns, in seconds.\n\n**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.\n\n**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.\n\n**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``.\n\n**Interactability_Rewards_Min** *byte*: Minimum amount of item drops to reward, when using ``Interactability Rubble``. Defaults to 1.\n\n**Interactability_Rewards_Max** *byte*: Maximum amount of item drops to reward, when using ``Interactability Rubble``. Defaults to 1.\n\n**Interactability_Reward_Probability** *float*: Probability of receiving a reward, as a decimal-to-percent chance, when using ``Interactability Rubble``. Defaults to 1.\n\n**Interactability_Reward_XP** *uint32*: Amount of experience to reward when the object using ``Interactability Rubble`` is destroyed.\n\n**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.\n\nRubble\n``````\n\n**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.\n\n**Rubble_All_Sections_Destroyed_Alert_Radius** *float*: If set, alert nearby enemies when all sections are destroyed.\n\n**Rubble_Blade_ID** *byte*: Weapons are unable to damage this object unless they have a matching ``BladeID_#`` value. Defaults to 0.\n\n**Rubble_Can_Zombies_Damage** *bool*:  If true, zombies can attack this object if it's blocking them. Defaults to false.\n\n**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``.\n\n**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.\n\n**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.\n\n**Rubble_Health** *uint16*: Total amount of health each section of the object has. Defaults to 0.\n\n**Rubble_Invulnerable** *flag*: This resource cannot be damaged by lower-power :ref:`doc_item_asset_weapon` that do not have the ``Invulnerable`` flag.\n\n**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.\n\n.. note:: When ``Rubble_Nav_Mode`` is combined with ``Interactability_Nav``, the Nav game object is only active if **both** activate it. (i.e., AND)\n\n**Rubble_Proof_Explosion** *flag*: Immune to area-of-effect explosive damage.\n\n**Rubble_Reset** *float*: Delay before a destroyed object respawns, in seconds.\n\n**Rubble_Respawn_All_Sections_Simultaneously** *bool*: If true, all sections respawn at the same time. Defaults to false.\n\n**Rubble_Reward_ID** *uint16*: ID of an item :ref:`spawn table <doc_assets_spawn>` to use for rewards. Defaults to 0.\n\n**Rubble_Rewards_Min** *byte*: Minimum amount of item drops to reward. Defaults to 1.\n\n**Rubble_Rewards_Max** *byte*: Maximum amount of item drops to reward. Defaults to 1.\n\n**Rubble_Reward_Probability** *float*: Probability of receiving a reward, as a decimal-to-percent chance. Defaults to 1.\n\n**Rubble_Reward_XP** *uint32*: Amount of experience to reward when the destructible object is destroyed.\n\n**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.\n\n**Rubble_Zombie_Damage_Multiplier** *float*: Multiplier for damage from zombies if RubbleCanZombiesDamage is true.\n\nConditions and Rewards\n``````````````````````\n\n: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.\n\nConditions 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_#``.\n\nLocalization\n------------\n\n**Name** *string*: Object name in user interfaces.\n\n**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.\n\n**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``.\n\n**Dialogue_Name** *string*: Overrides character name in dialogue. Defaults to the object name.\n"
  },
  {
    "path": "assets/outfit-asset.rst",
    "content": ".. _doc_assets_outfit:\n\nOutfit Assets\n=============\n\nThe 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.\n\nMetadata\n--------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *string*: ``SDG.Unturned.OutfitAsset``\n\nOutfit Properties\n-----------------\n\n**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:\n\n.. code-block:: unturnedasset\n\n\t\"Asset\"\n\t{\n\t\t\"Items\"\n\t\t[\n\t\t\t// Top\n\t\t\t\"9fd6032f9a24404eaf28961fc7f2d289\"\n\n\t\t\t// Bottom\n\t\t\t\"d4ec52a157f746edbc3a4df8ae79ddef\"\n\n\t\t\t// Mask\n\t\t\t\"1adc30f0dbf246eba1c0c6a183206aad\"\n\n\t\t\t// Hat\n\t\t\t\"daf02a225ebc4b76ae51ca485706e470\"\n\t\t]\n\t}\n"
  },
  {
    "path": "assets/physics-material-asset.rst",
    "content": ".. _doc_assets_physics_material:\n\nPhysics Material Assets\n=======================\n\nWork-in-progress feature to allow custom physics effects rather than hardcoding them.\n\nThe ``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.\n\nThe ``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.\n\nProperties\n----------\n\n**Type** *string*: ``SDG.Unturned.PhysicsMaterialAsset`` or ``SDG.Unturned.PhysicsMaterialExtensionAsset``\n\n**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.\n\n**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.\n\n**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.\n\n**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:\n\n- BulletCasingBounce: used by vanilla non-shotgun particle collision audio.\n- BulletImpact: fired bullet hitting surface.\n- BipedLand: player landing on a surface after falling. Could be used for other two-legged characters in the future.\n- FootstepWalk: individual non-sprinting footstep.\n- FootstepRun: individual sprinting footstep.\n- LegacyImpact: will probably be phased-out. Still used by vehicle bumper collision and as a fallback for melee impact.\n- MeleeImpact: melee attack hitting surface.\n- ShotgunShellBounce: used by vanilla shotgun particle collision audio.\n- ZombieBipedLand: zombie equivalent of BipedLand. If unassigned, BipedLand is used with 85% pitch scaling.\n- ZombieFootstepRun: zombie equivalent of FootstepRun. If unassigned, FootstepRun is used with 85% pitch scaling.\n- ZombieFootstepWalk: zombie equivalent of FootstepWalk. If unassigned, FootstepWalk is used with 85% pitch scaling.\n- MegaZombieFootstep: mega zombie footstep sound. If unassigned, FootstepWalk is used with 72% pitch scaling and +50% volume.\n- MegaZombieLand: mega zombie landing sound. If unassigned, BipedLand is used with 72% pitch scaling and +50% volume.\n\n**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.\n\n**IsArable** *bool*: If true, crops can be planted on this material.\n\n**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.\n\n**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.\n\n**Character_Acceleration_Multiplier** *float*: Default acceleration is equal to the target move speed.\n\n**Character_Deceleration_Multiplier** *float*: Default deceleration is 2m/s².\n\n``Character_Max_Speed_Multiplier`` *float*: Allows speed to reach up to this multiplied by the target move speed.\n"
  },
  {
    "path": "assets/redirector-asset.rst",
    "content": ".. _doc_asset_redirector:\n\nRedirector Assets\n=================\n\n**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.\n\n.. 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.\n\nGame Data File\n--------------\n\nNote that ``TargetAsset`` is required for this asset to function.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`AssetCategory <doc_asset_redirector:assetcategory>`\n     - :ref:`enum <doc_data_builtin_types>`\n     - ``None``\n   * - :ref:`TargetAsset <doc_asset_redirector:targetasset>`\n     - :ref:`GUID <doc_data_guid>`\n     -\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_asset_redirector:assetcategory:\n\nAssetCategory :ref:`EAssetType <doc_data_eassettype>` ``None``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf 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``.\n\n----\n\n.. _doc_asset_redirector:targetasset:\n\nTargetAsset :ref:`GUID <doc_data_guid>`\n:::::::::::::::::::::::::::::::::::::::\n\nGUID of actual asset to use when an asset reference points to the redirector asset.\n"
  },
  {
    "path": "assets/resource-asset.rst",
    "content": ".. _doc_assets_resource:\n\nResource Assets\n===============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.\n\n**Type** *enum* (``Resource``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nResource Properties\n-------------------\n\n**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.\n\n**BladeID** *byte*: Weapons are unable to damage this resource unless they have a matching ``BladeID_#`` value. Defaults to 0.\n\n**Bypass_ID_Limit** *flag*: Allows for using an ``ID`` value within the range reserved for official content.\n\n**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.\n\n**Christmas_Redirect** :ref:`doc_data_guid`: GUID of the resource that should appear during the Festive holiday.\n\n**Debris_Vertical_Offset** *float*:  Distance along tree's local up axis to offset debris spawn position. Defaults to 1.0.\n\n**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.\n\n**Explosion** :ref:`GUID <doc_data_guid>` or *uint16*: GUID or legacy ID of :ref:`EffectAsset <doc_assets_effect>` to play when destroyed.\n\n**Forage** *flag*: Instead of being destroyable, this resource can be foraged from by interacting with it.\n\n**Forage_Reward_Experience** *uint32*: Amount of experience to reward when the resource is foraged from. Defaults to 1.\n\n**Halloween_Redirect** :ref:`doc_data_guid`: GUID of the resource that should appear during the Halloween holiday.\n\n**Health** *uint16*: Total amount of health the resource has. Defaults to 0.\n\n**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``.\n\n**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.\n\n**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``.\n\n**No_Debris** *flag*: This resource does not have debris that should appear when it has been destroyed.\n\n**RandomAngleDeviation_Max** *float*: Maximum angle in degrees away from the up direction. Defaults to 5.\n\n**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.\n\n**RandomUniformScale_Max** *float*: Maximum scale. The same randomized value is used for all axes (uniform). Defaults to 1.1 for backwards compatibility.\n\n**RandomUniformScale_Min** *float*: Minimum scale. The same randomized value is used for all axes (uniform). Defaults to 1.1 for backwards compatibility.\n\n**Reset** *float*: Delay before respawning, in seconds.\n\n**Reward_ID** *uint16*: ID of an item :ref:`spawn table <doc_assets_spawn>` to use for rewards. Defaults to 0.\n\n**Reward_Min** *byte*: Minimum amount of item drops to reward. Defaults to 6.\n\n**Reward_Max** *byte*: Maximum amount of item drops to reward. Defaults to 9.\n\n**Reward_XP** *uint32*: Amount of experience to reward when the resource is destroyed.\n\n**Scale** *float*: The tree's in-game scale is a random number between 1.1 and the result of ``1.1 + (Scale * 2)``.\n\n.. deprecated:: 3.24.7.0\n\tScale is replaced by the ``RandomUniformScale_Min`` and ``RandomUniformScale_Max`` properties.\n\n**SpeedTree** *flag*: This resource should be considered a SpeedTree when using higher graphical settings.\n\n**SpeedTree_Default_LOD_Weights** *flag*: Use the default LOD weights intended for a SpeedTree.\n\n**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``.\n\n**Vertical_Offset** *float*: A vertical offset above or below wherever this resource is placed, in meters. Defaults to -0.75.\n\n**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.\n\n**Vulnerable_To_Fists** *bool*: When true, this resource can be damaged by a player's fists. Defaults to false.\n\nLocalization\n------------\n\n**Name** *string*: Resource name in user interfaces.\n\n**Interact** *string*: Override the text shown for interactable resources using the ``Forage`` flag.\n"
  },
  {
    "path": "assets/road-asset.rst",
    "content": ".. _doc_assets_road:\n\nRoad Assets\n===========\n\nThis asset allows roads to be shared between levels, and exposes some previously-unavailable properties for configuration.\n\nProperties\n----------\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Chart <doc_assets_road:chart>`\n     - :ref:`doc_data_eobjectchart`\n     - ``None``\n   * - :ref:`Depth <doc_assets_road:depth>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.0``\n   * - :ref:`OffsetAlongNormal <doc_assets_road:offsetalongnormal>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.0``\n   * - :ref:`PhysicsMaterial <doc_assets_road:physicsmaterial>`\n     - :ref:`string <doc_data_builtin_types>`\n     - See description\n   * - :ref:`RepeatDistanceScale <doc_assets_road:repeatdistancescale>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.0``\n   * - :ref:`TexturePath <doc_assets_road:texturepath>`\n     - :ref:`string <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Width <doc_assets_road:width>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.0``\n   * - :ref:`VanillaPhysicsMaterial <doc_assets_road:vanillaphysicsmaterial>`\n     - :ref:`enum <doc_data_builtin_types>`\n     - See description\n\n----\n\n.. _doc_assets_road:chart:\n\nChart :ref:`doc_data_eobjectchart` ``None``\n:::::::::::::::::::::::::::::::::::::::::::\n\nIf not ``None``, overrides how road appears in chart generation.\n\nIf ``None`` (default) legacy classification is used:\n\n- Concrete roads wider than 16 meters are ``Highway``.\n- Other concrete roads are ``Road``.\n- Non-concrete roads are ``Path``.\n\n----\n\n.. _doc_assets_road:depth:\n\nDepth :ref:`float32 <doc_data_builtin_types>` ``0.0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTotal size along the up axis.\n\n.. note:: If converting a legacy road configuration, please note that Depth shown in the legacy editor is actually *half* the total depth.\n\n----\n\n.. _doc_assets_road:offsetalongnormal:\n\nOffsetAlongNormal :ref:`float32 <doc_data_builtin_types>` ``0.0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDistance along the terrain surface normal to move each road vertex.\n\n----\n\n.. _doc_assets_road:physicsmaterial:\n\nPhysicsMaterial :ref:`doc_data_masterbundleptr` to ``PhysicMaterial``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nUnity ``PhysicMaterial`` to apply to road collider. Not used if :ref:`VanillaPhysicsMaterial <doc_assets_road:vanillaphysicsmaterial>` is assigned.\n\n----\n\n.. _doc_assets_road:repeatdistancescale:\n\nRepeatDistanceScale :ref:`float32 <doc_data_builtin_types>` ``1.0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nBy 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.\n\nThis property multiplies the distance along the road before the texture repeats.\n\n.. 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.\n\n----\n\n.. _doc_assets_road:texturepath:\n\nTexturePath :ref:`doc_data_masterbundleptr` to ``Texture2D``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf not specified, the game looks for a texture named ``Texture`` in the accompanying asset bundle.\n\n----\n\n.. _doc_assets_road:width:\n\nWidth :ref:`float32 <doc_data_builtin_types>` ``0.0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTotal horizontal size before the road begins tapering off into the terrain.\n\n.. note:: If converting a legacy road configuration, please note that Width shown in the legacy editor is actually *half* the total width.\n\n----\n\n.. _doc_assets_road:vanillaphysicsmaterial:\n\nVanillaPhysicsMaterial :ref:`string <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOptional 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.\n"
  },
  {
    "path": "assets/server-browser-curation-asset.rst",
    "content": ".. _doc_asset_server_browser_curation:\n\nServer Browser Curation Assets\n==============================\n\nMost of the information for this asset type is covered in :ref:`Server Browser Curation <doc_server_browser_curation>`.\n\n**Type**: ``ServerCuration``\n\n**Icon**: Unlike curation lists hosted on the web, the asset can include a 32x32 Icon texture in an asset bundle.\n\n**Name**: If a localization file is present, the display name is loaded from that instead of the asset file.\n\n.. note:: The asset is not enabled by default when subscribed to. It needs to be enabled from the Curation menu in the Server Browser.\n"
  },
  {
    "path": "assets/spawn-asset.rst",
    "content": ".. _doc_assets_spawn:\n\nSpawn Assets\n============\n\nThe 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.\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Spawn``)\n\n**ID** *uint16*: Must be a unique identifier. IDs 1‒1000 are reserved for official content.\n\nTables\n------\n\nTables are the assets spawned from the spawner, referenced by ID. These could be additional spawn tables; or individual assets like items, vehicles, and animals.\n\n**Tables**: list of dictionaries. Each dictionary entry can contain these properties:\n\n**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.\n\n**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.\n\n**LegacyAssetId** *uint16*: ID of asset to spawn. Use of ``Guid`` is encouraged instead to prevent ID conflicts between mods.\n\n**Weight** *int32*: Weight of this entry in the table.\n\nFor example, this configuration has a 90% chance of spawning a Military Magazine and a 10% chance of spawning an Eaglefire:\n\n.. code-block:: text\n\n    Tables\n    [\n        {\n            // Military Magazine\n            Guid dbfb1d0d11ca438e9dffb95f76e61274\n            Weight 180\n        }\n        {\n            // Eaglefire\n            Guid b03d581a5c1a490f995f8deba57b0f17\n            Weight 20\n        }\n    ]\n\n.. 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.\n\n    **Tables** *int32*: Total number of children.\n\n    **Table_#_Spawn_ID** *uint16*: ID of a spawn table to recursively spawn a child from.\n\n    **Table_#_Asset_ID** *uint16*: ID of asset to spawn.\n\n    **Table_#_Weight** *int32*: Weight of this child in the table.\n\n    **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.\n\nRoots\n-----\n\nRoots 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.\n\n**Roots**: list of dictionaries. Each dictionary entry can contain these properties:\n\n**Guid** :ref:`GUID <doc_data_guid>`: GUID of parent spawn table. Used if ``LegacySpawnId`` is unset or zero.\n\n**LegacySpawnId** *uint16*: ID of parent spawn table. Use of ``Guid`` is encouraged instead to prevent ID conflicts between mods.\n\n**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.\n\n**Weight** *int32*: Weight of this entry in the parent spawn table.\n\n.. 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.\n\n    **Roots** *int32*: Total number of parents.\n\n    **Root_#_Spawn_ID** *uint16*: ID of parent spawn table.\n\n    **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.\n\n    **Root_#_Weight** *int32*: Weight of this entry in the parent spawn table.\n\n    **Root_#_GUID** :ref:`GUID <doc_data_guid>`: GUID of parent spawn table. Used if ``Spawn_ID`` is unset or zero.\n\nExporting Legacy Spawn Tables\n-----------------------------\n\nLegacy 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.\n\nYou might have already created some legacy spawn tables within the level editor. Fortunately, it is fairly straightforward to export those tables as spawn assets!\n\nOpen 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.\n\nThis 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.\n\nThese 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.\n\n.. tip::\n\n\tYou 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.\n\nAlong 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.\n"
  },
  {
    "path": "assets/stereo-song-asset.rst",
    "content": ".. _doc_assets_stereo_song:\n\nStereo Song Assets\n==================\n\nDefines 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.\n\nAsset Properties Reference\n--------------------------\n\n**Type** *string*: ``SDG.Unturned.StereoSongAsset``\n\n**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:\n\n.. code-block:: unturnedasset\n\t\n\t\"Title\" \"My song\"\n\nOR\n\n**Name** in {Language}.dat file\n\nOR\n\n.. code-block:: unturnedasset\n\t\n\t\"Title\"\n\t{\n\t\t\"Namespace\" \"SDG\"\n\t\t\"Token\" \"Stereo_Songs.Unturned_Theme.Title\"\n\t}\n\n**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:\n\n.. code-block:: unturnedasset\n\t\n\t\"Song\"\n\t{\n\t\t\"MasterBundle\" \"core.masterbundle\"\n\t\t\"AssetPath\" \"Effects/Ambience/Cave_0/Cave_0.ogg\"\n\t}\n\nOR\n\n.. code-block:: unturnedasset\n\t\n\t\"Song\"\n\t{\n\t\t\"Name\" \"core.content\"\n\t\t\"Path\" \"assets/resources/bundles/songs/unturned_theme.mp3\"\n\t}\n\n**Link_URL** *string*: Optional URL to open in web browser when external link button is clicked.\n\n**Is_Loop** *bool*: Whether audio source should loop. Recommend **NOT** using .mp3 format for looping music.\n"
  },
  {
    "path": "assets/tag-asset.rst",
    "content": ".. _doc_assets_tag:\n\nTag Assets\n==========\n\nAlthough **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.\n\nCurrently, tags are used in two ways:\n\n1. Workstation crafting capabilities.\n2. Blueprint categorization.\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`doc_data_guid` documentation.\n\n**Type** ``Tag``\n\nTag Properties\n--------------\n\n**NameColor** :ref:`color <doc_data_color>`: Optional override for color of name label in the user interface.\n\n**HasIcon** :ref:`bool <doc_data_builtin_types>`: If true, the game will expect an Icon texture in the asset bundle. Defaults to true.\n\n**IconPath** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Overrides where to load Icon texture from.\n\n**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.\n\nLocalization\n------------\n\n**Name** *string*: Display name in user interfaces.\n"
  },
  {
    "path": "assets/unity-upgrade.rst",
    "content": ".. _doc_unity_upgrade:\n\nUpgrading Unity Version\n=======================\n\nThis 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.\n\nFrom Unity 5 LTS to 2017 LTS\n----------------------------\n\nThe 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.\n\nThere 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.\n\nMaster bundles were introduced to make updating mods easier.\n\nMaster Bundles\n``````````````\n\nRather 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.\n\nIf the game detects a master bundle file, it will load bundles from sub-directories using their relative folder path.\n\nFor 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.\n\nInstalling the Tools\n````````````````````\n\nCopy 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.\n\nShaders 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.\n\nExporting from Unity\n````````````````````\n\n.. attention::\n\n\tThis 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]*\n\nExporting requires some initial setup within Unity and the target location for your exported master bundle.\n\nIn 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\".\n\nOpen 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.\n\n.. tip::\n\n\tWhen 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.\n\nClicking 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.\n\nNavigate 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.\n\nCreate this file at your target location. You should configure the following options in your MasterBundle.dat file:\n\n- | **Asset_Bundle_Name**: Filename of the Windows master bundle exported from Unity. For example, ``hawaii.masterbundle``.\n\n- | **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``.\n\n.. note::\n\n\tBundled 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).\n\nBack in Unity, you can now export your master bundle.\n\nTroubleshooting\n```````````````\n\nColors too light or dark in-game\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMost 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.\n\nIf that doesn't work, double-check that sRGB is enabled on your textures.\n\nDevkit Foliage\n~~~~~~~~~~~~~~\n\nMaterials default to instancing disabled now, so enable the Instancing flag in the Unity material inspector and rebuild the asset bundle.\n\nFrom Unity 2017 LTS to 2018 LTS\n-------------------------------\n\nFor archival purposes, the Unity 2017.4 LTS version of the game remains available from the \"unity-2017.4\" beta branch.\n\nAsset Bundles\n`````````````\n\nOlder .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.\n\nSome 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.\n\nUnity Packages\n``````````````\n\nAll 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.\n\nLogging / Server Console\n````````````````````````\n\nUsage 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.\n\nWorkshop\n````````\n\nUploads 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.\n\nPlatforms\n`````````\n\nLinux 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.\n\nHeadless 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.\n\n\n\n\n\nFrom Unity 2018 LTS to 2019 LTS\n-------------------------------\n\nThere 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.\n\nBy default, Unity no longer supports importing multiple animations from a single .blend file. Exporting to an exchange format like .fbx is recommended.\n\n.. tip::\n\n\tThis is recommended for meshes/models as well! The base game has always handled its own assets like this, as well.\n\nYou 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.\n"
  },
  {
    "path": "assets/vehicle-asset.rst",
    "content": ".. _doc_assets_vehicle:\r\n\r\nVehicle Assets\r\n==============\r\n\r\nThe **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.\r\n\r\nGame Data File\r\n--------------\r\n\r\nThe ``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.\r\n\r\nAny properties from parent classes that are required—or recommended—are listed in the table below.\r\n\r\n.. list-table::\r\n   :widths: 30 40 30\r\n   :header-rows: 1\r\n\r\n   * - Class\r\n     - Property Name\r\n     - Required Value\r\n   * - :ref:`Asset <doc_assets_vehicle>`\r\n     - :ref:`GUID <doc_assets_vehicle:guid>`\r\n     -\r\n   * - :ref:`Asset <doc_assets_vehicle>`\r\n     - :ref:`ID <doc_assets_vehicle:id>`\r\n     -\r\n   * - :ref:`Asset <doc_assets_vehicle>`\r\n     - :ref:`Type <doc_assets_vehicle:type>`\r\n     - ``Vehicle``\r\n   * - :ref:`VehicleAsset <doc_assets_vehicle>`\r\n     - :ref:`Engine <doc_assets_vehicle:engine>`\r\n     -\r\n\r\nProperties\r\n``````````\r\n\r\n.. list-table:: Uncategorized\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`AdditionalTransparentSections <doc_assets_vehicle:additionaltransparentsections>`\r\n     - :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`\r\n     -\r\n   * - :ref:`Bicycle <doc_assets_vehicle:bicycle>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Bicycle_Anim_Speed <doc_assets_vehicle:bicycle_anim_speed>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Buildable_Placement_Rule <doc_assets_vehicle:buildable_placement_rule>`\r\n     - :ref:`EVehicleBuildablePlacementRule <doc_assets_vehicle:evehiclebuildableplacementrule>`\r\n     - ``None``\r\n   * - :ref:`Bypass_Hash_Verification <doc_assets_vehicle:bypass_hash_verification>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Cam_Driver_Offset <doc_assets_vehicle:cam_driver_offset>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Cam_Follow_Distance <doc_assets_vehicle:cam_follow_distance>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``5.5``\r\n   * - :ref:`Cam_Passenger_Offset <doc_assets_vehicle:cam_passenger_offset>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Can_Be_Locked <doc_assets_vehicle:can_be_locked>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``true``\r\n   * - :ref:`Crawler <doc_assets_vehicle:crawler>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     - *deprecated*\r\n   * - :ref:`CrawlerTrackTilingMaterials <doc_assets_vehicle:crawlertracktilingmaterials>`\r\n     - :ref:`list of CrawlerTrackTilingMaterial <doc_assets_vehicle:crawlertracktilingmaterial_dictionary>`\r\n     -\r\n   * - :ref:`Drops_Max <doc_assets_vehicle:drops_max>`\r\n     - :ref:`uint8 <doc_data_builtin_types>`\r\n     - ``7``\r\n   * - :ref:`Drops_Min <doc_assets_vehicle:drops_min>`\r\n     - :ref:`uint8 <doc_data_builtin_types>`\r\n     - ``3``\r\n   * - :ref:`Drops_Table_ID <doc_assets_vehicle:drops_table_id>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``962``\r\n   * - :ref:`Engine <doc_assets_vehicle:engine>`\r\n     - :ref:`EEngine <doc_assets_vehicle:eengine>`\r\n     - ``Car``\r\n   * - :ref:`Exit <doc_assets_vehicle:exit>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``2``\r\n   * - :ref:`GUID <doc_assets_vehicle:guid>`\r\n     - :ref:`doc_data_guid`\r\n     -\r\n   * - :ref:`Has_Clip_Prefab <doc_assets_vehicle:has_clip_prefab>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``true``\r\n   * - :ref:`Has_Horn <doc_assets_vehicle:has_horn>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - See description\r\n   * - :ref:`HornAudioClip <doc_assets_vehicle:hornaudioclip>`\r\n     - :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\r\n     -\r\n   * - :ref:`ID <doc_assets_vehicle:id>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`IgnitionAudioClip <doc_assets_vehicle:ignitionaudioclip>`\r\n     - :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\r\n     -\r\n   * - :ref:`LockMouse <doc_assets_vehicle:lockmouse>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Num_Steering_Tires <doc_assets_vehicle:num_steering_tires>`\r\n     - :ref:`int32 <doc_data_builtin_types>`\r\n     - *deprecated*\r\n   * - :ref:`Rarity <doc_assets_vehicle:rarity>`\r\n     - :ref:`doc_data_eitemrarity`\r\n     - ``Common``\r\n   * - :ref:`Reclined <doc_assets_vehicle:reclined>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Should_Spawn_Seat_Capsules <doc_assets_vehicle:should_spawn_seat_capsules>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`Steering_Tire_# <doc_assets_vehicle:steering_tire_#>`\r\n     - :ref:`int32 <doc_data_builtin_types>`\r\n     - *deprecated*\r\n   * - :ref:`Tire_ID <doc_assets_vehicle:tire_id>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``1451``\r\n   * - :ref:`Trunk_Storage_X <doc_assets_vehicle:trunk_storage_x>`\r\n     - :ref:`uint8 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Trunk_Storage_Y <doc_assets_vehicle:trunk_storage_y>`\r\n     - :ref:`uint8 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Valid_Speed_Down <doc_assets_vehicle:valid_speed_down>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`Valid_Speed_Horizontal <doc_assets_vehicle:valid_speed_horizontal>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`Valid_Speed_Up <doc_assets_vehicle:valid_speed_up>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`Zip <doc_assets_vehicle:zip>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n\r\n.. list-table:: Handling\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Air_Steer_Max <doc_assets_vehicle:air_steer_max>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - See description\r\n   * - :ref:`Air_Steer_Min <doc_assets_vehicle:air_steer_min>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - See description\r\n   * - :ref:`Air_Turn_Responsiveness <doc_assets_vehicle:air_turn_responsiveness>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``2``\r\n   * - :ref:`Brake <doc_assets_vehicle:brake>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`Center_Of_Mass <doc_assets_vehicle:center_of_mass>`\r\n     - :ref:`vector3 <doc_data_vector3>`\r\n     -\r\n   * - :ref:`Carjack_Force_Multiplier <doc_assets_vehicle:carjack_force_multiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`CrawlerTrackSteering_Torque <doc_assets_vehicle:crawlertracksteering_torque>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`CrawlerTrackSteering_SidewaysFrictionMultiplier <doc_assets_vehicle:crawlertracksteering_sidewaysfrictionmultiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`CrawlerTrackSteering_MaxSpeedScale <doc_assets_vehicle:crawlertracksteering_maxspeedscale>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`Engine_Force_Multiplier <doc_assets_vehicle:engine_force_multiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`Lift <doc_assets_vehicle:lift>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Override_Center_Of_Mass <doc_assets_vehicle:override_center_of_mass>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`Physics_Profile <doc_assets_vehicle:physics_profile>`\r\n     - :ref:`GUID <doc_data_guid>`\r\n     - See description\r\n   * - :ref:`RollAngularVelocityDamping <doc_assets_vehicle:rollangularvelocitydamping>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``-1.0``\r\n   * - :ref:`Sleds <doc_assets_vehicle:sleds>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Speed_Max <doc_assets_vehicle:speed_max>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Speed_Min <doc_assets_vehicle:speed_min>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Steering_Angle_FullSpeed_Factor <doc_assets_vehicle:steering_angle_fullspeed_factor>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Steering_Angle_Max <doc_assets_vehicle:steering_angle_max>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Steering_Angle_Turn_Speed <doc_assets_vehicle:steering_angle_turn_speed>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - See description\r\n   * - :ref:`Steering_LeaningForceMultiplier <doc_assets_vehicle:steering_leaningforcemultiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``-1.0``\r\n   * - :ref:`Steering_LeaningForce_ScaleWithSpeed <doc_assets_vehicle:steering_leaningforce_scalewithspeed>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`Steering_LeaningForce_SpeedExponent <doc_assets_vehicle:steering_leaningforce_speedexponent>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`Traction <doc_assets_vehicle:traction>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Wheel_Collider_Mass_Override <doc_assets_vehicle:wheel_collider_mass_override>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``null``\r\n   * - :ref:`WheelBalancing_ForceMultiplier <doc_assets_vehicle:wheelbalancing_forcemultiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``-1.0``\r\n   * - :ref:`WheelBalancing_UprightExponent <doc_assets_vehicle:wheelbalancing_uprightexponent>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.5``\r\n   * - :ref:`WheelConfigurations <doc_assets_vehicle:wheelconfigurations>`\r\n     - :ref:`list of VehicleWheelConfiguration <doc_assets_vehicle:vehiclewheelconfiguration_dictionary>`\r\n     -\r\n\r\n.. list-table:: Engine RPM and Gears\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`EngineIdleRPM <doc_assets_vehicle:engineidlerpm>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1000.0``\r\n   * - :ref:`EngineMaxRPM <doc_assets_vehicle:enginemaxrpm>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``7000.0``\r\n   * - :ref:`EngineMaxTorque <doc_assets_vehicle:enginemaxtorque>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`EngineRPM_DecreaseRate <doc_assets_vehicle:enginerpm_decreaserate>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``-1.0``\r\n   * - :ref:`EngineRPM_IncreaseRate <doc_assets_vehicle:enginerpm_increaserate>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``-1.0``\r\n   * - :ref:`EngineRPMMismatch_TorqueReduction_Enabled <doc_assets_vehicle:enginerpmmismatch_torquereduction_enabled>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`EngineRPMMismatch_TorqueReduction_Threshold <doc_assets_vehicle:enginerpmmismatch_torquereduction_threshold>`\r\n     - :ref:`float <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`EngineRPMMismatch_GearShift_PreventShifting <doc_assets_vehicle:enginerpmmismatch_gearshift_preventshifting>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`EngineRpmMismatch_GearShift_UpMinThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_upminthreshold>`\r\n     - :ref:`float <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`EngineRpmMismatch_GearShift_UpMaxThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_upmaxthreshold>`\r\n     - :ref:`float <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`EngineRpmMismatch_GearShift_DownMinThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_downminthreshold>`\r\n     - :ref:`float <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`EngineRpmMismatch_GearShift_DownMaxThreshold <doc_assets_vehicle:enginerpmmismatch_gearshift_downmaxthreshold>`\r\n     - :ref:`float <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`ForwardGearRatios <doc_assets_vehicle:forwardgearratios>`\r\n     - :ref:`list of float32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`GearShift_AllowSkippingGears <doc_assets_vehicle:gearshift_allowskippinggears>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``true``\r\n   * - :ref:`GearShift_DownThresholdRPM <doc_assets_vehicle:gearshift_downthresholdrpm>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1500.0``\r\n   * - :ref:`GearShift_Duration <doc_assets_vehicle:gearshift_duration>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.5``\r\n   * - :ref:`GearShift_Interval <doc_assets_vehicle:gearshift_interval>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`GearShift_UpThresholdRPM <doc_assets_vehicle:gearshift_upthresholdrpm>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``5500.0``\r\n   * - :ref:`GearShift_VisibleInHUD <doc_assets_vehicle:gearshift_visibleinhud>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``true``\r\n   * - :ref:`ReverseGearRatio <doc_assets_vehicle:reversegearratio>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n\r\n.. list-table:: Engine Sound\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`EngineSound <doc_assets_vehicle:enginesound>`\r\n     - :ref:`RpmEngineSoundConfiguration <doc_assets_vehicle:rpmenginesoundconfiguration_dictionary>`\r\n     -\r\n   * - :ref:`EngineSound_Type <doc_assets_vehicle:enginesound_type>`\r\n     - :ref:`EVehicleEngineSoundType <doc_assets_vehicle:evehicleenginesoundtype>`\r\n     - ``Legacy``\r\n   * - :ref:`Pitch_Drive <doc_assets_vehicle:pitch_drive>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`Pitch_Idle <doc_assets_vehicle:pitch_idle>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     -\r\n\r\n.. list-table:: Health and Armor\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Bumper_AnimalDamage <doc_assets_vehicle:bumper_animaldamage>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``15.0``\r\n   * - :ref:`Bumper_Invulnerable <doc_assets_vehicle:bumper_invulnerable>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Bumper_Multiplier <doc_assets_vehicle:bumper_multiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`Bumper_ObjectDamage <doc_assets_vehicle:bumper_objectdamage>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``30.0``\r\n   * - :ref:`Bumper_PlayerDamage <doc_assets_vehicle:bumper_playerdamage>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``10.0``\r\n   * - :ref:`Bumper_ResourceDamage <doc_assets_vehicle:bumper_resourcedamage>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``85.0``\r\n   * - :ref:`Bumper_SelfDamageMultiplier <doc_assets_vehicle:bumper_selfdamagemultiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`Bumper_SpeedDamageThreshold <doc_assets_vehicle:bumper_speeddamagethreshold>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``3.0``\r\n   * - :ref:`Bumper_ZombieDamage <doc_assets_vehicle:bumper_zombiedamage>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``15.0``\r\n   * - :ref:`Can_Repair_While_Seated <doc_assets_vehicle:can_repair_while_seated>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`Child_Explosion_Armor_Multiplier <doc_assets_vehicle:child_explosion_armor_multiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.2``\r\n   * - :ref:`Environment_Invulnerable <doc_assets_vehicle:environment_invulnerable>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Explosions_Invulnerable <doc_assets_vehicle:explosions_invulnerable>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Health <doc_assets_vehicle:health>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Health_Max <doc_assets_vehicle:health_max>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Health_Min <doc_assets_vehicle:health_min>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Invulnerable <doc_assets_vehicle:invulnerable>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Passenger_Explosion_Armor <doc_assets_vehicle:passenger_explosion_armor>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1``\r\n   * - :ref:`Tires_Invulnerable <doc_assets_vehicle:tires_invulnerable>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n\r\n.. list-table:: Fuel\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Fuel <doc_assets_vehicle:fuel>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Fuel_Burn_Rate <doc_assets_vehicle:fuel_burn_rate>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - See description\r\n   * - :ref:`Fuel_Min <doc_assets_vehicle:fuel_min>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Fuel_Max <doc_assets_vehicle:fuel_max>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n\r\n.. list-table:: Battery\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Battery_Burn_Rate <doc_assets_vehicle:battery_burn_rate>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``20``\r\n   * - :ref:`Battery_Charge_Rate <doc_assets_vehicle:battery_charge_rate>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``20``\r\n   * - :ref:`Battery_Powered <doc_assets_vehicle:battery_powered>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Battery_Spawn_Charge_Multiplier <doc_assets_vehicle:battery_spawn_charge_multiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1``\r\n   * - :ref:`BatteryMode_Driving <doc_assets_vehicle:batterymode_driving>`\r\n     - :ref:`doc_data_ebatterymode`\r\n     - ``Charge``\r\n   * - :ref:`BatteryMode_Empty <doc_assets_vehicle:batterymode_empty>`\r\n     - :ref:`doc_data_ebatterymode`\r\n     - ``None``\r\n   * - :ref:`BatteryMode_Headlights <doc_assets_vehicle:batterymode_headlights>`\r\n     - :ref:`doc_data_ebatterymode`\r\n     - ``Burn``\r\n   * - :ref:`BatteryMode_Sirens <doc_assets_vehicle:batterymode_sirens>`\r\n     - :ref:`doc_data_ebatterymode`\r\n     - ``Burn``\r\n   * - :ref:`Can_Steal_Battery <doc_assets_vehicle:can_steal_battery>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``true``\r\n   * - :ref:`Cannot_Spawn_With_Battery <doc_assets_vehicle:cannot_spawn_with_battery>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Default_Battery <doc_assets_vehicle:default_battery>`\r\n     - :ref:`doc_data_guid`\r\n     - ``098b13be34a7411db7736b7f866ada69``\r\n\r\n.. list-table:: Stamina\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Stamina_Boost <doc_assets_vehicle:stamina_boost>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`Stamina_Powered <doc_assets_vehicle:stamina_powered>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n\r\n.. list-table:: Paintability\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`DefaultPaintColor_Configuration <doc_assets_vehicle:defaultpaintcolor_configuration>`\r\n     - :ref:`VehicleRandomPaintColorConfiguration <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_dictionary>`\r\n     -\r\n   * - :ref:`DefaultPaintColor_Mode <doc_assets_vehicle:defaultpaintcolor_mode>`\r\n     - :ref:`EVehicleDefaultPaintColorMode <doc_assets_vehicle:evehicledefaultpaintcolormode>`\r\n     - See description\r\n   * - :ref:`DefaultPaintColors <doc_assets_vehicle:defaultpaintcolors>`\r\n     - :ref:`list of colors <doc_data_color>`\r\n     -\r\n   * - :ref:`IsPaintable <doc_assets_vehicle:ispaintable>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`PaintableSections <doc_assets_vehicle:paintablesections>`\r\n     - :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`\r\n     -\r\n\r\n.. list-table:: Explosion\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Explosion <doc_assets_vehicle:explosion>`\r\n     - :ref:`GUID <doc_data_guid>` or :ref:`uint16 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`ExplosionBurnMaterialSections <doc_assets_vehicle:explosionburnmaterialsections>`\r\n     - :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`\r\n     -\r\n   * - :ref:`Explosion_Force_Multiplier <doc_assets_vehicle:explosion_force_multiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`Explosion_Max_Force <doc_assets_vehicle:explosion_max_force>`\r\n     - :ref:`vector3 <doc_data_vector3>`\r\n     - ``(0, 1024, 0)``\r\n   * - :ref:`Explosion_Min_Force <doc_assets_vehicle:explosion_min_force>`\r\n     - :ref:`vector3 <doc_data_vector3>`\r\n     - ``(0, 1024, 0)``\r\n   * - :ref:`ShouldExplosionBurnMaterials <doc_assets_vehicle:shouldexplosionburnmaterials>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - See description\r\n   * - :ref:`ShouldExplosionCauseDamage <doc_assets_vehicle:shouldexplosioncausedamage>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - See description\r\n\r\n.. list-table:: Turret\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Turret_#_Ignore_Aim_Camera <doc_assets_vehicle:turret_ignore_aim_camera>`\r\n     - :ref:`flag <doc_data_flag>`\r\n     -\r\n   * - :ref:`Turret_#_Item_ID <doc_assets_vehicle:turret_item_id>`\r\n     - :ref:`uint16 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Turret_#_Pitch_Max <doc_assets_vehicle:turret_pitch_max>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Turret_#_Pitch_Min <doc_assets_vehicle:turret_pitch_min>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Turret_#_Seat_Index <doc_assets_vehicle:turret_seat_index>`\r\n     - :ref:`uint8 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Turret_#_Yaw_Max <doc_assets_vehicle:turret_yaw_max>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Turret_#_Yaw_Min <doc_assets_vehicle:turret_yaw_min>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Turrets <doc_assets_vehicle:turrets>`\r\n     - :ref:`uint8 <doc_data_builtin_types>`\r\n     - ``0``\r\n\r\n.. list-table:: Train\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Train_Car_Length <doc_assets_vehicle:train_car_length>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Train_Track_Offset <doc_assets_vehicle:train_track_offset>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`Train_Wheel_Offset <doc_assets_vehicle:train_wheel_offset>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n\r\n.. list-table:: Economy\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Shared_Skin_Lookup_ID <doc_assets_vehicle:shared_skin_lookup_id>`\r\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\r\n     - See description\r\n   * - :ref:`Shared_Skin_Name <doc_assets_vehicle:shared_skin_name>`\r\n     - :ref:`string <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`Size2_Z <doc_assets_vehicle:size2_z>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0``\r\n\r\n.. _doc_assets_vehicle:eengine:\r\n\r\nEEngine Enumeration\r\n```````````````````\r\n\r\n.. list-table::\r\n   :widths: 25 75\r\n   :header-rows: 1\r\n\r\n   * - Named Value\r\n     - Description\r\n   * - ``Car``\r\n     - This vehicle is part of the Car category.\r\n   * - ``Plane``\r\n     - This vehicle is part of the Plane category.\r\n   * - ``Blimp``\r\n     - This vehicle is part of the Blimp category.\r\n   * - ``Boat``\r\n     - This vehicle is part of the Boat category.\r\n   * - ``Train``\r\n     - This vehicle is part of the Train category.\r\n\r\n.. _doc_assets_vehicle:evehiclebuildableplacementrule:\r\n\r\nEVehicleBuildablePlacementRule Enumeration\r\n``````````````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 25 75\r\n   :header-rows: 1\r\n\r\n   * - Named Value\r\n     - Description\r\n   * - ``None``\r\n     - 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``).\r\n   * - ``AlwaysAllow``\r\n     - 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).\r\n   * - ``Block``\r\n     - Vehicle prevents any barricade form being placed on it.\r\n\r\n.. _doc_assets_vehicle:evehicledefaultpaintcolormode:\r\n\r\nEVehicleDefaultPaintColorMode\r\n`````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 25 75\r\n   :header-rows: 1\r\n\r\n   * - Named Value\r\n     - Description\r\n   * - ``None``\r\n     - Not configured.\r\n   * - ``List``\r\n     - Pick from the :ref:`DefaultPaintColors <doc_assets_vehicle:defaultpaintcolors>` list.\r\n   * - ``RandomHueOrGrayscale``\r\n     - Pick a random HSV using :ref:`DefaultPaintColor_Configuration <doc_assets_vehicle:defaultpaintcolor_configuration>`.\r\n\r\n.. _doc_assets_vehicle:evehicleenginesoundtype:\r\n\r\nEVehicleEngineSoundType Enumeration\r\n```````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 25 75\r\n   :header-rows: 1\r\n\r\n   * - Named Value\r\n     - Description\r\n   * - ``Legacy``\r\n     - Default.\r\n   * - ``EngineRPMSimple``\r\n     - Set pitch and volume of a single clip according to engine RPM.\r\n\r\n.. _doc_assets_vehicle:ewheelmotioneffectsmode:\r\n\r\nEWheelMotionEffectsMode Enumeration\r\n```````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 25 75\r\n   :header-rows: 1\r\n\r\n   * - Named Value\r\n     - Description\r\n   * - ``None``\r\n     - Turn off motion effects. Default for wheels not using collider pose.\r\n   * - ``BothDirections``\r\n     - Enable motion effects. Default for wheels using collider pose.\r\n   * - ``ForwardOnly``\r\n     - Enable motion effects, but turn them off while moving backward.\r\n   * - ``BackwardOnly``\r\n     - Enable motion effects, but turn them off while moving forward.\r\n\r\n.. _doc_assets_vehicle:ewheelsteeringmode:\r\n\r\nEWheelSteeringMode Enumeration\r\n``````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 25 75\r\n   :header-rows: 1\r\n\r\n   * - Named Value\r\n     - Description\r\n   * - ``None``\r\n     - Wheel does not affect steering.\r\n   * - ``SteeringAngle``\r\n     - Set WheelCollider steering angle according to Steer_Min and Steer_Max.\r\n   * - ``CrawlerTrack``\r\n     - Increase or decrease motor torque to rotate vehicle in-place.\r\n\r\n.. _doc_assets_vehicle:ecrawlertrackforwardmode:\r\n\r\nECrawlerTrackForwardMode Enumeration\r\n````````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 25 75\r\n   :header-rows: 1\r\n\r\n   * - Named Value\r\n     - Description\r\n   * - ``Auto``\r\n     - Assigns a forward mode based on wheel collider position. Wheels on the left side are ``Clockwise`` and wheels on the right side are ``CounterClockwise``.\r\n   * - ``Clockwise``\r\n     - Positive motor torque on this wheel rotates the vehicle clockwise.\r\n   * - ``CounterClockwise``\r\n     - Positive motor torque on this wheel rotates the vehicle counter-clockwise.\r\n\r\n.. _doc_assets_vehicle:crawlertracktilingmaterial_dictionary:\r\n\r\nCrawlerTrackTilingMaterial Dictionary\r\n`````````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Path <doc_assets_vehicle:crawlertracktilingmaterial_path>`\r\n     - :ref:`string <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`MaterialIndex <doc_assets_vehicle:crawlertracktilingmaterial_materialindex>`\r\n     - :ref:`int32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`WheelIndices <doc_assets_vehicle:crawlertracktilingmaterial_wheelindices>`\r\n     - :ref:`list of int32 <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`RepeatDistance <doc_assets_vehicle:crawlertracktilingmaterial_repeatdistance>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`UV_Direction <doc_assets_vehicle:crawlertracktilingmaterial_uv_direction>`\r\n     - :ref:`Vector2 <doc_data_builtin_types>`\r\n     - ``(0.0, 0.0)``\r\n\r\n.. _doc_assets_vehicle:paintablevehiclesection_dictionary:\r\n\r\nPaintableVehicleSection Dictionary\r\n``````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`Path <doc_assets_vehicle:paintablevehiclesection_path>`\r\n     - :ref:`string <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`MaterialIndex <doc_assets_vehicle:paintablevehiclesection_materialindex>`\r\n     - :ref:`int32 <doc_data_builtin_types>`\r\n     - ``0``\r\n   * - :ref:`AllMaterials <doc_assets_vehicle:paintablevehiclesection_allmaterials>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n\r\n.. _doc_assets_vehicle:rpmenginesoundconfiguration_dictionary:\r\n\r\nRpmEngineSoundConfiguration Dictionary\r\n``````````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`IdlePitch <doc_assets_vehicle:rpmenginesoundconfiguration_idlepitch>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`IdleVolume <doc_assets_vehicle:rpmenginesoundconfiguration_idlevolume>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`MaxPitch <doc_assets_vehicle:rpmenginesoundconfiguration_maxpitch>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`MaxVolume <doc_assets_vehicle:rpmenginesoundconfiguration_maxvolume>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n\r\n.. _doc_assets_vehicle:vehiclerandompaintcolorconfiguration_dictionary:\r\n\r\nVehicleRandomPaintColorConfiguration Dictionary\r\n```````````````````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`MinSaturation <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_minsaturation>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`MaxSaturation <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_maxsaturation>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`MinValue <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_minvalue>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`MaxValue <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_maxvalue>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`GrayscaleChance <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_grayscalechance>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n\r\n.. _doc_assets_vehicle:vehiclewheelconfiguration_dictionary:\r\n\r\nVehicleWheelConfiguration Dictionary\r\n````````````````````````````````````\r\n\r\n.. list-table::\r\n   :widths: 40 40 20\r\n   :header-rows: 1\r\n\r\n   * - Property Name\r\n     - Type\r\n     - Default Value\r\n   * - :ref:`CanExplode <doc_assets_vehicle:wheelconfiguration_canexplode>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``true``\r\n   * - :ref:`CopyColliderRpmIndex <doc_assets_vehicle:wheelconfiguration_copycolliderrpmindex>`\r\n     - :ref:`int32 <doc_data_builtin_types>`\r\n     - ``-1``\r\n   * - :ref:`CrawlerTrackForwardMode <doc_assets_vehicle:wheelconfiguration_crawlertrackforwardmode>`\r\n     - :ref:`doc_assets_vehicle:ecrawlertrackforwardmode`\r\n     - ``Auto``\r\n   * - :ref:`IsColliderPowered <doc_assets_vehicle:wheelconfiguration_iscolliderpowered>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`IsModelSteered <doc_assets_vehicle:wheelconfiguration_ismodelsteered>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`ModelPath <doc_assets_vehicle:wheelconfiguration_modelpath>`\r\n     - :ref:`string <doc_data_builtin_types>`\r\n     -\r\n   * - :ref:`ModelRadius <doc_assets_vehicle:wheelconfiguration_modelradius>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``-1.0``\r\n   * - :ref:`ModelSuspensionOffset <doc_assets_vehicle:wheelconfiguration_modelsuspensionoffset>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``0.0``\r\n   * - :ref:`ModelSuspensionSpeed <doc_assets_vehicle:wheelconfiguration_modelsuspensionspeed>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``-1.0``\r\n   * - :ref:`ModelUseColliderPose <doc_assets_vehicle:wheelconfiguration_modelusecolliderpose>`\r\n     - :ref:`bool <doc_data_builtin_types>`\r\n     - ``false``\r\n   * - :ref:`MotionEffects <doc_assets_vehicle:wheelconfiguration_motioneffects>`\r\n     - :ref:`doc_assets_vehicle:ewheelmotioneffectsmode`\r\n     - See description\r\n   * - :ref:`SteeringAngleMultiplier <doc_assets_vehicle:wheelconfiguration_steeringanglemultiplier>`\r\n     - :ref:`float32 <doc_data_builtin_types>`\r\n     - ``1.0``\r\n   * - :ref:`SteeringMode <doc_assets_vehicle:wheelconfiguration_steeringmode>`\r\n     - :ref:`doc_assets_vehicle:ewheelsteeringmode`\r\n     - ``None``\r\n   * - :ref:`WheelColliderPath <doc_assets_vehicle:wheelconfiguration_wheelcolliderpath>`\r\n     - :ref:`string <doc_data_builtin_types>`\r\n     -\r\n\r\nProperty Descriptions\r\n`````````````````````\r\n\r\n.. _doc_assets_vehicle:additionaltransparentsections:\r\n\r\nAdditionalTransparentSections :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaterials to register as needing transparent sorting. Their render queue is periodically updated according to whether their pivot point is underwater.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:air_steer_max:\r\n\r\nAir_Steer_Max :ref:`float32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe angle to turn when moving quickly, when using ``Engine Plane``. Defaults to the value of ``Steer_Max``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:air_steer_min:\r\n\r\nAir_Steer_Min :ref:`float32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe angle to turn when moving slowly, when using ``Engine Plane``. Defaults to the value of ``Steer_Min``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:air_turn_responsiveness:\r\n\r\nAir_Turn_Responsiveness :ref:`float32 <doc_data_builtin_types>` ``2``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nSensitivity on steering while airborne, when using ``Engine Plane``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:battery_burn_rate:\r\n\r\nBattery_Burn_Rate :ref:`float32 <doc_data_builtin_types>` ``20``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis controls the rate at which battery charge decreases per second.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:battery_charge_rate:\r\n\r\nBattery_Charge_Rate :ref:`float32 <doc_data_builtin_types>` ``20``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis controls the rate at which battery charge increases per second.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:battery_powered:\r\n\r\nBattery_Powered :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle does not use fuel. For example, this flag is useful for creating electric vehicles.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:battery_spawn_charge_multiplier:\r\n\r\nBattery_Spawn_Charge_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nBattery 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.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:batterymode_driving:\r\n\r\nBatteryMode_Driving :ref:`doc_data_ebatterymode` ``Charge``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow the vehicle battery should behave when a player is driving it.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:batterymode_empty:\r\n\r\nBatteryMode_Empty :ref:`doc_data_ebatterymode` ``None``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow the vehicle battery should behave when the vehicle is empty.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:batterymode_headlights:\r\n\r\nBatteryMode_Headlights :ref:`doc_data_ebatterymode` ``Burn``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow the vehicle battery should behave when the headlights are on.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:batterymode_sirens:\r\n\r\nBatteryMode_Sirens :ref:`doc_data_ebatterymode` ``Burn``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow the vehicle battery should behave when the siren is on.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bicycle:\r\n\r\nBicycle :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::\r\n\r\nPlayer character should use a bicycling animation.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bicycle_anim_speed:\r\n\r\nBicycle_Anim_Speed :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier on the speed of the bicycling animation.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:brake:\r\n\r\nBrake :ref:`float32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe amount of braking force to apply.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:buildable_placement_rule:\r\n\r\nBuildable_Placement_Rule :ref:`EVehicleBuildablePlacementRule <doc_assets_vehicle:evehiclebuildableplacementrule>` ``None``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis 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.\r\n\r\nThe ``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.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_animaldamage:\r\n\r\nBumper_AnimalDamage :ref:`float32 <doc_data_builtin_types>` ``15``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nBase damage to animals when traveling at 1 m/s (before speed and other multipliers apply).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_invulnerable:\r\n\r\nBumper_Invulnerable :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle cannot be damaged by collisions (such as with other vehicles, objects, placeables, or entities).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_multiplier:\r\n\r\nBumper_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplies vehicle speed (in m/s) at time of collision. If result is less than ``Bumper_SpeedDamageThreshold``, no damage is applied.\r\n\r\nThe 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.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_objectdamage:\r\n\r\nBumper_ObjectDamage :ref:`float32 <doc_data_builtin_types>` ``30``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nBase damage to objects when traveling at 1 m/s (before speed and other multipliers apply).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_playerdamage:\r\n\r\nBumper_PlayerDamage :ref:`float32 <doc_data_builtin_types>` ``10``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nBase damage to players when traveling at 1 m/s (before speed and other multipliers apply).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_resourcedamage:\r\n\r\nBumper_ResourceDamage :ref:`float32 <doc_data_builtin_types>` ``85``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nBase damage to resources when traveling at 1 m/s (before speed and other multipliers apply).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_selfdamagemultiplier:\r\n\r\nBumper_SelfDamageMultiplier :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier for damage inflicted to the vehicle by crashing into things.\r\nNot applicable if the ``Bumper_Invulnerable`` flag is applied.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_speeddamagethreshold:\r\n\r\nBumper_SpeedDamageThreshold :ref:`float32 <doc_data_builtin_types>` ``3.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf speed (in m/s) multiplied by ``Bumper_Multiplier`` is less than this threshold, no damage is applied.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bumper_zombiedamage:\r\n\r\nBumper_ZombieDamage :ref:`float32 <doc_data_builtin_types>` ``15``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nBase damage to zombies when traveling at 1 m/s (before speed and other multipliers apply).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:bypass_hash_verification:\r\n\r\nBypass_Hash_Verification :ref:`flag <doc_data_flag>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nDisable hash verification check, and allow for mismatched files.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:cam_driver_offset:\r\n\r\nCam_Driver_Offset :ref:`float32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vertical offset for the driver's first-person camera, in meters. This is additive with the value of ``Cam_Passenger_Offset``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:cam_follow_distance:\r\n\r\nCam_Follow_Distance :ref:`float32 <doc_data_builtin_types>` ``5.5``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe distance behind the player the third-person camera should be placed at, in meters.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:cam_passenger_offset:\r\n\r\nCam_Passenger_Offset :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vertical offset for any passenger's (including the driver's) first-person camera, in meters.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:can_be_locked:\r\n\r\nCan_Be_Locked :ref:`bool <doc_data_builtin_types>` ``true``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhether or not the vehicle can be locked by a player.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:can_repair_while_seated:\r\n\r\nCan_Repair_While_Seated :ref:`bool <doc_data_builtin_types>` ``false``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen ``true``, this vehicle can be repaired by seated players.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:can_steal_battery:\r\n\r\nCan_Steal_Battery :ref:`bool <doc_data_builtin_types>` ``true``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhether or not the vehicle battery can be removed from the vehicle by a player.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:cannot_spawn_with_battery:\r\n\r\nCannot_Spawn_With_Battery :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle does not spawn with a vehicle battery.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:carjack_force_multiplier:\r\n\r\nCarjack_Force_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis is a multiplier on the force applied when using a `Carjack <https://unturned.wiki.gg/Carjack>`_ on this vehicle. It is recommended that this property scales based on your vehicle's mass.\r\n\r\nAlthough this property was originally intended for modded vehicles, many official vehicles use this property as well. If you are creating a custom vehicle and using one of the example assets provided as a template (or have a mass that is similar to official content), you will likely want to use a value of ``2`` for this property.\r\n\r\nThe mass of official vehicles may be revisited in the future, to make collisions feel more reasonable. If this happens, the recommended value could be increased again.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracksteering_torque:\r\n\r\nCrawlerTrackSteering_Torque :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nAdded or subtracted from wheel motor torque in ``CrawlerTrack`` mode.\r\n\r\nFor example, if the vehicle is attempting to turn left and the wheel's ``CrawlerTrackForwardMode`` is ``Clockwise`` this value is subtracted from the motor torque.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracksteering_sidewaysfrictionmultiplier:\r\n\r\nCrawlerTrackSteering_SidewaysFrictionMultiplier :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nFor a wheel in ``CrawlerTrack`` mode, the wheel collider's sideways friction stiffness is multiplied by this value while a steering input is applied. Potentially useful when turning in place to overcome the sideways friction.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracksteering_maxspeedscale:\r\n\r\nCrawlerTrackSteering_MaxSpeedScale :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier for crawler track steering torque and sideways friction multiplier while driving at maximum speed, similar to how steering angle is reduced at maximum speed (``Steer_Max``). Useful to keep the steering controllable while driving.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracktilingmaterials:\r\n\r\nCrawlerTrackTilingMaterials :ref:`list of CrawlerTrackTilingMaterial <doc_assets_vehicle:crawlertracktilingmaterial_dictionary>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf set, offsets a crawler track's material UVs in sync with wheels rolling.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:center_of_mass:\r\n\r\nCenter_Of_Mass :ref:`vector3 <doc_data_vector3>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nOverrides the vehicle's center of mass on the 𝘟\\-, 𝘠\\-, and 𝘡-axis, when using ``Override_Center_Of_Mass true``. This allows for modifying a vehicle's center of gravity without needing to move the \"Cog\" GameObject in Unity.\r\n\r\nFor example:\r\n\r\n.. code-block:: unturneddat\r\n  :linenos:\r\n\r\n  Override_Center_Of_Mass true\r\n  Center_Of_Mass (0, -50, 0)\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:child_explosion_armor_multiplier:\r\n\r\nChild_Explosion_Armor_Multiplier :ref:`float32 <doc_data_builtin_types>` ``0.2``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis is a multiplier on the damage that barricades (and other buildables) placed on the vehicle receive, when damaged by explosions.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawler:\r\n\r\nCrawler :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::\r\n\r\n.. deprecated:: 3.23.4.0\r\n\tReplaced by the ``WheelConfigurations`` property.\r\n\r\nDisables the ``Wheel_#`` GameObjects from turning when steering by setting the default value of ``Num_Steering_Tires`` to ``0``. This property has no effect if ``Num_Steering_Tires`` has been manually set.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:default_battery:\r\n\r\nDefault_Battery :ref:`doc_data_guid` ``098b13be34a7411db7736b7f866ada69``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nBattery item given to the player when a specific battery hasn't been manually installed yet. Defaults to the `Vehicle Battery <https://unturned.wiki.gg/Vehicle_Battery>`_ used by official vehicles.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:defaultpaintcolor_configuration:\r\n\r\nDefaultPaintColor_Configuration :ref:`VehicleRandomPaintColorConfiguration <doc_assets_vehicle:vehiclerandompaintcolorconfiguration_dictionary>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nDetermines the potential colors of a newly-spawned vehicle. Can be overridden by a :ref:`Vehicle Redirector <doc_asset_vehicle_redirector>`'s :ref:`LoadPaintColor <doc_asset_vehicle_redirector:loadpaintcolor>` and :ref:`LoadPaintColor <doc_asset_vehicle_redirector:spawnpaintcolor>` properties.\r\n\r\nThis property is used with ``DefaultPaintColor_Mode RandomHueOrGrayscale``. For example:\r\n\r\n.. code-block:: unturneddat\r\n\t:linenos:\r\n\r\n\tDefaultPaintColor_Mode RandomHueOrGrayscale\r\n\tDefaultPaintColor_Configuration\r\n\t{\r\n\t\tMinSaturation 0.15\r\n\t\tMaxSaturation 0.7\r\n\t\tMinValue 0.15\r\n\t\tMaxValue 0.9\r\n\t\tGrayscaleChance 0.1\r\n\t}\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:defaultpaintcolor_mode:\r\n\r\nDefaultPaintColor_Mode :ref:`EVehicleDefaultPaintColorMode <doc_assets_vehicle:evehicledefaultpaintcolormode>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis property controls the mode that should be used when randomly picking a paint color for a newly-spawned vehicle. Defaults to ``List`` if :ref:`DefaultPaintColors <doc_assets_vehicle:defaultpaintcolors>` has been configured. Otherwise, defaults to ``None``. This can be manually set to ``RandomHueOrGrayscale`` to pick a random HSV.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:defaultpaintcolors:\r\n\r\nDefaultPaintColors :ref:`list of colors <doc_data_color>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nList of random colors to pick from when spawning a new vehicle. Can be overridden by a :ref:`Vehicle Redirector <doc_asset_vehicle_redirector>`'s :ref:`LoadPaintColor <doc_asset_vehicle_redirector:loadpaintcolor>` and :ref:`LoadPaintColor <doc_asset_vehicle_redirector:spawnpaintcolor>` properties.\r\n\r\nThis property is used with ``DefaultPaintColor_Mode List``. For example:\r\n\r\n.. code-block:: unturneddat\r\n\t:linenos:\r\n\r\n\tDefaultPaintColor_Mode List\r\n\tDefaultPaintColors\r\n\t[\r\n\t\t\"#353535\" // Classic Black\r\n\t\t\"#37658c\" // Classic Blue\r\n\t\t\"#2e642e\" // Classic Green\r\n\t\t\"#bd6e27\" // Classic Orange\r\n\t\t\"#6a466d\" // Classic Purple\r\n\t\t\"#9a2525\" // Classic Red\r\n\t\t\"#d4d4d4\" // Classic White\r\n\t\t\"#cdaa1e\" // Classic Yellow\r\n\t]\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:drops_max:\r\n\r\nDrops_Max :ref:`uint8 <doc_data_builtin_types>` ``7``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum amount of item drops to spawn when the vehicle is destroyed.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:drops_min:\r\n\r\nDrops_Min :ref:`uint8 <doc_data_builtin_types>` ``3``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum amount of item drops to spawn when the vehicle is destroyed.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:drops_table_id:\r\n\r\nDrops_Table_ID :ref:`uint16 <doc_data_builtin_types>` ``962``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nID of the item spawn table to use when the vehicle is destroyed. The default spawn table is Destroyed_Vehicle_Default.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:engine:\r\n\r\nEngine :ref:`EEngine <doc_assets_vehicle:eengine>` ``Car``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe ``Engine`` property determines the type of vehicle (e.g., car, plane, boat). Some vehicle properties are only usable depending on the vehicle's ``Engine``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:engine_force_multiplier:\r\n\r\nEngine_Force_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis is a multiplier on otherwise not-yet-configurable plane/heli/boat/etc. forces. It is recommended that this property scales based on your vehicle's mass.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginemaxtorque:\r\n\r\nEngineMaxTorque :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier for the amount of torque provided to the wheels. Understanding how engine RPM is translated to wheel torque is crucial for tuning the physics:\r\n\r\n#. Engine RPM is normalized into a 0 to 1 range according to :ref:`EngineIdleRPM <doc_assets_vehicle:engineidlerpm>` and :ref:`EngineMaxRPM <doc_assets_vehicle:enginemaxrpm>`. For example, an Engine RPM of 2000 with Idle RPM of 1000 and Max RPM of 5000 would be 0.25.\r\n#. Vehicle root needs an ``EngineCurvesComponent`` attached. This allows you to map normalized engine RPM to a normalized torque multiplier. Typically, the multiplier should be closest to 1 in the middle range (e.g., 0.3 to 0.8) and drop off toward 0 and 1.\r\n#. Torque curve is sampled using the normalized engine RPM.\r\n#. Sampled torque is multiplied by ``EngineMaxTorque``.\r\n#. If changing gears, torque is zero.\r\n#. If reversing, torque is multiplied by :ref:`ReverseGearRatio <doc_assets_vehicle:reversegearratio>`.\r\n#. Otherwise, torque is multiplied by the active :ref:`ForwardGearRatio <doc_assets_vehicle:forwardgearratios>`.\r\n#. Each :ref:`Powered Wheel <doc_assets_vehicle:wheelconfiguration_iscolliderpowered>` gets an equal share of the torque. To clarify, the per-wheel torque is equal to the engine output torque divided by the number of powered wheels.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpm_decreaserate:\r\n\r\nEngineRPM_DecreaseRate :ref:`float32 <doc_data_builtin_types>` ``-1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow quickly engine RPM can decrease in RPM/s. For example, 1000 will take 2 seconds to go from 4000 to 2000 RPM.\r\n\r\nDefaults to -1 which instantly changes RPM.\r\n\r\n.. note:: Originally, I thought this might come in handy, but in practice tuning the torque and gear ratios worked better. Kept in case it comes in useful for somebody.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginesound:\r\n\r\nEngineSound :ref:`RpmEngineSoundConfiguration <doc_assets_vehicle:rpmenginesoundconfiguration_dictionary>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen :ref:`EngineSound_Type <doc_assets_vehicle:enginesound_type>` is set to ``EngineRPMSimple``, this should be set to an :ref:`RpmEngineSoundConfiguration dictionary <doc_assets_vehicle:rpmenginesoundconfiguration_dictionary>`.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginesound_type:\r\n\r\nEngineSound_Type :ref:`EVehicleEngineSoundType <doc_assets_vehicle:evehicleenginesoundtype>` ``Legacy``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nDefaults to ``Legacy``. In that mode, ``Pitch_Idle`` and ``Pitch_Drive`` are used to control engine audio pitch.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:engineidlerpm:\r\n\r\nEngineIdleRPM :ref:`float32 <doc_data_builtin_types>` ``1000.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nEngine RPM will never drop below this value regardless of whether wheel RPM * gear ratio is lower. Otherwise, the engine wouldn't be able to start the wheels rolling from zero.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpm_increaserate:\r\n\r\nEngineRPM_IncreaseRate :ref:`float32 <doc_data_builtin_types>` ``-1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow quickly engine RPM can increase in RPM/s. For example, 1000 will take 2 seconds to go from 2000 to 4000 RPM.\r\n\r\nDefaults to -1 which instantly changes RPM.\r\n\r\n.. note:: Originally, I thought this might come in handy, but in practice tuning the torque and gear ratios worked better. Kept in case it comes in useful for somebody.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpmmismatch_torquereduction_enabled:\r\n\r\nEngineRPMMismatch_TorqueReduction_Enabled :ref:`float32 <doc_data_builtin_types>` ``false``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf true, wheel RPM is reduced according to the difference between expected and actual wheel RPM divided by torque reduction threshold.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpmmismatch_torquereduction_threshold:\r\n\r\nEngineRPMMismatch_TorqueReduction_Threshold :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf torque reduction is enabled, torque is reduced to zero when difference between expected and actual RPM is greater than this threshold.\r\n\r\nFor non-linear reduction, you can enable **Use Engine RPM Mismatch Torque Reduction Curve** on the Engine Curves Component.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpmmismatch_gearshift_preventshifting:\r\n\r\nEngineRPMMismatch_GearShift_PreventShifting :ref:`float32 <doc_data_builtin_types>` ``-1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf true, prevent changing gears when the difference between expected and actual wheel RPM exceeds threshold.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpmmismatch_gearshift_upminthreshold:\r\n\r\nEngineRpmMismatch_GearShift_UpMinThreshold :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf prevent shifting is enabled, prevent changing gears up when the difference between expected and actual wheel RPM is less than this threshold.\r\n\r\nI.e., if ``expected - actual < min`` it cannot shift up.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpmmismatch_gearshift_upmaxthreshold:\r\n\r\nEngineRpmMismatch_GearShift_UpMaxThreshold :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf prevent shifting is enabled, prevent changing gears up when the difference between expected and actual wheel RPM is greater than this threshold.\r\n\r\nI.e., if ``expected - actual > max`` it cannot shift up.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpmmismatch_gearshift_downminthreshold:\r\n\r\nEngineRpmMismatch_GearShift_DownMinThreshold :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf prevent shifting is enabled, prevent changing gears down when the difference between expected and actual wheel RPM is less than this threshold.\r\n\r\nI.e., if ``expected - actual < min`` it cannot shift down.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginerpmmismatch_gearshift_downmaxthreshold:\r\n\r\nEngineRpmMismatch_GearShift_DownMaxThreshold :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf prevent shifting is enabled, prevent changing gears down when the difference between expected and actual wheel RPM is greater than this threshold.\r\n\r\nI.e., if ``expected - actual > max`` it cannot shift down.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:enginemaxrpm:\r\n\r\nEngineMaxRPM :ref:`float32 <doc_data_builtin_types>` ``7000.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nEngine RPM will never exceed this value regardless of whether wheel RPM * gear ratio is higher. It should be kept to a reasonable value because the normalized engine RPM is used in a variety of places like sampling the torque curve and network replication.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:environment_invulnerable:\r\n\r\nEnvironment_Invulnerable :ref:`flag <doc_data_flag>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis vehicle cannot be damaged by animals, zombie melee attacks, or boulders thrown by mega zombies. Zombies and animals will still pursue the vehicle, and attempt to attack any passengers directly. Other damage sources can still damage the vehicle.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:exit:\r\n\r\nExit :ref:`float <doc_data_builtin_types>` ``2``\r\n::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nDistance away from the vehicle to teleport when exiting.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:explosion:\r\n\r\nExplosion :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nGUID or legacy ID of :ref:`EffectAsset <doc_assets_effect>` to play when destroyed.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:explosion_force_multiplier:\r\n\r\nExplosion_Force_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis is a multiplier on the force applied when the vehicle explodes. It is recommended that this property scales based on your vehicle's mass.\r\n\r\nMany official vehicles use this property. If you are creating a custom vehicle and using one of the example assets provided as a template (or have a mass that is similar to official content), you will likely want to use a value of ``2`` for this property.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:explosion_max_force:\r\n\r\nExplosion_Max_Force :ref:`vector3 <doc_data_vector3>` ``(0, 1024, 0)``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum amount of force applied on the 𝘟\\-, 𝘠\\-, and 𝘡-axis, when the vehicle explodes.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:explosion_min_force:\r\n\r\nExplosion_Min_Force :ref:`vector3 <doc_data_vector3>` ``(0, 1024, 0)``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum amount of force applied on the 𝘟\\-, 𝘠\\-, and 𝘡-axis, when the vehicle explodes.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:explosions_invulnerable:\r\n\r\nExplosions_Invulnerable :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle cannot be damaged by explosions.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:forwardgearratios:\r\n\r\nForwardGearRatios :ref:`list of float32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nRatio between engine RPM and wheel RPM in a given gear. For example, if the wheel RPM is 6 and the gear ratio is 5 then the engine RPM is 30.\r\n\r\n.. note::\r\n\r\n\tWhen converting vanilla cars to gear ratios, the approach I used was to calculate the gear ratio for a desired speed and engine RPM.\r\n\tSuppose you're targeting 80 kph with a wheel radius of 0.6 m:\r\n\r\n\t\t1. Convert 80 kph to m/s, in this case, 22.2 m/s.\r\n\t\t2. Calculate wheel circumference with 2 * pi * r, in this case 3.77 m.\r\n\t\t3. Calculate how far the vehicle would travel in a minute. 22.2 m/s * 60 s/min is 1,333.2 m/min.\r\n\t\t4. Divide the distance per minute by the circumference to get the wheel RPM of 353.6776.\r\n\r\n\tSupposedly (I'm still learning as I go) engines work most efficiently around the upper-middle of their RPM range. For example, 3500 RPM for an engine with 1000 idle RPM and 6000 max RPM. Using 3500 as our target engine RPM we can divide it by the wheel RPM to get a good starting point for the gear ratio tuning: 9.89.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:fuel:\r\n\r\nFuel :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nTotal fuel capacity.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:fuel_burn_rate:\r\n\r\nFuel_Burn_Rate :ref:`float32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThis controls the rate at which fuel decreases per second. Defaults to ``2.05`` when using ``Engine Car``, or to ``4.2`` otherwise.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:fuel_max:\r\n\r\nFuel_Max :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum possible fuel to spawn with.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:fuel_min:\r\n\r\nFuel_Min :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum possible fuel to spawn with.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:gearshift_allowskippinggears:\r\n\r\nGearShift_AllowSkippingGears :ref:`bool <doc_data_builtin_types>` ``true``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf true, engine can skip from (for example) 1st to 3rd gear if it keeps RPM within the acceptable range.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:gearshift_downthresholdrpm:\r\n\r\nGearShift_DownThresholdRPM :ref:`float32 <doc_data_builtin_types>` ``1500.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen engine RPM is below this value and a lower gear is available the car will shift gears down.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:gearshift_duration:\r\n\r\nGearShift_Duration :ref:`float32 <doc_data_builtin_types>` ``0.5``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow long it takes to shift gears, measured in seconds. Wheels do not provide any torque for this duration.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:gearshift_interval:\r\n\r\nGearShift_Interval :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow long to wait since the last gear change before shifting gears, measured in seconds. It can take a moment for the engine RPM to adjust after a gear change, so without a delay the RPM would still exceed the threshold.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:gearshift_upthresholdrpm:\r\n\r\nGearShift_UpThresholdRPM :ref:`float32 <doc_data_builtin_types>` ``5500.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen engine RPM is above this value and a higher gear is available the car will shift gears up.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:gearshift_visibleinhud:\r\n\r\nGearShift_VisibleInHUD :ref:`bool <doc_data_builtin_types>` ``true``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf gears are configured and this is true, RPM and gear number will be shown in the user interface.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:guid:\r\n\r\nGUID :ref:`doc_data_guid`\r\n:::::::::::::::::::::::::\r\n\r\nRefer to :ref:`GUID <doc_data_guid>` documentation. Vehicles are required to have this property.\r\n\r\n.. tip::\r\n\r\n  If the GUID property has been omitted from the asset file, then the game will automatically attempt to assign a random (and unique) GUID during a successful load.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:has_clip_prefab:\r\n\r\nHas_Clip_Prefab :ref:`bool <doc_data_builtin_types>` ``true``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhether or not the vehicle has a Clip.prefab. If the vehicle 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``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:has_horn:\r\n\r\nHas_Horn :ref:`bool <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhether or not the vehicle should have a horn. Defaults to ``true`` when the vehicle either has a ``Horn`` AudioClip, or the ``HornAudioClip`` property has been set to a valid path. Otherwise, defaults to ``false``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:health:\r\n\r\nHealth :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nTotal health value.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:health_max:\r\n\r\nHealth_Max :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum possible health to spawn with.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:health_min:\r\n\r\nHealth_Min :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum possible health to spawn with.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:hornaudioclip:\r\n\r\nHornAudioClip :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nAudioClip to play when using the horn.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:id:\r\n\r\nID :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMust be a unique identifier. This property used to be required by vehicles, but this is no longer necessary.\r\n\r\nThe range reserved for official content is [1, 2000).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:ignitionaudioclip:\r\n\r\nIgnitionAudioClip :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nAudioClip to play after entering the driver's seat.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:invulnerable:\r\n\r\nInvulnerable :ref:`flag <doc_data_flag>`\r\n::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle cannot be damaged by lower-power :ref:`doc_item_asset_weapon` that do not have the ``Invulnerable`` flag.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:ispaintable:\r\n\r\nIsPaintable :ref:`bool <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf ``true``, :ref:`Vehicle Paint Tools <doc_item_asset_vehicle_paint_tool>` can be used on this vehicle. Defaults to ``true`` if :ref:`PaintableSections <doc_assets_vehicle:paintablesections>` has been configured.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:lift:\r\n\r\nLift :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe amount of upwards lift force to apply, when using ``Engine Plane``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:lockmouse:\r\n\r\nLockMouse :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::::\r\n\r\nFirst-person camera movement is locked while driving. This is useful for ``Engine Plane`` and ``Engine Helicopter``, as a player's mouse movement while in first-person can be used to steer the vehicle.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:num_steering_tires:\r\n\r\nNum_Steering_Tires :ref:`int32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\n.. deprecated:: 3.23.4.0\r\n\tReplaced by the ``WheelConfigurations`` property.\r\n\r\nTotal number of tires that should turn when steering. Defaults to ``2`` when using ``Engine Car``, to ``1`` when using any other ``Engine`` enumerator, or to ``0`` if the ``Crawler`` property has been set.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:override_center_of_mass:\r\n\r\nOverride_Center_Of_Mass :ref:`bool <doc_data_builtin_types>` ``false``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf ``true``, overrides the vehicle's center of mass with the values from the ``Center_Of_Mass`` property. This allows for modifying a vehicle's center of gravity without needing to move the \"Cog\" GameObject in Unity.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:paintablesections:\r\n\r\nPaintableSections :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf set, the vehicle can be painted with a :ref:`Vehicle Paint Tool <doc_item_asset_vehicle_paint_tool>`. Each section's material's ``_PaintColor`` property is set to the vehicle's paint color.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:passenger_explosion_armor:\r\n\r\nPassenger_Explosion_Armor :ref:`float32 <doc_data_builtin_types>` ``1``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier on the damage taken by players sitting in the vehicle, by explosions.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:physics_profile:\r\n\r\nPhysics_Profile :ref:`GUID <doc_data_guid>`\r\n:::::::::::::::::::::::::::::::::::::::::::\r\n\r\nGUID of a :ref:`VehiclePhysicsProfileAsset <doc_assets_vehicle_physics_profile>` to use. Physics profiles allow for increased control over vehicle settings in bulk, but are not required for anything.\r\n\r\nThere are several default profiles. These are used when the vehicle's :ref:`Engine <doc_assets_vehicle:engine>` property has been set to ``Boat``, ``Car``, ``Helicopter``, or ``Plane``, when certain conditions are met. The Vehicle.prefab's root RigidBody component must have a mass equal to 1.0, and any of its Tires' WheelColliders must also have a mass equal to 1.0. Otherwise, nothing is used by default.\r\n\r\n- ``Boat`` defaults to ``47258d0dcad14cb8be26e24c1ef3449e``.\r\n- ``Car`` defaults to ``6b91a94f01b6472eaca31d9420ec2367``.\r\n- ``Helicopter`` defaults to ``bb9f9f0204c4462ca7d976b87d1336d4``.\r\n- ``Plane`` defaults to ``93a47d6d40454335b4784e803628ac54``.\r\n\r\nOther vehicle types do not have a default profile.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:pitch_drive:\r\n\r\nPitch_Drive :ref:`float32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier on the pitch of the engine audio while driving. Defaults to ``0.03`` when using ``Engine Helicopter``, or to ``0.1`` when using ``Engine Blimp``. For other ``Engine`` enumerators, it defaults to ``0.025`` if the audio clip is named \"Engine_Large\", or to ``0.075`` if the audio clip is named \"Engine_Small\". Otherwise, defaults to ``0.05``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:pitch_idle:\r\n\r\nPitch_Idle :ref:`float32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier on the pitch of the engine audio while idle. Defaults to ``0.625`` if the audio clip is named \"Engine_Large\", or to ``0.75`` if the audio clip is named \"Engine_Small\". Otherwise, defaults to ``0.5``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:rarity:\r\n\r\nRarity :ref:`doc_data_eitemrarity` ``Common``\r\n:::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nRarity of the item, as text shown in menus and colors used for highlights.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:reclined:\r\n\r\nReclined :ref:`flag <doc_data_flag>`\r\n::::::::::::::::::::::::::::::::::::\r\n\r\nPlayer character should use a reclined idle animation.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:reversegearratio:\r\n\r\nReverseGearRatio :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nGear ratio to use when reversing. Please refer to :ref:`ForwardGearRatios <doc_assets_vehicle:forwardgearratios>` for more details on gear ratios.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:rollangularvelocitydamping:\r\n\r\nRollAngularVelocityDamping :ref:`float32 <doc_data_builtin_types>` ``-1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf greater than zero, an acceleration is applied to angular velocity on 𝘡-axis toward zero.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:shared_skin_lookup_id:\r\n\r\nShared_Skin_Lookup_ID :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nGUID or legacy ID of another vehicle, which this vehicle should share skins with. This property was used by some official vehicles (such as the `Rally Car <https://unturned.wiki.gg/Rally_Car>`_), as each paint color used to be a separate vehicle. This is no longer necessary, but some modded vehicles may still rely on this functionality. Defaults to the value of this vehicle's configured ``GUID``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:shared_skin_name:\r\n\r\nShared_Skin_Name :ref:`string <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen generating images, the image name will contain the value of this string instead of the vehicle's file name. Often used with ``Shared_Skin_Lookup_ID``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:should_spawn_seat_capsules:\r\n\r\nShould_Spawn_Seat_Capsules :ref:`bool <doc_data_builtin_types>` ``false``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf ``true``, capsule colliders will be attached to the ``Seat`` GameObject in order to prevent players from clipping into the ground. This is useful for vehicles that do not have a roof, such as bicycles.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:shouldexplosionburnmaterials:\r\n\r\nShouldExplosionBurnMaterials :ref:`bool <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen ``true``, the materials of the vehicle's ``Model_#`` GameObjects will be tinted black when the vehicle is destroyed. Defaults to ``true`` if the ``Explosion`` property is configured.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:explosionburnmaterialsections:\r\n\r\nExplosionBurnMaterialSections :ref:`list of PaintableVehicleSection <doc_assets_vehicle:paintablevehiclesection_dictionary>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nOnly used if ``ShouldExplosionBurnMaterials`` is ``true``.\r\n\r\nIf set, manually specifies which materials should be darkened after an explosion.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:shouldexplosioncausedamage:\r\n\r\nShouldExplosionCauseDamage :ref:`bool <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen ``true``, the explosion caused by the vehicle being destroyed will deal damage to nearby entities, and kill any passengers. Defaults to ``true`` if the ``Explosion`` property is configured.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:size2_z:\r\n\r\nSize2_Z :ref:`float32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nOrthogonal camera size for economy icons.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:sleds:\r\n\r\nSleds :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::\r\n\r\nTires should easily roll. For example, most planes will want to use this property.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:speed_max:\r\n\r\nSpeed_Max :ref:`float32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle's maximum velocity to aim for while accelerating forward, in m/s (meters per second). For all ``Engine`` enumerators except for the ``Train`` enumerator, this value is multiplied by 1.25 because the vehicle adjusts wheel torque trying to match a specific speed. For example, a vehicle that uses ``Speed_Max 12.5`` and is using ``Engine Car`` will have a maximum forward speed of 56.25 kph (34.95 mph).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:speed_min:\r\n\r\nSpeed_Min :ref:`float32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle's maximum velocity to aim for while accelerating in reverse, in m/s (meters per second). In-game, a vehicle's speed is displayed as either kph (kilometers per hour) or mph (miles per hour). For example, a vehicle that uses ``Speed_Min -7`` will have a maximum reversing speed of 25.2 kph (15.66 mph).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:stamina_boost:\r\n\r\nStamina_Boost :ref:`float32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nWhen a value is specified, this property allows for using stamina to boost. The value specified is the multiplier on the speed a vehicle can go without using a stamina boost. For example, ``Stamina_Boost 0.5`` would only let vehicle move at 50% its maximum speed normally, but using stamina to boost would it reach its maximum speed. This property is often used with ``Stamina_Powered``, but this is not required.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:stamina_powered:\r\n\r\nStamina_Powered :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe vehicle does not use fuel or a vehicle battery.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steering_angle_fullspeed_factor:\r\n\r\nSteering_Angle_FullSpeed_Factor :ref:`float32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMultiplier for steering angle range at target maximum speed (for the current forward/backward direction).\r\nReducing steering range at higher speeds keeps the vehicle controlable with digital (non-analog) input.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steering_angle_max:\r\n\r\nSteering_Angle_Max :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nSteering angle range at zero speed (idle/parked). For example, 45 means the wheels connected to steering can rotate ±45 degrees.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steer_max:\r\n\r\nSteer_Max :ref:`float32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\n.. tip:: This property was replaced by :ref:`Steering_Angle_Max <doc_assets_vehicle:steering_angle_max>` which **isn't** multiplied by 0.75.\r\n\r\nSteering angle range at zero speed (idle/parked). This value is multiplied by 0.75.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steer_min:\r\n\r\nSteer_Min :ref:`float32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\n.. tip:: This property was replaced by :ref:`Steering_Angle_FullSpeed_Factor <doc_assets_vehicle:steering_angle_fullspeed_factor>`.\r\n\r\nSteering angle range at target maximum speed (for the current forward/backward direction).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steering_angle_turn_speed:\r\n\r\nSteering_Angle_Turn_Speed :ref:`float32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow quickly wheels can turn to meet player input, measured in degrees per second. Defaults to the value of ``Steer_Max * 5.0``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steering_leaningforcemultiplier:\r\n\r\nSteering_LeaningForceMultiplier :ref:`float32 <doc_data_builtin_types>` ``-1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf greater than zero, torque is applied on 𝘡-axis according to steering input for bikes and motorcycles.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steering_leaningforce_scalewithspeed:\r\n\r\nSteering_LeaningForce_ScaleWithSpeed :ref:`bool <doc_data_builtin_types>` ``false``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf true, leaning force is multiplied by normalized speed to the power of Steering_LeaningForce_SpeedExponent. Defaults to false.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steering_leaningforce_speedexponent:\r\n\r\nSteering_LeaningForce_SpeedExponent :ref:`float32 <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nRefer to Steering_LeaningForce_ScaleWithSpeed.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:steering_tire_#:\r\n\r\nSteering_Tire_# :ref:`int32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\n.. deprecated:: 3.23.4.0\r\n\tReplaced by the ``WheelConfigurations`` property.\r\n\r\nSet a ``Wheel_#`` GameObject as a steering tire, which will visibly turn when steering. By default, a number of steering tires equal to the value of ``Num_Steering_Tires`` will be automatically set. These will start at ``Steering_Tire_0 0`` (corresponding to ``Wheel_0``), and increment upwards.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:tire_id:\r\n\r\nTire_ID :ref:`uint16 <doc_data_builtin_types>` ``1451``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nID of the item that should be given when a tire is manually removed with a :ref:`ToolAsset <doc_item_asset_tire>` that has ``Mode Remove``, and can also be manually attached to the vehicle if the specified item ID is for a :ref:`ToolAsset <doc_item_asset_tire>` with ``Mode Add``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:tires_invulnerable:\r\n\r\nTires_Invulnerable :ref:`flag <doc_data_flag>`\r\n::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nTires cannot be damaged.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:traction:\r\n\r\nTraction :ref:`flag <doc_data_flag>`\r\n::::::::::::::::::::::::::::::::::::\r\n\r\nTires should have traction in snowy positions.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:train_car_length:\r\n\r\nTrain_Car_Length :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe distance between each train car on the train, in meters. This property is used with ``Engine Train``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:train_track_offset:\r\n\r\nTrain_Track_Offset :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe offset the train car is above the track, in meters. This property is used with ``Engine Train``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:train_wheel_offset:\r\n\r\nTrain_Wheel_Offset :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nThe offset between the wheels, in meters. This property is used with ``Engine Train``.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:trunk_storage_x:\r\n\r\nTrunk_Storage_X :ref:`uint8 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nNumber of columns (horizontal storage space).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:trunk_storage_y:\r\n\r\nTrunk_Storage_Y :ref:`uint8 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nNumber of rows (vertical storage space).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turret_ignore_aim_camera:\r\n\r\nTurret_#_Ignore_Aim_Camera :ref:`flag <doc_data_flag>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nNormally, the player's camera is positioned at the \"Aim\" GameObject. Including this flag will disable this feature.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turret_item_id:\r\n\r\nTurret_#_Item_ID :ref:`uint16 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nLegacy ID of the item usable from the turret seat. This is often used with a :ref:`GunAsset <doc_item_asset_gun>` that has the ``Turret`` property. However, other items can be used – although most will function in unintended ways.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turret_pitch_max:\r\n\r\nTurret_#_Pitch_Max :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum allowed rotation of the turret through the elevation, in degrees.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turret_pitch_min:\r\n\r\nTurret_#_Pitch_Min :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum allowed rotation of the turret through the elevation, in degrees.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turret_seat_index:\r\n\r\nTurret_#_Seat_Index :ref:`uint8 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIndex of the \"Seat_#\" GameObject that this turret is usable from. For example, ``0`` would correspond to \"Seat_0\".\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turret_yaw_max:\r\n\r\nTurret_#_Yaw_Max :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum allowed rotation of the turret through the azimuth, in degrees. If this is set to ``360``, it can rotate rightward forever.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turret_yaw_min:\r\n\r\nTurret_#_Yaw_Min :ref:`float32 <doc_data_builtin_types>` ``0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum allowed rotation of the turret through the azimuth, in degrees. If this is set to ``-360``, it can rotate leftward forever.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:turrets:\r\n\r\nTurrets :ref:`uint8 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nTotal number of turrets on the vehicle. All other turret-related properties require that this property has been configured.\r\n\r\nFor example, this is how the `Fighter Jet <https://unturned.wiki.gg/Fighter_Jet>`_ is configured:\r\n\r\n.. code-block:: unturneddat\r\n\t:linenos:\r\n\r\n\tTurrets 1\r\n\tTurret_0_Seat_Index 0\r\n\tTurret_0_Item_ID 1471\r\n\tTurret_0_Yaw_Min -135\r\n\tTurret_0_Yaw_Max 135\r\n\tTurret_0_Pitch_Min 85\r\n\tTurret_0_Pitch_Max 180\r\n\tTurret_0_Ignore_Aim_Camera\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:type:\r\n\r\nType :ref:`doc_data_eassettype`\r\n:::::::::::::::::::::::::::::::\r\n\r\nDesignates the vehicle's class. Vehicle assets are required to have this property.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:valid_speed_down:\r\n\r\nValid_Speed_Down :ref:`float32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nConfiguring this will override the downward vertical speed sanity check on the Y-axis, measured in m/s (meters per second). Multiplayer checks if speed exceeds this value, and the movement is marked as invalid if so.\r\n\r\nDefaults to ``25`` when using ``Engine Car`` or ``Engine Boat``, or to ``100`` otherwise.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:valid_speed_horizontal:\r\n\r\nValid_Speed_Horizontal :ref:`float32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nConfiguring this will override the horizontal speed sanity check on the XZ plane, measured in m/s (meters per second). Multiplayer checks if speed exceeds this value, and the movement is marked as invalid if so.\r\n\r\nDefaults to ``(Speed_Max * 0.125)^2`` when using ``Engine Helicopter`` or ``Engine Blimp``, or to ``(Speed_Max * 0.1)^2`` otherwise. This property is useful for vehicles with speed that the server cannot predict, such as force-applying Unity components.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:valid_speed_up:\r\n\r\nValid_Speed_Up :ref:`float32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nConfiguring this will override the upward vertical speed sanity check on the Y-axis, measured in m/s (meters per second). Multiplayer checks if speed exceeds this value, and the movement is marked as invalid if so.\r\n\r\nDefaults to 12.5 when using ``Engine Car``, to 3.25 when using ``Engine Boat``, or to 100 otherwise.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheel_collider_mass_override:\r\n\r\nWheel_Collider_Mass_Override :ref:`float32 <doc_data_builtin_types>` ``null``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nOverride the mass of the vehicle's WheelCollider components. This allows for quickly modifying the mass of the wheel colliders without needing to rebundle the asset in Unity. If a vehicle has realistic mass, then it may be helpful to set this value to something exceptionally high (e.g., ``500``).\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelbalancing_forcemultiplier:\r\n\r\nWheelBalancing_ForceMultiplier :ref:`float32 <doc_data_builtin_types>` ``-1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf greater than zero, torque is applied on the Z axis multiplied by this factor to align vehicle up with ground up.\r\n\r\n.. note:: :ref:`RollAngularVelocityDamping <doc_assets_vehicle:rollangularvelocitydamping>` is critical for damping this force.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelbalancing_uprightexponent:\r\n\r\nWheelBalancing_UprightExponent :ref:`float32 <doc_data_builtin_types>` ``1.5``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nExponent on the 0 to 1 factor representing how aligned the vehicle is with the ground up vector. For example, a value of 2 would apply much less force while nearly aligned with up, whereas a value of 0.5 would apply more force even while nearly aligned with up.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfigurations:\r\n\r\nWheelConfigurations :ref:`list of VehicleWheelConfiguration <doc_assets_vehicle:vehiclewheelconfiguration_dictionary>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nControls WheelCollider components and their corresponding visual models. When converting older vehicles, enable the ``-LogVehicleWheelConfigurations`` command-line flag to output an equivalent wheel configuration.\r\n\r\nFor example, this is how the `Ambulance <https://unturned.wiki.gg/Ambulance>`_ is configured:\r\n\r\n.. code-block:: unturneddat\r\n\t:linenos:\r\n\r\n\tWheelConfigurations\r\n\t[\r\n\t\t{\r\n\t\t\tWheelColliderPath Tires/Tire_0\r\n\t\t\tIsColliderSteered true\r\n\t\t\tIsColliderPowered true\r\n\t\t\tModelPath Wheels/Wheel_0\r\n\t\t\tModelUseColliderPose true\r\n\t\t}\r\n\t\t{\r\n\t\t\tWheelColliderPath Tires/Tire_1\r\n\t\t\tIsColliderSteered true\r\n\t\t\tIsColliderPowered true\r\n\t\t\tModelPath Wheels/Wheel_1\r\n\t\t\tModelUseColliderPose true\r\n\t\t}\r\n\t\t{\r\n\t\t\tWheelColliderPath Tires/Tire_2\r\n\t\t\tIsColliderSteered false\r\n\t\t\tIsColliderPowered false\r\n\t\t\tModelPath Wheels/Wheel_2\r\n\t\t\tModelUseColliderPose true\r\n\t\t}\r\n\t\t{\r\n\t\t\tWheelColliderPath Tires/Tire_3\r\n\t\t\tIsColliderSteered false\r\n\t\t\tIsColliderPowered false\r\n\t\t\tModelPath Wheels/Wheel_3\r\n\t\t\tModelUseColliderPose true\r\n\t\t}\r\n\t]\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:zip:\r\n\r\nZip :ref:`flag <doc_data_flag>`\r\n:::::::::::::::::::::::::::::::\r\n\r\nPlayer character should use a handlebar idle animation.\r\n\r\n----\r\n\r\nCrawlerTrackTilingMaterial Dictionary Descriptions\r\n```````````````````````````````````````````````````\r\n\r\n.. _doc_assets_vehicle:crawlertracktilingmaterial_path:\r\n\r\nPath :ref:`string <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::\r\n\r\nScene hierarchy path to a Renderer component relative to the vehicle's root transform.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracktilingmaterial_materialindex:\r\n\r\nMaterialIndex :ref:`int32 <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIndex into Renderer component's Materials list. For example, ``0`` is the 1st material, ``1`` is the 2nd material, and so forth.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracktilingmaterial_wheelindices:\r\n\r\nWheelIndices :ref:`list of int32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIndex into wheel configurations list. For example, ``0`` is the 1st wheel, ``1`` is the 2nd wheel, and so forth.\r\n\r\nThe average of these wheels' RPM is used to calculate how fast crawler track is moving.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracktilingmaterial_repeatdistance:\r\n\r\nRepeatDistance :ref:`float32 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow far to travel to offset UV 1x.\r\n\r\nYou can calculate RepeatDistance by selecting an edge parallel to the crawler track and dividing the UV distance by the physical 3D distance. For example, if the UV length is 2 and the 3D length is 1.5 m then the texture repeats 1.33 UV/m.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:crawlertracktilingmaterial_uv_direction:\r\n\r\nUV_Direction :ref:`Vector2 <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nFor example, ``(-1.0, 0.0)`` will move the UV offset left as the vehicle travels forward.\r\n\r\n----\r\n\r\nPaintableVehicleSection Dictionary Descriptions\r\n```````````````````````````````````````````````\r\n\r\n.. _doc_assets_vehicle:paintablevehiclesection_path:\r\n\r\nPath :ref:`string <doc_data_builtin_types>`\r\n:::::::::::::::::::::::::::::::::::::::::::\r\n\r\nScene hierarchy path to a Renderer component relative to the vehicle's root transform.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:paintablevehiclesection_materialindex:\r\n\r\nMaterialIndex :ref:`int32 <doc_data_builtin_types>` ``0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIndex into Renderer component's Materials list. For example, ``0`` is the 1st material, ``1`` is the 2nd material, and so forth.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:paintablevehiclesection_allmaterials:\r\n\r\nAllMaterials :ref:`bool <doc_data_builtin_types>` ``false``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf true, apply to all materials in Renderer component's Materials list, rather than a specific index.\r\n\r\nRpmEngineSoundConfiguration Dictionary Descriptions\r\n```````````````````````````````````````````````````\r\n\r\n.. _doc_assets_vehicle:rpmenginesoundconfiguration_idlepitch:\r\n\r\nIdlePitch :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nAudioSource pitch when engine RPM is at :ref:`Idle RPM <doc_assets_vehicle:engineidlerpm>`.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:rpmenginesoundconfiguration_idlevolume:\r\n\r\nIdleVolume :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nAudioSource volume when engine RPM is at :ref:`Idle RPM <doc_assets_vehicle:engineidlerpm>`.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:rpmenginesoundconfiguration_maxpitch:\r\n\r\nMaxPitch :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nAudioSource pitch when engine RPM is at :ref:`Max RPM <doc_assets_vehicle:enginemaxrpm>`.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:rpmenginesoundconfiguration_maxvolume:\r\n\r\nMaxVolume :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nAudioSource volume when engine RPM is at :ref:`Max RPM <doc_assets_vehicle:enginemaxrpm>`.\r\n\r\nVehicleRandomPaintColorConfiguration Dictionary Descriptions\r\n````````````````````````````````````````````````````````````\r\n\r\n.. _doc_assets_vehicle:vehiclerandompaintcolorconfiguration_minsaturation:\r\n\r\nMinSaturation :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum random saturation in HSV color to generate.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:vehiclerandompaintcolorconfiguration_maxsaturation:\r\n\r\nMaxSaturation :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum random saturation in HSV color to generate.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:vehiclerandompaintcolorconfiguration_minvalue:\r\n\r\nMinValue :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMinimum value or brightness in HSV color to generate.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:vehiclerandompaintcolorconfiguration_maxvalue:\r\n\r\nMaxValue :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nMaximum value or brightness in HSV color to generate.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:vehiclerandompaintcolorconfiguration_grayscalechance:\r\n\r\nGrayscaleChance :ref:`float32 <doc_data_builtin_types>` ``0.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\n[0, 1] color will have zero saturation if random value is less than this. For example, 0.2 means 20% of vehicles will be grayscale.\r\n\r\nVehicleWheelConfiguration Dictionary Descriptions\r\n`````````````````````````````````````````````````\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_canexplode:\r\n\r\nCanExplode :ref:`bool <doc_data_builtin_types>` ``true``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf true, wheel should fly off when vehicle explodes. Defaults to true. Used to simplify destroying vehicles with crawler tracks.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_copycolliderrpmindex:\r\n\r\nCopyColliderRpmIndex :ref:`int32 <doc_data_builtin_types>` ``-1``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf set, visual-only wheels without a collider (like the back wheels of the snowmobile) can copy RPM from a wheel that does have a collider. Requires :ref:`ModelRadius <doc_assets_vehicle:wheelconfiguration_modelradius>` to also be set.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_crawlertrackforwardmode:\r\n\r\nCrawlerTrackForwardMode :ref:`ECrawlerTrackForwardMode <doc_assets_vehicle:ecrawlertrackforwardmode>` ``Auto``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nFor ``CrawlerTrack`` ``SteeringMode``, indicates how a positive motor torque (forward) rotates the vehicle.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_iscolliderpowered:\r\n\r\nIsColliderPowered :ref:`bool <doc_data_builtin_types>` ``false``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf ``true``, collider is connected to the engine and responds to player's acceleration input.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_iscollidersteered:\r\n\r\nIsColliderSteered :ref:`bool <doc_data_builtin_types>` ``false``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf ``true``, collider's steering angle responds to player input.\r\n\r\n.. deprecated:: 3.23.7.0\r\n\tReplaced by the ``SteeringMode`` property.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_ismodelsteered:\r\n\r\nIsModelSteered :ref:`bool <doc_data_builtin_types>` ``false``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf ``true``, model is rotated according to steering input.\r\n\r\nOnly kept for backwards compatibility. Prior to wheel configurations, only certain WheelColliders actually received steering input, while multiple models would appear to steer. For example, the APC's front 4 wheels appeared to rotate but only the front 2 actually affected physics.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_modelpath:\r\n\r\nModelPath :ref:`string <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nScene hierarchy path of visual representation of wheel relative to the vehicle's root transform.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_modelradius:\r\n\r\nModelRadius :ref:`float32 <doc_data_builtin_types>` ``-1.0``\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf greater than zero, visual-only wheels (without a collider) like the extra wheels of the Snowmobile use this radius to calculate their rolling speed.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_modelusecolliderpose:\r\n\r\nModelUseColliderPose :ref:`bool <doc_data_builtin_types>` ``false``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nIf ``true``, model ignores ``IsModelSteered`` and instead uses the wheel collider state (or an approximation when not simulating).\r\n\r\nPrior to wheel configurations, some high-fidely modded cars used a separate set of physics constraints to animate the wheel models as if they had suspension. Constraint setups like this should be completely superseded by the ``ModelUseColliderPose`` property. The constraints were awful for performance because physics for every purely-visual wheel were simulated on every client, and even then they didn't actually match the real wheel state.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_modelsuspensionoffset:\r\n\r\nModelSuspensionOffset :ref:`float <doc_data_builtin_types>` ``0.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nVertical offset of model from simulated suspension position. Used by crawler tracks because the visual wheel rests on the tread above the physics wheel.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_modelsuspensionspeed:\r\n\r\nModelSuspensionSpeed :ref:`float <doc_data_builtin_types>` ``-1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nHow quickly to interpolate model toward suspension position in meters per second. If negative, position teleports immediately.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_motioneffects:\r\n\r\nMotionEffects :ref:`EWheelMotionEffectsMode <doc_assets_vehicle:ewheelmotioneffectsmode>`\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nControls whether wheel creates particle kickup effects for the ground surface material underneath.\r\n\r\nDefaults to ``BothDirections`` if ``ModelUseColliderPose`` is true, ``None`` otherwise.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_steeringanglemultiplier:\r\n\r\nSteeringAngleMultiplier :ref:`float <doc_data_builtin_types>` ``1.0``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nTarget steering angle is multiplied by this value. For example, can be set to a negative number for rear-wheel steering.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_steeringmode:\r\n\r\nSteeringMode :ref:`EWheelSteeringMode <doc_assets_vehicle:ewheelsteeringmode>` ``Auto``\r\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nControls whether wheel contributes to steering and if so, which kind of steering to simulate.\r\n\r\n----\r\n\r\n.. _doc_assets_vehicle:wheelconfiguration_wheelcolliderpath:\r\n\r\nWheelColliderPath :ref:`string <doc_data_builtin_types>`\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nScene hierarchy path of a WheelCollider component relative to the vehicle's root transform.\r\n\r\nLocalization\r\n------------\r\n\r\n**Name** *string*: Vehicle name in user interfaces.\r\n"
  },
  {
    "path": "assets/vehicle-physics-profile-asset.rst",
    "content": ".. _doc_assets_vehicle_physics_profile:\n\nVehicle Physics Profile Assets\n==============================\n\nThis asset exists to tune vehicle physics in bulk without rebuilding asset bundles, and exposes more control than the individual vehicle assets.\n\nOne of the goals introducing profiles is to improve the handling of vanilla wheeled vehicles. Feel free to experiment with the default profile, and propose changes to it.\n\nHow to test?\n------------\n\nIn 3.19.18.0 the **reload** command was introduced which can be used to reload specific assets or directories of assets while playing. Simply reload the physics profile and then respawn a vehicle. For example to reload the default profile:\n\n.. code-block:: shell\n\n\t/reload 6b91a94f01b6472eaca31d9420ec2367\n\nHow are vehicles assigned a profile?\n------------------------------------\n\nIndividual vehicle assets can specify a profile by setting **Physics_Profile** to the GUID.\n\nIf a profile is not set, and the vehicle prefab's root rigidbody has a mass of 1.0, and the wheel colliders also have masses of 1.0, the default profile at Bundles/Assets/VehiclePhysicsProfiles/DefaultProfile.asset is used.\n\nAsset Properties Reference\n--------------------------\n\n**Type** *string*: ``SDG.Unturned.VehiclePhysicsProfileAsset``\n\n**Root_Mass**: If set, overrides vehicle rigidbody's mass.\n\n**Root_Mass_Multiplier**: If set, multiplies vehicle rigidbody's mass.\n\n**Root_Drag_Multiplier**: If set, multiplies vehicle rigidbody's positional drag force.\n\n**Root_Angular_Drag_Multiplier**: If set, multiplies vehicle rigidbody's angular drag force.\n\n**Carjack_Force_Multiplier**: If set, multiplies carjack item's force applied.\n\n**Wheel_Mass**: If set, overrides wheel collider mass. Ignored if vehicle asset has Wheel_Collider_Mass_Override set.\n\n**Wheel_Mass_Multiplier**: If set, multiplies wheel collider mass.\n\n**Wheel_Damping_Rate**: If set, override wheel collider damping rate. Lower values accelerate faster.\n\n**Wheel_Suspension_Force**: If set, overrides wheel collider suspension force.\n\n**Wheel_Suspension_Damper**: If set, overrides wheel collider suspension damper.\n\n**Wheel_Stiffness_Traction_Multiplier**: Wheel collider stiffness multiplier when driving in snow. Default: 0.25\n\n**Wheel_Friction_Sideways** and **Wheel_Friction_Forward**:\n\n* **Extremum_Slip**: If set, overrides friction curve extremum slip.\n\n* **Extremum_Value**: If set, overrides friction curve extremum value.\n\n* **Asymptote_Slip**: If set, overrides friction curve asymptote slip.\n\n* **Asymptote_Value**: If set, overrides friction curve asymptote value.\n\n* **Stiffness**: If set, overrides friction curve stiffness. Multiplies the extremum and asymptote values. Sideways default is 1.0 and forward default is 2.0.\n\n**Motor_Torque_Multiplier**: Multiplies wheel collider motor torque which is usually driven by vehicle speed.\n\n**Motor_Torque_Clamp_Multiplier**: Multiplies wheel collider motor torque when exceeding maximum speed. Default: 0.5\n\n**Brake_Torque_Multiplier**: Multiplies wheel collider brake torque.\n\n**Brake_Torque_Traction_Multiplier**: Multiplies wheel collider brake torque when driving in snow. Default: 0.5\n\n**Wheel_Drive_Model**: ``Front``, ``Rear`` or ``All``. By default all cars are rear-wheel drive, but in the real world cars are front-wheel drive. This discrepancy is due to a poor understanding of cars when they were added to the game in 2014.\n\n**Wheel_Brake_Model**: ``Front``, ``Rear`` or ``All``. Modern cars have all-wheel breaking, which is the default.\n"
  },
  {
    "path": "assets/vehicle-redirector-asset.rst",
    "content": ".. _doc_asset_vehicle_redirector:\n\nVehicle Redirector Assets\n=========================\n\n**Vehicle Redirector Assets** help consolidate legacy colored vehicle variants into a single vehicle asset.\n\nPrior to the addition of paintable vehicles, it was common to create duplicates of a vehicle asset with the color being the only difference. One of many downsides with this approach was the increased hassle of keeping changes consistent between all of the variants; for example, when tuning physics.\n\nVehicle redirector assets ensure compatibility with existing saves and content while merging colored vehicle variants into one unified asset.\n\nGame Data File\n--------------\n\nNote that the ``TargetVehicle`` property is required for this asset to function.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`TargetVehicle <doc_asset_vehicle_redirector:targetvehicle>`\n     - :ref:`Asset Pointer <doc_data_assetptr>`\n     -\n   * - :ref:`LoadPaintColor <doc_asset_vehicle_redirector:loadpaintcolor>`\n     - :ref:`color <doc_data_color>`\n     -\n   * - :ref:`SpawnPaintColor <doc_asset_vehicle_redirector:spawnpaintcolor>`\n     - :ref:`color <doc_data_color>`\n     -\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_asset_vehicle_redirector:targetvehicle:\n\nTargetVehicle :ref:`Asset Pointer <doc_data_assetptr>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nActual vehicle to use when attempting to load or spawn this asset.\n\n----\n\n.. _doc_asset_vehicle_redirector:loadpaintcolor:\n\nLoadPaintColor :ref:`color <doc_data_color>`\n::::::::::::::::::::::::::::::::::::::::::::\n\nIf set, overrides the default random paint color when loading a vehicle from a save file. Used to preserve colors of vehicles in existing saves.\n\n----\n\n.. _doc_asset_vehicle_redirector:spawnpaintcolor:\n\nSpawnPaintColor :ref:`color <doc_data_color>`\n:::::::::::::::::::::::::::::::::::::::::::::\n\nIf set, overrides the default random paint color when spawning a new vehicle. Optionally used to preserve colors of vehicles in spawn tables.\n"
  },
  {
    "path": "assets/weather-asset.rst",
    "content": ".. _doc_assets_weather:\n\nWeather Assets\n==============\n\nOverrides the built-in snow and rain weather with custom events. This is feature is a work-in-progress.\n\nRandom weather can be scheduled to occur naturally on a map with the ``Weather_Types`` property of the :ref:`Level Asset <doc_assets_level>`.\n\nHow to test?\n------------\n\nWhen a GUID is passed to the weather command it will start a custom weather event, and 0 can be used to end it.\n\n.. code-block:: shell\n\t\n\t/weather 819982d7a2b6453488a8c4c5d9efe67f\n\nProperties Reference\n--------------------\n\n**Type** *string*: ``SDG.Unturned.WeatherAsset``\n\n**Volume_Mask** :ref:`u32 Mask <doc_data_bitmask>`: Only enabled while inside an ambience volume with non-zero bitwise AND result. Defaults to 0xFFFFFFFF.\n\n**Fade_In_Duration** *float*: Seconds between weather event starting and reaching full intensity.\n\n**Fade_Out_Duration** *float*: Seconds between weather event ending and reaching zero intensity.\n\n**Ambient_Audio_Clip** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Audio clip to play globally. Volume matches intensity.\n\n**Ambient_Audio_Takes_Priority_Over_Ambiance_Volumes** *bool*: If true, ``Ambient_Audio_Clip`` causes per-ambiance-volume audio to fade out. Defaults to false.\n\n**Override_Fog** *bool*: Should fog configured in the lighting be overridden?\n\n**Override_Atmospheric_Fog** *bool*: Should fog affect the skybox?\n\n**Shadow_Strength_Multiplier** *float*: Directional light shadow strength multiplier.\n\n**Fog_Blend_Exponent** *float*: Power applied to fog blending alpha.\n\n**Cloud_Blend_Exponent** *float*: Power applied to cloud blending alpha.\n\n**Wind_Main** *float*: Wind zone windMain value. Will be replaced by more configurable game-specific wind eventually.\n\n**Dawn**, **Midday**, **Dusk** and **Midnight**: Refer to the \":ref:`Time of Day <doc_assets_weather:time_of_day>`\" section.\n\n**Effects** *array*: Refer to the \":ref:`Effects <doc_assets_weather:effects>`\" section.\n\n**Stamina_Per_Second** *float*: Stamina +/- buff.\n\n**Health_Per_Second** *float*: Health +/- buff.\n\n**Food_Per_Second** *float*: Food +/- buff.\n\n**Water_Per_Second** *float*: Water +/- buff.\n\n**Virus_Per_Second** *float*: Virus +/- buff.\n\n**Has_Lightning** *bool*: If true, lightning will be enabled for this weather type. In the future this should get cleaned up, but for now it is hardcoded for assigning a net id.\n\n**Min_Lightning_Interval** *float*: Minimum seconds between lightning strikes.\n\n**Max_Lightning_Interval** *float*: Maximum seconds between lightning strikes.\n\n**Fish_Bite_Interval_Multiplier** *float*: Multiplier for interval before a fish takes the bait. Defaults to 1.\n\n.. _doc_assets_weather:time_of_day:\n\nTime of Day Properties\n----------------------\n\nEach of the four main times of day can override certain properties.\n\n**Fog_Color** *struct*: Distance-based fog. Optionally overrides the skybox color. Refer to the \":ref:`Color <doc_assets_weather:color>`\" section.\n\n**Fog_Density** *float*: Functions similarly to fog intensity in ambiance volume. Value must be within [0, 1].\n\n**Cloud_Color** *struct*: Inner body of cloud. Refer to the \":ref:`Color <doc_assets_weather:color>`\" section.\n\n**Cloud_Rim_Color** *struct*: Outer edge of cloud. More visible than inner color. Refer to the \":ref:`Color <doc_assets_weather:color>`\" section.\n\n**Brightness_Multiplier** *float*: All ambient lighting colors are multiplied by this.\n\n.. _doc_assets_weather:effects:\n\nEffect Properties\n-----------------\n\nMultiple effects can be instantiated while the weather is active.\n\n**Prefab** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Game object with a particle system. PlayOnAwake should be disabled. For effects tied to the view it may be helpful to change the culling mode to \"Always Simulate\".\n\n**Emission_Exponent** *float*: Power applied to weather intensity multiplied by default constant rate over time.\n\n**Pitch** *float*: X-axis rotation when ``Rotate_Yaw_With_Wind`` is enabled.\n\n**Translate_With_View** *bool*: Should position in world-space match the camera? The built-in snow and rain move with the view. Position is zeroed when false. May be useful for transition effects like dust blowing into the map signaling the start of a sandstorm.\n\n**Rotate_Yaw_With_Wind** *bool*: Should y-axis rotation match the wind direction? The built-in snow and rain rotate with wind.\n\n.. _doc_assets_weather:color:\n\nColor Properties\n----------------\n\nEach color can use a custom override, or a color from the level editor lighting panel. Using a level color is primarily for rain and snow backwards compatibility.\n\n**Level_Enum** *enum*: If set, then the RGB specified are multiplied by this color.\n\n**R**, **G**, **B** *uint8*: Color channel values.\n\nNPC Conditions\n--------------\n\nGlobal weather state and current weather intensity blend can be tested through NPC conditions. Refer to :ref:`Conditions <doc_npc_asset_conditions>` documentation for documentation.\n"
  },
  {
    "path": "assets/zombie-difficulty-asset.rst",
    "content": ".. _doc_assets_zombie_difficulty:\n\nZombie Difficulty Assets\n========================\n\nOverride the difficulty settings for zombies in a navmesh. For reference, official ZombieDifficulty.asset files can be found at ``...\\Steam\\steamapps\\common\\Unturned\\Bundles\\Assets\\Zombie_Difficulty``.\n\nProperties Reference\n--------------------\n\n**Type** *string*: ``SDG.Unturned.ZombieDifficultyAsset``\n\n**Overrides_Spawn_Chance** *bool*: Whether or not the spawn chance for zombies in the navmesh should be overridden by the values set in this asset. For example, it may be useful to set this to ``false`` if you *only* wanted to tweak properties not related to spawn chances, such as the damage thresholds for stuns. Defaults to true.\n\n**Mega_Stun_Threshold** *int*: Override the damage threshold for a hit to cause a stun.\n\n**Normal_Stun_Threshold** *int*: Override the damage threshold for a hit to cause a stun.\n\n**Allow_Horde_Beacon** *bool*: Whether or not Horde Beacons can be placed in the navmesh. Defaults to true.\n\n**Speciality_Health_Override_Mode** ``None``, ``MultiplyEditorHealth``, ``MultiplyDefaultHealth``, or ``Replace``: defaults to ``None``. If set, allows zombie health to overridden per-zombie-type.\n\n- ``None``: Do not override zombie health.\n- ``MultiplyEditorHealth``: Per-speciality value is a multiplier for health configured in the level editor.\n- ``MultiplyDefaultHealth``: Per-speciality value is a multiplier for vanilla health value.\n- ``Replace``: Per-speciality value replaces zombie's health.\n\n**Speciality_Health_Overrides** *dictionary*: If using ``Speciality_Health_Override_Mode``, this pairs zombie speciality (e.g., Crawler, Sprinter, Flanker, etc) to a number. For example:\n\n.. code-block:: unturnedasset\n\t:linenos:\n\n\tSpeciality_Health_Overrides\n\t{\n\t\tCrawler 100\n\t\tBurner 200\n\t}\n\nSpawn Chance Properties\n-----------------------\n\n**Crawler_Chance** *float*: Decimal-to-percent chance for the zombie to be a Crawler. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Sprinter_Chance** *float*: Decimal-to-percent chance for the zombie to be a Sprinter. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Flanker_Chance** *float*: Decimal-to-percent chance for the zombie to be a Flanker. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Burner_Chance** *float*: Decimal-to-percent chance for the zombie to be a Burner. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Acid_Chance** *float*: Decimal-to-percent chance for the zombie to be a Acid Spitter. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Boss_Electric_Chance** *float*: Decimal-to-percent chance for the zombie to be a Lightningstrike Zombie Boss. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Boss_Wind_Chance** *float*: Decimal-to-percent chance for the zombie to be a Groundpounder Zombie Boss. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Boss_Fire_Chance** *float*: Decimal-to-percent chance for the zombie to be a Flamethrower Zombie Boss. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Spirit_Chance** *float*: Decimal-to-percent chance for the zombie to be a Spirit. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**DL_Red_Volatile_Chance** *float*: Decimal-to-percent chance for the zombie to be a Volatile. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**DL_Blue_Volatile_Chance** *float*: Decimal-to-percent chance for the zombie to be a Blue Volatile. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Boss_Elver_Stomper_Chance** *float*: Decimal-to-percent chance for the zombie to be a Stomper Zombie Boss. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n\n**Boss_Kuwait_Chance** *float*: Decimal-to-percent chance for the zombie to be an Evil Eye Zombie Boss. Defaults to 0. Requires ``Overrides_Spawn_Chance`` to be true.\n"
  },
  {
    "path": "conf.py",
    "content": "# Configuration file for the Sphinx documentation builder.\n#\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\nimport sphinx\nimport sphinx_rtd_theme # \"Read the Docs Sphinx Theme\" https://sphinx-rtd-theme.readthedocs.io/en/stable/index.html\nimport sys\nimport os\n\n# -- Project information\n\nproject = \"Unturned\"\ncopyright = \"2023, Smartly Dressed Games\"\nauthor = \"Smartly Dressed Games\"\n\nversion = \"3.x\"\nrelease = version\n\n# -- General configuration\nsys.path.append(os.path.abspath(\"_extensions\")) # also find extensions within this directory\nextensions = [\n    \"notfound.extension\",  # Adds custom \"404 Not Found\" page\n    'sphinx.ext.duration',\n    'sphinx.ext.doctest',\n    'sphinx.ext.autodoc',\n    'sphinx.ext.autosummary',\n    'sphinx_copybutton',\n    'sphinx.ext.intersphinx',\n    'sphinxext.opengraph', # OpenGraph support (e.g., URLs posted offsite appear as OneBox embeds)\n    'sphinx_tabs.tabs',\n    # -- Locally-installed modules\n    'unturned_lexer',\n]\n\nexclude_patterns = [\n    '.venv/*' # Contains installed packages which may have .rst files we don't want included in source files.\n]\n\nintersphinx_mapping = {\n    'python': ('https://docs.python.org/3/', None),\n    'sphinx': ('https://www.sphinx-doc.org/en/master/', None),\n}\nintersphinx_disabled_domains = ['std']\n\ntemplates_path = ['_templates']\n\n# -- Options for HTML output\n\nhtml_theme = \"sphinx_rtd_theme\"\n\n# RTD theme options are documented here: https://sphinx-rtd-theme.readthedocs.io/en/stable/configuring.html\nhtml_theme_options = {\n    # Toc options\n    'collapse_navigation': True,\n}\n\n# Define the canonical URL if you are using a custom domain on Read the Docs\nhtml_baseurl = os.environ.get(\"READTHEDOCS_CANONICAL_URL\", \"\")\n\n# These folders are copied to the documentation's HTML output\nhtml_static_path = [\"_static\"]\n\n# These paths are either relative to html_static_path\n# or fully qualified paths (e.g. https://...)\nhtml_css_files = [\n    'css/custom.css',\n    'css/toctree_collapse.css',\n]\n\nhtml_js_files = [\n    \"js/toctree_collapse.js\",\n]\n\n# -- Options for EPUB output\nepub_show_urls = 'footnote'\n"
  },
  {
    "path": "data/asset-ptr.rst",
    "content": ".. _doc_data_assetptr:\n\nAsset Pointer\n=============\n\nWhen an asset refers to another it does so using an **Asset Pointer**. These identify the target asset by its :ref:`GUID <doc_data_guid>`.\n\nIn \\*.dat files\n---------------\n\nNote that the GUID here is not wrapped in quotes because Unturned \\*.dat files are treated as pairs of strings.\n\n.. code-block:: unturneddat\n\n\tMyAssetPtr ################################\n\nIn \\*.asset files\n-----------------\n\nTwo formats are supported in these files. The inline style was added later so you will see the older style used in many official assets.\n\n.. code-block:: unturnedasset\n\n\t\"MyAssetPtr\" \"################################\"\n\t\"MyAssetPtr\" { \"GUID\" \"################################\" }\n\nIn JSON files\n-------------\n\n.. code-block:: json\n\n\t\"MyAssetPtr\": { \"GUID\": \"################################\" }\n"
  },
  {
    "path": "data/bitmask.rst",
    "content": ".. _doc_data_bitmask:\n\nBitmask\n=======\n\n`Recommended Wikipedia Article <https://en.wikipedia.org/wiki/Mask_(computing)>`_\n\nWeather Example\n---------------\n\nRain's default mask is 1 (0b01), and snow's default mask is 2 (0b10). An ambience volume could enable both with 3 (0b11), or neither with 0 (0b00).\n"
  },
  {
    "path": "data/built-in-types.rst",
    "content": ".. _doc_data_builtin_types:\n\nC# Built-in Types\n=================\n\nThe following table lists the **C# built-in types**, along with common aliases and default values:\n\n.. list-table::\n   :widths: 20 20 40 20\n   :header-rows: 1\n   \n   * - C# type\n     - Alias(es)\n     - Range\n     - Default Value\n   * - bool\n     - Boolean\n     - ``true`` or ``false``\n     - ``false``\n   * - int8\n     - sbyte\n     - ``-128`` to ``127``\n     - ``0``\n   * - uint8\n     - byte\n     - ``0`` to ``255``\n     - ``0``\n   * - int16\n     - short\n     - ``-32768`` to ``32767``\n     - ``0``\n   * - uint16\n     - ushort\n     - ``0`` to ``65535``\n     - ``0``\n   * - float32\n     - float, single\n     - precision up to seven digits\n     - ``0``\n   * - int32\n     - int\n     - ``-2147483648`` to ``2147483647``\n     - ``0``\n   * - uint32\n     - uint\n     - ``0`` to ``4294967295``\n     - ``0``\n   * - float64\n     - double\n     - precision up to fifteen digits\n     - ``0``\n   * - int64\n     - long\n     - ``-9223372036854775808`` to ``9223372036854775807``\n     - ``0``\n   * - uint64\n     - ulong\n     - ``0`` to ``18446744073709551615``\n     - ``0``\n   * - string\n     - \n     - a sequence of zero or more Unicode characters\n     - ``null``\n\nFor more information about any of these built-in types, it is recommended to view Microsoft's `\"Built-in types (C# reference)\" <https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types>`_ documentation page."
  },
  {
    "path": "data/color.rst",
    "content": ".. _doc_data_color:\n\nColor\n=====\n\n**Colors** can either be parsed as a single hexadecimal value (optionally prefixed with ``#``), or from a dictionary with ``R``, ``G``, and ``B`` keys with :ref:`uint8 <doc_data_builtin_types>` values.\n\nFor example, all three of these would be valid colors:\n\n.. code-block:: text\n\t\n\tSkyColor 0000ff\n\tGroundColor #00ff00\n\tFogColor\n\t{\n\t\tR 255\n\t\tG 0\n\t\tB 0\n\t}\n\nLegacy Parsing\n--------------\n\nSome older properties have support for the color data type, but can alternatively be written using the legacy method of three separate :ref:`float32 <doc_data_builtin_types>` properties. Namely,  the ``Laser_Color`` and ``Nightvision_Color`` properties have support for both.\n\nFor example, this would be valid for an older property that supports the legacy format:\n\n.. code-block:: text\n\t\n\tLaser_Color_R 0.5\n\tLaser_Color_G 1\n\tLaser_Color_B 0"
  },
  {
    "path": "data/enum/eassettype.rst",
    "content": ".. _doc_data_eassettype:\n\nEAssetType\n==========\n\nThe EAssetType enumerated type is used as a scope for legacy IDs. Each legacy ID is unique within an EAssetType (allowing multiple assets to share the same legacy ID when they are different types). This is only used in older code or for maintaining backwards compatibility.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 20 10 70\n   :header-rows: 1\n\n   * - Named Value\n     - Index\n     - Description\n   * - ``None``\n     - 0\n     - Asset type is not applicable.\n   * - ``Item``\n     - 1\n     - Asset is an item.\n   * - ``Effect``\n     - 2\n     - Asset is an effect.\n   * - ``Object``\n     - 3\n     - Asset is an object (this includes NPC characters).\n   * - ``Resource``\n     - 4\n     - Asset is a resource.\n   * - ``Vehicle``\n     - 5\n     - Asset is a vehicle.\n   * - ``Animal``\n     - 6\n     - Asset is an animal.\n   * - ``Mythic``\n     - 7\n     - Asset is a mythical effect.\n   * - ``Skin``\n     - 8\n     - Asset is a skin.\n   * - ``Spawn``\n     - 9\n     - Asset is a spawn table.\n   * - ``NPC``\n     - 10\n     - Asset is related to NPCs (such as quests, vendors, or dialogues).\n"
  },
  {
    "path": "data/enum/ebatterymode.rst",
    "content": ".. _doc_data_ebatterymode:\n\nEBatteryMode\n============\n\nThe EBatteryMode enumerated type is used to determine how a vehicle battery should behave. This is only used by :ref:`vehicle assets <doc_assets_vehicle>`.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``None``\n     - Battery charge remains unchanged.\n   * - ``Burn``\n     - Battery charge will deplete over time.\n   * - ``Charge``\n     - Battery charge will replenish over time.\n"
  },
  {
    "path": "data/enum/eitemorigin.rst",
    "content": ".. _doc_data_eitemorigin:\n\nEItemOrigin\n===========\n\nThe EItemOrigin enumerated type is used when spawning items.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n   \n   * - Named Value\n     - Description\n   * - ``World``\n     - Item origin is the world.\n   * - ``Admin``\n     - Item origin is an admin command.\n   * - ``Craft``\n     - Item origin is crafting.\n   * - ``Nature``\n     - Item origin is nature."
  },
  {
    "path": "data/enum/eitemrarity.rst",
    "content": ".. _doc_data_eitemrarity:\n\nEItemRarity\n===========\n\nThe EItemRarity enumerated type consists of all the possible rarities of in-game content. Note that these are not the same as the item qualities used by Steam Economy items.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 20 10 70\n   :header-rows: 1\n\n   * - Named Value\n     - Index\n     - Description\n   * - ``Common``\n     - 0\n     - Corresponds to the \"Common\" (white-colored) rarity.\n   * - ``Uncommon``\n     - 1\n     - Corresponds to the \"Uncommon\" (green-colored) rarity.\n   * - ``Rare``\n     - 2\n     - Corresponds to the \"Rare\" (blue-colored) rarity.\n   * - ``Epic``\n     - 3\n     - Corresponds to the \"Epic\" (purple-colored) rarity.\n   * - ``Legendary``\n     - 4\n     - Corresponds to the \"Legendary\" (pink-colored) rarity.\n   * - ``Mythical``\n     - 5\n     - Corresponds to the \"Mythical\" (red-colored) rarity.\n"
  },
  {
    "path": "data/enum/eitemtype.rst",
    "content": ".. _doc_data_eitemtype:\n\nEItemType\n=========\n\nThe EItemType enumerated type consists of all the possible item types.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 20 10 70\n   :header-rows: 1\n\n   * - Named Value\n     - Index\n     - Description\n   * - ``Hat``\n     - 0\n     - Corresponds to the \"Hat\" item type.\n   * - ``Pants``\n     - 1\n     - Corresponds to the \"Pants\" item type.\n   * - ``Shirt``\n     - 2\n     - Corresponds to the \"Shirt\" item type.\n   * - ``Mask``\n     - 3\n     - Corresponds to the \"Mask\" item type.\n   * - ``Backpack``\n     - 4\n     - Corresponds to the \"Backpack\" item type.\n   * - ``Vest``\n     - 5\n     - Corresponds to the \"Vest\" item type.\n   * - ``Glasses``\n     - 6\n     - Corresponds to the \"Glasses\" item type.\n   * - ``Gun``\n     - 7\n     - Corresponds to the \"Gun\" item type.\n   * - ``Sight``\n     - 8\n     - Corresponds to the \"Sight\" item type.\n   * - ``Tactical``\n     - 9\n     - Corresponds to the \"Tactical\" item type.\n   * - ``Grip``\n     - 10\n     - Corresponds to the \"Grip\" item type.\n   * - ``Barrel``\n     - 11\n     - Corresponds to the \"Barrel\" item type.\n   * - ``Magazine``\n     - 12\n     - Corresponds to the \"Magazine\" item type.\n   * - ``Food``\n     - 13\n     - Corresponds to the \"Food\" item type.\n   * - ``Water``\n     - 14\n     - Corresponds to the \"Water\" item type.\n   * - ``Medical``\n     - 15\n     - Corresponds to the \"Medical\" item type.\n   * - ``Melee``\n     - 16\n     - Corresponds to the \"Melee\" item type.\n   * - ``Fuel``\n     - 17\n     - Corresponds to the \"Fuel\" item type.\n   * - ``Tool``\n     - 18\n     - Corresponds to the \"Tool\" item type.\n   * - ``Barricade``\n     - 19\n     - Corresponds to the \"Barricade\" item type.\n   * - ``Storage``\n     - 20\n     - Corresponds to the \"Storage\" item type.\n   * - ``Beacon``\n     - 21\n     - Corresponds to the \"Beacon\" item type.\n   * - ``Farm``\n     - 22\n     - Corresponds to the \"Farm\" item type.\n   * - ``Trap``\n     - 23\n     - Corresponds to the \"Trap\" item type.\n   * - ``Structure``\n     - 24\n     - Corresponds to the \"Structure\" item type.\n   * - ``Supply``\n     - 25\n     - Corresponds to the \"Supply\" item type.\n   * - ``Throwable``\n     - 26\n     - Corresponds to the \"Throwable\" item type.\n   * - ``Grower``\n     - 27\n     - Corresponds to the \"Grower\" item type.\n   * - ``Optic``\n     - 28\n     - Corresponds to the \"Optic\" item type.\n   * - ``Refill``\n     - 29\n     - Corresponds to the \"Refill\" item type.\n   * - ``Fisher``\n     - 30\n     - Corresponds to the \"Fisher\" item type.\n   * - ``Cloud``\n     - 31\n     - Corresponds to the \"Cloud\" item type.\n   * - ``Map``\n     - 32\n     - Corresponds to the \"Map\" item type.\n   * - ``Key``\n     - 33\n     - Corresponds to the \"Key\" item type.\n   * - ``Box``\n     - 34\n     - Corresponds to the \"Box\" item type.\n   * - ``Arrest_Start``\n     - 35\n     - Corresponds to the \"Arrest_Start\" item type.\n   * - ``Arrest_End``\n     - 36\n     - Corresponds to the \"Arrest_End\" item type.\n   * - ``Tank``\n     - 37\n     - Corresponds to the \"Tank\" item type.\n   * - ``Generator``\n     - 38\n     - Corresponds to the \"Generator\" item type.\n   * - ``Detonator``\n     - 39\n     - Corresponds to the \"Detonator\" item type.\n   * - ``Charge``\n     - 40\n     - Corresponds to the \"Charge\" item type.\n   * - ``Library``\n     - 41\n     - Corresponds to the \"Library\" item type.\n   * - ``Filter``\n     - 42\n     - Corresponds to the \"Filter\" item type.\n   * - ``Sentry``\n     - 43\n     - Corresponds to the \"Sentry\" item type.\n   * - ``Vehicle_Repair_Tool``\n     - 44\n     - Corresponds to the \"Vehicle_Repair_Tool\" item type.\n   * - ``Tire``\n     - 45\n     - Corresponds to the \"Tire\" item type.\n   * - ``Compass``\n     - 46\n     - Corresponds to the \"Compass\" item type.\n   * - ``Oil_Pump``\n     - 47\n     - Corresponds to the \"Oil_Pump\" item type.\n   * - ``Vehicle_Paint_Tool``\n     - 48\n     - Corresponds to the \"Vehicle_Paint_Tool\" item type.\n"
  },
  {
    "path": "data/enum/elightingvision.rst",
    "content": ".. _doc_data_elightingvision:\n\nELightingVision\n===============\n\nThe ELightingVision enumerated type is used to determine the lighting conditions when using certain items, such as :ref:`glasses <doc_item_asset_glasses>`. Some assets may only support using specific enumerators.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n   \n   * - Named Value\n     - Description\n   * - ``None``\n     - There is no vision effect, and normal lighting is used.\n   * - ``Military``\n     - \"Military\" nightvision lighting is used. When supported by the asset, nightvision color is ``#507814``, and nightvision fog intensity is ``0.25``.\n   * - ``Civilian``\n     - \"Civilian\" nightvision lighting is used. When supported by the asset, nightvision color is ``#666666``, and nightvision fog intensity is ``0.5``.\n   * - ``Headlamp``\n     - \"Headlamp\" lighting is used. When supported by the asset, this will enable a toggleable light source and allow for using :ref:`PlayerSpotLightConfig <doc_data_playerspotlightconfig>` properties."
  },
  {
    "path": "data/enum/enpcholiday.rst",
    "content": ".. _doc_data_enpcholiday:\n\nENPCHoliday\n===========\n\nThe ENPCHoliday enumerated type consists of all of the game's recognized holidays or seasonal events. You can find the duration of scheduled seasonal events in the ``Client.log`` file generated after launching the game, or in the ``HolidayUtil.cs`` source file.\n\nThe start and end times for all holidays are relative to the player's local time, meaning they are affected by timezones. For Lunar New Year, the start and end dates are automatically calculated and the holiday's duration is set in the game's ``Status.json`` file.\n\n.. note:: Some assets only support a few of the game's recognized holidays. Notably: Landscape Material Assets only support Halloween, Christmas, and April Fools' Day.\n\nEnumerators\n```````````\n\n.. list-table::\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n     - Duration\n   * - ``None``\n     - Represents no holiday or seasonal event.\n     -\n   * - ``Halloween``\n     - Corresponds to the `Halloween <https://en.wikipedia.org/wiki/Halloween>`_ holiday.\n     - October 20, 2025 (00:00) – November 1, 2025 (12:00)\n   * - ``Christmas``\n     - Corresponds to the `Christmas <https://en.wikipedia.org/wiki/Christmas>`_ holiday, and other holidays within the festive season.\n     - December 7, 2025 (00:00) – January 2, 2026 (12:00)\n   * - ``April_Fools``\n     - Corresponds to the `April Fools' Day <https://en.wikipedia.org/wiki/April_Fools%27_Day>`_ holiday.\n     - April 1, 2025 (00:00) – April 1, 2025 (23:59:59)\n   * - ``Valentines``\n     - Corresponds to the `Valentine's Day <https://en.wikipedia.org/wiki/Valentine%27s_Day>`_ holiday.\n     - February 14, 2025 (00:00) – February 14, 2025 (23:59:59)\n   * - ``Pride_Month``\n     - Corresponds to `Pride Month <https://en.wikipedia.org/wiki/Pride_Month>`_, a month-long observance in June.\n     - June 1, 2025 (00:00) – June 30, 2025 (23:59:59)\n   * - ``Lunar_New_Year``\n     - Corresponds to the `Lunar New Year <https://en.wikipedia.org/wiki/Lunar_New_Year>`_ holiday.\n     - Varies based on the Chinese calendar, being calculated as the day *before* Lunar New Year to 15 days *after* Lunar New Year. For example: January 28, 2025 (00:00) – February 13, 2025 (23:59:59).\n   * - ``Unturned_Anniversary``\n     - Corresponds to the game's anniversary on Steam.\n     - July 7, 2025 (00:00) – July 7, 2025 (23:59:59)\n   * - ``Max``\n     - Only used/implemented in the game's source code – no practical use for game assets.\n     -\n"
  },
  {
    "path": "data/enum/eobjectchart.rst",
    "content": ".. _doc_data_eobjectchart:\n\nEObjectChart\n============\n\nThe EObjectChart enumerated type is used to determine the how an asset should appear when generating a map's chart view. Most of the enumerators corresponds to a specific pixel coordinate on either the Height_Strip or Layer_Strip of a map's :ref:`Charts.unity3d file <doc_mapping_charts>`.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n   \n   * - Named Value\n     - Description\n   * - ``None``\n     - Use the default for this asset.\n   * - ``Ground``\n     - Use (20, 0) from the Height_Strip.\n   * - ``Ignore``\n     - Skip this asset, and use whatever is underneath.\n   * - ``Highway``\n     - Use (0, 0) from the Layer_Strip.\n   * - ``Street``\n     - Use (1, 0) from the Layer_Strip.\n   * - ``Road``\n     - Use (2, 0) from the Layer_Strip.\n   * - ``Path``\n     - Use (3, 0) from the Layer_Strip.\n   * - ``Large``\n     - Use (15, 0) from the Layer_Strip.\n   * - ``Medium``\n     - Use (16, 0) from the Layer_Strip.\n   * - ``Water``\n     - Use (0, 0) from the Height_Strip.\n   * - ``Cliff``\n     - Use (4, 0) from the Layer_Strip."
  },
  {
    "path": "data/enum/eobjecttype.rst",
    "content": ".. _doc_data_eobjecttype:\n\nEObjectType\n===========\n\nThe EObjectType enumerated type consists of all the possible object types.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 20 10 70\n   :header-rows: 1\n\n   * - Named Value\n     - Index\n     - Description\n   * - ``Large``\n     - 0\n     - Corresponds to the \"Large\" object type.\n   * - ``Medium``\n     - 1\n     - Corresponds to the \"Medium\" object type.\n   * - ``Small``\n     - 2\n     - Corresponds to the \"Small\" object type.\n   * - ``NPC``\n     - 3\n     - Corresponds to the \"NPC\" object type.\n   * - ``Decal``\n     - 4\n     - Corresponds to the \"Decal\" object type.\n"
  },
  {
    "path": "data/enum/eslottype.rst",
    "content": ".. _doc_data_eslottype:\n\nESlotType\n=========\n\nThe ESlotType enumerated type is used for item placement in displays or on characters, and determines which item slot(s) an equippable item can be placed in. Some assets may only support using specific enumerators.\n\nEnumerators\n```````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``None``\n     - Does not correspond to any slot. Equippables can be hotkeyed.\n   * - ``Primary``\n     - Corresponds to the \"Primary\" slot. Equippables can be used from the primary slot.\n   * - ``Secondary``\n     - Corresponds to the \"Secondary\" slot. Equippables can be used from the primary or secondary slot.\n   * - ``Tertiary``\n     - Corresponds to the \"Tertiary\" slot. This is only used by NPCs.\n   * - ``Any``\n     - Corresponds to any/all item slots. Equippables can be used from any slot, or hotkeyed.\n"
  },
  {
    "path": "data/enum/index.rst",
    "content": "🗀 Enumerated Types\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/flag.rst",
    "content": ".. _doc_data_flag:\n\nFlag\n====\n\nSome asset types have properties that only look for the presence of a particular key, rather than a key-value pair. These are referred to as **flags**. Their value can be left empty, since flags do not have a value paired to them.\n\nFor example, item assets check for the ``Pro`` flag. An item asset that included this flag is marked as a Steam economy item.\n\n.. code-block:: text\n\n\tFlag1\n\tFlag2\n\tFlag3"
  },
  {
    "path": "data/guid.rst",
    "content": ".. _doc_data_guid:\n\nGUID\n====\n\nGlobally Unique Identifiers (**GUIDs**) are 32-digit hexadecimal values used to identify assets. They are preferable to file names because the files can be moved without redirectors.\n\nA useful tool for manually generating GUIDs is `guidgenerator.com <https://www.guidgenerator.com/>`_. Note that if the GUID property is omitted from an :ref:`asset definition <doc_asset_definitions>` file, then the game will automatically assign a random GUID during a successful load.\n\nLegacy IDs are 16 bits with a [0, 65535] range, whereas GUIDs are 128 bits with an unimaginably huge range. This allows them to be generated without coordination or registration between developers.\n"
  },
  {
    "path": "data/master-bundle-ptr.rst",
    "content": ".. _doc_data_masterbundleptr:\n\nMaster Bundle Pointer\n=====================\n\nIdentifies a Unity asset like a prefab, material or audio clip within a master bundle.\n\nIn \\*.asset files\n-----------------\n\n``MasterBundle``: File name of the asset bundle exported from Unity. Should match the ``Asset_Bundle_Name`` configured in the ``MasterBundle.dat`` file.\n\n``AssetPath``: File path of the Unity asset (e.g., \\*.prefab, \\*.mat, \\*.png, or \\*.ogg files). This path is relative to the ``Asset_Prefix`` path configured in the ``MasterBundle.dat`` file.\n\n.. code-block:: unturnedasset\n\t\n\t\"MyMasterBundlePtr\"\n\t{\n\t\t\"MasterBundle\" \"core.masterbundle\"\n\t\t\"AssetPath\" \"path/to/file.extension\"\n\t}\n\nIf the asset default master bundle should be used, then the path can be specified inline:\n\n.. code-block:: unturnedasset\n\t\n\t\"MyMasterBundlePtr\" \"path/to/file.extension\"\n\nAlternatively, the name of a master bundle can be prefixed to the inline path:\n\n.. code-block:: unturnedasset\n\t\n\t\"MyMasterBundlePtr\" \"core.masterbundle:path/to/file.extension\""
  },
  {
    "path": "data/rich-text.rst",
    "content": ".. _doc_data_richtext:\n\nRich Text\n=========\n\nCertain text blocks support **rich text** markup. These are tags which modify the appearance of the text for example bold, italics, colors, etc.\n\nWhich tags are supported depends on the :ref:`doc_glazier` mode being used. Most players will be using the default, uGUI.\n\nExtended Tags\n-------------\n\nThese tags are specific to *Unturned*.\n\n**\\<br\\>**: New line. Supported in most multi-line text boxes such as dialogue, signs/notes, item descriptions, etc.\n\n**\\<name_npc\\>**: Insert the NPC character's name. Only supported in NPC dialogue.\n\n**\\<name_char\\>**: Insert the player character's name. Only supported in NPC dialogue and signs/notes.\n\n**\\<pause\\>**: Pause dialogue for 0.5 seconds before continuing. Only supported in NPC dialogue.\n\nuGUI - TextMesh Pro (default)\n-----------------------------\n\nFor the full list of tags please refer to the TextMesh Pro documentation here: https://docs.unity3d.com/Packages/com.unity.textmeshpro@2.2/manual/RichText.html\n\nIMGUI\n-----\n\nFor the full list of tags please refer to the Unity styled text documentation here: https://docs.unity3d.com/2018.3/Documentation/Manual/StyledText.html\n"
  },
  {
    "path": "data/struct/index.rst",
    "content": "🗀 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",
    "content": ".. _doc_data_playerspotlightconfig:\n\nPlayerSpotLightConfig\n=====================\n\nThe PlayerSpotLightConfig struct contains properties for configuring player spot lights. Certain item assets are able to utilize these properties.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n   \n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`SpotLight_Enabled <doc_data_playerspotlightconfig:spotlight_enabled>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`SpotLight_Range <doc_data_playerspotlightconfig:spotlight_range>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``64``\n   * - :ref:`SpotLight_Angle <doc_data_playerspotlightconfig:spotlight_angle>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``90``\n   * - :ref:`SpotLight_Intensity <doc_data_playerspotlightconfig:spotlight_intensity>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.3``\n   * - :ref:`SpotLight_Color <doc_data_playerspotlightconfig:spotlight_color>`\n     - :ref:`color <doc_data_color>`\n     - ``#f5df93``\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_data_playerspotlightconfig:spotlight_enabled:\n\nSpotLight_Enabled :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, this item should have a toggleable light source.\n\n----\n\n.. _doc_data_playerspotlightconfig:spotlight_range:\n\nSpotLight_Range :ref:`float32 <doc_data_builtin_types>` ``64``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nRange of the light source's beam, measured in meters.\n\n----\n\n.. _doc_data_playerspotlightconfig:spotlight_angle:\n\nSpotLight_Angle :ref:`float32 <doc_data_builtin_types>` ``90``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAngle of the light source's beam, measured in degrees.\n\n----\n\n.. _doc_data_playerspotlightconfig:spotlight_intensity:\n\nSpotLight_Intensity :ref:`float32 <doc_data_builtin_types>` ``1.3``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIntensity of the light source's beam.\n\n----\n\n.. _doc_data_playerspotlightconfig:spotlight_color:\n\nSpotLight_Color :ref:`color <doc_data_color>` ``#f5df93``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nColor of the light source's beam."
  },
  {
    "path": "data/vector3.rst",
    "content": ".. _doc_data_vector3:\n\nVector3\n=======\n\n**Vector3** (or \"3D vectors\") can either be parsed as a single value containing three :ref:`floats <doc_data_builtin_types>` (optionally surrounded by parenthesis), or from a dictionary with ``X``, ``Y``, and ``Z`` keys.\n\nFor example, all three of these would be valid 3D vectors:\n\n.. code-block:: text\n\t\n\tPosition 1, 2, 3\n\tOffset (4, 5, 6)\n\tScale\n\t{\n\t\tX 7\n\t\tY 8\n\t\tZ 9\n\t}\n\nLegacy Parsing\n--------------\n\nSome older properties have support for the vector3 data type, but can alternatively be written using the legacy method of three separate :ref:`float32 <doc_data_builtin_types>` properties. Namely,  the ``LOD_Center``, ``LOD_Size``, ``Explosion_Min_Force``, ``Explosion_Max_Force``, and ``Center_Of_Mass`` properties have support for both.\n\nFor example, this would be valid for an older property that supports the legacy format:\n\n.. code-block:: text\n\t\n\tLOD_Size_X 0\n\tLOD_Size_Y -12\n\tLOD_Size_Z -1"
  },
  {
    "path": "img/WorkshopMapIDs.csv",
    "content": "Workshop Map,File ID\nA6 Polaris,2898548949\nAthens Arena,1454125991\nArid,2683620106\nBelgium,1727125581\nBuak,3000549606\nBunker Arena,1257784170\nCalifornia,1905768396\nCalifornia2,3707778928\nCanyon Arena,1850209768\nCarpat,1497352180\nCyprus Arena,1647991167\nCyprus Survival,1647986053\nDango,1850228333\nEaster Island,1983200271\nEscalation,3251926587\nElver,2136497468\nFrance,1975500516\nGreece,1702240229\nHawaii,1753134636\nHawaii Assets,1753131903\nIreland,1411633953\nKuwait,2483365750\nPEI Arena,2396897717\nRio de Janeiro,3416057692\nRio de Janeiro (Original),1821848824\nWashington Arena,2404652624\n"
  },
  {
    "path": "index.rst",
    "content": "Unturned Documentation\n======================\n\n.. Below is the table-of-content tree for the website,\n\twhich is hidden from the page but appears in the sidebar.\n\t...\n\tThe toctree is located at the top of this file, so that\n\tchapters are generated properly for the offline downloads.\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: About\n\n\tabout/getting-started\n\tabout/launch-options\n\tabout/steam-workshop\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Introduction to Modding\n\n\tassets/asset-bundles\n\tassets/asset-definitions\n\tassets/data-file-format\n\tassets/asset-validation\n\tassets/asset-bundle-custom-data\n\tassets/curated-items\n\tassets/animation\n\tassets/layers\n\tassets/mod-hooks\n\tassets/unity-upgrade\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Creating Items\n\t:glob:\n\n\titems/introduction\n\titems/blueprints\n\titems/actions\n\titems/*\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Creating Vehicles\n\n\tassets/vehicle-asset\n\tassets/vehicle-physics-profile-asset\n\tassets/vehicle-redirector-asset\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Creating Objects\n\t:glob:\n\n\tassets/object-asset\n\tassets/material-palette-asset\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: NPCs and Logic\n\t:glob:\n\n\tnpcs/introduction\n\tnpcs/npc-asset\n\tnpcs/dialogue-asset\n\tnpcs/quest-asset\n\tnpcs/vendor-asset\n\tnpcs/conditions\n\tnpcs/rewards\n\tnpcs/rewards-list-asset\n\tnpcs/currency-asset\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Creating Miscellaneous Assets\n\n\tassets/airdrop-asset\n\tassets/animal-asset\n\tassets/character-mesh-replacement\n\tassets/crafting-asset\n\tassets/crafting-blacklist-asset\n\tassets/effect-asset\n\tassets/foliage-asset\n\tassets/road-asset\n\tassets/level-asset\n\tassets/mythical-asset\n\tassets/outfit-asset\n\tassets/physics-material-asset\n\tassets/redirector-asset\n\tassets/resource-asset\n\tassets/server-browser-curation-asset\n\tassets/spawn-asset\n\tassets/stereo-song-asset\n\tassets/tag-asset\n\tassets/weather-asset\n\tassets/zombie-difficulty-asset\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Mapping\n\n\tmapping/charts\n\tmapping/curated-maps\n\tmapping/editor-asset-redirectors\n\tmapping/favorite-searches\n\tmapping/level-batching\n\tmapping/level-config\n\tmapping/manual-object-culling\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Servers & Programming\n\n\t★ Setting up a Server <servers/server-hosting>\n\t★ Using SteamCMD (Advanced Setup) <servers/steamcmd>\n\t★ Server Hosting Rules <servers/server-hosting-rules>\n\n\tservers/bookmark-host\n\tservers/command-io\n\tservers/debugging-exceptions\n\tservers/dedicated-workshop-update-monitor\n\tservers/fake-ip\n\tservers/game-server-login-tokens\n\tservers/glazier\n\tservers/openmod\n\tservers/port-forwarding\n\tservers/rocket\n\tservers/server-auto-restart\n\tservers/server-browser-curation\n\tservers/server-codes\n\tservers/server-configuration\n\tservers/server-update-notifications\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: Data Types\n\n\tdata/built-in-types\n\n\tdata/asset-ptr\n\tdata/bitmask\n\tdata/color\n\tdata/enum/index\n\tdata/flag\n\tdata/guid\n\tdata/master-bundle-ptr\n\tdata/rich-text\n\tdata/struct/index\n\tdata/vector3\n\n.. toctree::\n\t:hidden:\n\t:maxdepth: 1\n\t:caption: SDG / Project Info\n\t:glob:\n\n\tsdg/source-code\n\tsdg/using-git\n\tsdg/unity-project\n\tsdg/*\n\nWelcome to the official documentation for `Unturned <https://store.steampowered.com/app/304930>`_'s modding and server hosting features! To navigate, use the table of contents in the sidebar or the search function in the top-left corner.\n\nUpcoming Features\n-----------------\n\nYou can find modding features under consideration on this Trello board: `Unturned Roadmap <https://trello.com/b/gpe4zlW3/unturned-roadmap>`_. The cards on the board aren't ordered in any particular way. i.e., they do not dictate the order of updates.\n\nMiscellaneous requests and tasks that may pop up take priority over the roadmap, so it may go a while between progress updates. Several high-priority ideas that don't yet have a solid plan, like a crafting revamp, are not listed on the board.\n\nLegacy Tutorials\n----------------\n\nOur earliest modding documentation was available through Steam Guides. Although most of these guides have been superseded by our documentation here, some still contain useful information about Unity setup that we have yet to bring over. The useful guides are:\n\n- `Items <https://steamcommunity.com/sharedfiles/filedetails/?id=470771503>`_: Most of the sub-sections about Unity setup are still relevant.\n- `Vehicles <https://steamcommunity.com/sharedfiles/filedetails/?id=470772671>`_: Information about Unity setup.\n- `Objects <https://steamcommunity.com/sharedfiles/filedetails/?id=470771210>`_: Information about Unity setup.\n- `Misc. Assets <https://steamcommunity.com/sharedfiles/filedetails/?id=481212147>`_: Unity setup for animals, effects, and resources.\n- `Maps <https://steamcommunity.com/sharedfiles/filedetails/?id=470770384>`_: Explaining various features.\n- `Localization <https://steamcommunity.com/sharedfiles/filedetails/?id=470770864>`_\n- `Creating 3rd-party Modules <https://steamcommunity.com/sharedfiles/filedetails/?id=790629631>`_: Not to be confused with *mods* or *plugins*.\n- `Uploading Mods to the Steam Workshop <https://steamcommunity.com/sharedfiles/filedetails/?id=460136012>`_\n- `Upgrading from Unity 5 LTS to Unity 2017 LTS <https://steamcommunity.com/sharedfiles/filedetails/?id=1624005178>`_: Only relevant for *very* old mods, but lists the important changes between those two versions.\n\nThere are several official video tutorials available, but many of these have gradually become outdated. They do not accurately represent the current modding features available, or may contain incorrect information, but are listed here for completeness:\n\n- `Hosting a Dedicated Server on Windows <https://www.youtube.com/watch?v=8axVrnSLlx4>`_\n- `Uploading Skins to the Curated Workshop <https://www.youtube.com/watch?v=rF4YvEuxse8>`_\n- `Creating Custom Songs <https://www.youtube.com/watch?v=wXpk7o9Dr4k>`_\n- `Quick Overview of First Version of Foliage Upgrade <https://www.youtube.com/watch?v=VVt2bRcAWv4>`_\n- `Devkit 101 + Landscapes Overview <https://www.youtube.com/watch?v=fkljCH419ug>`_\n- `Spawn Tables <https://www.youtube.com/watch?v=7Aiz7utMx8g>`_\n- `Building Models <https://www.youtube.com/watch?v=rAZ9KEGjSUk>`_\n\nIf you refer to a video tutorial (official or otherwise), we recommend double-checking the information with our written documentation when possible.\n\nOffline Downloads\n-----------------\n\nPDF and Epub versions of the documentation can be `downloaded <https://readthedocs.org/projects/unturned/downloads/>`_ for offline use.\n\nContributing\n------------\n\nAnyone can contribute towards the *Unturned* modding documentation! To submit an issue, visit the `GitHub repository <https://github.com/SmartlyDressedGames/Unturned-Docs>`_. See the `README <https://github.com/SmartlyDressedGames/Unturned-Docs#readme>`_ for more details on how to contribute.\n"
  },
  {
    "path": "items/actions.rst",
    "content": ".. _doc_item_asset_actions:\n\nActions\n=======\n\nContext actions appear when a player right-clicks an item from their inventory menu. Some items may have set a of automatically-generated context actions, but additional context actions can be added to any item. The system currently supports adding additional :ref:`blueprint <doc_item_asset_blueprints>` actions.\n\nDepending on an item's configuration, the game may automatically add context actions for various actions.\n\nGame Data File\n--------------\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Action_#_Blueprint_#_Index <doc_item_asset_actions:action_blueprint_index>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Action_#_Blueprint_#_Name <doc_item_asset_actions:action_blueprint_name>`\n     - :ref:`string <doc_data_builtin_types>`\n     - ``\"\"``\n   * - :ref:`Action_#_Blueprint_#_Link <doc_item_asset_actions:action_blueprint_link>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Action_#_Blueprints <doc_item_asset_actions:action_blueprints>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Action_#_Key <doc_item_asset_actions:action_key>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Action_#_Source <doc_item_asset_actions:action_source>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Action_#_Text <doc_item_asset_actions:action_text>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Action_#_Tooltip <doc_item_asset_actions:action_tooltip>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Action_#_Type <doc_item_asset_actions:action_type>`\n     - :ref:`EActionType <doc_item_asset_actions:eactiontype>`\n     -\n   * - :ref:`Actions <doc_item_asset_actions:actions>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n\n.. _doc_item_asset_actions:eactiontype:\n\nEActionType Enumeration\n```````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``Blueprint``\n     - Action is linked a crafting blueprint.\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_actions:action_blueprint_index:\n\nAction_#_Blueprint_#_Index :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIndex of the blueprint that action should perform.\n\n.. note:: ``Action_#_Blueprint_#_Name`` should be used instead of ``Action_#_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.\n\n----\n\n.. _doc_item_asset_actions:action_blueprint_name:\n\nAction_#_Blueprint_#_Name :ref:`string <doc_data_builtin_types>` ``\"\"``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nName of the blueprint that action should perform. This requires specifying a ``Name`` in the blueprint, however.\n\n----\n\n.. _doc_item_asset_actions:action_blueprint_link:\n\nAction_#_Blueprint_#_Link :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAction should redirect to the associated blueprint listing in the crafting menu, rather than immediately craft the item.\n\n----\n\n.. _doc_item_asset_actions:action_blueprints:\n\nAction_#_Blueprints :ref:`uint8 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTotal number of blueprint indices.\n\n----\n\n.. _doc_item_asset_actions:action_key:\n\nAction_#_Key :ref:`string <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTranslation key that should be used instead of a custom button name and tooltip. Valid translation keys and their localization can be found in the ``PlayerDashboardInventory.dat`` localization file.\n\nValid keys include: ``Attachments``, ``Craft_Bandage``, ``Craft_Dressing``, ``Craft_Rag``, ``Craft_Seed``, ``Dequip``, ``Drop``, ``Equip``, ``Pickup``, ``Refill``, ``Repair``, ``Salvage``, ``Stack``, ``Store``, ``Take``, and ``Unstack``.\n\nThis property cannot be used in combination with ``Action_#_Text`` or ``Action_#_Tooltip``. If set, the value of this property will always override any custom button name or tooltip that has been set.\n\n----\n\n.. _doc_item_asset_actions:action_source:\n\nAction_#_Source :ref:`uint16 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nID of the item to source actions from. Default source is the current item.\n\n----\n\n.. _doc_item_asset_actions:action_text:\n\nAction_#_Text :ref:`string <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nContext button name. If a key matching this value exists in the per-item localization file then that text is shown, otherwise this value is shown as-is.\n\nThis property is usually used in combination with ``Action_#_Tooltip``.\n\n----\n\n.. _doc_item_asset_actions:action_tooltip:\n\nAction_#_Tooltip :ref:`string <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nContext button tooltip. If a key matching this value exists in the per-item localization file then that tooltip is shown, otherwise this value is shown as-is.\n\nThis property is usually used in combination with ``Action_#_Text``.\n\n----\n\n.. _doc_item_asset_actions:action_type:\n\nAction_#_Type :ref:`EActionType <doc_item_asset_actions:eactiontype>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nType of action to perform. Currently, only the ``Blueprint`` action type exists.\n\n----\n\n.. _doc_item_asset_actions:actions:\n\nActions :ref:`int <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::\n\nTotal number of context actions.\n\nDefault Actions\n---------------\n\nDepending on the blueprints an item has, some blueprint actions may be automatically added to the item as well. These actions will be linked to the blueprint they were automatically generated from.\n\n- When a blueprint only has one supply, with a supply ID of the item itself, an action using the ``Salvage`` localization key is generated.\n- When a blueprint uses the ``Repair`` type, an action using the ``Repair`` localization key is generated.\n- When a blueprint uses the ``Refill`` type, an action using the ``Refill`` localization key is generated.\n"
  },
  {
    "path": "items/arrest-end-asset.rst",
    "content": ".. _doc_item_asset_arrest_end:\n\nArrest End Assets\n=================\n\nThe ItemArrestEndAsset class is used for \"releaser\" items, which can remove a corresponding \":ref:`catcher <doc_item_asset_arrest_start>`\" item that is restraining a player. An example of a vanilla releaser is the `Handcuffs Key <https://unturned.wiki.gg/wiki/Handcuffs_Key>`_.\n\nGame Data File\n--------------\n\nReleasers inherit properties from the :ref:`ItemAsset <doc_item_asset_intro>` class. Any properties from parent classes that are required are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n   \n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Arrest_End``\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Useable <doc_item_asset_intro:useable>`\n     - ``Arrest_End``\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n   \n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Recover <doc_item_asset_arrest_end:recover>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_arrest_end:recover:\n\nRecover :ref:`uint16 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a corresponding :ref:`catcher <doc_item_asset_arrest_start>` item that can be unlocked with this item."
  },
  {
    "path": "items/arrest-start-asset.rst",
    "content": ".. _doc_item_asset_arrest_start:\n\nArrest Start Assets\n===================\n\nThe ItemArrestStartAsset class is used for \"catcher\" items, which can restrain a player. Its sister item, the \":ref:`releaser <doc_item_asset_arrest_start>`\", can be used to unlock restraints. Some examples of vanilla catchers include the `Handcuffs <https://unturned.wiki.gg/wiki/Handcuffs>`_ and `Cable Tie <https://unturned.wiki.gg/wiki/Cable_Tie>`_.\n\nGame Data File\n--------------\n\nCatchers inherit properties from the :ref:`ItemAsset <doc_item_asset_intro>` class. Any properties from parent classes that are required are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n   \n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Arrest_Start``\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Useable <doc_item_asset_intro:useable>`\n     - ``Arrest_Start``\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n   \n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Strength <doc_item_asset_arrest_start:strength>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_arrest_start:strength:\n\nStrength :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nNumber of times a player must lean in order to break free from their restraints."
  },
  {
    "path": "items/backpack-asset.rst",
    "content": ".. _doc_item_asset_backpack:\n\nBackpack Assets\n===============\n\nBackpacks are created from the ItemBackpackAsset class. They can be worn by players and zombies, and occupy the player's \"backpack\" slot.\n\nGame Data File\n--------------\n\nThe ItemBackpackAsset class inherits properties from the :ref:`ItemBagAsset <doc_item_asset_bag>` class. Properties that are required (or recommended) are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n\n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Backpack``\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Useable <doc_item_asset_intro:useable>`\n     - ``Clothing``\n\nSome inherited properties behave differently when used by this class. Notably, these are:\n\n#. | :ref:`Armor <doc_item_asset_clothing:armor>` (from :ref:`ItemClothingAsset <doc_item_asset_clothing>`). Backpacks do not cover any body part(s) when worn, so this property has no effect.\n\n#. | :ref:`InventoryAudio <doc_item_asset_intro:inventoryaudio>` (from :ref:`ItemAsset <doc_item_asset_intro>`). Defaults to ``Sounds/Inventory/LightMetalEquipment.asset`` when :ref:`Width <doc_item_asset_bag:width>` or :ref:`Height <doc_item_asset_bag:height>` are less than ``3``. To ``Sounds/Inventory/MediumMetalEquipment.asset`` when less than ``6``. Otherwise, to ``Sounds/Inventory/HeavyMetalEquipment.asset``.\n\nProperties\n``````````\n\nBackpacks have no unique properties. Refer to parent classes for additional properties instead."
  },
  {
    "path": "items/bag-asset.rst",
    "content": ".. _doc_item_asset_bag:\n\nBag Assets\n==========\n\nThe ItemBagAsset class is a base class that other classes are derived from. It is unusable on its own.\n\nGame Data File\n--------------\n\nThe ItemBagAsset class inherits properties from the :ref:`ItemClothingAsset <doc_item_asset_clothing>` class.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n   \n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Height <doc_item_asset_bag:height>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Width <doc_item_asset_bag:width>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_bag:height:\n\nHeight :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nNumber of rows (vertical storage space).\n\n----\n\n.. _doc_item_asset_bag:width:\n\nWidth :ref:`uint8 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::\n\nNumber of columns (horizontal storage space)."
  },
  {
    "path": "items/barrel-asset.rst",
    "content": ".. _doc_item_asset_barrel:\n\nBarrel Assets\n=============\n\nBarrels (or \"barrel attachments\") are created from the ItemBarrelAsset class. Barrel attachments are inventory items that can be attached to ranged weapons.\n\nThis inherits the :ref:`CaliberAsset <doc_item_asset_caliber>` class.\n\nGame Data File\n--------------\n\nBarrel attachments inherit properties from the CaliberAsset class, which in turn inherits properties from the ItemAsset class. Properties that are required to be included are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n\n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Barrel``\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Braked <doc_item_asset_barrel:braked>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Durability <doc_item_asset_barrel:durability>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Gunshot_Rolloff_Distance_Multiplier <doc_item_asset_barrel:gunshot_rolloff_distance_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Silenced <doc_item_asset_barrel:silenced>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Volume <doc_item_asset_barrel:volume>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_barrel:ballistic_drop:\n\nBallistic_Drop :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\n.. note:: Moved to :ref:`Caliber Asset <doc_item_asset_caliber:ballistic_drop>`.\n\n----\n\n.. _doc_item_asset_barrel:braked:\n\nBraked :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::\n\nMuzzle flash should be hidden.\n\n----\n\n.. _doc_item_asset_barrel:durability:\n\nDurability :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAmount of quality lost after each firing of the ranged weapon. When this value is greater than ``0``, the item always has a visible item quality shown.\n\n----\n\n.. _doc_item_asset_barrel:gunshot_rolloff_distance_multiplier:\n\nGunshot_Rolloff_Distance_Multiplier :ref:`float32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on gunshot rolloff distance. Defaults to ``0.5`` if ``Silenced``, otherwise to ``1``.\n\n----\n\n.. _doc_item_asset_barrel:silenced:\n\nSilenced :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::::\n\nAlerts should not be generated when firing.\n\n----\n\n.. _doc_item_asset_barrel:volume:\n\nVolume :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on gunfire sound volume. This is often used alongside with ``Silenced``, but doing so is not required.\n"
  },
  {
    "path": "items/barricade-asset.rst",
    "content": ".. _doc_item_asset_barricade:\n\nBarricade Assets\n================\n\nBarricades are created from the ItemBarricadeAsset class. They can be placed by players or in the level editor.\n\nThis inherits the :ref:`PlaceableAsset <doc_item_asset_placeable>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Barricade``): When intending to use a child class, refer to that class's documentation instead for the proper enumerator to use.\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Barrel_Rain``, ``Barricade``, ``Barricade_Wall``, ``Beacon``, ``Bed``, ``Cage``, ``Campfire``, ``Charge``, ``Claim``, ``Clock``, ``Door``, ``Farm``, ``Fortification``, ``Freeform``, ``Gate``, ``Generator``, ``Glass``, ``Hatch``, ``Ladder``, ``Library``, ``Mannequin``, ``Note``, ``Oil``, ``Oven``, ``Oxygenator``, ``Safezone``, ``Sentry_Freeform``, ``Sentry``, ``Shutter``, ``Sign_Wall``, ``Sign``, ``Spike``, ``Spot``, ``Stereo``, ``Storage_Wall``, ``Storage``, ``Tank``, ``Torch``, ``Vehicle``, ``Wire``): Some values may not function properly without using a child class instead. When intending to use a child class, refer to that class's documentation instead for the proper enumerator to use.\n\n**ID** *uint16*: Must be a unique identifier.\n\n**InventoryAudio** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: See :ref:`ItemAsset <doc_item_asset_intro>` for full documentation. Defaults to ``Sounds/Inventory/Seeds.asset`` if the name contains the word \"Seed\", to ``Sounds/Inventory/SmallMetal.asset`` if the name contains the word \"Metal\", to ``Sounds/Inventory/LightMetalEquipment.asset`` if either ``Size_X`` or ``Size_Y`` value is equal to 1, to ``Sounds/Inventory/MediumMetalEquipment.asset`` if either ``Size_X`` or ``Size_Y`` value is less than or equal to 2, or ``Sounds/Inventory/HeavyMetalEquipment.asset`` if none of the criteria is met.\n\nBarricade Asset Properties\n--------------------------\n\n**Allow_Collision_While_Animating** *bool*: Whether or not animated interactables should have collision during their animation. If true, animated colliders are enabled while playing the animation even when a player is overlapping. Be wary when enabling this, as it can allow for physics-based exploits such as those involving doors. Defaults to false.\n\n**Allow_Placement_Inside_Clip_Volumes** *bool*: If true, the barricade can be placed inside of player clip volumes. Defaults to false, except when using ``Build Charge``.\n\n**Allow_Placement_On_Vehicle** *bool*: If true, this barricade can be placed on vehicles. Defaults to true, except when using ``Build Bed``, ``Build Sentry``, or ``Build Sentry_Freeform``.\n\n.. note:: ``Armor_Falloff*`` properties are applicable to Animals, Objects, Resources, Structures, and Vehicles as well. (TODO: move into their own doc?)\n\n**Armor_FalloffMaxRange** *float*: Ranged damage (guns) from greater than this distance finishes decreasing toward ``Armor_FalloffMultiplier``. Defaults to -1, in which case armor falloff is ignored.\n\n**Armor_FalloffRange** *float*: Ranged damage (guns) from greater than this distance begins decreasing toward ``Armor_FalloffMultiplier``. Defaults to ``Armor_FalloffMaxRange`` (immediate decrease, no transition).\n\n**Armor_FalloffMultiplier** *float*: [0, 1] normalized percentage of incoming damage to apply past ``Armor_FalloffMaxRange``.\n\n**Armor_Tier** *enum* (``Low``, ``High``): Barricade armor can either be low-tier or high-tier. Defaults to low-tier, except when the barricade's name contains the word \"Metal\". By default, barricades with low-tier armor take 100% of the damage they receive, while barricades with high-tier armor take 50% of the damage they receive. These multipliers can be configured in the `gameplay config <https://unturned.wiki.gg/wiki/Gameplay_config>`_.\n\n**Bypass_Claim** *bool*: When ``true``, this can be placed inside someone else's claimed area. This property used to be a *flag*, and using it as such is still supported. Defaults to false, except when using ``Build Charge``.\n\n**Bypass_Pickup_Ownership** *bool*: If true, non-owners of the placed barricade can pick it up. Defaults to false, except when using ``Build Charge``.\n\n**Can_Be_Damaged** *bool*: If true, this barricade can be damaged. Defaults to true.\n\n**CanVehicleHookWhileAttached** *bool*: By default, vehicles with \"hooks\" (such as the Skycrane) cannot pick up vehicles with barricades attached. If all barricades on the vehicle set this to ``true`` then the vehicle *can* be picked up. Defaults to ``false``.\n\n.. warning:: In the 3.24.7.0 update notes **CanVehicleHookWhileAttached** was mistakenly referred to as **CanParentVehicleBePickedUp**. In the next update both properties will work, but for the meantime **CanVehicleHookWhileAttached** should be used instead.\n\n**Can_Zombies_Target** *bool*: If true, this item is eligible for zombies to detect and attack when stuck. Defaults to true.\n\n**Eligible_For_Pooling** *bool*: If true, this barricade is eligible for object pooling. Some barricades may not reset properly when pooling is enabled. Defaults to true, except when using ``Build Beacon``.\n\n**Explosion** :ref:`GUID <doc_data_guid>` or *uint16*: GUID or legacy ID of :ref:`EffectAsset <doc_assets_effect>` to play when destroyed. When using ``Build Vehicle``, this is instead the GUID or legacy ID of the vehicle that should be spawned.\n\n**Has_Clip_Prefab** *bool*: Whether or not the barricade has a Clip.prefab. If the barricade 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.\n\n**Health** *uint16*: Total health value. Defaults to 0.\n\n**Locked** *flag*: Only the placed barricade's owner(s) can interact with it.\n\n**Offset** *float*: In meters, the distance above the ground the barricade is placed.\n\n**PlacementAudioClip** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: AudioClip to play when the barricade is placed.\n\n**PlacementPreviewPrefab** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Overrides the placement preview model spawned when this item is held.\n\n**Proof_Explosion** *flag*: Immune to area-of-effect explosive damage.\n\n**Radius** *float*: In meters, the radius around the barricade the must be clear in order for it to be placeable.\n\n**Range** *float*: In meters, the maximum distance away the barricade can be placed from the player.\n\n**RequiresHeatSourceCraftingTagConversion** *bool*: Applicable to ``Oven``, ``Torch``, and ``Campfire`` Build types. Defaults to true. Performs the following modifications during load for backwards compatibility:\n\n#. Adds the vanilla Heat Source tag (``20f30322bbcc4b01a4f116d22b24c21a``) to PlaceableProvidesCraftingTags if empty.\n#. Adds a Crafting Tag Modifier component to the Fire child game object with Mode Remove, Activation Requirement Invert, and Tag ``20f30322bbcc4b01a4f116d22b24c21a``. This removes the Heat Source tag when Fire is inactive.\n#. Adds a Crafting Tag Provider component to the Barricade game object with Modifiers set to the component added to Fire.\n\n**Salvage_Duration_Multiplier** *float*: Multiplier on how long it takes to salvage this barricade. Setting this to a larger number will cause salvaging to take longer. Defaults to 1.\n\n**Unpickupable** *flag*: Disables the ability to pick up a placed barricade. For example, the `Horde Beacon <https://unturned.wiki.gg/wiki/Horde_Beacon>`_ uses this flag.\n\n**Unrepairable** *flag*: Cannot be repaired by a :ref:`MeleeAsset <doc_item_asset_melee>` with the ``Repair`` flag. For example, the `Blowtorch <https://unturned.wiki.gg/wiki/Blowtorch>`_ would not be able to repair this barricade.\n\n**Unsalvageable** *flag*: Salvaging a damaged barricade yields no partial resources. For example, `small glass plates <https://unturned.wiki.gg/wiki/Small_Glass_Plate>`_ use this flag.\n\n**Unsaveable** *flag*: This barricade is excluded from being saved. For example, carepackages use this flag.\n\n**Use_Water_Height_Transparent_Sort** *flag*: Useful for transparent barricades, such as glass.\n\n**Vulnerable** *flag*: The barricade can be damaged by lower-power weapons that do not have the ``Invulnerable`` flag.\n"
  },
  {
    "path": "items/beacon-asset.rst",
    "content": ".. _doc_item_asset_beacon:\n\nBeacon Assets\n=============\n\nBeacons are created from the ItemBeaconAsset class. Placing the beacon will start a zombie horde event, which can be completed by killing a predetermined number of zombies before the beacon is destroyed.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Beacon``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Beacon``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nBeacon Asset Properties\n-----------------------\n\n**Wave** *uint16*: Number of zombies that must be killed to complete the beacon. If there are not enough zombies in the area for the horde event to be completed, zombies will respawn continuously. The final zombie spawned by a horde event is guaranteed to be a Mega Zombie. Defaults to 0.\n\n**Rewards** *byte*: Number of items to drop upon successfully completing the beacon. When using ``Enable_Participant_Scaling true``, the number of rewards will scale based on the number of participants. Defaults to 0.\n\n**Reward_ID** *uint16*: Legacy ID of the spawn table to use for the rewarded items. Defaults to 0.\n\n**Enable_Participant_Scaling** *bool*: Whether or not zombie health, and rewards dropped, should scale based on the number of players. Zombie health scales linearly, which can be represented by ``(Initial Participants) × 1.5``. Reward scaling has diminishing returns, with an equivalent formula being ``7 * sqrt(Initial Participants)``. Defaults to true.\n"
  },
  {
    "path": "items/blueprints.rst",
    "content": ".. _doc_item_asset_blueprints:\n\nBlueprints\n==========\n\nBlueprints can be added to items. These function as \"crafting recipes\", which allow players to craft other items, or even modify the state of the current item. Blueprints are not restricted to affecting the item they have been added to, and a blueprint's inputs and outputs can consist entirely of unrelated items.\n\n:ref:`Context actions <doc_item_asset_actions>` are able to reference blueprints. Depending on the type of blueprint added to the item, the game may automatically generate a corresponding context action as well.\n\nGame Data File\n--------------\n\nThe ``Blueprints``, ``Blueprint_#_Type``, ``Blueprint_#_Supplies``, and ``Blueprint_#_Supply_#_ID`` properties are required by all blueprints. Blueprints also require that an output has been configured.\n\nThere are two methods available for configuring an output. When a blueprint only needs to output one item ID, the ``Blueprint_#_Products`` and ``Blueprint_#_Product`` properties can be used. Alternatively, blueprints can use the ``Blueprint_#_Outputs``, ``Blueprint_#_Output_#_ID``, and ``Blueprint_#_Output_#_Amount`` properties to output multiple, different item IDs.\n\nIt is very common that a blueprint will also use the ``Blueprint_#_Build``, ``Blueprint_#_Tool``, or ``Blueprint_#_Skill`` properties. Other properties for blueprints have more niche uses, and are less common.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Blueprint_#_Build <doc_item_asset_blueprints:blueprint_#_build>`\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n     -\n   * - :ref:`Blueprint_#_Level <doc_item_asset_blueprints:blueprint_#_level>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Blueprint_#_Map <doc_item_asset_blueprints:blueprint_#_map>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Blueprint_#_Origin <doc_item_asset_blueprints:blueprint_#_origin>`\n     - :ref:`doc_data_eitemorigin`\n     - ``Craft``\n   * - :ref:`Blueprint_#_Output_#_Amount <doc_item_asset_blueprints:blueprint_#_output_#_amount>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Blueprint_#_Output_#_ID <doc_item_asset_blueprints:blueprint_#_output_#_id>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Blueprint_#_Output_#_Origin <doc_item_asset_blueprints:blueprint_#_output_#_origin>`\n     - :ref:`doc_data_eitemorigin`\n     - ``Craft``\n   * - :ref:`Blueprint_#_Outputs <doc_item_asset_blueprints:blueprint_#_outputs>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Blueprint_#_Product <doc_item_asset_blueprints:blueprint_#_product>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Blueprint_#_Products <doc_item_asset_blueprints:blueprint_#_products>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Blueprint_#_Searchable <doc_item_asset_blueprints:blueprint_#_searchable>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Blueprint_#_Skill <doc_item_asset_blueprints:blueprint_#_skill>`\n     - :ref:`EBlueprintSkill <doc_item_asset_blueprints:eblueprinttype_enumeration>`\n     - ``None``\n   * - :ref:`Blueprint_#_State_Transfer <doc_item_asset_blueprints:blueprint_#_state_transfer>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Blueprint_#_State_Transfer_Delete_Attachments <doc_item_asset_blueprints:blueprint_#_state_transfer_delete_attachments>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Blueprint_#_Supplies <doc_item_asset_blueprints:blueprint_#_supplies>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Blueprint_#_Supply_#_AllowEmpty <doc_item_asset_blueprints:blueprint_#_supply_#_allowempty>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Blueprint_#_Supply_#_Amount <doc_item_asset_blueprints:blueprint_#_supply_#_amount>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Blueprint_#_Supply_#_Critical <doc_item_asset_blueprints:blueprint_#_supply_#_critical>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Blueprint_#_Supply_#_ID <doc_item_asset_blueprints:blueprint_#_supply_#_id>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     -\n   * - :ref:`Blueprint_#_Supply_#_Prioritization <doc_item_asset_blueprints:blueprint_#_supply_#_prioritization>`\n     - :ref:`enum <doc_data_flag>`\n     -\n   * - :ref:`Blueprint_#_Tool <doc_item_asset_blueprints:blueprint_#_tool>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Blueprint_#_Tool_Critical <doc_item_asset_blueprints:blueprint_#_type>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Blueprint_#_Type <doc_item_asset_blueprints:blueprint_#_tool_critical>`\n     - :ref:`EBlueprintType <doc_item_asset_blueprints:eblueprinttype_enumeration>`\n     -\n   * - :ref:`Blueprints <doc_item_asset_blueprints:blueprints>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n\n.. _doc_item_asset_blueprints:eblueprinttype_enumeration:\n\nEBlueprintType Enumeration\n``````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``Ammo``\n     - Blueprint appears in the \"Ammunition\" tab.\n   * - ``Apparel``\n     - Blueprint appears in the \"Apparel\" tab.\n   * - ``Barricade``\n     - Blueprint appears in the \"Barricades\" tab.\n   * - ``Furniture``\n     - Blueprint appears in the \"Furniture\" tab.\n   * - ``Gear``\n     - Blueprint appears in the \"Gear\" tab.\n   * - ``Repair``\n     - Blueprint appears in the \"Repair\" tab.\n   * - ``Structure``\n     - Blueprint appears in the \"Structures\" tab.\n   * - ``Supply``\n     - Blueprint appears in the \"Supplies\" tab.\n   * - ``Tool``\n     - Blueprint appears in the \"Tools\" tab.\n   * - ``Utilities``\n     - Blueprint appears in the \"Utilities\" tab.\n\n.. _doc_item_asset_blueprints:eblueprintskill_enumeration:\n\nEBlueprintSkill Enumeration\n```````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``None``\n     - No skill is required.\n   * - ``Craft``\n     - \"Crafting\" skill is required.\n   * - ``Cook``\n     - \"Cooking\" skill is required.\n   * - ``Repair``\n     - \"Engineer\" skill is required.\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_blueprints:blueprint_#_build:\n\nBlueprint_#_Build :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGUID or legacy ID of an audio effect to play upon crafting.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_level:\n\nBlueprint_#_Level :ref:`uint8 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf the blueprint requires a skill, its level must be equal to this value. This property is used in conjunction with ``Blueprint_#_Skill``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_map:\n\nBlueprint_#_Map :ref:`string <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nName of a map that this blueprint is restricted to. The blueprint will only be visible while on this map. For other maps, the blueprint is hidden from view.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_origin:\n\nBlueprint_#_Origin :ref:`doc_data_eitemorigin` ``Craft``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSet the item origin. For example, setting the origin to ``Admin`` will cause items to spawn at full quality. This property requires ``Blueprint_#_Product``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_output_#_amount:\n\nBlueprint_#_Output_#_Amount :ref:`uint8 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nQuantity of the product created. For example, a quantity value of ``2`` would create two of the item specified in ``Blueprint_#_Output_#_ID``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_output_#_id:\n\nBlueprint_#_Output_#_ID :ref:`uint16 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of an item created as a product (i.e., an output that is provided after crafting the blueprint). This property requires ``Blueprint_#_Outputs``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_output_#_origin:\n\nBlueprint_#_Output_#_Origin :ref:`doc_data_eitemorigin` ``Craft``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSet the item origin. For example, setting the origin to ``Admin`` will cause items to spawn at full quality. This property requires ``Blueprint_#_Output_#_ID``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_outputs:\n\nBlueprint_#_Outputs :ref:`uint8 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTotal number of ``Blueprint_#_Output_#_ID`` properties that have been configured.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_product:\n\nBlueprint_#_Product :ref:`uint16 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of the item created as the product (i.e., an output that is provided after crafting the blueprint). To output multiple *different* items, refer to the ``Blueprint_#_Outputs`` and ``Blueprint_#_Output_#_ID`` properties instead.\n\nWhen left unconfigured, this property will default to the value of the parent item's ``ID`` value.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_products:\n\nBlueprint_#_Products :ref:`uint8 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nQuantity of the product created. For example, a quantity value of ``2`` would create two of the item specified in ``Blueprint_#_Product``. This property requires that ``Blueprint_#_Product`` has been set.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_searchable:\n\nBlueprint_#_Searchable :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, this blueprint is visible in the search results even when the player lacks the required items. This property can be used to hide blueprints intended for debugging that are not acquirable through normal gameplay.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_skill:\n\nBlueprint_#_Skill :ref:`EBlueprintSkill <doc_item_asset_blueprints:eblueprintskill_enumeration>` ``None``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe player must have leveled the specified skill in order to craft this blueprint. When set to ``Cook``, the player will also need to be next to a heat source (such as a lit Campfire). This property is used in conjunction with ``Blueprint_#_Level``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_state_transfer:\n\nBlueprint_#_State_Transfer :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTransfer the current state of any supplies to the product, when applicable. For example, some states that can be transferred include: amount (e.g., rounds in an ammunition box), quality percentage, selected firing mode, or fuel units (e.g., from a gas can).\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_state_transfer_delete_attachments:\n\nBlueprint_#_State_Transfer_Delete_Attachments :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf ``true`` and ``State_Transfer`` is enabled, any output guns will have all of their attachments deleted.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_supplies:\n\nBlueprint_#_Supplies :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTotal number of ``Blueprint_#_Supply_#_ID`` properties that have been configured.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_supply_#_allowempty:\n\nBlueprint_#_Supply_#_AllowEmpty :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, items with an \"amount\" of zero—such as empty magazines—are treated as an amount of one. In vanilla this is used to enable salvaging empty magazines.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_supply_#_amount:\n\nBlueprint_#_Supply_#_Amount :ref:`uint8 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nQuantity of the supply required. For example, a quantity value of ``2`` would require two of the item specified in ``Blueprint_#_Supply_#_ID``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_supply_#_critical:\n\nBlueprint_#_Supply_#_Critical :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe blueprint is only visible while the player has this supply. This property requires ``Blueprint_#_Supply_#_ID``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_supply_#_id:\n\nBlueprint_#_Supply_#_ID :ref:`uint16 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of an item that is required as a supply (i.e., an input that is consumed when crafting the blueprint). This property requires ``Blueprint_#_Supplies``.\n\nThis property can also be set to a string value of ``this``, which will use the the owning item's legacy ID. Useful for salvaging blueprints to avoid accidentally writing the wrong ID.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_supply_#_prioritization:\n\nBlueprint_#_Supply_#_Prioritization :ref:`enum <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nControls which items are used first. Can be set to ``LowestAmount`` or ``LowestQuality``.\n\n- ``LowestAmount`` sorts items by their amount (e.g., number of bullets in magazine) from lowest to highest, and consumes the emptiest ones first.\n- ``LowestQuality`` sorts items by their quality from lowest (0%) to highest (100%), and consumes those nearest 0% first.\n\n``AMMO`` type blueprints default to ``LowestAmount``, otherwise defaults to ``LowestQuality``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_tool:\n\nBlueprint_#_Tool :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of an item that is required as a \"tool\" for this blueprint. This item is not consumed when the blueprint is crafted.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_tool_critical:\n\nBlueprint_#_Tool_Critical :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf the blueprint requires a tool, it will only be visible while the player has that tool. This property requires ``Blueprint_#_Tool``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_#_type:\n\nBlueprint_#_Type :ref:`EBlueprintType <doc_item_asset_blueprints:eblueprinttype_enumeration>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThis value determines which tab of the crafting menu that this blueprint appears under. All blueprints require that this has been configured.\n\n----\n\n.. _doc_item_asset_blueprints:blueprints:\n\nBlueprints :ref:`int <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTotal number of blueprints. All blueprints require that this has been configured.\n\nConditions and Rewards\n``````````````````````\n\nBlueprints can use quest conditions and rewards. A common usage is to make it so a blueprint is only available during a seasonal event. For more information, refer to the documentation for :ref:`Conditions <doc_npc_asset_conditions>` and :ref:`Rewards <doc_npc_asset_rewards>` respectively.\n\nBlueprint conditions and rewards are prefixed with ``Blueprint_#_``. For example, ``Blueprint_0_Condition_0_Type Holiday``.\n\nGame Data File v2\n-----------------\n\n.. warning:: Under construction! We might move this to a different page.\n\nThe game can auto-convert most blueprints to this new format! For more information, please refer to :ref:`the ResaveAssets launch option <doc_launch_options:resaveassets>`.\n\nStarting with version 3.25.5.0, Blueprints can be specified as a :ref:`list <doc_data_file_format>` rather than prefixing each property with ``Blueprint_#_``. For example:\n\n.. code-block:: unturneddat\n\n\tBlueprints\n\t[\n\t\t{\n\t\t\t// First blueprint properties\n\t\t}\n\t\t{\n\t\t\t// Second blueprint properties\n\t\t}\n\t]\n\nEach blueprint dictionary has the following properties:\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`CategoryTag <doc_item_asset_blueprints:blueprint_v2_categorytag>`\n     - :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_tag`\n     -\n   * - :ref:`Conditions <doc_item_asset_blueprints:blueprint_v2_conditions>`\n     - :ref:`doc_npc_asset_conditions`\n     -\n   * - :ref:`Effect <doc_item_asset_blueprints:blueprint_v2_effect>`\n     - :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_effect`\n     -\n   * - :ref:`InputItems <doc_item_asset_blueprints:blueprint_v2_inputitems>`\n     - :ref:`list <doc_data_file_format>` of :ref:`doc_item_asset_blueprints_inputitem`\n     -\n   * - :ref:`Map <doc_item_asset_blueprints:blueprint_v2_map>`\n     - :ref:`string <doc_data_builtin_types>`\n     - ``\"\"``\n   * - :ref:`Name <doc_item_asset_blueprints:blueprint_v2_name>`\n     - :ref:`string <doc_data_builtin_types>`\n     - ``\"\"``\n   * - :ref:`Operation <doc_item_asset_blueprints:blueprint_v2_operation>`\n     - :ref:`EBlueprintOperation <doc_item_asset_blueprints:eblueprintoperation_enumeration>`\n     - ``None``\n   * - :ref:`OutputItems <doc_item_asset_blueprints:blueprint_v2_outputitems>`\n     - :ref:`list <doc_data_file_format>` of :ref:`doc_item_asset_blueprints_outputitem`\n     -\n   * - :ref:`RequiresNearbyCraftingTags <doc_item_asset_blueprints:blueprint_v2_requiresnearbycraftingtags>`\n     - :ref:`list <doc_data_file_format>` of :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_tag`\n     -\n   * - :ref:`RequiresStaticTags <doc_item_asset_blueprints:blueprint_v2_requiresstatictags>`\n     - :ref:`list <doc_data_file_format>` of :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_tag`\n     -\n   * - :ref:`Rewards <doc_item_asset_blueprints:blueprint_v2_rewards>`\n     - :ref:`doc_npc_asset_rewards`\n     -\n   * - :ref:`Searchable <doc_item_asset_blueprints:blueprint_v2_searchable>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Skill <doc_item_asset_blueprints:blueprint_v2_skill>`\n     - :ref:`EBlueprintSkill <doc_item_asset_blueprints:eblueprintskill_enumeration>`\n     - ``None``\n   * - :ref:`Skill_Level <doc_item_asset_blueprints:blueprint_v2_skill_level>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`StateTransfer <doc_item_asset_blueprints:blueprint_v2_statetransfer>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`StateTransfer_DeleteAttachments <doc_item_asset_blueprints:blueprint_v2_statetransfer_deleteattachments>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Type <doc_item_asset_blueprints:blueprint_v2_type>`\n     - :ref:`EBlueprintType <doc_item_asset_blueprints:eblueprinttype_enumeration>`\n     - Deprecated.\n   * - :ref:`VisibleWithUnmetConditions <doc_item_asset_blueprints:blueprint_v2_visiblewithunmetconditions>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n\n.. _doc_item_asset_blueprints:eblueprintoperation_enumeration:\n\nEBlueprintOperation Enumeration\n```````````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``None``\n     - No special modification.\n   * - ``RepairTargetItem``\n     - Restore target item to full quality.\n   * - ``FillTargetItem``\n     - Transfer amount from first input item to target item.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_categorytag:\n\nCategoryTag :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_tag`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDetermines which category the blueprint appears under in the crafting menu. Enables the creation of custom categories.\n\nThis replaces the ``Type`` property which acted as both a hardcoded category and modified behavior of crafting.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_conditions:\n\nConditions :ref:`doc_npc_asset_conditions`\n::::::::::::::::::::::::::::::::::::::::::\n\nNPC conditions which must be met before the blueprint can be crafted.\n\n.. note:: By default, the blueprint will be hidden until all of the conditions are met. If you have configured display text for your conditions you can enable :ref:`VisibleWithUnmetConditions <doc_item_asset_blueprints:blueprint_v2_visiblewithunmetconditions>`.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_effect:\n\nEffect :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_effect`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAn effect to play upon successfully crafting.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_inputitems:\n\nInputItems :ref:`list <doc_data_file_format>` of :ref:`doc_item_asset_blueprints_inputitem`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nRequired ingredients/supplies needed to craft this blueprint.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_map:\n\nMap :ref:`string <doc_data_builtin_types>` ``\"\"``\n:::::::::::::::::::::::::::::::::::::::::::::::::\n\nName of a map that this blueprint is restricted to. The blueprint will only be visible while on this map. For other maps, the blueprint is hidden from view.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_name:\n\nName :ref:`string <doc_data_builtin_types>` ``\"\"``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOptional case-sensitive identifier in list of blueprints. Can be used, for example, to reference this blueprint from a context menu action or a list of prohibited blueprints.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_operation:\n\nOperation :ref:`EBlueprintOperation <doc_item_asset_blueprints:eblueprintoperation_enumeration>` ``None``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nControls what blueprint does with input items.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_outputitems:\n\nOutputItems :ref:`list <doc_data_file_format>` of :ref:`doc_item_asset_blueprints_outputitem`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nItems created by this blueprint.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_requiresnearbycraftingtags:\n\nRequiresNearbyCraftingTags :ref:`list <doc_data_file_format>` of :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_tag`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\n:ref:`doc_assets_tag` that must be available from nearby crafting tag providers (workstations).\n\nFor example, to require both Chemical Mixing and Workbench:\n\n.. code-block:: unturneddat\n\n\tRequiresNearbyCraftingTags\n\t[\n\t\t// Chemical Mixing\n\t\t99896da563a748148460c67b9962874f\n\n\t\t// Workbench\n\t\t7b82c125a5a54984b8bb26576b59e977\n\t]\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_requiresstatictags:\n\nRequiresStaticTags :ref:`list <doc_data_file_format>` of :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`doc_assets_tag`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSimilar to ``RequiresNearbyCraftingTags``, but only checked once during level startup.\n\nCan test for :ref:`doc_assets_level` ``Tags``. For example, rather than using the ``Map`` property to test for a level by name, the level can signal it supports a set of blueprints with a tag.\n\nVanilla makes the following tags available:\n\n.. code-block:: unturneddat\n\n\t\"73eb818d1aa044c7bb4e61b8f9b37a3c\" // Building In Safezones Allowed\n\t\"f663677b88de40ec80ff36b0c1cae544\" // Not-singleplayer\n\t\"d7bd989414644b19b3299be0c6fab5f0\" // Singleplayer\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_rewards:\n\nRewards :ref:`doc_npc_asset_rewards`\n::::::::::::::::::::::::::::::::::::\n\nNPC rewards granted when crafting this blueprint.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_searchable:\n\nSearchable :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, this blueprint is visible in the search results even when the player lacks the required items. This property can be used to hide blueprints intended for debugging that are not acquirable through normal gameplay.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_skill:\n\nSkill :ref:`EBlueprintSkill <doc_item_asset_blueprints:eblueprintskill_enumeration>` ``None``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe player must have leveled the specified skill in order to craft this blueprint. This property is used in conjunction with ``Skill_Level``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_skill_level:\n\nSkill_Level :ref:`int32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf the blueprint requires a skill, its level must be greater than or equal to this value. This property is used in conjunction with ``Skill``.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_statetransfer:\n\nStateTransfer :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTransfer the current state the first input item to the product, when applicable. For example, some states that can be transferred include: amount (e.g., rounds in an ammunition box), quality percentage, selected firing mode, or fuel units (e.g., from a gas can).\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_statetransfer_deleteattachments:\n\nStateTransfer_DeleteAttachments :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf ``true`` and ``StateTransfer`` is enabled, any output guns will have all of their attachments deleted.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_type:\n\nType :ref:`EBlueprintType <doc_item_asset_blueprints:eblueprinttype_enumeration>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nShould not be used. Type acted as both a hardcoded category and modified behavior of crafting. These have been separated into the ``CategoryTag`` and ``Operation`` properties instead.\n\n----\n\n.. _doc_item_asset_blueprints:blueprint_v2_visiblewithunmetconditions:\n\nVisibleWithUnmetConditions :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, blueprint can become visible in the crafting list even when NPC conditions are not met. This should typically only be enabled if all conditions are configured to be visible in the details panel. Otherwise, the default \"conditions unmet\" label isn't very informative for players.\n"
  },
  {
    "path": "items/blueprints_inputitem.rst",
    "content": ".. _doc_item_asset_blueprints_inputitem:\n\nBlueprint Input Items\n=====================\n\nConfiguration for a required ingredient item in a :ref:`blueprint <doc_item_asset_blueprints>`.\n\nValue Format\n------------\n\nFor straightforward cases, a simple one-liner format is supported:\n\n- {ID}\n- {ID} x {Amount}\n- this\n- this x {Amount}\n\nFor examples:\n\n.. code-block:: unturneddat\n\n\t// Canned Beans:\n\t78fefdd23def4ab6ac8301adfcc3b2d4\n\n\t// Or, using Canned Beans' legacy ID:\n\t13\n\n\t// Two cans of beans:\n\t13 x 2\n\n\t// Owning asset:\n\tthis\n\n\t// Two of owning asset:\n\tthis x 2\n\nDictionary Format\n-----------------\n\nUnlike the shorter format above, using these properties requires the ``{ }`` :ref:`dictionary <doc_data_file_format>` format. For example:\n\n.. code-block:: unturneddat\n\n\tInputItems\n\t[\n\t\t{\n\t\t\t// First input item properties\n\t\t}\n\t\t{\n\t\t\t// Second input item properties\n\t\t}\n\t]\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Amount <doc_item_asset_blueprints_inputitem:amount>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`AllowEmpty <doc_item_asset_blueprints_inputitem:allowempty>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`AllowFull <doc_item_asset_blueprints_inputitem:allowfull>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`AllowMaxQuality <doc_item_asset_blueprints_inputitem:allowmaxquality>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`CountEmptyAsOne <doc_item_asset_blueprints_inputitem:countemptyasone>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`CountingMethod <doc_item_asset_blueprints_inputitem:countingmethod>`\n     - :ref:`ECraftingInputCountingMethod <doc_item_asset_blueprints_inputitem:ecraftinginputcountingmethod_enumeration>`\n     - See description\n   * - :ref:`Critical <doc_item_asset_blueprints_inputitem:critical>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Delete <doc_item_asset_blueprints_inputitem:delete>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`ID <doc_item_asset_blueprints_inputitem:id>`\n     - :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`Item <doc_item_asset_intro>`\n     -\n   * - :ref:`Prioritization <doc_item_asset_blueprints_inputitem:prioritization>`\n     - :ref:`ECraftingInputPrioritization <doc_item_asset_blueprints_inputitem:ecraftinginputprioritization_enumeration>`\n     - See description\n\n.. _doc_item_asset_blueprints_inputitem:ecraftinginputprioritization_enumeration:\n\nECraftingInputPrioritization Enumeration\n````````````````````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``LowestAmount``\n     - Sort items with lowest \"amount\" to front of list.\n   * - ``HighestAmount``\n     - Sort items with highest \"amount\" to front of list.\n   * - ``LowestQuality``\n     - Sort items with lowest quality% to front of list.\n   * - ``HighestQuality``\n     - Sort items with highest quality% to front of list.\n\n.. _doc_item_asset_blueprints_inputitem:ecraftinginputcountingmethod_enumeration:\n\nECraftingInputCountingMethod Enumeration\n````````````````````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``TotalItems``\n     - Sum up number of items found, ignoring amount.\n   * - ``TotalAmount``\n     - Sum up \"amount\" of each item. Optionally counting zero as one.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:amount:\n\nAmount :ref:`uint8 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nQuantity of this item needed to craft the blueprint. Minimum value of one.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:allowempty:\n\nAllowEmpty :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, items with an \"amount\" of zero are included in eligible supplies. Otherwise, they are ignored (default).\n\nDefaults to ``true`` if ``CountEmptyAsOne`` is true.\n\nThis option exists primarily for the ``FillTargetItem`` operation's internal use.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:allowfull:\n\nAllowFull :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, items with an \"amount\" greather than or equal to their maximum amount are ignored. Otherwise, they are eligible (default).\n\nThis option exists primarily for the ``FillTargetItem`` operation's internal use.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:allowmaxquality:\n\nAllowMaxQuality :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, items with quality of 100% are eligible (default). Otherwise, they are ignored.\n\nThis option exists primarily for the ``RepairTargetItem`` operation's internal use.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:countemptyasone:\n\nCountEmptyAsOne :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, items with an \"amount\" of zero are included in eligible supplies as amount 1.\n\nThis option is used in vanilla for salvaging empty magazines.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:countingmethod:\n\nCountingMethod :ref:`ECraftingInputCountingMethod <doc_item_asset_blueprints_inputitem:ecraftinginputcountingmethod_enumeration>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDetermines how available amount of this input is calculated.\n\nDefaults to ``TotalItems`` unless ``Operation`` is ``FillTargetItem`` in which case ``TotalAmount`` is used.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:critical:\n\nCritical :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, the blueprint is hidden from the crafting menu if this input item is missing.\n\nUseful for blueprints that aren't relevant to the player without a specific item. For example, the first input item of a ``FillTargetItem`` blueprint is often marked ``Critical``.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:delete:\n\nDelete :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, this item is consumed when crafting the blueprint.\n\nIf false, this item is marked as a \"Tool\" in the crafting menu. (For example, a Saw item required to cut wood.)\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:id:\n\nID :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`Item Asset <doc_item_asset_intro>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThis property can also be set to a string value of ``this``, which will use the the owning asset's ID. Useful for Salvage blueprints to avoid accidentally writing the wrong ID.\n\n----\n\n.. _doc_item_asset_blueprints_inputitem:prioritization:\n\nPrioritization :ref:`ECraftingInputPrioritization <doc_item_asset_blueprints_inputitem:ecraftinginputprioritization_enumeration>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nControls which items are used first. For example, whether to use the lowest quality items first.\n\nDefaults to ``LowestQuality`` unless ``Operation`` is ``FillTargetItem`` in which case ``LowestAmount`` is used.\n"
  },
  {
    "path": "items/blueprints_outputitem.rst",
    "content": ".. _doc_item_asset_blueprints_outputitem:\n\nBlueprint Output Items\n======================\n\nConfiguration for a produced item in a :ref:`blueprint <doc_item_asset_blueprints>`.\n\nValue Format\n------------\n\nFor straightforward cases, a simple one-liner format is supported:\n\n- {ID}\n- {ID} x {Amount}\n- this\n- this x {Amount}\n\nExamples:\n\n.. code-block:: unturneddat\n\n\t// Canned Beans:\n\t78fefdd23def4ab6ac8301adfcc3b2d4\n\n\t// Or, using Canned Beans' legacy ID:\n\t13\n\n\t// Two cans of beans:\n\t13 x 2\n\n\t// Owning asset:\n\tthis\n\n\t// Two of owning asset:\n\tthis x 2\n\nDictionary Format\n-----------------\n\nUnlike the shorter format above, using these properties requires the ``{ }`` :ref:`dictionary <doc_data_file_format>` format. For example:\n\n.. code-block:: unturneddat\n\n\tOutputItems\n\t[\n\t\t{\n\t\t\t// First output item properties\n\t\t}\n\t\t{\n\t\t\t// Second output item properties\n\t\t}\n\t]\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Amount <doc_item_asset_blueprints_outputitem:amount>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`ID <doc_item_asset_blueprints_outputitem:id>`\n     - :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`Item <doc_item_asset_intro>`\n     -\n   * - :ref:`Origin <doc_item_asset_blueprints_outputitem:origin>`\n     - :ref:`doc_data_eitemorigin`\n     - ``Craft``\n\n----\n\n.. _doc_item_asset_blueprints_outputitem:amount:\n\nAmount :ref:`uint8 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nQuantity of this item created by the blueprint. Minimum value of one.\n\n----\n\n.. _doc_item_asset_blueprints_outputitem:id:\n\nID :ref:`Asset Pointer <doc_data_assetptr>` to :ref:`Item Asset <doc_item_asset_intro>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThis property can also be set to a string value of ``this``, which will use the the owning asset's ID. Useful for blueprints creating the owning asset to avoid accidentally writing the wrong ID.\n\n----\n\n.. _doc_item_asset_blueprints_outputitem:origin:\n\nOrigin :ref:`doc_data_eitemorigin` ``Craft``\n::::::::::::::::::::::::::::::::::::::::::::\n\nA kludge to override certain spawning properties. For example, setting the origin to ``Admin`` will cause items to spawn at full quality.\n"
  },
  {
    "path": "items/box-asset.rst",
    "content": ".. _doc_item_asset_box:\n\nBox Assets\n==========\n\nBoxes are created from the ItemBoxAsset class. They are used to visualize certain information from the game's Steam Economy integration. Since this asset is not useful to modders, this documentation merely exists for completeness.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Box``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nBox Asset Properties\n--------------------\n\n**Generate** *int32*: The itemdefid granted by opening this box, which is used to display the correct UI element after an unbox.\n\n**Destroy** *int32*: The itemdefid removed by opening this box, which is used to display the correct UI element after an unbox.\n\n**Drops** *int32*: Corresponds to the total number of items in the box, so that the correct number of UI elements are displayed when showing box contents.\n\n**Drop_#** *int32*: The itemdefid of an item in the box, which is visually displayed as a UI element when showing box contents.\n\n**Item_Origin** *enum* (``Unbox``, ``Unwrap``): The localization key to use for for the unbox/unwrap menu button.\n\n**Probability_Model** *enum* (``Equalized``, ``Original``): UI elements regarding unbox probability chances are added depending on the specified enumerator.\n\n**Contains_Bonus_Items** *bool*: When true, adds a UI element regarding bonus items.\n"
  },
  {
    "path": "items/caliber-asset.rst",
    "content": ".. _doc_item_asset_caliber:\n\nCaliber Assets\n==============\n\nThe ItemCaliberAsset class is a base class that other classes are derived from. It is unusable on its own.\n\nGame Data File\n--------------\n\nThe ItemCaliberAsset class inherits properties from the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Aiming_Movement_Speed_Multiplier <doc_item_asset_caliber:aiming_movement_speed_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Aiming_Recoil_Multiplier <doc_item_asset_caliber:aiming_recoil_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Aim_Duration_Multiplier <doc_item_asset_caliber:aim_duration_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Ballistic_Damage_Multiplier <doc_item_asset_caliber:ballistic_damage_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Ballistic_Drop <doc_item_asset_caliber:ballistic_drop>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Calibers <doc_item_asset_caliber:calibers>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Caliber_# <doc_item_asset_caliber:caliber_#>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Damage <doc_item_asset_caliber:damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - *deprecated*\n   * - :ref:`Destroy_Attachment_Colliders <doc_item_asset_caliber:destroy_attachment_colliders>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Firerate <doc_item_asset_caliber:firerate>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Instantiated_Attachment_Name_Override <doc_item_asset_caliber:instantiated_attachment_name_override>`\n     - :ref:`string <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Invulnerable <doc_item_asset_caliber:invulnerable>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Paintable <doc_item_asset_caliber:paintable>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Recoil_X <doc_item_asset_caliber:recoil_x>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Recoil_Y <doc_item_asset_caliber:recoil_y>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Shake <doc_item_asset_caliber:shake>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Spread <doc_item_asset_caliber:spread>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Sway <doc_item_asset_caliber:sway>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_caliber:aiming_movement_speed_multiplier:\n\nAiming_Movement_Speed_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on character movement speed while aiming down sights.\n\n----\n\n.. _doc_item_asset_caliber:aiming_recoil_multiplier:\n\nAiming_Recoil_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on recoil magnitude while aiming down sights.\n\n----\n\n.. _doc_item_asset_caliber:aim_duration_multiplier:\n\nAim_Duration_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the value of :ref:`Aim_In_Duration <doc_item_asset_gun:aim_in_duration>` property available to the :ref:`ItemGunAsset <doc_item_asset_gun>` class.\n\n----\n\n.. _doc_item_asset_caliber:ballistic_damage_multiplier:\n\nBallistic_Damage_Multiplier :ref:`float32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on damage. Defaults to the value of the ``Damage`` property, or ``1`` if both properties are unset.\n\n----\n\n.. _doc_item_asset_caliber:ballistic_drop:\n\nBallistic_Drop :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGravity acceleration multiplier for bullets in flight.\n\n----\n\n.. _doc_item_asset_caliber:caliber_#:\n\nCaliber_# :ref:`uint16 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a caliber to check for attachment compatibility. This property is used in conjunction with ``Calibers``, which determines how many instances of this property should be read by the game.\n\nWhen this property is unset, it will default to ``0``. When the ``Magazine_Calibers`` property is not greater than ``0``, this property will default to the value of ``Caliber``.\n\n----\n\n.. _doc_item_asset_caliber:calibers:\n\nCalibers :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSet the length of the array containing the calibers for attachment compatibility. This property is used in conjunction with the ``Caliber_#`` property, and the value of ``Calibers`` should be equal to the number of instances of ``Caliber_#``.\n\n----\n\n.. _doc_item_asset_caliber:damage:\n\nDamage :ref:`float32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::\n\n.. deprecated:: 3.27.0.0\n   Use ``Ballistic_Damage_Multiplier`` instead.\n\nMaintained for backwards compatibility. If both this property and ``Ballistic_Damage_Multiplier`` have been set, the latter's value is used.\n\n----\n\n.. _doc_item_asset_caliber:destroy_attachment_colliders:\n\nDestroy_Attachment_Colliders :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``false``, colliders are not destroyed when the attached ranged weapon's colliders are destroyed. This property exists for backwards compatibility with mods that may have relied on attachments having colliders, but using this property is not recommended.\n\n.. caution:: Mods with complex colliders on their custom attachments are frequently reported as causing low performance issues for players. It is recommended that your custom attachments do not rely on having colliders.\n\n----\n\n.. _doc_item_asset_caliber:firerate:\n\nFirerate :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe value of the attached ranged weapon's :ref:`Firerate <doc_item_asset_gun:firerate>` property is reduced by the value of this property. A larger decrease will allow for the ranged weapon to fire more often.\n\n----\n\n.. _doc_item_asset_caliber:instantiated_attachment_name_override:\n\nInstantiated_Attachment_Name_Override :ref:`string <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nName to use when instantiating attachment prefab. By default, the value of ``GUID`` is used. Since Unity's built-in Animation component references GameObjects by name, this property can help share animations between items.\n\nFor example, a magazine attachment with GUID ``dbfb1d0d11ca438e9dffb95f76e61274`` will instantiate Magazine.prefab as (Gun)/Magazine/dbfb1d0d11ca438e9dffb95f76e61274 by default. With ``Instantiated_Attachment_Name_Override`` set to \"Example\" it would instead spawn as (Gun)/Magazine/Example.\n\n----\n\n.. _doc_item_asset_caliber:invulnerable:\n\nInvulnerable :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, gun can damage entities with Invulnerable tag.\n\n----\n\n.. _doc_item_asset_caliber:paintable:\n\nPaintable :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, the attachment should be affected by Steam Economy skins that include support for skinning attachments.\n\n----\n\n.. _doc_item_asset_caliber:recoil_x:\n\nRecoil_X :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on horizontal recoil.\n\n----\n\n.. _doc_item_asset_caliber:recoil_y:\n\nRecoil_Y :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on vertical recoil.\n\n----\n\n.. _doc_item_asset_caliber:shake:\n\nShake :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on shake.\n\n----\n\n.. _doc_item_asset_caliber:spread:\n\nSpread :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on bullet spread.\n\n----\n\n.. _doc_item_asset_caliber:sway:\n\nSway :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on scope sway.\n"
  },
  {
    "path": "items/charge-asset.rst",
    "content": ".. _doc_item_asset_charge:\n\nCharge Assets\n=============\n\nCharges (or \"remote explosives\") are created from the ItemChargeAsset class. They can be placed and then remotely detonated with a :ref:`remote trigger <doc_item_asset_detonator>`.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Charge``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Charge``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nCharge Asset Properties\n-----------------------\n\n**Animal_Damage** *float*: Damage dealt to animals caught within the area-of-effect explosion.\n\n**Barricade_Damage** *float*: Damage dealt to barricades caught within the area-of-effect explosion.\n\n**Explosion2** *uint16* or *GUID*: ID or GUID of effect to play upon detonation.\n\n**Explosion_Launch_Speed** *float*: Launch speed of players caught within the area-of-effect explosion, in meters per second. Defaults to the value of ``Player_Damage * 0.1``.\n\n**Object_Damage** *float*: Damage dealt to objects caught within the area-of-effect explosion. Defaults to the value of ``Resource_Damage``.\n\n**Player_Damage** *float*: Damage dealt to players caught within the area-of-effect explosion.\n\n**Resource_Damage** *float*: Damage dealt to resources caught within the area-of-effect explosion.\n\n**Structure_Damage** *float*: Damage dealt to structures caught within the area-of-effect explosion.\n\n**Vehicle_Damage** *float*: Damage dealt to vehicles caught within the area-of-effect explosion.\n\n**Range2** *float*: Radius of the damaging, area-of-effect explosion.\n\n**Zombie_Damage** *float*: Damage dealt to zombies caught within the area-of-effect explosion.\n"
  },
  {
    "path": "items/clothing-asset.rst",
    "content": ".. _doc_item_asset_clothing:\n\nClothing Assets\n===============\n\nThe ItemClothingAsset class is a base class that other classes are derived from. It is unusable on its own.\n\nItems that use a class derived from this class are known as clothing items. Clothing can be worn by players and zombies, although they may function slightly differently between the two.\n\nGame Data File\n--------------\n\nThe ItemClothingAsset class inherits properties from the :ref:`ItemAsset <doc_item_asset_intro>` class. Clothing items will always display a quality value.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Armor <doc_item_asset_clothing:armor>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Armor_Explosion <doc_item_asset_clothing:armor_explosion>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Beard_Visible <doc_item_asset_clothing:beard_visible>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Destroy_Clothing_Colliders <doc_item_asset_clothing:destroy_clothing_colliders>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Falling_Damage_Multiplier <doc_item_asset_clothing:falling_damage_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Hair_Visible <doc_item_asset_clothing:hair_visible>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Mirror_Left_Handed_Model <doc_item_asset_clothing:mirror_left_handed_model>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Movement_Speed_Multiplier <doc_item_asset_clothing:movement_speed_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Prevents_Falling_Broken_Bones <doc_item_asset_clothing:prevents_falling_broken_bones>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Priority_Over_Cosmetic <doc_item_asset_clothing:priority_over_cosmetic>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Proof_Fire <doc_item_asset_clothing:proof_fire>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Proof_Radiation <doc_item_asset_clothing:proof_radiation>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Proof_Water <doc_item_asset_clothing:proof_water>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Skin_Override <doc_item_asset_clothing:skin_override>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Visible_On_Ragdoll <doc_item_asset_clothing:visible_on_ragdoll>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`WearAudio <doc_item_asset_clothing:wear_audio>`\n     - :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n     - See description\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_clothing:armor:\n\nArmor :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on damage received to the covered body part(s). The affected body part(s) will differ depending on the child class.\n\n----\n\n.. _doc_item_asset_clothing:armor_explosion:\n\nArmor_Explosion :ref:`float32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the damage received from area-of-effect explosions. Defaults to the value of ``Armor``.\n\n----\n\n.. _doc_item_asset_clothing:beard_visible:\n\nBeard_Visible :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, the character's facial hair should be visible (unless disabled by some other condition).\n\n----\n\n.. _doc_item_asset_clothing:destroy_clothing_colliders:\n\nDestroy_Clothing_Colliders :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``false``, colliders are *not* destroyed when the clothing is attached to the player character. For example, equipped vanilla clothing do not have any colliders. But some mods (e.g., armor with a hitbox) may have relied on child colliders not being destroyed.\n\n----\n\n.. _doc_item_asset_clothing:falling_damage_multiplier:\n\nFalling_Damage_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on damage received from falling.\n\n----\n\n.. _doc_item_asset_clothing:hair_visible:\n\nHair_Visible :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, the character's hair should be visible (unless disabled by some other condition).\n\n----\n\n.. _doc_item_asset_clothing:mirror_left_handed_model:\n\nMirror_Left_Handed_Model :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nClothing should be mirrored when the player is using the left-handed setting. This property only affects 3D clothing items, being: vests, backpacks, masks, glasses, and hats.\n\n----\n\n.. _doc_item_asset_clothing:movement_speed_multiplier:\n\nMovement_Speed_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on movement speed.\n\n\n----\n\n.. _doc_item_asset_clothing:prevents_falling_broken_bones:\n\nPrevents_Falling_Broken_Bones :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, the player will never receive the Broken Bones debuff from falling.\n\n----\n\n.. _doc_item_asset_clothing:priority_over_cosmetic:\n\nPriority_Over_Cosmetic :ref:`bool <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThis property can be set to override the default cosmetic override behavior. The default behavior will differ depending on the asset. For most assets, cosmetics are displayed over clothing. For glasses using the ``Vision`` property, the clothing item has priority over the cosmetic.\n\n.. note:: This only has an effect in PvP mode servers.\n\n----\n\n.. _doc_item_asset_clothing:proof_fire:\n\nProof_Fire :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, this clothing item is considered fireproof. When a fireproof shirt and fireproof pants are worn together, the player becomes immune to fire damage. This property has no effect on other clothing types.\n\n----\n\n.. _doc_item_asset_clothing:proof_radiation:\n\nProof_Radiation :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, this clothing item is considered radiation-proof. When a radiation-proof mask is worn, the player will not be affected by standard deadzones. When radiation-proof pants, a radiation-proof shirt, and a radiation-proof mask are all worn together, the player will not be damaged by full-suit deadzones. This protection only lasts for as long as the radiation-proof mask's item quality is greater than 0%. The mask's quality will deplete over time while inside of a deadzone, but can be replenished with :ref:`radiation filters <doc_item_asset_filter>`.\n\n----\n\n.. _doc_item_asset_clothing:proof_water:\n\nProof_Water :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, this clothing item is considered waterproof. When waterproof glasses are worn, the player's screen is no longer blurred when underwater. When waterproof glasses and a waterproof backpack are worn together, the player's oxygen will deplete at a greatly reduced rate while underwater. This property has no effect on other clothing types.\n\n----\n\n.. _doc_item_asset_clothing:skin_override:\n\nSkin_Override :ref:`string <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOptional name of a renderer that should use the player's skin material. For example, the `Conflicting Conscience <https://unturned.wiki.gg/wiki/Conflicting_Conscience>`_ cosmetic adds miniature versions of the player sitting on their shoulder.\n\n----\n\n.. _doc_item_asset_clothing:visible_on_ragdoll:\n\nVisible_On_Ragdoll :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, this clothing item should be visible on ragdolls.\n\n----\n\n.. _doc_item_asset_clothing:wear_audio:\n\nWearAudio :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAudioClip or OneShotAudioDefinition to play upon equipping this clothing item. Default value is dependent on the child asset. Backpacks and vests will use ``Sounds/Zipper.mp3`` by default. Otherwise, ``Sounds/Sleeve.mp3`` is used.\n"
  },
  {
    "path": "items/cloud-asset.rst",
    "content": ".. _doc_item_asset_cloud:\n\nCloud Assets\n============\n\nClouds (or \"parachutes\") are created from the ItemCloudAsset class. They can affect a player's gravity when held.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Cloud``)\n\n**Useable** *enum* (``Cloud``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nCloud Asset Properties\n----------------------\n\n**Gravity** *float*: Multiplier on the influence of gravity.\n"
  },
  {
    "path": "items/consumeable-asset.rst",
    "content": ".. _doc_item_asset_consumeable:\n\nConsumeable Assets\n==================\n\nConsumable items are irreversibly consumed by the player on use, and directly affect a player's stats such as food or health.\n\nThis inherits the :ref:`WeaponAsset <doc_item_asset_weapon>` class.\n\nConsumeable Asset Properties\n----------------------------\n\n**Aid** *flag*: Specified if the item can be used on other players, via the \"Secondary\" action.\n\n**Bleeding** *flag*: Specified if the item should remove the \"Bleeding\" status effect. Deprecated in favor of Bleeding_Modifier.\n\n**Bleeding_Modifier** *enum* (``Cut``, ``Heal``, ``None``): Determines the effect the consumable has in relation to the \"Bleeding\" status effect.\n\n**Broken** *flag*: Specified if the item should remove the \"Broken Bones\" status effect. Deprecated in favor of Bones_Modifier.\n\n**Bones_Modifier** *enum* (``Break``, ``Heal``, ``None``): Determines the effect the consumable has in relation to the \"Broken Bones\" status effect.\n\n**ConsumeAudioClip** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: AudioClip to play when the consumeable is used.\n\n**Disinfectant** *byte*: Amount of immunity restored.\n\n**Energy** *byte*: Amount of stamina restored.\n\n**Experience** *int*: Amount of experience added or removed.\n\n**Explosion** *uint16* or *GUID*: ID or GUID of the explosion effect to play upon consumption.\n\n**Food** *byte*: Amount of food restored. If the amount of food to restore is larger than the amount of water to restore, then food constrains water.\n\n**Health** *byte*: Amount of health restored.\n\n**Item_Reward_Spawn_ID** *uint16*: ID of the item spawn table to generate an item from upon consuming the consumable. The number of items generated is random, depending on the range defined by Min_Item_Rewards and Max_Item_Rewards.\n\n**Max_Item_Rewards** *int*: Maximum number of items that can be generated from the spawn table specified by Item_Reward_Spawn_ID.\n\n**Min_Item_Rewards** *int*: Minimum number of items that can be generated from the spawn table specified by Item_Reward_Spawn_ID.\n\n**Oxygen** *sbyte*: Amount of oxygen restored or depleted.\n\n**Randomize_Consume_Audio_Pitch** *bool*: If false, ``ConsumeAudioClip`` always plays with ``1.0`` pitch. Defaults to true.\n\n**Should_Delete_After_Use** *bool*: Boolean for if the item should be deleted after being consumed. Defaults to true.\n\n**Virus** *byte*: Amount of immunity depleted.\n\n**Vision** *uint*: Length of hallucinations, in seconds. The length does not stack when consuming multiple hallucinogenics. Instead, the timer is reset to the longer value.\n\n**Warmth** *uint*: Amount of warmth added.\n\n**Water** *byte*: Amount of water restored. If the amount of water to restore is less than the amount of food to restore, then water is constrained by food.\n\nRewards\n-------\n\nConsumables can use quest rewards. A common usage is to create consumables with multiple (but still limited) uses, by placing a new item in the player's inventory after consuming the original. Alternatively, consuming a consumable may be required to complete a quest. Refer to :ref:`Rewards <doc_npc_asset_rewards>` documentation for additional documentation.\n\nThese rewards are prefixed with ``Quest_``. For example, ``Quest_Rewards 1``.\n"
  },
  {
    "path": "items/detonator-asset.rst",
    "content": ".. _doc_item_asset_detonator:\n\nDetonator Assets\n================\n\nDetonators (or \"remote triggers\") are created from the ItemDetonatorAsset class. They can be used to detonate :ref:`remote explosives <doc_item_asset_charge>`.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Detonator``)\n\n**Useable** *enum* (``Detonator``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nDetonator Asset Properties\n--------------------------\n\nRemote triggers have no unique asset properties. Refer to :ref:`item asset documentation <doc_item_asset_intro>` for additional properties.\n"
  },
  {
    "path": "items/farm-asset.rst",
    "content": ".. _doc_item_asset_farm:\n\nFarm Assets\n===========\n\nFarms (or \"plants\") are created from the ItemFarmAsset class. They are placeable seeds capable of growing into harvestable crops.\n\nWhen a seed is planted, it will grow over time until eventually harvestable. Growing can be finished immediately by either rainfall, or by using a :ref:`growth supplement <doc_item_asset_grower>` on the plant. A fully-grown crop can be harvested, which deals 2 damage to the crop. A crop can be harvested until it has 0 health remaining.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Farm``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Farm``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nFarm Asset Properties\n---------------------\n\n**Affected_By_Agriculture_Skill** *bool*: If true, the amount of crops acquired when harvesting the plant is affected by the `Agriculture skill <https://unturned.wiki.gg/wiki/Skills>`_. Defaults to true.\n\n**Allow_Fertilizer** *bool*: If true, allows the player to use fertilizer to fully grow the plant. Defaults to true.\n\n**Grow** *ushort*: Legacy ID of the item to spawn when harvested.\n\n**Grow_SpawnTable** :ref:`GUID <doc_data_guid>`: GUID of a spawntable from which to spawn an item when harvested.\n\n**Growth** *uint*: In seconds, how long before the crop is fully grown.\n\n**Harvest_Reward_Experience** *uint*: The amount of experience gained upon harvesting. Defaults to 1.\n\n**Ignore_Soil_Restrictions** *bool*: If false, only allow placement on Soil Materials. If true, allow placement anywhere. Default to false.\n\n**Rain_Affects_Growth** *bool*: If true, the plant will fully finish growing after rainy weather. Defaults to true.\n\n**Harvest_Rewards**: NPC reward list granted when harvesting the grown plant. For more information, please refer to the :ref:`Rewards <doc_npc_asset_rewards>` documentation.\n\n.. tip::\n\n\tThe ``Health`` property from the parent ItemAsset class can be configured to allow for harvesting a crop multiple times. A plant can be harvested a number of items equal to ``Health / 2``. For example, a plant with 10 health can be harvested up to 5 times.\n"
  },
  {
    "path": "items/filter-asset.rst",
    "content": ".. _doc_item_asset_filter:\n\nFilter Assets\n=============\n\nFilters (or \"radiation filters\") are created from the ItemFilterAsset class. They can be used to replenish the quality of radiation-proof :ref:`masks <doc_item_asset_mask>`.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Filter``)\n\n**Useable** *enum* (``Filter``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nFilter Asset Properties\n-----------------------\n\nRadiation filters have no unique asset properties. Refer to parent classes for additional properties.\n"
  },
  {
    "path": "items/fisher-asset.rst",
    "content": ".. _doc_item_asset_fisher:\n\nFisher Assets\n=============\n\nFishers (or \"fishing poles\") are created from the ItemFisherAsset class. They are useables that allow for catching fish.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Fisher``)\n\n**Useable** *enum* (``Fisher``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nFisher Asset Properties\n-----------------------\n\n**Reward_Experience_Min** *int32*: Minimum amount (inclusive) of experience to grant upon successfully catching something. Defaults to 3.\n\n**Reward_Experience_Max** *int32*: Maximum amount (inclusive) of experience to grant upon successfully catching something. Defaults to 3.\n\n**Reward_ID** *uint16*: Legacy ID of the spawn table a reward should be generated from upon successfully catching something with the fishing pole.\n\nFishing poles can use quest rewards. Refer to :ref:`Rewards <doc_npc_asset_rewards>` documentation for additional documentation. These rewards are prefixed with ``Quest_``. For example, ``Quest_Rewards 1``.\n\n**Fish_Bite_Interval_Multiplier** *float*: Multiplier for interval before a fish takes the bait. Defaults to 1.\n\n**FishingRewardMode** *enum*: ``Rod`` or ``WaterVolumes``. Defaults to ``Rod`` for backwards compatibility.\n\n``Rod``: Fishing rod itself defines rewards. Ignore per-volume rewards.\n\n``WaterVolumes``: Use per-volume (or per-level if volume unspecified) rewards. If level doesn't support volume rewards, fallback to ``Rod`` rewards.\n\n.. seealso:: :ref:`Level Asset fishing properties <doc_assets_level:supports_fishing_volumes>`.\n\n**CatchChallenge_Enabled** *bool*: If true, player must complete a challenge when fish takes the bait before catching. Defaults to false for backwards compatibility.\n\n**CatchChallenge_CursorSize** *float*: Size of window item must be within to catch. Defaults to 0.2.\n\n**CatchChallenge_Gravity** *float*: Downward acceleration while input is not held. Defaults to 1.\n\n**CatchChallenge_Acceleration** *float*: Upward acceleration while input is held. Defaults to 1.\n\n**CatchChallenge_UpperRestitution** *float*: How much velocity to preserve when bouncing off the top. Defaults to 0.5 (50%).\n\n**CatchChallenge_LowerRestitution** *float*: How much velocity to preserve when bouncing off the bottom. Defaults to 0.5 (50%).\n\n**CatchChallenge_CaptureSpeed** *float*: Multiplier for how quickly item is caught while within cursor. Defaults to 1 (100%).\n\n**CatchChallenge_EscapeSpeed** *float*: Multiplier for how quickly the player loses while item is outside the cursor. Defaults to 1 (100%).\n"
  },
  {
    "path": "items/fishing-catchable-properties.rst",
    "content": ".. _doc_item_fishing_catchable_properties:\n\nFishing Catchable Properties\n============================\n\nThese options are specified in an item's :ref:`Fishing_Catchable<doc_item_asset_intro:fishing_catchable>` :ref:`Dictionary<doc_data_file_format>`.\n\n**Capture_Duration** *float*: How long the player must keep the item within the cursor before it's caught. Defaults to 2 seconds.\n\n**Escape_Duration** *float*: How long before the item gets away. Defaults to 2 seconds.\n\n**Spring_Stiffness** *float*: Scales acceleration toward target position (without exceeding limits). Defaults to 16.\n\n**Spring_Damping** *float*: Reduces speed toward target position. Defaults to 4.\n\n**Min_Relocate_Interval** *float*: Minimum seconds before target position changes. Defaults to 1.5 seconds.\n\n**Max_Relocate_Interval** *float*: Maximum seconds before target position changes. Defaults to 2 seconds.\n\n**Max_Upward_Acceleration** *float*: Upward acceleration cannot increase beyond this limit. Defaults to 1.5.\n\n**Max_Downward_Acceleration** *float*: Downward acceleration cannot increase beyond this limit. Defaults to 1.2.\n\n**Max_Upward_Speed** *float*: Upward speed cannot increase beyond this limit. Defaults to 0.6.\n\n**Max_Downward_Speed** *float*: Downward speed cannot increase beyond this limit. Defaults to 0.45.\n\n**Upper_Restitution** *float*: How much velocity to preserve when bouncing off the top. Defaults to 0.6 (60%).\n\n**Lower_Restitution** *float*: How much velocity to preserve when bouncing off the bottom. Defaults to 0.4 (40%).\n\n**Min_Target_Delta** *float*: When choosing a new position, it will be at least this far away. Defaults to 0.3\n\n**Max_Target_Delta** *float*: When choosing a new position, it will be at most this far away. Defaults to 0.4.\n\n**Min_Target_Position** *float*: [0, 1] Minimum choosable position. Defaults to 0.1.\n\n**Max_Target_Position** *float*: [0, 1] Maximum choosable position. Defaults to 0.9.\n\n.. tip:: For example, the vanilla Lobster's configuration is:\n\n\t.. code-block:: unturneddat\n\n\t\tFishing_Catchable\n\t\t{\n\t\t\tMin_Relocate_Interval 0.3\n\t\t\tMax_Relocate_Interval 1\n\t\t\tMax_Upward_Acceleration 1.3\n\t\t\tMax_Downward_Acceleration 1.75\n\t\t\tMax_Upward_Speed 0.5\n\t\t\tMax_Downward_Speed 1.2\n\t\t\tUpper_Restitution 0\n\t\t\tLower_Restitution 2\n\t\t\tMin_Target_Delta 0.35\n\t\t\tMax_Target_Delta 0.4\n\t\t\tMin_Target_Position 0\n\t\t\tMax_Target_Position 0.4\n\t\t\tCapture_Duration 2.75\n\t\t\tEscape_Duration 1.25\n\t\t\tSpring_Stiffness 20\n\t\t\tSpring_Damping 4\n\t\t}\n"
  },
  {
    "path": "items/food-asset.rst",
    "content": ".. _doc_item_asset_food:\n\nFood Assets\n===========\n\nFood items are created from the ItemFoodAsset class. They can be consumed by the player.\n\nThis inherits the :ref:`ConsumeableAsset <doc_item_asset_consumeable>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Food``)\n\n**Useable** *enum* (``Consumeable``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nFood Asset Properties\n---------------------\n\nFood have no unique asset properties. Refer to parent classes for additional properties.\n"
  },
  {
    "path": "items/fuel-asset.rst",
    "content": ".. _doc_item_asset_fuel:\n\nFuel Assets\n===========\n\nFuel items (or \"fuel canisters\") are created from the ItemFuelAsset class. They are useables able to siphon, store, and deposit fuel.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Fuel``)\n\n**Useable** *enum* (``Fuel``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nFuel Asset Properties\n---------------------\n\n**Always_Spawn_Full** *bool*: If true, this item will always spawn filled at full capacity.\n\n**Delete_After_Filling_Target** *bool*: If true, this item is removed from the player's inventory after adding fuel to target.\n\n**Fuel** *uint16*: Maximum units of fuel that can be stored in the fuel canister.\n"
  },
  {
    "path": "items/gear-asset.rst",
    "content": ".. _doc_item_asset_gear:\n\nGear Assets\n===========\n\nThe ItemGearAsset class is a base class that other classes are derived from. It is unusable on its own.\n\nGame Data File\n--------------\n\nThe ItemGearAsset class inherits properties from the :ref:`ItemClothingAsset <doc_item_asset_clothing>` class.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Beard <doc_item_asset_gear:beard>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Beard_Override <doc_item_asset_gear:beard_override>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Beard_Override_NonGoldColor <doc_item_asset_gear:beard_override_nongoldcolor>`\n     - :ref:`Color <doc_data_color>`\n     -\n   * - :ref:`Hair <doc_item_asset_gear:hair>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Hair_Override <doc_item_asset_gear:hair_override>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Hair_Override_NonGoldColor <doc_item_asset_gear:hair_override_nongoldcolor>`\n     - :ref:`Color <doc_data_color>`\n     -\n\nSome inherited properties behave differently when used by this class. Notably, these are:\n\n#. | :ref:`Beard_Visible <doc_item_asset_clothing:beard_visible>` (from :ref:`ItemClothingAsset <doc_item_asset_clothing>`). This property's default behavior is altered. Refer to this class's ``Beard`` property instead.\n\n#. | :ref:`Hair_Visible <doc_item_asset_clothing:hair_visible>` (from :ref:`ItemClothingAsset <doc_item_asset_clothing>`). This property's default behavior is altered. Refer to this class's ``Hair`` property instead.\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_gear:beard:\n\nBeard :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::\n\nWhen this flag is not included, the parent class's :ref:`Beard_Visible <doc_item_asset_clothing:beard_visible>` property is set to false. This flag must be included if the character's facial hair should be visible.\n\n----\n\n.. _doc_item_asset_gear:beard_override:\n\nBeard_Override :ref:`string <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen this property is set, the game will look for a child Mesh Renderer component in Unity that has the same name as this property's value. If a matching Mesh Renderer is found, its material will be changed to the character's hbeardair material. This property is used by certain cosmetics that entirely cover the character's beard, so that the player's selected beard color can still be used for customization.\n\n----\n\n.. _doc_item_asset_gear:beard_override_nongoldcolor:\n\nBeard_Override_NonGoldColor :ref:`Color <doc_data_color>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nFor items using BeardOverride, the beard material color will default to this for players without the Gold Upgrade. (Since the Gold Upgrade is required for full RGB control, the default beard colors may look boring for items that cover the beard but aren't beards in of themselves.) Also used as the color in the cosmetic preview.\n\n----\n\n.. _doc_item_asset_gear:hair:\n\nHair :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::\n\nWhen this flag is not included, the parent class's :ref:`Hair_Visible <doc_item_asset_clothing:hair_visible>` property is set to false. This flag must be included if the character's hair should be visible.\n\n----\n\n.. _doc_item_asset_gear:hair_override:\n\nHair_Override :ref:`string <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen this property is set, the game will look for a child Mesh Renderer component in Unity that has the same name as this property's value. If a matching Mesh Renderer is found, its material will be changed to the character's hair material. This property is used by certain cosmetics that entirely cover the character's hair, so that the player's selected hair color can still be used for customization.\n\n----\n\n.. _doc_item_asset_gear:hair_override_nongoldcolor:\n\nHair_Override_NonGoldColor :ref:`Color <doc_data_color>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nFor items using hairOverride, the hair material color will default to this for players without the Gold Upgrade. (Since the Gold Upgrade is required for full RGB control, the default hair colors may look boring for items that cover the hair but aren't hair in of themselves.) Also used as the color in the cosmetic preview.\n"
  },
  {
    "path": "items/generator-asset.rst",
    "content": ".. _doc_item_asset_generator:\n\nGenerator Assets\n================\n\nGenerators are created from the ItemGeneratorAsset class. They are a placeable power sources. Players can deposit fuel into generators with a :ref:`fuel canister <doc_item_asset_fuel>`.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Generator``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Generator``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nGenerator Asset Properties\n--------------------------\n\n**Capacity** *uint16*: Maximum units of fuel that can be stored in the generator. Defaults to 0.\n\n**Wirerange** *float* [0, 256]: In meters, the radius around the generator that is provided electricity.\n\n**Burn** *float*: How many seconds it takes to burn one unit of fuel.\n"
  },
  {
    "path": "items/glasses-asset.rst",
    "content": ".. _doc_item_asset_glasses:\n\nGlasses Assets\n==============\n\nGlasses are created from ItemGlassesAsset. They are clothing items that can be worn by players and zombies.\n\nThis inherits the :ref:`GearAsset <doc_item_asset_gear>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Glasses``)\n\n**Useable** *enum* (``Clothing``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nGlasses Asset Properties\n------------------------\n\n**Blindfold** *flag*: Specified if glasses should blacken the player's screen.\n\n**Nightvision_Allowed_In_ThirdPerson** *bool*: If ``true``, nightvision works in third-person, not just first-person. Defaults to ``false`` for backwards compatibility. Vanilla nightvision has this set to true.\n\n**Nightvision_Color** :ref:`color <doc_data_color>`: Overrides the default color when using ``Vision Military``. This property supports using legacy color parsing.\n\n**Nightvision_Fog_Intensity** *float32*: Intensity of fog while nightvision is active.\n\n**Vision** :ref:`doc_data_elightingvision`: Determines the type of lighting vision to use. When looking to assign a custom nightvision color via the ``Nightvision_Color`` property, you should use the ``Military`` enumerator. When the ``Headlamp`` enumerator is used, you can also specify properties from the :ref:`doc_data_playerspotlightconfig` struct. Defaults to ``None``.\n"
  },
  {
    "path": "items/grip-asset.rst",
    "content": ".. _doc_item_asset_grip:\n\nGrip Assets\n===========\n\nGrips (or \"grip attachments\") are created from the ItemGripAsset class. They are inventory items that can be attached to ranged weapons.\n\nThis inherits the :ref:`CaliberAsset <doc_item_asset_caliber>` class.\n\nGame Data File\n--------------\n\nGrip attachments inherit properties from the CaliberAsset class, which in turn inherits properties from the ItemAsset class. Properties that are required to be included are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n   \n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Grip``\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n   \n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Bipod <doc_item_asset_grip:bipod>`\n     - :ref:`flag <doc_data_flag>`\n     - \n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_grip:bipod:\n\nBipod :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::\n\nStat-changing properties should only take effect while prone."
  },
  {
    "path": "items/grower-asset.rst",
    "content": ".. _doc_item_asset_grower:\n\nGrower Assets\n=============\n\nGrowers (or \"growth supplements\") are created from the ItemGrowerAsset class. They can be used to instantly finish growing a :ref:`plant <doc_item_asset_farm>`.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Grower``)\n\n**Useable** *enum* (``Grower``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nGrower Asset Properties\n-----------------------\n\nGrowth supplements have no unique asset properties. Refer to :ref:`item asset documentation <doc_item_asset_intro>` for additional properties.\n"
  },
  {
    "path": "items/gun-asset.rst",
    "content": ".. _doc_item_asset_gun:\n\nGun Assets\n==========\n\nThe ItemGunAsset class is used for ranged weapons (or \"guns\"), which can be used by players to deal damage. Some examples of vanilla ranged weapons include the `Eaglefire <https://unturned.wiki.gg/wiki/Eaglefire>`_ and `Crossbow <https://unturned.wiki.gg/wiki/Crossbow>`_.\n\nUnity Asset Bundle Contents\n---------------------------\n\n.. figure:: /img/UnityExampleGun.png\n\n\tAn example of a gun being set up in the Unity editor.\n\nTo get started, either follow the steps to begin creating a custom item from the :ref:`introduction <doc_item_asset_intro>`, or duplicate the contents of a prepackaged example asset.\n\nItem (Prefab)\n`````````````\n\nOpen the \"Item\" Prefab, and add six child GameObjects named \"Barrel\", \"Grip\", \"Sight\", \"Tactical\", \"Magazine\", and \"Eject\". Most custom guns will want to have these six child GameObjects, although they are not strictly required.\n\nThe \"Barrel\", \"Grip\", \"Sight\", \"Tactical\", and \"Magazine\" GameObjects will determine the location of attachments on your gun. The \"Sight\" GameObject also determines where the camera will be positioned when aiming down sights. Shells are emitted from the \"Eject\" GameObject.\n\nIf an \"View\" GameObject is added, the camera will use its position when aiming down sights if a sight attachment has not been attached to the gun.\n\nWhen a gun can accept more than one type of magazine caliber, it may be desirable to have the position of the magazine attachment depend on its caliber ID. Add a child to the \"Magazine\" GameObject, named \"Caliber_#\". For example, adding \"Caliber_1\" would cause magazine attachments using caliber ID 1 to use that position instead of the \"Magazine\" GameObject's position. (This is supported for the other attachment types as well.)\n\nAdditional Setup for Bows\n:::::::::::::::::::::::::\n\n.. figure:: /img/UnityExampleCrossbow.png\n\n\tAn example of a crossbow being set up in the Unity editor.\n\nBows require additional GameObjects to simulate the drawing of the bowstring. Note that bowstrings are only simulated from the first-person perspective.\n\nAdd a new child GameObject named \"Rope\", and set its state to inactive. The \"Rope\" GameObject should include a Line Renderer component. Vanilla bowstrings use a custom Material named \"Rope\" with the Unlit-Rope Shader, but this is not required.\n\nAdd two child GameObjects named \"Left\" and \"Right\". These GameObjects will determine the end points of the bowstring. If a third GameObject named \"Rest\" is included, it will be used as the middle point of the bowstring when aiming down sights.\n\nIncluding a fourth GameObject named \"Nock\" will allow the bow to be fired without aiming down sights. Additionally, the \"Rest\" GameObject will act as a middle point when not aiming down sights, and the \"Nock\" GameObject will act as a middle point while aiming down sights.\n\nAdditional Setup for Economy Items\n::::::::::::::::::::::::::::::::::\n\nThere are several child GameObjects that can be added related to skins. Custom items are ineligible to receive skins, so there is usually no reason to add these to the Prefab.\n\nIf an item has an \"Icon2\" GameObject included, its position and orientation will be used when generating icons of skins on this item. A GameObject named \"Stat_Tracker\" determines the location where stat trackers will appear on the gun, while a GameObject named \"Effect\" will determine the position of mythical effects on the gun.\n\nAnimations (Prefab)\n```````````````````\n\nIn addition to animations used by any equippable item, guns have an additional set of animations that they can use.\n\nAdding animations named \"Aim_Start\" and \"Aim_Stop\" will cause an animation to be played whenever the player starts or stops aiming down sights. Animations named \"Attach_Start\" and \"Attach_Stop\" will play when an attachment is attached or unattached to the gun. The \"Sprint_Start\" and \"Sprint_Stop\" animations play when the player starts and stops sprinting. The \"Reload\" animation is played when reloading the gun.\n\nThe \"Hammer\" animation is played under certain conditions where it would make sense to manually eject a cartridge from the gun. For example: after reloading an gun that had an empty magazine, or after firing a single-shot weapon (such as a bolt-action rifle or pump-action shotgun).\n\nIf a gun is configured to use the gun jamming feature, the \"UnjamChamber\" animation will play when a jam occurs.\n\nAudio Clips\n```````````\n\nIn addition to the Audio Clips that can be included for equippable items, guns have an additional set of audio clips they can use.\n\nIf an Audio Clip named \"Shoot\" is included, it will play after the gun is fired. Including Audio Clips named \"Reload\" and \"Hammer\" will cause audio to play after reloading and hammering the gun, respectively.\n\nAn \"Aim\" Audio Clip can be included to have audio play after aiming down sights. For example, a longbow might want to have an the sound of the bow being drawn play. Miniguns can also include an Audio Clip named \"Minigun\" to have audio play while revving the minigun.\n\nIf a gun is configured to use the gun jamming feature, the \"ChamberJammed\" Audio Clip will play when a jam occurs.\n\nGame Data File\n--------------\n\nRanged weapons inherit properties from the :ref:`ItemWeaponAsset <doc_item_asset_weapon>` class. Any properties from parent classes that are required—or highly recommended—are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n\n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Slot <doc_item_asset_intro:slot>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Gun``\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Useable <doc_item_asset_intro:useable>`\n     - ``Gun``\n   * - :ref:`ItemWeaponAsset <doc_item_asset_intro>`\n     - :ref:`Range <doc_item_asset_weapon:range>`\n     -\n\nAdditionally, all ranged weapons require that the ``Action`` property has been configured. Note that ranged weapons will always show a quality value.\n\nProperties\n``````````\n\nRanged weapons have a significant number of properties. To make navigating these easier, they have been categorized into one of several property tables. Many of these tables contain similar properties that are often used together.\n\n.. list-table:: Uncategorized\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Aim_In_Duration <doc_item_asset_gun:aim_in_duration>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.2``\n   * - :ref:`Aiming_Movement_Speed_Multiplier <doc_item_asset_gun:aiming_movement_speed_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Alert_Radius <doc_item_asset_gun:alert_radius>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``48``\n   * - :ref:`Can_Aim_During_Sprint <doc_item_asset_gun:can_aim_during_sprint>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Gunshot_Rolloff_Distance <doc_item_asset_gun:gunshot_rolloff_distance>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Must_Aim_To_Shoot <doc_item_asset_gun:must_aim_to_shoot>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Range_Rangefinder <doc_item_asset_gun:range_rangefinder>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Scale_Aim_Animation_Speed <doc_item_asset_gun:scale_aim_animation_speed>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Stop_Aiming_After_Shooting <doc_item_asset_gun:stop_aiming_after_shooting>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`DriverTurretViewmodelMode <doc_item_asset_gun:driverturretviewmodelmode>`\n     - :ref:`EDriverTurretViewmodelMode <doc_item_asset_gun:edriverturretviewmodelmode>`\n     - ``OffscreenWhileAiming``\n\n.. list-table:: Calibers\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Attachment_Caliber_# <doc_item_asset_gun:attachment_caliber_#>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Attachment_Calibers <doc_item_asset_gun:attachment_calibers>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Caliber <doc_item_asset_gun:caliber>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Magazine_Caliber_# <doc_item_asset_gun:magazine_caliber_#>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Magazine_Calibers <doc_item_asset_gun:magazine_calibers>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Requires_NonZero_Attachment_Caliber <doc_item_asset_gun:requires_nonzero_attachment_caliber>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n\n.. list-table:: Damage\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Damage_Falloff_Max_Range <doc_item_asset_gun:damage_falloff_max_range>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Damage_Falloff_Multiplier <doc_item_asset_gun:damage_falloff_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Damage_Falloff_Range <doc_item_asset_gun:damage_falloff_range>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Instakill_Headshots <doc_item_asset_gun:instakill_headshots>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n\n.. list-table:: Effects\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Explosion <doc_item_asset_gun:explosion>`\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Muzzle <doc_item_asset_gun:muzzle>`\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Shell <doc_item_asset_gun:shell>`\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n     - See description\n\n.. list-table:: Firing Mechanism\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Action <doc_item_asset_gun:action>`\n     - :ref:`EAction <doc_item_asset_gun:eaction>`\n     -\n   * - :ref:`Auto <doc_item_asset_gun:auto>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Bursts <doc_item_asset_gun:bursts>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Fire_Delay_Seconds <doc_item_asset_gun:fire_delay_seconds>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Firerate <doc_item_asset_gun:firerate>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Safety <doc_item_asset_gun:safety>`\n     -  :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Semi <doc_item_asset_gun:semi>`\n     -  :ref:`flag <doc_data_flag>`\n     -\n\n.. list-table:: Hook Attachments\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Barrel <doc_item_asset_gun:barrel>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Grip <doc_item_asset_gun:grip>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Sight <doc_item_asset_gun:sight>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Tactical <doc_item_asset_gun:tactical>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Hook_Barrel <doc_item_asset_gun:hook_barrel>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Hook_Grip <doc_item_asset_gun:hook_grip>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Hook_Sight <doc_item_asset_gun:hook_sight>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Hook_Tactical <doc_item_asset_gun:hook_tactical>`\n     - :ref:`flag <doc_data_flag>`\n     -\n\n.. list-table:: Jamming\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Can_Ever_Jam <doc_item_asset_gun:can_ever_jam>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Jam_Quality_Threshold <doc_item_asset_gun:jam_quality_threshold>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.4``\n   * - :ref:`Jam_Max_Chance <doc_item_asset_gun:jam_max_chance>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.1``\n   * - :ref:`Unjam_Chamber_Anim <doc_item_asset_gun:unjam_chamber_anim>`\n     - :ref:`string <doc_data_builtin_types>`\n     - ``UnjamChamber``\n\n.. list-table:: Magazine Attachments\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Allow_Magazine_Change <doc_item_asset_gun:allow_magazine_change>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Ammo_Max <doc_item_asset_gun:ammo_max>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Ammo_Min <doc_item_asset_gun:ammo_min>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Ammo_Per_Shot <doc_item_asset_gun:ammo_per_shot>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Delete_Empty_Magazines <doc_item_asset_gun:delete_empty_magazines>`\n     - :ref:`flag <doc_data_flag>`\n     - *deprecated*\n   * - :ref:`Hammer_Time <doc_item_asset_gun:hammer_time>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Infinite_Ammo <doc_item_asset_gun:infinite_ammo>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Magazine <doc_item_asset_gun:magazine>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Magazine_Replacement_#_ID <doc_item_asset_gun:magazine_replacement_#_id>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Magazine_Replacement_#_Map <doc_item_asset_gun:magazine_replacement_#_map>`\n     - :ref:`string <doc_data_builtin_types>`\n     -\n   * - :ref:`Magazine_Replacements <doc_item_asset_gun:magazine_replacements>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Reload_Time <doc_item_asset_gun:reload_time>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Replace <doc_item_asset_gun:replace>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Should_Delete_Empty_Magazines <doc_item_asset_gun:should_delete_empty_magazines>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Unplace <doc_item_asset_gun:unplace>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n\n.. list-table:: Projectiles (Ballistic System)\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Ballistic_Drop <doc_item_asset_gun:ballistic_drop>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - *deprecated*\n   * - :ref:`Ballistic_Steps <doc_item_asset_gun:ballistic_steps>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Ballistic_Travel <doc_item_asset_gun:ballistic_travel>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Bullet_Gravity_Multiplier <doc_item_asset_gun:bullet_gravity_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``4``\n\n.. list-table:: Projectiles (Physics System)\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Ballistic_Force <doc_item_asset_gun:ballistic_force>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.002``\n   * - :ref:`Projectile_Explosion_Launch_Speed <doc_item_asset_gun:projectile_explosion_launch_speed>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Projectile_Lifespan <doc_item_asset_gun:projectile_lifespan>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``30``\n   * - :ref:`Projectile_Penetrate_Buildables <doc_item_asset_gun:projectile_penetrate_buildables>`\n     - :ref:`flag <doc_data_builtin_types>`\n     -\n\n.. list-table:: Rechambering Properties\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`CasingEjectCountAfterRechamberingAfterShooting <doc_item_asset_gun:casingejectcountafterrechamberingaftershooting>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`CasingEjectCountAfterReload <doc_item_asset_gun:casingejectcountafterreload>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`EjectAfterHammerDelay <doc_item_asset_gun:ejectafterhammerdelay>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.45``\n   * - :ref:`EjectAfterReloadDelay <doc_item_asset_gun:ejectafterreloaddelay>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.5``\n   * - :ref:`EjectCasingAfterShooting <doc_item_asset_gun:ejectcasingaftershooting>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - See description\n   * - :ref:`RechamberAfterMagazineAttached <doc_item_asset_gun:rechamberaftermagazineattached>`\n     - :ref:`ERechamberGunAfterReloadMode <doc_item_asset_gun:erechambergunafterreloadmode>`\n     - ``IfAmmoWasEmpty``\n   * - :ref:`RechamberAfterMagazineDetached <doc_item_asset_gun:rechamberaftermagazinedetached>`\n     - :ref:`ERechamberGunAfterReloadMode <doc_item_asset_gun:erechambergunafterreloadmode>`\n     - ``Always``\n   * - :ref:`RechamberAfterShotCount <doc_item_asset_gun:rechamberaftershotcount>`\n     - :ref:`int32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`RechamberAfterShotDelay <doc_item_asset_gun:rechamberaftershotdelay>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.25``\n\n.. list-table:: Recoil\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Aiming_Recoil_Multiplier <doc_item_asset_gun:aiming_recoil_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Recoil_Crouch <doc_item_asset_gun:recoil_crouch>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.85``\n   * - :ref:`Recoil_Max_X <doc_item_asset_gun:recoil_max_x>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Recoil_Max_Y <doc_item_asset_gun:recoil_max_y>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Recoil_Min_X <doc_item_asset_gun:recoil_min_x>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Recoil_Min_Y <doc_item_asset_gun:recoil_min_y>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Recoil_Midair <doc_item_asset_gun:recoil_midair>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.0``\n   * - :ref:`Recoil_Prone <doc_item_asset_gun:recoil_prone>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.7``\n   * - :ref:`Recoil_Sprint <doc_item_asset_gun:recoil_sprint>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.25``\n   * - :ref:`Recoil_Swimming <doc_item_asset_gun:recoil_swimming>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.1``\n   * - :ref:`Recover_X <doc_item_asset_gun:recover_x>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Recover_Y <doc_item_asset_gun:recover_y>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n\n.. list-table:: Shake\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Shake_Max_X <doc_item_asset_gun:shake_max_x>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Shake_Min_X <doc_item_asset_gun:shake_min_x>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Shake_Max_Y <doc_item_asset_gun:shake_max_y>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Shake_Min_Y <doc_item_asset_gun:shake_min_y>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Shake_Max_Z <doc_item_asset_gun:shake_max_z>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Shake_Min_Z <doc_item_asset_gun:shake_min_z>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n\n.. list-table:: Spread\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Spread_Aim <doc_item_asset_gun:spread_aim>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Spread_Angle_Degrees <doc_item_asset_gun:spread_angle_degrees>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Spread_Crouch <doc_item_asset_gun:spread_crouch>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.85``\n   * - :ref:`Spread_Hip <doc_item_asset_gun:spread_hip>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - *deprecated*\n   * - :ref:`Spread_Midair <doc_item_asset_gun:spread_midair>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.5``\n   * - :ref:`Spread_Prone <doc_item_asset_gun:spread_prone>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.7``\n   * - :ref:`Spread_Sprint <doc_item_asset_gun:spread_sprint>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.25``\n   * - :ref:`Spread_Swimming <doc_item_asset_gun:spread_swimming>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.1``\n\n.. _doc_item_asset_gun:eaction:\n\nEAction Enumeration\n```````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``Trigger``\n     - Corresponds to the \"Trigger\" action. Uses the ballistic projectile system.\n   * - ``Bolt``\n     - Corresponds to the \"Bolt\" action. Uses the ballistic projectile system.\n   * - ``Pump``\n     - Corresponds to the \"Pump\" action. Uses the ballistic projectile system.\n   * - ``Rail``\n     - Corresponds to the \"Rail\" action. Uses the ballistic projectile system.\n   * - ``String``\n     - Corresponds to the \"String\" action. Uses the ballistic projectile system.\n   * - ``Break``\n     - Corresponds to the \"Break\" action. Uses the ballistic projectile system.\n   * - ``Rocket``\n     - Corresponds to the \"Rocket\" action. Uses the physics projectile system.\n   * - ``Minigun``\n     - Corresponds to the \"Minigun\" action. Uses the ballistic projectile system.\n\n.. _doc_item_asset_gun:edriverturretviewmodelmode:\n\nEDriverTurretViewmodelMode Enumeration\n``````````````````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``OffscreenWhileAiming``\n     - Default. Pushes first-person arms off-screen while aiming. Originally implemented for the Fighter Jet where it looks weird if your arms are still visible when the camera zooms in while \"aiming.\"\n   * - ``AlwaysOffscreen``\n     - Push first-person arms off-screen when equipped.\n   * - ``AlwaysOnscreen``\n     - Included for completeness.\n\n.. _doc_item_asset_gun:erechambergunafterreloadmode:\n\nERechamberGunAfterReloadMode Enumeration\n````````````````````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``IfAmmoWasEmpty``\n     - Default. Plays \"Hammer\" animation if ammo count was zero.\n   * - ``Never``\n     - Regardless of ammo, does not play \"Hammer\" animation after reloading.\n   * - ``Always``\n     - Regardless of ammo, will play \"Hammer\" animation after reloading.\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_gun:action:\n\nAction :ref:`EAction <doc_item_asset_gun:eaction>`\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe value of this property determines how the weapon functions when used, including whether it uses *ballistic projectiles*, or *physics projectiles*. Different properties are available to the weapon depending on the value of this property.\n\nAlthough most action mechanisms utilize ballistic projectiles, the ``Rocket`` action mechanism uses physics projectiles instead. Additionally, any projectiles from these weapons (e.g., the `Rocket Launcher <https://unturned.wiki.gg/wiki/Rocket_Launcher>`_) are explosive.\n\nTo fire a weapon with the  ``String`` action mechanism, a player must be aiming down sights – unless a \"Nock\" GameObject has been added during its Unity setup.\n\n----\n\n.. _doc_item_asset_gun:aim_in_duration:\n\nAim_In_Duration :ref:`float32 <doc_data_builtin_types>` ``0.2``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nHow long it takes to fully aim down sights, in seconds.\n\n----\n\n.. _doc_item_asset_gun:aiming_movement_speed_multiplier:\n\nAiming_Movement_Speed_Multiplier :ref:`float32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the player's movement speed while aiming down sights. Defaults to ``0.75`` when ``Can_Aim_During_Sprint`` is ``false``. Otherwise, defaults to ``1``.\n\n----\n\n.. _doc_item_asset_gun:aiming_recoil_multiplier:\n\nAiming_Recoil_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on recoil magnitude while aiming down sights.\n\n----\n\n.. _doc_item_asset_gun:alert_radius:\n\nAlert_Radius :ref:`float32 <doc_data_builtin_types>` ``48``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe radius of the alert generated by ranged weapons when they are fired. Zombies or animals caught within this radius are alerted. This radius is measured in meters.\n\n----\n\n.. _doc_item_asset_gun:allow_magazine_change:\n\nAllow_Magazine_Change :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``false``, the magazine cannot be removed, replaced, or reloaded. This functions similar to a few other properties, such as ``Hook_Barrel`` or ``Hook_Grip`` when determing valid hook attachment slots.\n\n----\n\n.. _doc_item_asset_gun:ammo_max:\n\nAmmo_Max :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum amount of ammo to randomly generate in the magazine attachment that was attached to the weapon by default.\n\n----\n\n.. _doc_item_asset_gun:ammo_min:\n\nAmmo_Min :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum amount of ammo to randomly generate in the magazine attachment that was attached to the weapon by default.\n\n----\n\n.. _doc_item_asset_gun:ammo_per_shot:\n\nAmmo_Per_Shot :ref:`uint8 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nNumber of ammunition consumed per shot. For example, a value of ``3`` would consume three ammo every time the weapon is fired, while a value of ``0`` would allow for the weapon to have infinite ammo.\n\n----\n\n.. _doc_item_asset_gun:attachment_caliber_#:\n\nAttachment_Caliber_# :ref:`uint16 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a caliber to check for hook attachment compatibility. This property is used in conjunction with ``Attachment_Calibers``, which determines how many instances of this property should be read by the game.\n\nWhen this property is unset, it will default to ``0``. When the ``Attachment_Calibers`` property is not greater than ``0``, this property will default to the value of any ``Magazine_Caliber_#`` properties.\n\nFor example, a valid configuration for a ranged weapon's calibers could be:\n\n.. code-block:: unturnedasset\n\n  Attachment_Calibers 2\n  Attachment_Caliber_0 1\n  Attachment_Caliber_1 9\n\n  Magazine_Calibers 3\n  Magazine_Caliber_0 1\n  Magazine_Caliber_1 4\n  Magazine_Caliber_2 9\n\nThis would allow the ranged weapon to use hook attachments with caliber IDs of 1 or 9, and to use magazine attachments with caliber IDs of 1, 4, or 9.\n\n----\n\n.. _doc_item_asset_gun:attachment_calibers:\n\nAttachment_Calibers :ref:`int32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSet the length of the array containing the calibers for hook attachment compatibility. This property is used in conjunction with the ``Attachment_Caliber_#`` property, and the value of ``Attachment_Calibers`` should be equal to the number of instances of ``Attachment_Caliber_#``.\n\nWhen this property is not greater than ``0`` – it will default to the value of ``Magazine_Calibers``, and the ``Attachment_Caliber_#`` property can no longer be customized.\n\nTo use this property, ``Magazine_Calibers`` must be configured.\n\n----\n\n.. _doc_item_asset_gun:auto:\n\nAuto :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::\n\nThe weapon has an automatic firing mode.\n\n----\n\n.. _doc_item_asset_gun:ballistic_drop:\n\nBallistic_Drop :ref:`float32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\n.. deprecated:: 3.23.7.0\n   Use ``Bullet_Gravity_Multiplier`` instead.\n\nExisting values are automatically converted if ``Bullet_Gravity_Multiplier`` has not been configured. Running the game with the ``-LogBallisticDropConversion`` :ref:`launch option <doc_launch_options>` will log the equivalent ``Bullet_Gravity_Multiplier`` value.\n\n----\n\n.. _doc_item_asset_gun:ballistic_force:\n\nBallistic_Force :ref:`float32 <doc_data_builtin_types>` ``0.002``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe amount of force that should be applied to the *physics projectile*, measured in Newtons. It may be helpful to read Unity's `Rigidbody.AddForce documentation <https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html>`_ to better understand physics projectiles.\n\nProperties used by physics projectiles (such as ``Ballistic_Force``) cannot be used alongside properties intended for ballistic projectiles (such as ``Ballistic_Travel`` or ``Bullet_Gravity_Multiplier``).\n\n----\n\n.. _doc_item_asset_gun:ballistic_steps:\n\nBallistic_Steps :ref:`uint8 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLifespan of *ballistic projectiles*. A higher value relative to ``Ballistic_Travel`` will result in less muzzle velocity. Must be a value greater than ``0``.\n\nDefaults to ``Range ÷ Ballistic_Travel``, rounded up to the nearest integer.\n\nTo avoid a mismatch between the weapon's max range and its manual ballistic range, it is recommend to only configure ``Ballistic_Steps`` or ``Ballistic_Travel`` (or neither) – no both.\n\n----\n\n.. _doc_item_asset_gun:ballistic_travel:\n\nBallistic_Travel :ref:`float32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nTravel speed of *ballistic projectiles*. A higher value relative to ``Ballistic_Steps`` will result in more muzzle velocity. Must be a value greater than ``0.1``.\n\nDefaults to ``10``. If ``Ballistic_Steps`` is specified and greater than ``0``, and ``Ballistic_Travel`` is not specified, then ``Ballistic_Travel`` defaults to ``Range ÷ Ballistic_Steps``.\n\nTo avoid a mismatch between the weapon's max range and its manual ballistic range, it is recommend to only configure ``Ballistic_Travel`` or ``Ballistic_Steps`` (or neither) – no both.\n\n----\n\n.. _doc_item_asset_gun:barrel:\n\nBarrel :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a barrel attachment that should be attached by default. The ``Hook_Barrel`` flag is not required to use this property.\n\n----\n\n.. _doc_item_asset_gun:bullet_gravity_multiplier:\n\nBullet_Gravity_Multiplier :ref:`float32 <doc_data_builtin_types>` ``4``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier for gravity's acceleration. This property is available to *ballistic projectile* weapons. Setting this value to ``1`` allows for more realistic bullet drop.\n\n.. note:: This defaults to ``4`` because *Unturned*'s maximum engagement distance is rather short, but this distance may be raised in the future if/when network improvements are made to the game. Gravity defaults to 9.81 m/s², or can be configured in the :ref:`doc_mapping_config`.\n\n----\n\n.. _doc_item_asset_gun:bursts:\n\nBursts :ref:`int32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen a value greater than ``0`` is provided, the weapon has a burst firing mode. A number of shots equal to this value is fired when using this mode.\n\n----\n\n.. _doc_item_asset_gun:caliber:\n\nCaliber :ref:`uint16 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of the caliber to check for hook attachment and magazine attachment compatibility. To add compatibility for multiple calibers, or to configure hook attachment and magazine attachment compatibility separately, use the ``Magazine_Calibers`` and ``Attachment_Calibers`` properties instead.\n\n----\n\n.. _doc_item_asset_gun:can_aim_during_sprint:\n\nCan_Aim_During_Sprint :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, the player can sprint while aiming down sights.\n\n----\n\n.. _doc_item_asset_gun:can_ever_jam:\n\nCan_Ever_Jam :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, the weapon can jam. Weapons have a chance of jamming once their quality drops below a certain threshold. Starting from the initial threshold, the chance of jamming on each shot is blended between between 0% and a specified max chance.\n\nThe \"ChamberJammed\" Audio Clip is played when a jam occurs, as well as the animation \"UnjamChamber\" if present.\n\nFor an example, refer to ``.../Guns/Cobra_Jam/Cobra_Jam.dat`` in the game files.\n\n----\n\n.. _doc_item_asset_gun:casingejectcountafterrechamberingaftershooting:\n\nCasingEjectCountAfterRechamberingAfterShooting :ref:`int32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOnly applicable if :ref:`RechamberAfterShotCount <doc_item_asset_gun:rechamberaftershotcount>` is non-zero.\n\nIf greater than zero, emit this many bullet casing particles after :ref:`EjectAfterHammerDelay <doc_item_asset_gun:ejectafterhammerdelay>` seconds pass.\n\n----\n\n.. _doc_item_asset_gun:casingejectcountafterreload:\n\nCasingEjectCountAfterReload :ref:`int32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf greater than zero, emit this many bullet casing particles after :ref:`EjectAfterReloadDelay <doc_item_asset_gun:ejectafterhammerdelay>` seconds pass.\n\nDefaults to :ref:`Ammo_Max <doc_item_asset_gun:ammo_max>` for ``Break`` Action guns. Zero otherwise.\n\n----\n\n.. _doc_item_asset_gun:ejectcasingaftershooting:\n\nEjectCasingAfterShooting :ref:`bool <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, emit a bullet casing particle when a shot is fired.\n\nDefaults to true for ``Trigger`` and ``Minigun`` action guns.\n\n----\n\n.. _doc_item_asset_gun:damage_falloff_max_range:\n\nDamage_Falloff_Max_Range :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nPercentage of maximum range where damage stops decreasing. For example, a max falloff range value of ``0.6`` with a range of ``200`` means damage stops dropping off after 120 meters.\n\n----\n\n.. _doc_item_asset_gun:damage_falloff_multiplier:\n\nDamage_Falloff_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nPercentage of damage to apply at maximum range. For example, a falloff multiplier value of ``0.25`` with a damage value of ``40`` means 10 damage will be dealt at maximum range.\n\n----\n\n.. _doc_item_asset_gun:damage_falloff_range:\n\nDamage_Falloff_Range :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nPercentage of maximum range where damage begins decreasing. For example, a falloff range value of ``0.3`` with a range value of ``200`` means damage begins dropping off after 60 meters.\n\n----\n\n.. _doc_item_asset_gun:delete_empty_magazines:\n\nDelete_Empty_Magazines :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\n.. deprecated:: 3.30.3.0\n   Use ``Should_Delete_Empty_Magazines`` instead.\n\nWhen this flag is included, the attached magazine attachment is deleted when fully depleted.\n\n----\n\n.. _doc_item_asset_gun:ejectafterhammerdelay:\n\nEjectAfterHammerDelay :ref:`float32 <doc_data_builtin_types>` ``0.45``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nHow long in seconds after hammering to eject a bullet casing.\n\nOnly applicable if :ref:`RechamberAfterShotCount <doc_item_asset_gun:rechamberaftershotcount>` is non-zero.\n\n----\n\n.. _doc_item_asset_gun:ejectafterreloaddelay:\n\nEjectAfterReloadDelay :ref:`float32 <doc_data_builtin_types>` ``0.5``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nHow long in seconds after reloading to eject bullet casings.\n\nOnly applicable if :ref:`CasingEjectCountAfterReload <doc_item_asset_gun:casingejectcountafterreload>` is greater than zero.\n\n----\n\n.. _doc_item_asset_gun:explosion:\n\nExplosion :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGUID or legacy ID of the effect that should be used for explosions caused by ``Action Rocket`` projectiles.\n\n----\n\n.. _doc_item_asset_gun:fire_delay_seconds:\n\nFire_Delay_Seconds :ref:`int32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDelay before the weapon is actually fired, in seconds.\n\n----\n\n.. _doc_item_asset_gun:firerate:\n\nFirerate :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe value of this property affects the minimum number of ticks between the firing of consecutive shots. A higher ``Firerate`` value will cause the weapon to have a slower rate of a fire. The weapon's rate of fire can be calculated with ``50 ÷ (Firerate + 1)``, as the rounds per second.\n\n----\n\n.. _doc_item_asset_gun:grip:\n\nGrip :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a grip attachment that should be attached by default. The ``Hook_Grip`` flag is not required to use this property.\n\n----\n\n.. _doc_item_asset_gun:gunshot_rolloff_distance:\n\nGunshot_Rolloff_Distance :ref:`float32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDistance over which the gunshot audio rolls off until it is completely inaudible, in meters. Defaults to ``16`` when using ``Action String``; defaults to ``64`` when using ``Action Rocket``; otherwise, defaults to ``512``.\n\n----\n\n.. _doc_item_asset_gun:hammer_time:\n\nHammer_Time :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the time it takes to pull back the hammer a ranged weapon after firing. This does not affect the actual animation speed, but the cooldown before the player can perform other actions (such as shooting) again. Values less than ``1`` have no effect.\n\n----\n\n.. _doc_item_asset_gun:hook_barrel:\n\nHook_Barrel :ref:`flag <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, the ranged weapon has a barrel attachment slot.\n\n----\n\n.. _doc_item_asset_gun:hook_grip:\n\nHook_Grip :ref:`flag <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, the ranged weapon has a grip attachment slot.\n\n----\n\n.. _doc_item_asset_gun:hook_sight:\n\nHook_Sight :ref:`flag <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, the ranged weapon has a sight attachment slot.\n\n----\n\n.. _doc_item_asset_gun:hook_tactical:\n\nHook_Tactical :ref:`flag <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, the ranged weapon has a tactical attachment slot.\n\n----\n\n.. _doc_item_asset_gun:infinite_ammo:\n\nInfinite_Ammo :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen ``true``, ammunition is not depleted from the magazine attachment. This allows for the weapon to have infinite ammo, so long as a magazine attachment with a number of rounds remaining equal to ``Ammo_Per_Shot`` is attached.\n\n----\n\n.. _doc_item_asset_gun:instakill_headshots:\n\nInstakill_Headshots :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf ``true``, a player that is headshot with this weapon is instantly killed. This does not affect zombies, unless the world's difficulty configuration has the ``Weapons_Use_Player_Damage`` setting enabled.\n\n----\n\n.. _doc_item_asset_gun:jam_max_chance:\n\nJam_Max_Chance :ref:`float32 <doc_data_builtin_types>` ``0.1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDecimal-to-percent chance for jamming to occur. This property requires ``Can_Ever_Jam``.\n\n----\n\n.. _doc_item_asset_gun:jam_quality_threshold:\n\nJam_Quality_Threshold :ref:`float32 <doc_data_builtin_types>` ``0.4``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe maximum threshold for when jamming can occur. This value is a decimal-to-percent representation of the item's quality value. For example, a threshold of ``0.4`` allows jamming to start occuring at 40% item quality. This property requires ``Can_Ever_Jam``.\n\n----\n\n.. _doc_item_asset_gun:magazine:\n\nMagazine :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a magazine attachment that should be attached by default.\n\n----\n\n.. _doc_item_asset_gun:magazine_caliber_#:\n\nMagazine_Caliber_# :ref:`uint16 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a caliber to check for magazine attachment compatibility. This property is used in conjunction with ``Magazine_Calibers``, which determines how many instances of this property should be read by the game.\n\nWhen this property is unset, it will default to ``0``. When the ``Magazine_Calibers`` property is not greater than ``0``, this property will default to the value of ``Caliber``.\n\n----\n\n.. _doc_item_asset_gun:magazine_calibers:\n\nMagazine_Calibers :ref:`int32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSet the length of the array containing the calibers for magazine attachment compatibility. This property is used in conjunction with the ``Magazine_Caliber_#`` property, and the value of ``Magazine_Calibers`` should be equal to the number of instances of ``Magazine_Caliber_#``.\n\nWhen this property is not greater than ``0`` – it will default to ``1``, and the ``Magazine_Caliber_#`` property can no longer be customized.\n\nThis property is often used alongside ``Attachment_Calibers``, but this is optional.\n\n----\n\n.. _doc_item_asset_gun:magazine_replacement_#_id:\n\nMagazine_Replacement_#_ID :ref:`uint16 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a magazine attachment that should be used as an alternative default when certain condition(s) are met. This property is used in conjunction with ``Magazine_Replacements``, which determines how many instances of this property should be read by the game.\n\n----\n\n.. _doc_item_asset_gun:magazine_replacement_#_map:\n\nMagazine_Replacement_#_Map :ref:`string <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThis value should be the name of a map. When the weapon spawns on this map, this condition has been met. This property requires ``Magazine_Replacement_#_ID``.\n\n----\n\n.. _doc_item_asset_gun:magazine_replacements:\n\nMagazine_Replacements :ref:`int <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\n``Magazine_Replacements`` and its related properties are used to add alternative magazine attachments that should be used as the weapon's default when certain condition(s) are met.\n\nThis value sets the length of the array containing any alternative default magazine attachments. This property is used in conjunction with the ``Magazine_Replacement_#_ID`` property, and the value of ``Magazine_Replacements`` should be equal to the number of instances of ``Magazine_Replacement_#_ID``.\n\n----\n\n.. _doc_item_asset_gun:must_aim_to_shoot:\n\nMust_Aim_To_Shoot :ref:`bool <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, the gun cannot shoot unless the player is aiming.\n\nDefaults to true for ``Minigun`` :ref:`doc_item_asset_gun:action`. False otherwise.\n\n``String`` :ref:`doc_item_asset_gun:action` overrides ``Must_Aim_To_Shoot`` functionality.\n\n----\n\n.. _doc_item_asset_gun:muzzle:\n\nMuzzle :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGUID or legacy ID of the effect to play after shooting. This is emitted from the ranged weapon's \"Barrel\" GameObject.\n\n----\n\n.. _doc_item_asset_gun:projectile_explosion_launch_speed:\n\nProjectile_Explosion_Launch_Speed :ref:`float32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nPlayers caught within the area-of-effect explosion caused by a *physics projectile* weapon are launched at this speed. For example, this can be used to create velocity-related items like \"rocket-jumping\" mods. Defaults to ``Player_Damage × 0.1``.\n\n----\n\n.. _doc_item_asset_gun:projectile_lifespan:\n\nProjectile_Lifespan :ref:`float32 <doc_data_builtin_types>` ``30``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLifespan of *physics projectiles*, in seconds. After this much time elapses, the projectile despawns.\n\n----\n\n.. _doc_item_asset_gun:projectile_penetrate_buildables:\n\nProjectile_Penetrate_Buildables :ref:`flag <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe area-of-effect explosions caused by *physics projectiles* penetrate through buildables when this flag is set.\n\n----\n\n.. _doc_item_asset_gun:range_rangefinder:\n\nRange_Rangefinder :ref:`float32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOverrides the maximum distance displayed when using a \"Rangefinder\" tactical attachment on this weapon. For example, it may be useful to set this property when using ``Action Rocket``, as explosive projectiles use ``Range`` to determine the explosion radius rather than the maximum range of the weapon. Defaults to the value of the ``Range`` property.\n\n----\n\n.. _doc_item_asset_gun:rechamberaftermagazineattached:\n\nRechamberAfterMagazineAttached :ref:`ERechamberGunAfterReloadMode <doc_item_asset_gun:erechambergunafterreloadmode>` ``IfAmmoWasEmpty``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDetermines whether \"Hammer\" animation plays after attaching a magazine.\nThis happens when a magazine replaces another OR fills previously empty slot.\n\n----\n\n.. _doc_item_asset_gun:rechamberaftermagazinedetached:\n\nRechamberAfterMagazineDetached :ref:`ERechamberGunAfterReloadMode <doc_item_asset_gun:erechambergunafterreloadmode>` ``Always``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDetermines whether \"Hammer\" animation plays after detached a magazine.\nThis happens when a magazine is removed from the gun without a replacement.\n\n----\n\n.. _doc_item_asset_gun:rechamberaftershotcount:\n\nRechamberAfterShotCount :ref:`int32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf non-zero, hammer animation plays after shooting after shooting this many shots and :ref:`RechamberAfterShotDelay <doc_item_asset_gun:rechamberaftershotdelay>`: seconds pass.\n\nShot count resets after reloading, hammering, or dequipping the gun.\n\nDefaults to ``1`` for ``Bolt`` and ``Pump`` Action guns. Zero otherwise.\n\n----\n\n.. _doc_item_asset_gun:rechamberaftershotdelay:\n\nRechamberAfterShotDelay :ref:`float32 <doc_data_builtin_types>` ``0.25``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nHow long in seconds after firing to rechamber the gun by playing the Hammer animation.\n\nOnly applicable if :ref:`RechamberAfterShotCount <doc_item_asset_gun:rechamberaftershotcount>` is non-zero.\n\n----\n\n.. _doc_item_asset_gun:recoil_crouch:\n\nRecoil_Crouch :ref:`float32 <doc_data_builtin_types>` ``0.85``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on camera recoil while crouched.\n\n----\n\n.. _doc_item_asset_gun:recoil_max_x:\n\nRecoil_Max_X :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum horizontal camera recoil in degrees. This property is used in conjunction with ``Recoil_Min_Y``.\n\n----\n\n.. _doc_item_asset_gun:recoil_max_y:\n\nRecoil_Max_Y :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum vertical camera recoil in degrees. This property is used in conjunction with ``Recoil_Min_X``.\n\n----\n\n.. _doc_item_asset_gun:recoil_min_x:\n\nRecoil_Min_X :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum horizontal camera recoil in degrees. This property is used in conjunction with ``Recoil_Max_X``.\n\n----\n\n.. _doc_item_asset_gun:recoil_min_y:\n\nRecoil_Min_Y :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum vertical camera recoil in degrees. This property is used in conjunction with ``Recoil_Max_Y``.\n\n----\n\n.. _doc_item_asset_gun:recoil_midair:\n\nRecoil_Midair :ref:`float32 <doc_data_builtin_types>` ``1.0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on camera recoil while jumping and/or falling.\n\n----\n\n.. _doc_item_asset_gun:recoil_prone:\n\nRecoil_Prone :ref:`float32 <doc_data_builtin_types>` ``0.7``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on camera recoil while prone.\n\n----\n\n.. _doc_item_asset_gun:recoil_sprint:\n\nRecoil_Sprint :ref:`float32 <doc_data_builtin_types>` ``1.25``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on camera recoil while sprinting. This property is not relevant unless ``Can_Aim_During_Sprint`` has been set to ``true``.\n\n----\n\n.. _doc_item_asset_gun:recoil_swimming:\n\nRecoil_Swimming :ref:`float32 <doc_data_builtin_types>` ``1.1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on camera recoil while swimming.\n\n----\n\n.. _doc_item_asset_gun:recover_x:\n\nRecover_X :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on camera degrees to be counter-animated horizontally over the next 250 milliseconds.\n\n----\n\n.. _doc_item_asset_gun:recover_y:\n\nRecover_Y :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on camera degrees to be counter-animated vertically over the next 250 milliseconds.\n\n----\n\n.. _doc_item_asset_gun:reload_time:\n\nReload_Time :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on time it takes to finish reloading the ranged weapon. This does not affect the actual animation speed, but the cooldown before the player can perform other actions (such as shooting) again. Values less than ``1`` have no effect.\n\n----\n\n.. _doc_item_asset_gun:replace:\n\nReplace :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier of the reload animation length before the magazine is respawned. This does not affect the actual animation speed, but the cooldown before the player can perform other actions (such as shooting) again. Values less than ``0.01`` have no effect.\n\n----\n\n.. _doc_item_asset_gun:requires_nonzero_attachment_caliber:\n\nRequires_NonZero_Attachment_Caliber :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf ``true``, attachments must specify at least one non-zero (``0``) caliber ID to be compatible. For example, this can be used to make most vanilla attachments (like the Tactical Laser, Dot Sight, and Vertical Grip) incompatible with this weapon.\n\n----\n\n.. _doc_item_asset_gun:safety:\n\nSafety :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::\n\nThe weapon has a safety firing mode.\n\n----\n\n.. _doc_item_asset_gun:scale_aim_animation_speed:\n\nScale_Aim_Animation_Speed :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen true, the length of the \"Aim_Start\" and \"Aim_Stop\" animations are scaled to match ``Aim_In_Duration`` (with modifiers).\n\n----\n\n.. _doc_item_asset_gun:semi:\n\nSemi :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::\n\nThe weapon has a semi-automatic firing mode.\n\n----\n\n.. _doc_item_asset_gun:shake_max_x:\n\nShake_Max_X :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum 𝘟-axis model shake caused from firing the weapon.\n\n----\n\n.. _doc_item_asset_gun:shake_min_x:\n\nShake_Min_X :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum 𝘟-axis model shake caused from firing the weapon.\n\n----\n\n.. _doc_item_asset_gun:shake_max_y:\n\nShake_Max_Y :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum 𝘠-axis model shake caused from firing the weapon.\n\n----\n\n.. _doc_item_asset_gun:shake_min_y:\n\nShake_Min_Y :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum 𝘠-axis model shake caused from firing the weapon.\n\n----\n\n.. _doc_item_asset_gun:shake_max_z:\n\nShake_Max_Z :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum 𝘡-axis model shake caused from firing the weapon.\n\n----\n\n.. _doc_item_asset_gun:shake_min_z:\n\nShake_Min_Z :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum 𝘡-axis model shake caused from firing the weapon.\n\n----\n\n.. _doc_item_asset_gun:shell:\n\nShell :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGUID or legacy ID of the effect to play after shooting, emitted from the ranged weapon's \"Eject\" GameObject. Defaults to ``33`` when using either ``Action Pump`` or ``Action Break``; defaults to ``1`` when using any other ``Action`` key-value pair except for ``Action Rail``; otherwise, defaults to ``0``.\n\n----\n\n.. _doc_item_asset_gun:should_delete_empty_magazines:\n\nShould_Delete_Empty_Magazines :ref:`bool <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOverrides how empty magazines are handled by the action item mode. When set to ``true``, empty magazine attachments are deleted when completely emptied. The default behavior depends on the configuration of the ``Action`` property.\n\nDefaults to ``true`` when using one of the following ``Action`` enumerators: ``Break``, ``Pump``, ``Rail``, ``Rocket``, or ``String``. Otherwise, defaults to ``false``.\n\n----\n\n.. _doc_item_asset_gun:sight:\n\nSight :ref:`uint16 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a sight attachment that should be attached by default. The ``Hook_Sight`` flag is not required to use this property.\n\n----\n\n.. _doc_item_asset_gun:spread_aim:\n\nSpread_Aim :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the bullet spread while aiming down sights. This is multiplied by the ``Spread_Angle_Degrees`` value.\n\n----\n\n.. _doc_item_asset_gun:spread_angle_degrees:\n\nSpread_Angle_Degrees :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nBullet angle of deviation away from the aiming direction. For example, ``15`` means the shot could hit up to 15 degrees away from the center of the crosshair, whereas ``0`` will always hit the center of the crosshair. All other spread values are multipliers for this.\n\n----\n\n.. _doc_item_asset_gun:spread_crouch:\n\nSpread_Crouch :ref:`float32 <doc_data_builtin_types>` ``0.85``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the bullet spread while crouched.\n\n----\n\n.. _doc_item_asset_gun:spread_hip:\n\nSpread_Hip :ref:`float32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\n.. deprecated:: 3.22.20.0\n   Use ``Spread_Angle_Degrees`` instead.\n\nMaintained for backwards compatibility. Running the game with the ``-LogGunSpreadConversion`` :ref:`launch option <doc_launch_options>` will log the equivalent ``Spread_Angle_Degrees`` value.\n\n----\n\n.. _doc_item_asset_gun:spread_midair:\n\nSpread_Midair :ref:`float32 <doc_data_builtin_types>` ``1.5``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the bullet spread while jumping and/or falling.\n\n----\n\n.. _doc_item_asset_gun:spread_prone:\n\nSpread_Prone :ref:`float32 <doc_data_builtin_types>` ``0.7``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the bullet spread while prone.\n\n----\n\n.. _doc_item_asset_gun:spread_sprint:\n\nSpread_Sprint :ref:`float32 <doc_data_builtin_types>` ``1.25``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the bullet spread while sprinting.\n\n----\n\n.. _doc_item_asset_gun:spread_swimming:\n\nSpread_Swimming :ref:`float32 <doc_data_builtin_types>` ``1.1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the bullet spread while swimming.\n\n----\n\n.. _doc_item_asset_gun:stop_aiming_after_shooting:\n\nStop_Aiming_After_Shooting :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, the gun will stop aiming regardless of player input.\n\n----\n\n.. _doc_item_asset_gun:tactical:\n\nTactical :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLegacy ID of a tactical attachment that should be attached by default. The ``Hook_Tactical`` flag is not required to use this property.\n\n----\n\n.. _doc_item_asset_gun:turret:\n\nTurret :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::::::\n\nThis weapon should be treated as a vehicular turret. This flag affects the player's first-person viewmodel while the weapon is held.\n\n----\n\n.. _doc_item_asset_gun:driverturretviewmodelmode:\n\nDriverTurretViewmodelMode :ref:`EDriverTurretViewmodelMode <doc_item_asset_gun:edriverturretviewmodelmode>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nControls how first-person arms are moved for turrets operated from the driver's seat.\n\n----\n\n.. _doc_item_asset_gun:unjam_chamber_anim:\n\nUnjam_Chamber_Anim :ref:`string <doc_data_builtin_types>` ``UnjamChamber``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nName of an animation clip to play when unjamming the weapon. This property requires ``Can_Ever_Jam``.\n\n----\n\n.. _doc_item_asset_gun:unplace:\n\nUnplace :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier of the reload animation length before the magazine is despawned. This does not affect the actual animation speed, but the cooldown before the player can perform other actions (such as shooting) again.\n\nNPC Rewards\n-----------\n\nGun assets can use quest rewards. For example, every time the ranged weapon is fired an item could be spawned in the player's inventory. Alternatively, shooting the ranged weapon may be required to complete a quest. For more information, refer to the :ref:`Rewards <doc_npc_asset_rewards>` documentation.\n\nThese rewards are prefixed with ``Shoot_Quest_``. For example, ``Shoot_Quest_Rewards 1``.\n\nUnderstanding Projectile Systems\n--------------------------------\n\nAll ranged weapons utilize one of two projectile systems: the *ballistic projectile system*, or the *physics projectile system*. This is determined based on the :ref:`Action <doc_item_asset_gun:action>` the weapon has been configured to use, although most weapons use the ballistic projectile system.\n\nBallistic projectiles use a deterministic simulation. Their travel time, bullet drop, and other characteristics can be configured with properties such as :ref:`Ballistic_Travel <doc_item_asset_gun:ballistic_travel>` and :ref:`Bullet_Gravity_Multiplier <doc_item_asset_gun:bullet_gravity_multiplier>`. When the ballistics game mechanic is disabled, these weapons function as hitscan instead.\n\nPhysics projectiles use Unity's physics simulation. Unlike ballistic projectiles, these are not deterministic. Additionally, physics projectiles cause area-of-effect explosions upon impact. The characteristics of physics projectiles can be configured with properties such as :ref:`Ballistic_Force <doc_item_asset_gun:ballistic_force>` and :ref:`Projectile_Explosion_Launch_Speed <doc_item_asset_gun:projectile_explosion_launch_speed>`.\n"
  },
  {
    "path": "items/hat-asset.rst",
    "content": ".. _doc_item_asset_hat:\n\nHat Assets\n==========\n\nThe ItemHatAsset class is used by clothing items occupying the \"hat\" slot. Hats can be worn by players and zombies, and cover their head.\n\nGame Data File\n--------------\n\nThe ItemHatAsset class inherits properties from the :ref:`ItemGearAsset <doc_item_asset_gear>` class. Properties that are required (or recommended) are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n   \n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Hat``\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Useable <doc_item_asset_intro:useable>`\n     - ``Clothing``\n\nProperties\n``````````\n\nHats have no unique properties. Refer to parent classes for additional properties instead."
  },
  {
    "path": "items/introduction.rst",
    "content": ".. _doc_item_asset_intro:\n\nIntroduction to Items\n=====================\n\nItems are created from the ItemAsset class. They encompass anything that can be carried in a player's in-game inventory. All items will share certain properties, but each item type may have its own unique properties as well. Please refer to :ref:`Asset Definitions <doc_asset_definitions>` and :ref:`Asset Bundles <doc_asset_bundles>` for the full documentation regarding assets and asset bundles.\n\nUnity Asset Bundle Contents\n---------------------------\n\n.. figure:: /img/UnityExampleItem.png\n\n\tAn example of an item being set up in the Unity editor.\n\nTo get started, create a new folder for your custom item. The name of this folder will be relevant when further configuring your item after it has been exported from Unity.\n\nItem (Prefab)\n`````````````\n\nInside this folder, create a new Prefab named \"Item\". This should be tagged as 4: Item, and layered as 13: Item. Open the \"Item\" Prefab.\n\nItems can have multiple colliders including different types, but just attaching a Box Collider component to the root GameObject will usually suffice. It is recommended to use a minimum dimension of (0.2, 0.2, 0.2), because the large colliders are less likely to fall through a thin surface in a single physics tick.\n\nIf your item only has one LOD, you can attach Mesh Filter and Mesh Renderer components directly to the root GameObject. Configure these components as desired.\n\nIt is recommended to have multiple LODs for your item, so that less needs to be rendered when the item is far away. If your item should have multiple LODs, attach a LOD Group component to the root GameObject. Create a child GameObject for each LOD, named \"Model_#\" (e.g., \"Model_0\", \"Model_1\"). Attach the Mesh Filter and Mesh Renderer components to each one. Configure these components as desired.\n\nAdd a new child GameObject named \"Icon\" to the root GameObject. This will be used to draw an icon with an orthographic camera. By default, the game will automatically calculate the position and size of the camera – so the only thing that needs to be configured is its orientation. To test the orientation of your icon, temporarily attach a Camera component with its Projection property set to \"Orthographic\". When satisified, delete the Camera component.\n\nAnimations (Prefab)\n```````````````````\n\nFor equippable items, a Prefab named \"Animations\" is required. The Prefab and the animations included can either be created from scratch, or they can be duplicated from the provided Unity packages.\n\nIf you have installed the ExampleAssets.unitypackage we provide, you can find the vanilla animations for most item types in the game. Prefabs can be found along the ``CoreMasterBundle/Items`` path, while the raw animation files can be found along ``Game/Sources/Animations``.\n\nTo create the Prefab from scratch instead, add a new Prefab named \"Animations\" in your custom item's folder. Add an Animation component to the root GameObject of the \"Animations\" Prefab.\n\nEvery equippable item should have an animation named \"Equip\". If your weapon should be inspectable, it should also have an \"Inspect\" animation.\n\nEquip (Audio Clip)\n``````````````````\n\nTo have a sound play when the item is equipped, include an Audio Clip named \"Equip\" in your custom item's folder.\n\nSkin Base Textures\n``````````````````\n\n.. note::\n\n\tWe should eventually add more documentation about this, but items support texture masking. This is rarely relevant for modders creating their own items, but it is important for skins. Items can optionally include ``Albedo_Base.png``, ``Metallic_Base.png``, or ``Emission_Base.png`` textures in their asset-bundled files. When using certain skins, those parts will be masked out and retain their original material.\n\nGame Data File\n--------------\n\nThe ``GUID``, ``Type``, and ``ID`` properties are required by all item assets. Most item assets will *usually* want (or need) to include the ``Rarity``, ``Useable``, ``Slot``, ``Size_X``, and ``Size_Y`` properties as well, with only a few excepions.\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Add_Default_Actions <doc_item_asset_intro:add_default_actions>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Allow_Manual_Drop <doc_item_asset_intro:allow_manual_drop>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Amount <doc_item_asset_intro:amount>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Backward <doc_item_asset_intro:equipablemodelparent>`\n     - :ref:`flag <doc_data_flag>`\n     - *deprecated*\n   * - :ref:`Bypass_Hash_Verification <doc_item_asset_intro:bypass_hash_verification>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Bypass_ID_Limit <doc_item_asset_intro:bypass_id_limit>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Can_Player_Equip <doc_item_asset_intro:can_player_equip>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Can_Use_Underwater <doc_item_asset_intro:can_use_underwater>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Count_Max <doc_item_asset_intro:count_max>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Count_Min <doc_item_asset_intro:count_min>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Deleted_At_Zero_Quality_Effect <doc_item_asset_intro:deleted_at_zero_quality_effect>`\n     - :ref:`doc_assets_effect`\n     - ``0``\n   * - :ref:`Deleted_At_Zero_Quality_Rewards <doc_item_asset_intro:deleted_at_zero_quality_rewards>`\n     - :ref:`doc_npc_asset_rewards`\n     - ``0``\n   * - :ref:`Destroy_Item_Colliders <doc_item_asset_intro:destroy_item_colliders>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Equipable_Movement_Speed_Multiplier <doc_item_asset_intro:equipable_movement_speed_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`EquipableModelParent <doc_item_asset_intro:equipablemodelparent>`\n     - :ref:`EEquipableModelParent <doc_item_asset_intro:eequipablemodelparent>`\n     - See description\n   * - :ref:`EquipablePrefab <doc_item_asset_intro:equipableprefab>`\n     - :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n     -\n   * - :ref:`EquipAudioClip <doc_item_asset_intro:equipaudioclip>`\n     - :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n     - ``Equip``\n   * - :ref:`Fishing_Catchable <doc_item_asset_intro:fishing_catchable>`\n     - :ref:`FishingCatchableProperties <doc_item_fishing_catchable_properties>`\n     -\n   * - :ref:`GUID <doc_item_asset_intro:guid>`\n     - :ref:`doc_data_guid`\n     -\n   * - :ref:`ID <doc_item_asset_intro:id>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Ignore_TexRW <doc_item_asset_intro:ignore_texrw>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`InspectAudioDef <doc_item_asset_intro:inspectaudiodef>`\n     - :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n     -\n   * - :ref:`Instantiated_Item_Name_Override <doc_item_asset_intro:instantiated_item_name_override>`\n     - :ref:`string <doc_data_builtin_types>`\n     - See description\n   * - :ref:`InventoryAudio <doc_item_asset_intro:inventoryaudio>`\n     - :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n     - See description\n   * - :ref:`Left_Handed_Characters_Mirror_Equipable <doc_item_asset_intro:left_handed_characters_mirror_equipable>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Override_Show_Quality <doc_item_asset_intro:override_show_quality>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Pro <doc_item_asset_intro:pro>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Procedurally_Animate_Inertia <doc_item_asset_intro:procedurally_animate_inertia>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Quality_Max <doc_item_asset_intro:quality_max>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``90``\n   * - :ref:`Quality_Min <doc_item_asset_intro:quality_min>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``10``\n   * - :ref:`Rarity <doc_item_asset_intro:rarity>`\n     - :ref:`doc_data_eitemrarity`\n     - ``Common``\n   * - :ref:`Shared_Skin_Lookup_ID <doc_item_asset_intro:shared_skin_lookup_id>`\n     - :ref:`uint16 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Shared_Skin_Apply_Visuals <doc_item_asset_intro:shared_skin_apply_visuals>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Should_Delete_At_Zero_Quality <doc_item_asset_intro:should_delete_at_zero_quality>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Should_Drop_On_Death <doc_item_asset_intro:should_drop_on_death>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Size_X <doc_item_asset_intro:size_x>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Size_Y <doc_item_asset_intro:size_y>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Size_Z <doc_item_asset_intro:size_z>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``-1``\n   * - :ref:`Size2_Z <doc_item_asset_intro:size2_z>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``-1``\n   * - :ref:`Slot <doc_item_asset_intro:slot>`\n     - :ref:`doc_data_eslottype`\n     - ``None``\n   * - :ref:`Type <doc_item_asset_intro:type>`\n     - :ref:`doc_data_eitemtype`\n     -\n   * - :ref:`Use_Auto_Icon_Measurements <doc_item_asset_intro:use_auto_icon_measurements>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Use_Auto_Stat_Descriptions <doc_item_asset_intro:use_auto_stat_descriptions>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Useable <doc_item_asset_intro:useable>`\n     - :ref:`EUseableType <doc_item_asset_intro:euseabletype>`\n     - ``None``\n\n.. _doc_item_asset_intro:eequipablemodelparent:\n\nEEquipableModelParent Enumeration\n`````````````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``RightHook``\n     - Item is attached to Right_Hook.\n   * - ``LeftHook``\n     - Item is attached to Left_Hook.\n   * - ``Spine``\n     - Item is attached to Spine.\n   * - ``SpineHook``\n     - Item is attached to Spine_Hook, an optional extra child bone of the Spine bone.\n\n.. _doc_item_asset_intro:euseabletype:\n\nEUseableType Enumeration\n````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``None``\n     - Does not correspond to any useable type.\n   * - ``Clothing``\n     - Corresponds to the \"Clothing\" useable type.\n   * - ``Gun``\n     - Corresponds to the \"Gun\" useable type.\n   * - ``Consumeable``\n     - Corresponds to the \"Consumeable\" useable type.\n   * - ``Melee``\n     - Corresponds to the \"Melee\" useable type.\n   * - ``Fuel``\n     - Corresponds to the \"Fuel\" useable type.\n   * - ``Carjack``\n     - Corresponds to the \"Carjack\" useable type.\n   * - ``Barricade``\n     - Corresponds to the \"Barricade\" useable type.\n   * - ``Structure``\n     - Corresponds to the \"Structure\" useable type.\n   * - ``Throwable``\n     - Corresponds to the \"Throwable\" useable type.\n   * - ``Grower``\n     - Corresponds to the \"Grower\" useable type.\n   * - ``Optic``\n     - Corresponds to the \"Optic\" useable type.\n   * - ``Refill``\n     - Corresponds to the \"Refill\" useable type.\n   * - ``Fisher``\n     - Corresponds to the \"Fisher\" useable type.\n   * - ``Cloud``\n     - Corresponds to the \"Cloud\" useable type.\n   * - ``Arrest_Start``\n     - Corresponds to the \"Arrest_Start\" useable type.\n   * - ``Arrest_End``\n     - Corresponds to the \"Arrest_End\" useable type.\n   * - ``Detonator``\n     - Corresponds to the \"Detonator\" useable type.\n   * - ``Filter``\n     - Corresponds to the \"Filter\" useable type.\n   * - ``Carlockpick``\n     - Corresponds to the \"Carlockpick\" useable type.\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_intro:add_default_actions:\n\nAdd_Default_Actions :ref:`bool <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, actions are automatically created for refill ammo, repair, and salvage blueprints. Defaults to true if no ``Actions`` are specified.\n\n----\n\n.. _doc_item_asset_intro:allow_manual_drop:\n\nAllow_Manual_Drop :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nItem can be manually dropped by the player.\n\n----\n\n.. _doc_item_asset_intro:amount:\n\nAmount :ref:`uint8 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum capacity for container-like items, such as ammunition boxes. Typically used with ``Count_Min`` and ``Count_Max``.\n\n----\n\n.. _doc_item_asset_intro:bypass_hash_verification:\n\nBypass_Hash_Verification :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDisable hash verification check, and allow for mismatched files.\n\n----\n\n.. _doc_item_asset_intro:bypass_id_limit:\n\nBypass_ID_Limit :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::::::\n\nAllows for using an ``ID`` value within the range reserved for official content.\n\n----\n\n.. _doc_item_asset_intro:can_player_equip:\n\nCan_Player_Equip :ref:`bool <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nControls whether or not this item can be equipped by the player. This property *technically* requires that ``Useable`` has been configured to any value other than ``None``, as items are not equippable without the functionality provided by having a Useable class.\n\nWhile the inclusion of this property may seem unorthodox, it does have some niche uses. For example, you could create a gun that can only be used by sentries.\n\nThis property defaults to ``true`` if the ``Useable`` property has been set. Otherwise, this defaults to ``false``.\n\n----\n\n.. _doc_item_asset_intro:can_use_underwater:\n\nCan_Use_Underwater :ref:`bool <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nItem can be used while underwater. If the ``Slot`` property has *not* been set to ``Primary``, then this defaults to ``true``. Otherwise, this defaults to ``false``.\n\n----\n\n.. _doc_item_asset_intro:count_max:\n\nCount_Min :ref:`uint8 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum amount to generate, for container-like items. Typically used with ``Count_Max`` and ``Amount``.\n\n----\n\n.. _doc_item_asset_intro:count_min:\n\nCount_Max :ref:`uint8 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum amount to generate, for container-like items. Typically used with ``Count_Min`` and ``Amount``.\n\n----\n\n.. _doc_item_asset_intro:deleted_at_zero_quality_effect:\n\nDeleted_At_Zero_Quality_Effect :ref:`doc_data_assetptr` to :ref:`doc_assets_effect`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf assigned, and :ref:`Should_Delete_At_Zero_Quality <doc_item_asset_intro:should_delete_at_zero_quality>` is ``true``, this effect is played when the item breaks.\n\n----\n\n.. _doc_item_asset_intro:deleted_at_zero_quality_rewards:\n\nDeleted_At_Zero_Quality_Rewards :ref:`doc_npc_asset_rewards`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf assigned, and :ref:`Should_Delete_At_Zero_Quality <doc_item_asset_intro:should_delete_at_zero_quality>` is ``true``, these rewards are granted to the player when the item breaks.\n\n----\n\n.. _doc_item_asset_intro:destroy_item_colliders:\n\nDestroy_Item_Colliders :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf ``false``, colliders are not destroyed when the \"Item\" Prefab is attached to the character. For example equipped vanilla guns do not have any colliders, but some mods (e.g., riot shields) may have relied on child colliders not being destroyed.\n\n----\n\n.. _doc_item_asset_intro:equipable_movement_speed_multiplier:\n\nEquipable_Movement_Speed_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplies character movement speed while equipped in the player's hands. If a gun is equipped, then any gun attachment multipliers are combined as well.\n\n----\n\n.. _doc_item_asset_intro:equipablemodelparent:\n\nEquipableModelParent :ref:`EEquipableModelParent <doc_item_asset_intro:eequipablemodelparent>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOverrides which transform to attach the item to when equipped by the player. Spine may be a better interpolation space for items with animations moving the model between hands.\n\nNormally, this property defaults to ``RightHook``. However, items using the deprecated ``Backward`` flag will cause this to instead use ``LeftHook``.\n\n----\n\n.. _doc_item_asset_intro:equipableprefab:\n\nEquipablePrefab :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOverrides the model spawned when this item is equipped. For example, the \"Equipable\" Prefab could use an animated skinned mesh component while the regular \"Item\" Prefab only needs a static mesh component.\n\n----\n\n.. _doc_item_asset_intro:equipaudioclip:\n\nEquipAudioClip :ref:`Master Bundle Pointer <doc_data_masterbundleptr>` ``Equip``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAudioClip to play when equipping.\n\n----\n\n.. _doc_item_asset_intro:fishing_catchable:\n\nFishing_Catchable :ref:`Fishing Catchable Properties <doc_item_fishing_catchable_properties>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOverrides settings when caught by a fishing rod. For more information, please refer to :ref:`Fishing Catchable Properties <doc_item_fishing_catchable_properties>`.\n\n----\n\n.. _doc_item_asset_intro:guid:\n\nGUID :ref:`doc_data_guid`\n:::::::::::::::::::::::::\n\nRefer to :ref:`GUID <doc_data_guid>` documentation. Item assets are required to have this property.\n\n.. tip::\n\n  If the GUID property has been omitted from the asset file, then the game will automatically attempt to assign a random (and unique) GUID during a successful load.\n\n----\n\n.. _doc_item_asset_intro:id:\n\nID :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::\n\nMust be a unique identifier. Item assets are required to have this property.\n\n----\n\n.. _doc_item_asset_intro:ignore_texrw:\n\nIgnore_TexRW :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::::::::\n\nRead/writeable texture errors regarding this asset should be hidden from the error logs.\n\n----\n\n.. _doc_item_asset_intro:inspectaudiodef:\n\nInspectAudioDef :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAudioClip or OneShotAudioDefinition to play when item is inspected.\n\n----\n\n.. _doc_item_asset_intro:instantiated_item_name_override:\n\nInstantiated_Item_Name_Override :ref:`string <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nName to use when instantiating \"Item\" Prefab. By default, the value of ``ID`` is used. Since Unity's built-in Animation component references GameObjects by name, this property can help share animations between items.\n\n----\n\n.. _doc_item_asset_intro:inventoryaudio:\n\nInventoryAudio :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAudioClip or OneShotAudioDefinition to play when item is picked up, moved within the inventory, and dropped. Default value is dependent on the child asset.\n\n----\n\n.. _doc_item_asset_intro:left_handed_characters_mirror_equipable:\n\nLeft_Handed_Characters_Mirror_Equipable :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf ``false``, the equipped item model is mirrored to counteract the mirrored character.\n\n----\n\n.. _doc_item_asset_intro:override_show_quality:\n\n\nOverride_Show_Quality :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOverride to forcefully show item quality.\n\n----\n\n.. _doc_item_asset_intro:pro:\n\nPro :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::\n\nThis is a Steam Economy item.\n\n----\n\n.. _doc_item_asset_intro:procedurally_animate_inertia:\n\n\nProcedurally_Animate_Inertia :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhether viewmodel should accumulate angular velocity from animations. Useful for low-quality older animations, but should probably be disabled for high-quality newer animations.\n\n----\n\n.. _doc_item_asset_intro:quality_max:\n\n\nQuality_Max :ref:`uint8 <doc_data_builtin_types>` ``90``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMaximum quality to generate.  Typically used with ``Quality_Min``.\n\n----\n\n.. _doc_item_asset_intro:quality_min:\n\n\nQuality_Min :ref:`uint8 <doc_data_builtin_types>` ``10``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMinimum quality to generate.  Typically used with ``Quality_Max``.\n\n----\n\n.. _doc_item_asset_intro:rarity:\n\n\nRarity :ref:`doc_data_eitemrarity` ``Common``\n:::::::::::::::::::::::::::::::::::::::::::::\n\nRarity of the item, as text shown in menus and colors used for highlights.\n\n----\n\n.. _doc_item_asset_intro:shared_skin_lookup_id:\n\nShared_Skin_Lookup_ID :ref:`uint16 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nShare skins with another item. Defaults to item's ``ID``.\n\n----\n\n.. _doc_item_asset_intro:shared_skin_apply_visuals:\n\nShared_Skin_Apply_Visuals :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf false, skin material and mesh are not applied when ``Shared_Skin_Lookup_ID`` is set. For example, a custom axe can transfer the kill counter and ragdoll effect from a vanilla item's skin without also transferring the material and mesh.\n\n----\n\n.. _doc_item_asset_intro:should_delete_at_zero_quality:\n\nShould_Delete_At_Zero_Quality :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nItem should be deleted when at 0% quality.\n\n----\n\n.. _doc_item_asset_intro:should_drop_on_death:\n\nShould_Drop_On_Death :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen a player dies with this item, should an item drop be spawned?\n\n.. note:: The item is not kept after respawning.\n\n----\n\n.. _doc_item_asset_intro:size_x:\n\nSize_X :ref:`uint8 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIn slots, the total width of the inventory space (i.e., the number of columns).\n\n----\n\n.. _doc_item_asset_intro:size_y:\n\nSize_Y :ref:`uint8 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIn slots, the total height of the inventory space (i.e., the number of rows).\n\n----\n\n.. _doc_item_asset_intro:size_z:\n\nSize_Z :ref:`float32 <doc_data_builtin_types>` ``-1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nManually specify orthogonal camera size for item icons. This directly corresponds to the value of a Camera component's Size property in Unity.\n\n----\n\n.. _doc_item_asset_intro:size2_z:\n\nSize2_Z :ref:`float32 <doc_data_builtin_types>` ``-1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOrthogonal camera size for economy icons.\n\n----\n\n.. _doc_item_asset_intro:slot:\n\nSlot :ref:`doc_data_eslottype` ``None``\n:::::::::::::::::::::::::::::::::::::::\n\nWhich equipped item slot an item is valid to be equippable in. This is only relevant if your property has configured the ``Useable`` property.\n\n- ``None`` restricts the useable item to hotkeys.\n- ``Primary`` restricts the useable item to the primary slot.\n- ``Secondary`` restricts the useable item to the primary or secondary slots.\n- ``Tertiary`` is not implemented by this asset.\n- ``Any`` has no restrictions on slots or hotkeying.\n\n----\n\n.. _doc_item_asset_intro:type:\n\nType :ref:`doc_data_eitemtype`\n::::::::::::::::::::::::::::::\n\nDesignates the item's class. Item assets are required to have this property.\n\n----\n\n.. _doc_item_asset_intro:use_auto_icon_measurements:\n\nUse_Auto_Icon_Measurements :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAutomatically calculate axis-aligned item icon camera size from bounds.\n\n----\n\n.. _doc_item_asset_intro:use_auto_stat_descriptions:\n\nUse_Auto_Stat_Descriptions :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, properties like damage, storage, health, etc. are appended to the description.\n\n----\n\n.. _doc_item_asset_intro:useable:\n\nUseable :ref:`doc_item_asset_intro:euseabletype` ``None``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSetting this property adds functionality from a corresponding Useable class. Unless ``Can_Player_Equip`` has been configured otherwise, this *at least* means the item is equippable.\n\nThis property is often used in conjunction with the ``Slot`` property, which determines where an item can be equipped from.\n\nBlueprints and Actions\n``````````````````````\n\nIn addition to the properties already described, item assets can utilize properties for :ref:`crafting blueprints <doc_item_asset_blueprints>` and :ref:`context menu actions <doc_item_asset_actions>`.\n\nLocalization\n------------\n\n**Name** *string*: Item name in user interfaces.\n\n**Description** :ref:`doc_data_richtext`: Item description in user interfaces.\n"
  },
  {
    "path": "items/key-asset.rst",
    "content": ".. _doc_item_asset_key:\n\nKey Assets\n==========\n\nKeys are created from the ItemKeyAsset class. They are intended to be used as a part of the Steam Economy, rather than as in-game content. As such, none of its unique properties can be properly utilized by modders.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Key``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nKey Asset Properties\n--------------------\n\n**Exchange_With_Target_Item** *flag*: Adds UI elements for using this Steam Economy item on another Steam Economy item.\n"
  },
  {
    "path": "items/library-asset.rst",
    "content": ".. _doc_item_asset_library:\n\nLibrary Assets\n==============\n\nLibraries are created from the ItemLibraryAsset class. They are placeable storage containers for experience points.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Library``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Library``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nLibrary Asset Properties\n------------------------\n\n**Capacity** *uint32*: Maximum amount of experience points that can be stored.\n\n**Tax** *byte*: Percentage of the deposit that is taxed. Defaults to 0.\n"
  },
  {
    "path": "items/magazine-asset.rst",
    "content": ".. _doc_item_asset_magazine:\n\nMagazine Assets\n===============\n\nMagazines (or \"magazine attachments\") are created from the ItemMagazineAsset class. They can be attached to ranged weapons.\n\nThis inherits the :ref:`CaliberAsset <doc_item_asset_caliber>` class.\n\nGame Data File\n--------------\n\nMagazine attachments inherit properties from the CaliberAsset class, which in turn inherits properties from the ItemAsset class. Properties that are required to be included are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n\n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Magazine``\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Animal_Damage <doc_item_asset_magazine:animal_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Barricade_Damage <doc_item_asset_magazine:barricade_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Delete_Empty <doc_item_asset_magazine:delete_empty>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Explosion <doc_item_asset_magazine:explosion>`\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Explosion_Launch_Speed <doc_item_asset_magazine:explosion_launch_speed>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Explosion_Penetrate_Buildables <doc_item_asset_magazine:explosion_penetrate_buildables>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Explosion_Plays_Impact_Effects <doc_item_asset_magazine:explosion_plays_impact_effects>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Explosive <doc_item_asset_magazine:explosive>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Impact <doc_item_asset_magazine:impact>`\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Object_Damage <doc_item_asset_magazine:object_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Pellets <doc_item_asset_magazine:pellets>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Player_Damage <doc_item_asset_magazine:player_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Projectile_Blast_Radius_Multiplier <doc_item_asset_magazine:projectile_blast_radius_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Projectile_Damage_Multiplier <doc_item_asset_magazine:projectile_damage_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Projectile_Launch_Force_Multiplier <doc_item_asset_magazine:projectile_launch_force_multiplier>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Range <doc_item_asset_magazine:range>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Resource_Damage <doc_item_asset_magazine:resource_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Should_Fill_After_Detach <doc_item_asset_magazine:should_fill_after_detach>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Spawn_Explosion_On_Dedicated_Server <doc_item_asset_magazine:spawn_explosion_on_dedicated_server>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Speed <doc_item_asset_magazine:speed>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`Structure_Damage <doc_item_asset_magazine:structure_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Stuck <doc_item_asset_magazine:stuck>`\n     - :ref:`uint8 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Tracer <doc_item_asset_magazine:tracer>`\n     - :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Vehicle_Damage <doc_item_asset_magazine:vehicle_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`Zombie_Damage <doc_item_asset_magazine:zombie_damage>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_magazine:animal_damage:\n\nAnimal_Damage :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to animals caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:barricade_damage:\n\nBarricade_Damage :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to barricades caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:delete_empty:\n\nDelete_Empty :ref:`flag <doc_data_flag>`\n::::::::::::::::::::::::::::::::::::::::\n\nThe magazine attachment should be deleted when it is fully depleted.\n\n----\n\n.. _doc_item_asset_magazine:explosion:\n\nExplosion :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGUID or legacy ID of the effect that should be used for explosions caused by magazine attachment using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:explosion_launch_speed:\n\nExplosion_Launch_Speed :ref:`float32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nPlayers caught within the area-of-effect explosion caused by projectiles when using the ``Explosive`` property are launched at this speed, in meters per second. Defaults to the resulting value of ``Player_Damage * 0.1``.\n\n----\n\n.. _doc_item_asset_magazine:explosion_penetrate_buildables:\n\nExplosion_Penetrate_Buildables :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, explosion damage passes through buildable items.\n\n----\n\n.. _doc_item_asset_magazine:explosion_plays_impact_effects:\n\nExplosion_Plays_Impact_Effects :ref:`bool <doc_data_builtin_types>` ``true``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, per-surface effects like blood splatter are created.\nDefaults to true, but can be disabled particularly if a performance issue (e.g., an explosive many-pellet shotgun shell).\n\n----\n\n.. _doc_item_asset_magazine:explosive:\n\nExplosive :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::\n\nWhen this flag is included, the projectile fired from a ballistics projectile weapon will cause an area-of-effect explosion. This is typically used alongside the ``Range`` property.\n\n----\n\n.. _doc_item_asset_magazine:impact:\n\nImpact :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGUID or legacy ID of the effect that should be play on impact.\n\n----\n\n.. _doc_item_asset_magazine:object_damage:\n\nObject_Damage :ref:`float32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to players caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag. Defaults to the value of the ``Resource_Damage`` property.\n\n----\n\n.. _doc_item_asset_magazine:pellets:\n\nPellets :ref:`uint8 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nNumber of bullet rays shot.\n\n----\n\n.. _doc_item_asset_magazine:player_damage:\n\nPlayer_Damage :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to players caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:projectile_blast_radius_multiplier:\n\nProjectile_Blast_Radius_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the blast radius of the explosive projectiles fired from physics projectile weapons.\n\n----\n\n.. _doc_item_asset_magazine:projectile_damage_multiplier:\n\nProjectile_Damage_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the damage dealt by the explosive projectiles fired from physics projectile weapons.\n\n----\n\n.. _doc_item_asset_magazine:projectile_launch_force_multiplier:\n\nProjectile_Launch_Force_Multiplier :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on the launch force applied to the explosive projectiles fired from physics projectile weapons.\n\n----\n\n.. _doc_item_asset_magazine:range:\n\nRange :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIn meters, the radius of the area-of-effect explosion caused by a projectile when a magazine attachment is using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:resource_damage:\n\nResource_Damage :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to resources caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:should_fill_after_detach:\n\nShould_Fill_After_Detach :ref:`bool <doc_data_builtin_types>` ``false``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nAmmunition should be fully refilled after the magazine attachment is detached from a ranged weapon.\n\n----\n\n.. _doc_item_asset_magazine:spawn_explosion_on_dedicated_server:\n\nSpawn_Explosion_On_Dedicated_Server :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhen using the ``Explosion`` property, spawn the explosion effect on the server.\n\n----\n\n.. _doc_item_asset_magazine:speed:\n\nSpeed :ref:`float32 <doc_data_builtin_types>` ``1``\n:::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplier on reload speed.\n\n----\n\n.. _doc_item_asset_magazine:structure_damage:\n\nStructure_Damage :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to structures caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:stuck:\n\nStuck :ref:`uint8 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThe amount of quality that should be lost after the projectile hits something. When this value is greater than ``0``, the item will have a visible quality value. This property is typically used with :ref:`ranged weapons <doc_item_asset_gun>` utilizing the ``Action String`` key-value pair, such as a crossbow.\n\n----\n\n.. _doc_item_asset_magazine:tracer:\n\nTracer :ref:`doc_data_guid` or :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nGUID or legacy ID of the effect that should be used for bullet tracers.\n\n----\n\n.. _doc_item_asset_magazine:vehicle_damage:\n\nVehicle_Damage :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to vehicles caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag.\n\n----\n\n.. _doc_item_asset_magazine:zombie_damage:\n\nZombie_Damage :ref:`float32 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDamage dealt to zombies caught within the area-of-effect explosion of a magazine attachment using the ``Explosive`` flag.\n\nUnity_Setup\n-----------\n\nProjectile.prefab: Optional for projectile-launching guns. If included, overrides the projectile instantiated when the gun is fired.\n"
  },
  {
    "path": "items/map-asset.rst",
    "content": ".. _doc_item_asset_map:\n\nMap Assets\n==========\n\nMaps and compasses are created from the ItemMapAsset class. They provide the player with additional UI information for as long as they are in the player's inventory. They can neither be held nor equipped.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Map``, ``Compass``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nMap Asset Properties\n--------------------\n\n**Enables_Map** *flag*: Provides access to a satellite map display.\n\n**Enables_Chart** *flag*: Provides access to a chart map display.\n\n**Enables_Compass** *flag*: Provides a compass HUD, and the ability to set visible waypoints on the map display.\n"
  },
  {
    "path": "items/mask-asset.rst",
    "content": ".. _doc_item_asset_mask:\n\nMask Assets\n===========\n\nMasks are created from the ItemMaskAsset class. They can be worn by players and zombies.\n\nThis inherits the :ref:`GearAsset <doc_item_asset_gear>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Mask``)\n\n**Useable** *enum* (``Clothing``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nMask Asset Properties\n---------------------\n\n**Earpiece** *flag*: Specified if mask allows for listening on communications by walkie-talkie.\n\n**FilterDegradationRateMultiplier** *float32*: Multiplier for how quickly deadzones deplete a gasmask's filter quality. For example, 2 is faster (2x) and 0.5 is slower.\n"
  },
  {
    "path": "items/medical-asset.rst",
    "content": ".. _doc_item_asset_medical:\n\nMedical Assets\n==============\n\nMedical items (or \"medicine\") are created from the ItemMedicalAsset class. They are irreversibly consumed by the player on use, and directly affect a player's stats such as health or immunity.\n\nThis inherits the :ref:`ConsumeableAsset <doc_item_asset_consumeable>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Medical``)\n\n**Useable** *enum* (``Consumeable``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nMedical Asset Properties\n------------------------\n\nMedicine have no unique asset properties. Refer to parent classes for additional properties.\n"
  },
  {
    "path": "items/melee-asset.rst",
    "content": ".. _doc_item_asset_melee:\n\nMelee Assets\n============\n\nMelees (or \"melee weapons\") are created from the ItemMeleeAsset class. They can be used as a source of damage. Melee weapons always show quality.\n\nThis inherits the :ref:`WeaponAsset <doc_item_asset_weapon>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Melee``)\n\n**Useable** *enum* (``Melee``)\n\n**Slot** :ref:`ESlotType <doc_data_eslottype>` (``None``, ``Primary``, ``Secondary``, ``Any``): Most melee weapons, including vanilla items, use ``Secondary``. This allows the weapon to be used from either the character's primary or secondary slot.\n\n**ID** *uint16*: Must be a unique identifier.\n\nMelee Asset Properties\n----------------------\n\n**Alert_Radius** *float*: The radius where zombies and animals should be alerted when attacking, measured in meters. Defaults to 8.\n\n**AttackAudioClip** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: AudioClip to play when attacking.\n\n**ImpactAudioDef** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: AudioClip or OneShotAudioDefinition to play upon impact.\n\n**Light** *flag*: Provides a toggleable flashlight, and allows for using :ref:`PlayerSpotLightConfig <doc_data_playerspotlightconfig>` properties.\n\n**Repair** *flag*: Repairs barricades, structures, and vehicles.\n\n**Repeated** *flag*: The melee weapon's strong attack is disabled, and its weak attack will deal damage continuously.\n\n**Stamina** *byte*: Amount of stamina depleted with each attack. Defaults to 0.\n\n**Strength** *float*: Multiplier on the damage dealt by strong attacks.\n\n**Strong** *float*: Multiplier for the strong attack animation length, for when to apply damage. Defaults to 0.33.\n\n**Weak** *float*: Multiplier for the weak attack animation length, for when to apply damage. Defaults to 0.5.\n\nNPC Rewards\n-----------\n\nFor more information, refer to the :ref:`Rewards <doc_npc_asset_rewards>` documentation.\n\nRewards can be granted for weak and/or strong attacks. ``Weak_Attack_Quest_Rewards #`` with ``Weak_Attack_Quest_Reward_`` prefix or ``Strong_Attack_Quest_Rewards #`` with ``Strong_Attack_Quest_Reward_`` prefix.\n"
  },
  {
    "path": "items/oil-pump-asset.rst",
    "content": ".. _doc_item_asset_oil_pump:\n\nOil Pump Assets\n===============\n\nOil pumps are created from the ItemOilPumpAsset class. They are placeables capable of creating fuel. When powered, oil pumps generate fuel over time.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Oil_Pump``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Oil``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nOil Pump Asset Properties\n-------------------------\n\n**Fuel_Capacity** *uint16*: Maximum units of fuel that can be stored in the oil pump. Defaults to 0.\n"
  },
  {
    "path": "items/optic-asset.rst",
    "content": ".. _doc_item_asset_optic:\n\nOptic Assets\n============\n\nOptics are created from the ItemOpticAsset class. They can modify a player's view.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Optic``)\n\n**Useable** *enum* (``Optic``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nSight Asset Properties\n----------------------\n\n**Zoom** *float*: Multiplicative amount of zoom. Defaults to 1.\n"
  },
  {
    "path": "items/pants-asset.rst",
    "content": ".. _doc_item_asset_pants:\n\nPants Assets\n============\n\nPants are created from the ItemPantsAsset class. They can be worn by players and zombies.\n\nThis inherits the :ref:`BagAsset <doc_item_asset_bag>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Pants``)\n\n**Useable** *enum* (``Clothing``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nPants Asset Properties\n----------------------\n\nPants have no unique asset properties. Refer to parent classes for additional properties.\n"
  },
  {
    "path": "items/placeable-asset.rst",
    "content": ".. _doc_item_asset_placeable:\n\nPlaceable Assets\n================\n\nThe ItemPlaceableAsset class is a base class that other classes are derived from. Placeables are able to be placed by players.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nPlaceable Asset Properties\n--------------------------\n\n**ExplosionEffect_CopyModelPosition** *bool*: If true, effect spawns exactly at the model position without any offset. Defaults to false for backwards compatibility.\n\n**ExplosionEffect_CopyModelRotation** *bool*: If true, effects spawns with same rotation as the model. Defaults to false for backwards compatibility.\n\n**Item_Dropped_On_Destroy** :ref:`Asset Pointer <doc_data_assetptr>`: Item asset or spawn table for items dropped when destroyed.\n\nThis property can also be set to a string value of ``this``, which will use the the owning item's GUID. Useful to avoid accidentally writing the wrong ID.\n\n**Min_Items_Dropped_On_Destroy** *int*: Minimum number of items to drop when destroyed. Defaults to 0.\n\n**Max_Items_Dropped_On_Destroy** *int*: Maximum number of items to drop when destroyed. Defaults to 0.\n\n**Items_Dropped_On_Destroy** *int*: Shorthand for setting both ``Min_Items_Dropped_On_Destroy`` and ``Max_Items_Dropped_On_Destroy``.\n\n**Min_Items_Recovered_On_Salvage** *int*: Minimum number of items to receive when picked up below 100% health. Defaults to 1.\n\n**Max_Items_Recovered_On_Salvage** *int*: Maximum number of items to receive when picked up below 100% health. Defaults to 1.\n\n**Items_Recovered_On_Salvage** *int*: Shorthand for setting both ``Min_Items_Recovered_On_Salvage`` and ``Max_Items_Recovered_On_Salvage``.\n\n**Min_Items_Recovered_On_Salvage_Full_Health** *int*: Minimum number of items to receive when picked up at 100% health. Defaults to 1.\n\n**Max_Items_Recovered_On_Salvage_Full_Health** *int*: Maximum number of items to receive when picked up at 100% health. Defaults to 1.\n\n**Items_Recovered_On_Salvage_Full_Health** *int*: Shorthand for setting both ``Min_Items_Recovered_On_Salvage_Full_Health`` and ``Max_Items_Recovered_On_Salvage_Full_Health``.\n\n**PlaceableProvidesCraftingTags** list of :ref:`Asset Pointer <doc_data_assetptr>`: :ref:`doc_assets_tag` available to nearby players for blueprint requirements. Tags are listed in the item description as \"crafting capabilities.\"\n\nFor example, the vanilla Brick Oven provides two tags:\n\n.. code-block:: unturneddat\n\n\tPlaceableProvidesCraftingTags\n\t[\n\t\t// Heat Source (for backwards compatibility)\n\t\t20f30322bbcc4b01a4f116d22b24c21a\n\t\t// Enclosed Heat Source\n\t\td2cc65b749e5477f95103601df89cdbc\n\t]\n\n**SalvageItem** :ref:`Asset Pointer <doc_data_assetptr>`: Override the default salvaging behavior by pointing to a specific item or spawn table that should be added when salvaging a placeable that is below 100% health. By default, this property will choose a random item used in the placeable's blueprints.\n\n**SalvageItem_FullHealth** :ref:`Asset Pointer <doc_data_assetptr>`: Defaults to self. Overrides the default pickup behavior by pointing to a specific item or spawn table that should be added when salvaging a placeable that is at 100% health.\n\nThis property can also be set to a string value of ``this``, which will use the the owning item's GUID. Useful to avoid accidentally writing the wrong ID.\n"
  },
  {
    "path": "items/refill-asset.rst",
    "content": ".. _doc_item_asset_refill:\n\nRefill Assets\n=============\n\nRefills (localized as \"water canisters\") are created from the ItemRefillAsset class. They are useables able to siphon, store, and deposit water. Players can also drink from water canisters in order to restore their status bars. Water canisters have four potential states: empty, salty, dirty, or clean.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Refill``)\n\n**Useable** *enum* (``Refill``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nRefill Asset Properties\n-----------------------\n\n**ConsumeAudioClip** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: AudioClip to play when the consumeable is used.\n\n**Clean_Food** *float*: Amount of food restored when drinking clean water.\n\n**Clean_Health** *float*: Amount of health restored when drinking clean water.\n\n**Clean_Oxygen** *float*: Amount of oxygen restored when drinking clean water.\n\n**Clean_Stamina** *float*: Amount of stamina restored when drinking clean water.\n\n**Clean_Virus** *float*: Amount of immunity depleted when drinking clean water.\n\n**Clean_Water** *float*: Amount of water restored when drinking clean water.\n\n**Dirty_Food** *float*: Amount of food restored when drinking dirty water. Defaults to the result of ``Clean_Food * 0.6``.\n\n**Dirty_Health** *float*: Amount of health restored when drinking dirty water. Defaults to the result of ``Clean_Health * 0.6``.\n\n**Dirty_Oxygen** *float*: Amount of oxygen restored when drinking dirty water. Defaults to the result of ``Clean_Oxygen * 0.6``.\n\n**Dirty_Stamina** *float*: Amount of stamina restored when drinking dirty water. Defaults to the result of ``Clean_Stamina * 0.6``.\n\n**Dirty_Virus** *float*: Amount of immunity depleted when drinking dirty water. Defaults to the result of ``Clean_Virus * -0.399999976``.\n\n**Dirty_Water** *float*: Amount of water restored when drinking dirty water. Defaults to the result of ``Clean_Water * 0.6``.\n\n**Salty_Food** *float*: Amount of food restored when drinking salty water. Defaults to the result of ``Clean_Food * 0.25``.\n\n**Salty_Health** *float*: Amount of health restored when drinking salty water. Defaults to the result of ``Clean_Health * 0.25``.\n\n**Salty_Oxygen** *float*: Amount of oxygen restored when drinking salty water. Defaults to the result of ``Clean_Oxygen * 0.25``.\n\n**Salty_Stamina** *float*: Amount of stamina restored when drinking salty water. Defaults to the result of ``Clean_Stamina * 0.25``.\n\n**Salty_Virus** *float*: Amount of immunity depleted when drinking salty water. Defaults to the result of ``Clean_Virus * -0.75``.\n\n**Salty_Water** *float*: Amount of water restored when drinking salty water. Defaults to the result of ``Clean_Water * 0.25``.\n\n.. deprecated:: 3.20.9.0 **Water** *byte*: Deprecated in favor of ``Clean_Water``. When this property is used, its value is assigned to ``Clean_Water`` instead."
  },
  {
    "path": "items/sentry-asset.rst",
    "content": ".. _doc_item_asset_sentry:\n\nSentry Assets\n=============\n\nSentries (localized as \"robotic turrets\") are created from the ItemSentryAsset class. They are placeables that can automatically detect, track, and attack target under certain conditions. Storing a ranged weapon inside a sentry allows it to use that weapon when attacking target.\n\nThis inherits the :ref:`StorageAsset <doc_item_asset_storage>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Sentry``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Sentry``, ``Sentry_Freeform``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nSentry Asset Properties\n-----------------------\n\n**Detection_Radius** *float*: Radius for initially detecting targets, in meters. Defaults to 48.\n\n**Mode** *enum* (``Friendly``, ``Neutral``, ``Hostile``): The sentry's \"Mode\" determines what the sentry considers a valid target. Defaults to ``Mode Neutral``.\n\n**Infinite_Ammo** *bool*: Whether or not the magazine attachments in the stored ranged weapon should be depleted during use. If true, the ranged weapon has infinite ammo and any attached magazine attachment will not be depleted during use. Defaults to false.\n\n**Infinite_Quality** *bool*: Whether or not the stored ranged weapon should degrade during use. If true, the ranged weapon's quality will not degrade during use. Defaults to false.\n\n**Requires_Power** *bool*: Whether or not the sentry requires power from a generator. If true, the sentry must be powered in order for it to detect, track, and attack targets. Defaults to true.\n\n**Target_Acquired_Effect** :ref:`Asset Pointer <doc_data_assetptr>`: The audio effect played when a target is detected. Defaults to ab5f0056b54545c8a051159659da8bea.\n\n**Target_Animals** *bool*: If true, this sentry can attack animals. Defaults to true.\n\n**Target_Lost_Effect** :ref:`Asset Pointer <doc_data_assetptr>`: The audio effect played when a target is no longer detected. Defaults to 288b98b718084699ba3653c592e57803.\n\n**Target_Loss_Radius** *float*: Radius for continuing to track targets after they have left the initial detection radius, in meters. Defaults to ``Detection_Radius * 1.2f`` (i.e., 20% higher than ``Detection_Radius``).\n\n**Target_Players** *bool*: If true, this sentry can attack players. Defaults to true.\n\n**Target_Vehicles** *bool*: If true, this sentry can attack vehicles. Defaults to true.\n\n**Target_Zombies** *bool*: If true, this sentry can attack zombies. Defaults to true.\n\n**Sentry_Bypasses_PvE** *bool*: If true, sentry can damage players and vehicles in PvE mode. Defaults to false.\n\n**React_To_Attacks** *bool*: If true, sentry immediately focuses on attacking player. Defaults to false.\n\n**Sweep_Yaw** *float*: Yaw range the sentry sweeps left/right. Defaults to 120.\n\n**Sweep_Period** *float*: How long in seconds for the sentry to complete a sweep from left to right and back. Defaults to 6.3 seconds.\n"
  },
  {
    "path": "items/shirt-asset.rst",
    "content": ".. _doc_item_asset_shirt:\n\nShirt Assets\n============\n\nShirts are created from the ItemShirtAsset class. They can be worn by players and zombies.\n\nThis inherits the :ref:`BagAsset <doc_item_asset_bag>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Shirt``)\n\n**Useable** *enum* (``Clothing``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nShirt Asset Properties\n----------------------\n\n**Ignore_Hand** *flag*: Specified if shirt should ignore a player's left-handed setting.\n\nBody Mesh Replacements\n----------------------\n\nFor the full documentation, refer to the :ref:`Character Mesh Replacement <doc_character_mesh_replacement>` documentation.\n\n**Has_1P_Character_Mesh_Override** *bool*: A prefab named \"Character_Mesh_1P_Override_0\" should be loaded. Defaults to false.\n\n**Character_Mesh_3P_Override_LODs** *uint16*: Number of prefabs to load for each LOD index. Defaults to 0.\n\n**Has_Character_Material_Override** *bool*: A material named \"Character_Material_Override\" should be loaded to replace the first-person and third-person mesh materials. Defaults to false.\n"
  },
  {
    "path": "items/sight-asset.rst",
    "content": ".. _doc_item_asset_sight:\n\nSight Assets\n============\n\nSights (or \"sight attachments\") are created from the ItemSightAsset class. They are inventory items that can be attached to ranged weapons.\n\nThis inherits the :ref:`CaliberAsset <doc_item_asset_caliber>` class.\n\nGame Data File\n--------------\n\nSight attachments inherit properties from the CaliberAsset class, which in turn inherits properties from the ItemAsset class. Properties that are required to be included are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n\n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Sight``\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`AimAlignment_LocalOffset <doc_item_asset_sight:aimalignment_localoffset>`\n     - :ref:`Vector3 <doc_data_vector3>`\n     - ``(0, 0, 0)``\n   * - :ref:`AimAlignment_Owner <doc_item_asset_sight:aimalignment_owner>`\n     - :ref:`EAimAlignmentTransformOwner <doc_item_asset_sight:eaimalignmenttransformowner>`\n     - ``Sight``\n   * - :ref:`AimAlignment_Path <doc_item_asset_sight:aimalignment_path>`\n     - :ref:`string <doc_data_builtin_types>`\n     - ``Model_0/Aim``\n   * - :ref:`DistanceMarkers <doc_item_asset_sight:distancemarkers>`\n     - :ref:`list of DistanceMarker <doc_item_asset_sight:distancemarker_dictionary_descriptions>`\n     -\n   * - :ref:`Holographic <doc_item_asset_sight:holographic>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Nightvision_Color <doc_item_asset_sight:nightvision_color>`\n     - :ref:`color <doc_data_color>`\n     - See description\n   * - :ref:`Nightvision_Fog_Intensity <doc_item_asset_sight:nightvision_fog_intensity>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - See description\n   * - :ref:`Offset_Scope_Overlay_By_One_Texel <doc_item_asset_sight:offset_scope_overlay_by_one_texel>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n   * - :ref:`Vision <doc_item_asset_sight:vision>`\n     - :ref:`ELightingVision <doc_data_elightingvision>`\n     - ``None``\n   * - :ref:`Zoom <doc_item_asset_sight:zoom>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1``\n   * - :ref:`ThirdPerson_Zoom <doc_item_asset_sight:thirdperson_zoom>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``1.25``\n   * - :ref:`Zoom_Using_Eyes <doc_item_asset_sight:zoom_using_eyes>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``false``\n\n.. _doc_item_asset_sight:distancemarker_dictionary:\n\nDistanceMarker Dictionary\n`````````````````````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Distance <doc_item_asset_sight:distancemarker_distance>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`LineOffset <doc_item_asset_sight:distancemarker_lineoffset>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0``\n   * - :ref:`LineWidth <doc_item_asset_sight:distancemarker_linewidth>`\n     - :ref:`float32 <doc_data_builtin_types>`\n     - ``0.05``\n   * - :ref:`Side <doc_item_asset_sight:distancemarker_side>`\n     - :ref:`ESide <doc_item_asset_sight:eside_enumeration>`\n     - ``Right``\n   * - :ref:`HasLabel <doc_item_asset_sight:distancemarker_haslabel>`\n     - :ref:`bool <doc_data_builtin_types>`\n     - ``true``\n   * - :ref:`Color <doc_item_asset_sight:distancemarker_color>`\n     - :ref:`color <doc_data_color>`\n     - ``black``\n\n.. _doc_item_asset_sight:eaimalignmenttransformowner:\n\nEAimAlignmentTransformOwner Enumeration\n````````````````````````````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``Sight``\n     - Look for aim alignment transform relative to sight model. Defaults to Model_0/Aim.\n   * - ``Gun``\n     - Look for aim alignment transform relative to equipable prefab. Requires setting AimAlignment_Path.\n\n.. _doc_item_asset_sight:eside_enumeration:\n\nESide Enumeration\n`````````````````\n\n.. list-table::\n   :widths: 25 75\n   :header-rows: 1\n\n   * - Named Value\n     - Description\n   * - ``Left``\n     - Marking extends to the left from the center.\n   * - ``Right``\n     - Marking extends to the right from the center.\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_sight:aimalignment_localoffset:\n\nAimAlignment_LocalOffset :ref:`Vector3 <doc_data_vector3>` ``(0, 0, 0)``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nPosition offset relative to Aim transform or transform specified by ``AimAlignment_Path``.\n\n----\n\n.. _doc_item_asset_sight:aimalignment_owner:\n\nAimAlignment_Owner :ref:`EAimAlignmentTransformOwner <doc_item_asset_sight:eaimalignmenttransformowner>` ``Sight``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nControls where to find ``AimAlignment_Path``.\n\n----\n\n.. _doc_item_asset_sight:aimalignment_path:\n\nAimAlignment_Path :ref:`string <doc_data_builtin_types>` ``Model_0/Aim``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhile aiming down sights, the camera's position is aligned with this transform. Relative to ``AimAlignment_Owner``.\n\n----\n\n.. _doc_item_asset_sight:distancemarkers:\n\nDistanceMarkers :ref:`list of DistanceMarker <doc_item_asset_sight:distancemarker_dictionary_descriptions>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nThis property is a list of :ref:`DistanceMarker dictionaries <doc_item_asset_sight:distancemarker_dictionary>`. It can be used to add visible (and accurate) distance markers to the scope that account for the weapon's bullet drop.\n\n----\n\n.. _doc_item_asset_sight:holographic:\n\nHolographic :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::\n\nThis sight should be holographic.\n\n----\n\n.. _doc_item_asset_sight:nightvision_color:\n\nNightvision_Color :ref:`color <doc_data_color>`\n:::::::::::::::::::::::::::::::::::::::::::::::\n\nOverride the default nightvision color. To configure this property, the ``Vision`` property must be set to ``Military``. This property supports using legacy color parsing. When not overridden, the default nightivision color will depend on the value of the :ref:`Vision <doc_item_asset_sight:vision>` property.\n\n----\n\n.. _doc_item_asset_sight:nightvision_fog_intensity:\n\nNightvision_Fog_Intensity :ref:`float32 <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nConfigure the intensity of fog while nightvision is active. When this property has not been configured, the default fog intensity will depend on the value of the :ref:`Vision <doc_item_asset_sight:vision>` property.\n\n----\n\n.. _doc_item_asset_sight:offset_scope_overlay_by_one_texel:\n\nOffset_Scope_Overlay_By_One_Texel :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf ``true``, the 2D scope texture will be scaled up slightly to center the pixel that would otherwise be left of center. For example, when enabled with a 512×512 texture the pixel at 255×255 will be centered on the display.\n\n----\n\n.. _doc_item_asset_sight:vision:\n\nVision :ref:`ELightingVision <doc_data_elightingvision>` ``None``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSet a unique lighting vision effect to use. The value of this property may effect the default values of other properties. The ``Headlamp`` enumerator is not supported by this property.\n\n----\n\n.. _doc_item_asset_sight:zoom:\n\nZoom :ref:`float32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMultiplicative amount of zoom. This value must be equal to or greater than ``1``.\n\n----\n\n.. _doc_item_asset_sight:thirdperson_zoom:\n\nThirdPerson_Zoom :ref:`float32 <doc_data_builtin_types>` ``1.25``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nZoom factor while in the third-person perspective. This value must be equal to or greater than ``1``.\n\n----\n\n.. _doc_item_asset_sight:zoom_using_eyes:\n\nZoom_Using_Eyes :ref:`bool <doc_data_builtin_types>` ``false``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nWhether the main camera field of view should zoom without a scope overlay.\n\n.. _doc_item_asset_sight:distancemarker_dictionary_descriptions:\n\nDistanceMarker Dictionary Descriptions\n``````````````````````````````````````\n\n.. _doc_item_asset_sight:distancemarker_distance:\n\nDistance :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nMeters between the player and a hypothethical target.\n\n----\n\n.. _doc_item_asset_sight:distancemarker_lineoffset:\n\nLineOffset :ref:`float32 <doc_data_builtin_types>` ``0``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDistance between center line and start of horizontal line marker.\n\nDisplay-related properties like ``LineOffset`` are a percentage (represented as a decimal value from 0 to 1). For example, ``0.25`` would be 25%.\n\n----\n\n.. _doc_item_asset_sight:distancemarker_linewidth:\n\nLineWidth :ref:`float32 <doc_data_builtin_types>` ``0.05``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLength of horizontal line marker.\n\nDisplay-related properties like ``LineWidth`` are a percentage (represented as a decimal value from 0 to 1). For example, ``0.25`` would be 25%.\n\n----\n\n.. _doc_item_asset_sight:distancemarker_side:\n\nSide :ref:`ESide <doc_item_asset_sight:eside_enumeration>` ``Right``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nDirection the horizontal line and text expand in.\n\n----\n\n.. _doc_item_asset_sight:distancemarker_haslabel:\n\nHasLabel :ref:`bool <doc_data_builtin_types>` ``true``\n::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nIf true, a label with ``Distance`` text is shown next to the horizontal line marker.\n\n----\n\n.. _doc_item_asset_sight:distancemarker_color:\n\nColor :ref:`color <doc_data_color>` ``black``\n:::::::::::::::::::::::::::::::::::::::::::::\n\nOverride the color of the horizontal line and text.\n"
  },
  {
    "path": "items/storage-asset.rst",
    "content": ".. _doc_item_asset_storage:\n\nStorage Assets\n==============\n\nStorages (localized as \"item storages\") are created from the ItemStorageAsset class. They are placeables used to store items.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Storage``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Storage``, ``Storage_Wall``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nStorage Asset Properties\n------------------------\n\n**Can_Players_Open** *bool*: If true, players can interact with the barricade to open storage. Defaults to true. Useful for pre-placed sentries to prevent stealing their guns.\n\n**Delete_Contained_Items_On_Destroy** *bool*: If true, any stored items are despawned rather than dropped when destroyed. Defaults to false.\n\n**Display** *flag*: If specified, the first item in the storage will be visibly displayed.\n\n**Should_Close_When_Outside_Range** *bool*: Whether or not the storage should automatically close when the player is outside of the interaction range. Defaults to false.\n\n**Storage_X** *byte*: Number of columns (horizontal storage space). Defaults to 0.\n\n**Storage_Y** *byte*: Number of rows (vertical storage space). Defaults to 0.\n\n**Default_Contained_Items** *list of dictionaryies*: Items to create inside storage when first spawned. Each item can contain the following properties:\n\n- **Asset**: :ref:`Asset Pointer <doc_data_assetptr>`: Item or spawn table to grant an item from.\n\n- **Amount** *int*: Number of times to grant this item. Defaults to 1.\n\n- **Origin** :ref:`EItemOrigin <doc_data_eitemorigin>`: Determines starting state of the item. Defaults to World.\n"
  },
  {
    "path": "items/structure-asset.rst",
    "content": ".. _doc_item_asset_structure:\n\nStructure Assets\n================\n\nStructures are created from the ItemStructureAsset class. They can be placed by players. Some structure pieces require another structure piece in order to be placed.\n\nThis inherits the :ref:`PlaceableAsset <doc_item_asset_placeable>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Structure``): When intending to use a child class, refer to that class's documentation instead for the proper enumerator to use.\n\n**Useable** *enum* (``Structure``)\n\n**Construct** *enum* (``Floor``, ``Floor_Poly``, ``Pillar``, ``Post``, ``Rampart``, ``Roof``, ``Roof_Poly``, ``Wall``): Determines how this structure can be placed, and how other structure pieces can snap to it.\n\n**ID** *uint16*: Must be a unique identifier.\n\n**InventoryAudio** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: See :ref:`ItemAsset <doc_item_asset_intro>` for full documentation. Defaults to ``Sounds/Inventory/SmallMetal.asset`` if the name contains the word \"Metal\", to ``Sounds/Inventory/LightMetalEquipment.asset`` if either ``Size_X`` or ``Size_Y`` value is equal to 1, to ``Sounds/Inventory/MediumMetalEquipment.asset`` if either ``Size_X`` or ``Size_Y`` value is less than or equal to 2, or ``Sounds/Inventory/HeavyMetalEquipment.asset`` if none of the criteria is met.\n\nStructure Asset Properties\n--------------------------\n\n**Armor_Tier** *enum* (``Low``, ``High``): Armor is a multiplier on damage received. A structure's armor tier can either be low-tier or high-tier. By default, structures with low-tier armor take 100% of the damage they receive, while structures with high-tier armor take 50% of the damage they receive. These multipliers can be configured in the `gameplay config <https://unturned.wiki.gg/wiki/Gameplay_config>`_. Defaults to low-tier, except when the structure's name contains the word \"Metal\" or \"Brick\".\n\n**Can_Be_Damaged** *bool*: If true, this structure can be damaged. Defaults to true.\n\n**Can_Zombies_Target** *bool*: If true, this item is eligible for zombies to detect and attack when stuck. Defaults to true.\n\n**Eligible_For_Pooling** *bool*: If true, this structure is eligible for object pooling. Some structures may not reset properly when pooling is enabled. Defaults to true.\n\n**Explosion** :ref:`GUID <doc_data_guid>` or *uint16*: GUID or legacy ID of :ref:`EffectAsset <doc_assets_effect>` to play when destroyed.\n\n**Foliage_Cut_Radius** *float*: In meters, the radius around the structure where foliage is removed. Defaults to 6.\n\n**Has_Clip_Prefab** *bool*: Whether or not the structure has a Clip.prefab. If the structure 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.\n\n**Health** *uint16*: Total health value. Defaults to 0.\n\n**PlacementAudioClip** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: AudioClip to play when the structure is placed.\n\n**PlacementPreviewPrefab** :ref:`Master Bundle Pointer <doc_data_masterbundleptr>`: Overrides the placement preview model spawned when this item is held.\n\n**Proof_Explosion** *flag*: Immune to area-of-effect explosive damage.\n\n**Range** *float*: In meters, the maximum distance away the structure can be placed from the player.\n\n**Salvage_Duration_Multiplier** *float*: Multiplier on how long it takes to salvage this structure. Setting this to a larger number will cause salvaging to take longer. Defaults to 1.\n\n**Terrain_Test_Height** *float*: Length of the raycast downward from the pivot to check if the floor is above terrain. This is the maximum distance a floor can be placed above terrain, in meters. Defaults to 10.\n\n**Unpickupable** *flag*: Disables the ability to pick up a placed structure.\n\n**Unrepairable** *flag*: Cannot be repaired by a :ref:`MeleeAsset <doc_item_asset_melee>` with the ``Repair`` flag. For example, the `Blowtorch <https://unturned.wiki.gg/wiki/Blowtorch>`_ would not be able to repair this structure.\n\n**Unsalvageable** *flag*: Salvaging a damaged structure yields no partial resources.\n\n**Unsaveable** *flag*: This structure is excluded from being saved.\n\n**Vulnerable** *flag*: The structure can be damaged by lower-power weapons that do not have the ``Invulnerable`` flag.\n\n**Requires_Pillars** *bool*: Whether or not a valid wall placement requires pillars. If true, two pillars are required for a valid placement. Defaults to true."
  },
  {
    "path": "items/supply-asset.rst",
    "content": ".. _doc_item_asset_supply:\n\nSupply Assets\n=============\n\nSupplies (or \"crafting supplies\") are created from the ItemSupplyAsset class. They are items primarily intended to be used as ingredients in crafting blueprints. They can neither be held nor equipped.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Supply``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nSupply Asset Properties\n-----------------------\n\nCrafting supplies have no unique asset properties. Refer to :ref:`item asset documentation <doc_item_asset_intro>` for additional properties.\n"
  },
  {
    "path": "items/tactical-asset.rst",
    "content": ".. _doc_item_asset_tactical:\n\nTactical Assets\n===============\n\nTacticals (or \"tactical attachments\") are created from the ItemTacticalAsset class. They are inventory items that can be attached to ranged weapons.\n\nThis inherits the :ref:`CaliberAsset <doc_item_asset_caliber>` class.\n\nGame Data File\n--------------\n\nTactical attachments inherit properties from the CaliberAsset class, which in turn inherits properties from the ItemAsset class. Properties that are required to be included are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n\n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     -\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Tactical``\n\nProperties\n``````````\n\n.. list-table::\n   :widths: 40 40 20\n   :header-rows: 1\n\n   * - Property Name\n     - Type\n     - Default Value\n   * - :ref:`Laser <doc_item_asset_tactical:laser>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Laser_Color <doc_item_asset_tactical:laser_color>`\n     - :ref:`color <doc_data_color>`\n     - ``#FF0000``\n   * - :ref:`Light <doc_item_asset_tactical:light>`\n     - :ref:`flag <doc_data_builtin_types>`\n     -\n   * - :ref:`Melee <doc_item_asset_tactical:melee>`\n     - :ref:`flag <doc_data_flag>`\n     -\n   * - :ref:`Rangefinder <doc_item_asset_tactical:rangefinder>`\n     - :ref:`flag <doc_data_flag>`\n     -\n\nProperty Descriptions\n`````````````````````\n\n.. _doc_item_asset_tactical:laser:\n\nLaser :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::\n\nProvides a toggleable laser.\n\n----\n\n.. _doc_item_asset_tactical:laser_color:\n\nLaser_Color :ref:`color <doc_data_color>` ``#FF0000``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOverride the default red color with the specified value. This property supports using legacy color parsing.\n\n----\n\n.. _doc_item_asset_tactical:light:\n\nLight :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::\n\nProvides a toggleable flashlight, and allows for using :ref:`PlayerSpotLightConfig <doc_data_playerspotlightconfig>` properties.\n\n----\n\n.. _doc_item_asset_tactical:melee:\n\nMelee :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::\n\nProvides the ability to perform a melee attack. This attack does 40 damage, and is not configurable.\n\n----\n\n.. _doc_item_asset_tactical:rangefinder:\n\nRangefinder :ref:`flag <doc_data_flag>`\n:::::::::::::::::::::::::::::::::::::::\n\nProvides a toggleable rangefinder.\n\nMelee-Specific Property Descriptions\n`````````````````````````````````````\n\n.. note:: These properties are only applicable if the ``Melee`` flag is set.\n\n.. warning:: This is mostly copied 1:1 from :ref:`doc_item_asset_weapon` and should be tidied up if/when that is updated.\n\n**Melee_Range** *float32*: The maximum distance in meters before damage is no longer possible.\n\n**Melee_Player_Damage** *float32*: Amount of damage that should be dealt to player entities, prior to modifiers such as limb multipliers.\n\n**Melee_Player_Leg_Multiplier** *float32*: Multiplier on damage targeted against a player's legs.\n\n**Melee_Player_Arm_Multiplier** *float32*: Multiplier on damage targeted against a player's arms.\n\n**Melee_Player_Spine_Multiplier** *float32*: Multiplier on damage targeted against a player's torso.\n\n**Melee_Player_Skull_Multiplier** *float32*: Multiplier on damage targeted against a player's head.\n\n**Melee_Player_Damage_Bleeding** *enum* (``Always``, ``Default``, ``Heal``, ``Never``): Determines the effect the weapon has in relation to the \"Bleeding\" status effect. When using \"Always\", the Bleeding status effect will always be applied on hit. When using \"Default\", the Bleeding status effect will only be applied if the necessary damage threshold is met. When using \"Heal\", anyone hit by the weapon will have their Bleeding status effect removed. When using \"Never\", the Bleeding status effect is never applied by this weapon. Defaults to \"Default\" enumerator.\n\n**Melee_Player_Damage_Bones** *enum* (``Always``, ``Heal``, ``None``): Determines the effect the weapon has in relation to the \"Broken Bones\" status effect. When using \"Always\", the Broken Bones status effect will always be applied on hit. When using \"Heal\", anyone hit by the weapon will have their Broken Bones status effect removed. When using \"Never\", the Broken Bones status effect is never applied by this weapon. Defaults to the \"None\" enumerator.\n\n**Melee_Zombie_Damage** *float32*: Amount of damage that should be dealt to zombie entities, prior to modifiers such as limb multipliers.\n\n**Melee_Zombie_Leg_Multiplier** *float32*: Multiplier on damage targeted against a zombie's legs.\n\n**Melee_Zombie_Arm_Multiplier** *float32*: Multiplier on damage targeted against a zombie's arms.\n\n**Melee_Zombie_Spine_Multiplier** *float32*: Multiplier on damage targeted against a zombie's torso.\n\n**Melee_Zombie_Skull_Multiplier** *float32*: Multiplier on damage targeted against a zombie's head.\n\n**Melee_Zombie_Ragdoll_Force_Multiplier** *float32*: Scales force applied to zombie ragdoll. Defaults to 1.\n\n**Melee_Stun_Zombie_Always** *flag*: Specified if a zombie should always be stunned when targeted by the weapon.\n\n**Melee_Stun_Zombie_Never** *flag*: Specified if a zombie should never be stunned when targeted by the weapon.\n\n**Melee_Animal_Damage** *float32*: Amount of damage that should be dealt to animal entities, prior to modifiers such as limb multipliers.\n\n**Melee_Animal_Leg_Multiplier** *float32*: Multiplier on damage targeted against a animal's limbs.\n\n**Melee_Animal_Spine_Multiplier** *float32*: Multiplier on damage targeted against a animal's torso.\n\n**Melee_Animal_Skull_Multiplier** *float32*: Multiplier on damage targeted against a animal's head.\n"
  },
  {
    "path": "items/tank-asset.rst",
    "content": ".. _doc_item_asset_tank:\n\nTank Assets\n===========\n\nTanks (localized as \"liquid storages\") are created from the ItemTankAsset class. They are placeables used to store water or fuel. Players can siphon from, or deposit into, a liquid storage with certain items. Fuel tanks require a :ref:`fuel canister <doc_item_asset_fuel>`, while water tanks require a :ref:`water canister <doc_item_asset_refill>`.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Tank``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Tank``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nTank Asset Properties\n---------------------\n\n**Resource** *uint16*: Maximum units of liquid that can be stored in the tank. One unit of water is the equivalent of one usage of a water canister. Defaults to 0.\n\n**Source** *enum* (``Fuel``, ``None``, ``Water``): Type of liquid that can be stored in the tank."
  },
  {
    "path": "items/throwable-asset.rst",
    "content": ".. _doc_item_asset_throwable:\n\nThrowable Assets\n================\n\nThrowables are created from the ItemThrowableAsset class. They can be thrown by players. Throwables cannot be used in any safezones that disallow weapons.\n\nThis inherits the :ref:`WeaponAsset <doc_item_asset_weapon>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Throwable``)\n\n**Useable** *enum* (``Throwable``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nThrowable Asset Properties\n--------------------------\n\n**Boost_Throw_Force_Multiplier** *float*: A multiplier on the amount of throwing force when the player has the \"Olympic\" random boost. Defaults to 1.4.\n\n**Explode_On_Impact** *flag*: Specified if the throwable should immediately detonate upon impact. Robotic turrets using ``Mode Friendly`` will target players holding a throwable that has this flag.\n\n**Explosion** *uint16* or *GUID*: ID or GUID of explosion effect to play upon detonation.\n\n**Explosion_Launch_Speed** *float*: Velocity at which players are launched by area-of-effect explosions. Defaults to ``Player_Damage × 0.1``.\n\n**Explosive** *flag*: Specified if the throwable should have an area-of-effect explosion. Robotic turrets using ``Mode Friendly`` will target players holding a throwable that has this flag.\n\n**Flash** *flag*: Specified if the throwable should cause a flashbang effect for players caught within the area-of-effect. Robotic turrets using ``Mode Friendly`` will target players holding a throwable that has this flag.\n\n**Fuse_Length** *float*: A timer, in seconds, for the fuse length. Defaults to 180 seconds. If the throwable has the ``Explosive`` flag or the ``Flash`` flag, then it defaults to 2.5 seconds instead.\n\n**Sticky** *flag*: Specified if the throwable should stick to the environment, barricades, and structures.\n\n**Strong_Throw_Force** *float*: The amount of force throwables are thrown with when performing a strong throw, measured in Newtons. Defaults to 1100.\n\n**Weak_Throw_Force** *float*: The amount of force throwables are thrown with when performing a weak throw, measured in Newtons. Defaults to 600.\n"
  },
  {
    "path": "items/tire-asset.rst",
    "content": ".. _doc_item_asset_tire:\n\nTire Assets\n===========\n\nTires (localized as \"tools\") are created from the ItemTireAsset class. They are useables that allow for adding and removing tires from vehicles.\n\nThis inherits the :ref:`VehicleRepairToolAsset <doc_item_asset_vehicle_repair_tool>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Tire``)\n\n**Useable** *enum* (``Tire``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nTire Asset Properties\n---------------------\n\n**Mode** *enum* (``Add``, ``Remove``): How the usable should interact with tires. ``Mode Add`` will consume the item to add a tire to the vehicle. ``Mode Remove`` allows the usable to remove tires, adding the corresponding item to the player's inventory."
  },
  {
    "path": "items/tool-asset.rst",
    "content": ".. _doc_item_asset_tool:\n\nTool Assets\n===========\n\nTools are created from the ItemToolAsset class. Their functionality depends on the configured ``Useable`` property.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Tool``): When intending to use a child class, refer to that class's documentation instead for the proper enumerator to use.\n\n**Useable** *enum* (``Carjack``, ``Carlockpick``, ``Housing_Planner``, ``Walkie_Talkie``): When using the ``Carjack`` enumerator, the tool can be used on vehicles to launch them upwards into the air. When using ``Carlockpick``, the tool can be used once on any locked vehicle in order to forcefully unlock it. When using ``Housing_Planner``, the tool can be used to quickly access :ref:`structure pieces <doc_item_asset_structure>` from the player's own inventory. When using ``Walkie_Talkie``, the tool can be used to have long-distance voice chat communications with other players.\n\n**ID** *uint16*: Must be a unique identifier.\n\nTool Asset Properties\n---------------------\n\nTools have no unique asset properties. Instead, refer to ``Useable`` for relevant configuration options. Refer to parent classes for additional properties.\n"
  },
  {
    "path": "items/trap-asset.rst",
    "content": ".. _doc_item_asset_trap:\n\nTrap Assets\n===========\n\nTraps are created from ItemTrapAsset. They are placeable damage sources.\n\nThis inherits the :ref:`BarricadeAsset <doc_item_asset_barricade>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Trap``)\n\n**Useable** *enum* (``Barricade``)\n\n**Build** *enum* (``Spike``, ``Wire``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nTrap Asset Properties\n---------------------\n\n**Animal_Damage** *float*: Damage dealt to animals caught within the area-of-effect explosion.\n\n**Barricade_Damage** *float*: Damage dealt to barricades caught within the area-of-effect explosion.\n\n**Broken** *flag*: Players who trigger the trap will be inflicted with the `Broken Bones <https://unturned.wiki.gg/wiki/Broken_Bones>`_ status effect.\n\n**Damage_Tires** *flag*: This trap can pop the tires of vehicles that drive over it.\n\n**Explosion_Launch_Speed** *float*: Launch speed of players caught within the area-of-effect explosion, in meters per second. Defaults to the value of ``Player_Damage * 0.1``.\n\n**Explosion2** *uint16* or *GUID*: ID or GUID of effect to play upon detonation.\n\n**Explosive** *flag*: Specified if the trap should have an area-of-effect explosion when triggered.\n\n**Object_Damage** *float*: Damage dealt to objects caught within the area-of-effect explosion. Defaults to the value of ``Resource_Damage``.\n\n**Player_Damage** *float*: Damage dealt to players caught within the area-of-effect explosion.\n\n**Range2** *float*: In meters, the radius of the damaging, area-of-effect explosion.\n\n**Requires_Power** *bool*: Whether or not the trap requires power from a generator. Defaults to ``false``. Optionally, a \"Powered\" GameObject can be included in Unity. This GameObject is activated when powered, and deactivated when not powered.\n\n**Resource_Damage** *float*: Damage dealt to resources caught within the area-of-effect explosion.\n\n**Structure_Damage** *float*: Damage dealt to structures caught within the area-of-effect explosion.\n\n**Trap_Cooldown** *float*: In seconds, the time until trap is active again.\n\n**Trap_Setup_Delay** *float*: In seconds, delay before a trap becomes active after being placed. Defaults to 0.25 seconds.\n\n**Vehicle_Damage** *float*: Damage dealt to vehicles caught within the area-of-effect explosion.\n"
  },
  {
    "path": "items/vehicle-lockpick-tool-asset.rst",
    "content": ".. _doc_item_asset_vehicle_lockpick_tool:\n\nVehicle Lockpick Tool Assets\n=============================\n\nVehicle lockpick tools are created from the ItemVehicleLockpickToolAsset class. They are useables for unlocking a vehicle.\n\nThis inherits the :ref:`ToolAsset <doc_item_asset_tool>` class.\n\nVehicle Lockpick Tool Asset Properties\n--------------------------------------\n\n**FailureProbability** *float*: Normalized percentage chance of lockpicking failing. Defaults to zero. The \"Use_Failure\" animation is played instead of \"Use\" if lockpicking fails.\n\n**FailureEffect** :ref:`doc_data_assetptr`: Effect to play when lockpicking fails.\n"
  },
  {
    "path": "items/vehicle-paint-tool-asset.rst",
    "content": ".. _doc_item_asset_vehicle_paint_tool:\n\nVehicle Paint Tool Assets\n=========================\n\nVehicle paint tools are created from the ItemVehiclePaintToolAsset class. They are useables for changing the vehicle paint color.\n\nThis inherits the :ref:`ToolAsset <doc_item_asset_tool>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Vehicle_Paint_Tool``)\n\n**Useable** *enum* (``Vehicle_Paint``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nVehicle Paint Tool Asset Properties\n-----------------------------------\n\n**PaintColor** *color*: Vehicle's color will be replaced with this when used.\n"
  },
  {
    "path": "items/vehicle-repair-tool-asset.rst",
    "content": ".. _doc_item_asset_vehicle_repair_tool:\n\nVehicle Repair Tool Assets\n==========================\n\nVehicle repair tools (localized as \"tools\") are created from the ItemVehicleRepairTool class. They are useables for replacing vehicle batteries.\n\nThis inherits the :ref:`ToolAsset <doc_item_asset_tool>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Vehicle_Repair_Tool``)\n\n**Useable** *enum* (``Battery_Vehicle``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nVehicle Repair Tool Asset Properties\n------------------------------------\n\nVehicle repair tools have no unique asset properties. Refer to parent classes for additional properties."
  },
  {
    "path": "items/vest-asset.rst",
    "content": ".. _doc_item_asset_vest:\n\nVest Assets\n===========\n\nThe ItemVestAsset class is used by clothing items occupying the \"vest\" slot. Vests can be worn by players and zombies, and cover their torso.\n\nGame Data File\n--------------\n\nThe ItemVestAsset class inherits properties from the :ref:`ItemBagAsset <doc_item_asset_bag>` class. Properties that are required (or recommended) are listed in the table below.\n\n.. list-table::\n   :widths: 30 40 30\n   :header-rows: 1\n   \n   * - Class\n     - Property Name\n     - Required Value\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`GUID <doc_item_asset_intro:guid>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`ID <doc_item_asset_intro:id>`\n     - \n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Type <doc_item_asset_intro:type>`\n     - ``Vest``\n   * - :ref:`ItemAsset <doc_item_asset_intro>`\n     - :ref:`Useable <doc_item_asset_intro:useable>`\n     - ``Clothing``\n\nProperties\n``````````\n\nVests have no unique properties. Refer to parent classes for additional properties instead."
  },
  {
    "path": "items/water-asset.rst",
    "content": ".. _doc_item_asset_water:\n\nWater Assets\n============\n\nDrinks are created from the ItemWaterAsset class. They are consumed by the player on use, and directly affect a player's stats such as water or stamina.\n\nThis inherits the :ref:`ConsumeableAsset <doc_item_asset_consumeable>` class.\n\nItem Asset Properties\n---------------------\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Water``)\n\n**Useable** *enum* (``Consumeable``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nWater Asset Properties\n----------------------\n\nDrinks have no unique asset properties. Refer to parent classes for additional properties.\n"
  },
  {
    "path": "items/weapon-asset.rst",
    "content": ".. _doc_item_asset_weapon:\n\nWeapon Assets\n=============\n\nThe ItemWeaponAsset class is a base class that other classes are derived from. This asset provides various properties related to damaging players, structures, and other entities – but its specific behavior depends on the child class being used.\n\nThis inherits the :ref:`ItemAsset <doc_item_asset_intro>` class.\n\nWeapon Asset Properties\n-----------------------\n\n**Allow_Flesh_Fx** *bool*: Boolean for if special effects should occur when damaging flesh. Defaults to true.\n\n**Durability** *float32*: Probability of quality loss upon the weapon being used, as a decimal.\n\n.. _doc_item_asset_weapon:range:\n\n**Range** *float32*: The maximum distance in meters before damage is no longer possible. For ballistic projectile ranged weapons, this is the maximum distance a projectile may travel. For melee weapons, this is the maximum swinging distance. For physics projectile ranged weapons, this is the radius of the explosion.\n\n**Wear** *uint8*: Increment to degrade quality by. Defaults to 1.\n\n.. _doc_item_asset_weapon:player_damage:\n\nPlayer Damage\n`````````````\n\n**Bypass_Allowed_To_Damage_Player** *bool*: Boolean for if the weapon should bypass the requirements for being allowed to damage other players. Typically, a weapon cannot damage another player if the server is set to PvE, or if the target player is a part of the same group and friendly fire is disabled. Defaults to false.\n\n**Player_Damage** *float32*: Amount of damage that should be dealt to player entities, prior to modifiers such as limb multipliers.\n\n**Player_Leg_Multiplier** *float32*: Multiplier on damage targeted against a player's legs. Limb multipliers are not utilized by explosive weapons.\n\n**Player_Arm_Multiplier** *float32*: Multiplier on damage targeted against a player's arms. Limb multipliers are not utilized by explosive weapons.\n\n**Player_Spine_Multiplier** *float32*: Multiplier on damage targeted against a player's torso. Limb multipliers are not utilized by explosive weapons.\n\n**Player_Skull_Multiplier** *float32*: Multiplier on damage targeted against a player's head. Limb multipliers are not utilized by explosive weapons.\n\n**Player_Damage_Bleeding** *enum* (``Always``, ``Default``, ``Heal``, ``Never``): Determines the effect the weapon has in relation to the \"Bleeding\" status effect. When using \"Always\", the Bleeding status effect will always be applied on hit. When using \"Default\", the Bleeding status effect will only be applied if the necessary damage threshold is met. When using \"Heal\", anyone hit by the weapon will have their Bleeding status effect removed. When using \"Never\", the Bleeding status effect is never applied by this weapon. Defaults to \"Default\" enumerator.\n\n**Player_Damage_Bones** *enum* (``Always``, ``Heal``, ``None``): Determines the effect the weapon has in relation to the \"Broken Bones\" status effect. When using \"Always\", the Broken Bones status effect will always be applied on hit. When using \"Heal\", anyone hit by the weapon will have their Broken Bones status effect removed. When using \"Never\", the Broken Bones status effect is never applied by this weapon. Defaults to the \"None\" enumerator.\n\n**Player_Damage_Food** *float32*: Amount of degradation dealt to a targeted player's food. Positive values are beneficial (increasing food level), and negative values are detrimental (decreasing food level). Negative values are blocked in the same situations damage is blocked (e.g., in safezones or shortly after respawns).\n\n**Player_Damage_Water** *float32*: Amount of degradation dealt to a targeted player's water. Positive values are beneficial (increasing water level), and negative values are detrimental (decreasing water level). Negative values are blocked in the same situations damage is blocked (e.g., in safezones or shortly after respawns).\n\n**Player_Damage_Virus** *float32*: Amount of degradation dealt to a targeted player's immunity. Positive values are beneficial (increasing immunity level), and negative values are detrimental (decreasing immunity level). Negative values are blocked in the same situations damage is blocked (e.g., in safezones or shortly after respawns).\n\n**Player_Damage_Hallucination** *float32*: Length of hallucinations inflicted onto a targeted player, in seconds. Positive values are detrimental (increasing hallucination duration), and negative values are beneficial (decreasing hallucination duration). Positive values are blocked in the same situations damage is blocked (e.g., in safezones or shortly after respawns).\n\nZombie Damage\n`````````````\n\n**Zombie_Damage** *float32*: Amount of damage that should be dealt to zombie entities, prior to modifiers such as limb multipliers.\n\n**Zombie_Leg_Multiplier** *float32*: Multiplier on damage targeted against a zombie's legs. Limb multipliers are not utilized by explosive weapons.\n\n**Zombie_Arm_Multiplier** *float32*: Multiplier on damage targeted against a zombie's arms. Limb multipliers are not utilized by explosive weapons.\n\n**Zombie_Spine_Multiplier** *float32*: Multiplier on damage targeted against a zombie's torso. Limb multipliers are not utilized by explosive weapons.\n\n**Zombie_Skull_Multiplier** *float32*: Multiplier on damage targeted against a zombie's head. Limb multipliers are not utilized by explosive weapons.\n\n**Stun_Zombie_Always** *flag*: Specified if a zombie should always be stunned when targeted by the weapon.\n\n**Stun_Zombie_Never** *flag*: Specified if a zombie should never be stunned when targeted by the weapon.\n\n**Zombie_Ragdoll_Force_Multiplier** *float32*: Scales force applied to zombie ragdoll. Defaults to 1.\n\nAnimal Damage\n`````````````\n\n**Animal_Damage** *float32*: Amount of damage that should be dealt to animal entities, prior to modifiers such as limb multipliers.\n\n**Animal_Leg_Multiplier** *float32*: Multiplier on damage targeted against a animal's limbs. Limb multipliers are not utilized by explosive weapons.\n\n**Animal_Spine_Multiplier** *float32*: Multiplier on damage targeted against a animal's torso. Limb multipliers are not utilized by explosive weapons.\n\n**Animal_Skull_Multiplier** *float32*: Multiplier on damage targeted against a animal's head. Limb multipliers are not utilized by explosive weapons.\n\nConstruct Damage\n````````````````\n\n**BladeID** *uint8*: Weapon can damage any resources or objects that have a matching BladeID. Deprecated in favor of BladeIDs and BladeID\\_#.\n\n**BladeIDs** *int32*: Total number of unique BladeID\\_# values.\n\n**BladeID_#** *uint8*: Weapon can damage any resources or objects that have a matching BladeID\\_# value.\n\n**Barricade_Damage** *float32*: Amount of damage that should be dealt to barricades, prior to modifiers.\n\n**Structure_Damage** *float32*: Amount of damage that should be dealt to structures, prior to modifiers.\n\n**Vehicle_Damage** *float32*: Amount of damage that should be dealt to vehicles, prior to modifiers.\n\n**Resource_Damage** *float32*: Amount of damage that should be dealt to resources, prior to modifiers.\n\n**Object_Damage** *float32*: Amount of damage that should be dealt to objects, prior to modifiers. Defaults to the value used by Resource_Damage.\n\n**Invulnerable** *flag*: Specified if damage should affect objects, structures, barricades, and vehicles that are considered invulnerable to low-power weaponry. Not applicable to explosive weapons, which will always ignore invulnerability.\n"
  },
  {
    "path": "make.bat",
    "content": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset SOURCEDIR=.\nset BUILDDIR=_build\n\nif \"%1\" == \"\" goto help\n\n%SPHINXBUILD% >NUL 2>NUL\nif errorlevel 9009 (\n\techo.\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\n\techo.installed, then set the SPHINXBUILD environment variable to point\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\n\techo.may add the Sphinx directory to PATH.\n\techo.\n\techo.If you don't have Sphinx installed, grab it from\n\techo.http://sphinx-doc.org/\n\texit /b 1\n)\n\n%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\ngoto end\n\n:help\n%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\n\n:end\npopd\n"
  },
  {
    "path": "mapping/charts.rst",
    "content": ".. _doc_mapping_charts:\n\nCharts\n======\n\nThe Charts.unity3d file determines the colors usable by a map's chart view. This file contains two 32 × 1 px textures: \"Height_Strip\" and \"Layer_Strip\".\n\nHeight_Strip\n------------\n\nHeight_Strip is used for topographical colors. The leftmost pixel (0, 0) is used for water. Other pixels are sampled based on the height of the terrain, going from the lowest potential point (1, 0) to the highest potential point (31, 0).\n\n.. note:: Objects can also be configured to sample from the \"Water\" pixel (0, 0) or the \"Ground\" pixel (20, 0) of the Height_Strip.\n\nLayer_Strip\n-----------\n\nLayer_Strip is used when something obstructs the terrain, such as an object or tree. The pixel sampled depends on the type of obstruction. Objects can be configured to use a different part of the Layer_Strip than their default, with some pixels only being used by such objects.\n\n- (0, 0): Concrete roads wider than 8 meters use this pixel. Usable by objects.\n- (1, 0): Concrete roads where width is less than or equal to 8 meters use this pixel. Usable by objects.\n- (2, 0): Usable by objects.\n- (3, 0): Non-concrete roads. Usable by objects.\n- (4, 0): Usable by objects.\n- (14, 0): Resources.\n- (15, 0): Large-type objects. Usable by objects.\n- (16, 0): Medium-type objects. Usable by objects."
  },
  {
    "path": "mapping/curated-maps.rst",
    "content": ".. _doc_mapping_curated:\n\nCurated Maps\n============\n\n.. warning:: This program is still evolving. Some of this information could change, especially once we begin to accept the first maps under this new program!\n\nCommunity-created maps that are officially linked from in-game are considered **Curated Maps**. Players can experience more high-quality content, and modders can earn money from their work while getting their creations highlighted.\n\nWe have introduced a new Curation Program for 2025 and beyond. Creating maps is intended to be a fun and rewarding hobby, and our new program should be more accessible to creators.\n\nHow does a map get accepted?\n````````````````````````````\n\nOur streamlined program starts with you simply publishing a map to the Steam Workshop. It looks something like this:\n\n#. | You publish a cool map on the Steam Workshop.\n#. | We reach out to authors of cool maps on the Steam Workshop.\n#. | Legal agreements (e.g. establishing revenue share between co-authors).\n#. | You make any changes necessary (if any).\n#. | We commission artists (or you create) the contents of store bundles released alongside the map.\n#. | Your curated map is added to the game.\n\nWhile creating your map, we recommend gathering feedback from other players! Maps can be accepted at any time after being published, so authors can create and revise content without much worry.\n\nEligibility / Guidelines\n------------------------\n\nSeveral factors may influence our decisions when accepting new maps. First and foremost – curated maps should meet our guidelines (detailed further below).\n\n.. tip:: We encourage working on projects even if they would not ineligible for curation. Creating a variety of Workshop content creates a valuable portfolio for future curation attempts, and may still benefit from being featured.\n\n\tAlthough not every map should be curated, we often feature non-curated maps in blogposts. Some particularly high-quality maps have received revenue share from Stockpile bundles.\n\nFollowing these guidelines will significantly improve your eligibility:\n\nInclude Custom Content\n``````````````````````\n\nMaps should feel new and exciting to players. Although we may accept maps that primarily use vanilla assets, we strongly believe including some amount of custom content on new maps is important.\n\nThis helps make each map feel unique. Consider creating new items, having a unique architecture style for your towns, incorporating our modding features in innovative ways, and exploring game mechanics in different ways.\n\nNo Third-Party Content\n``````````````````````\n\nAll content on the map must be an official asset from the base game, or be a custom asset that was created by you. We cannot accept maps that use assets from other people's mods (including other curated maps). Our modding documentation can help you get started!\n\nArt Style\n`````````\n\nCurated experiences should still look and feel like *Unturned*. Any custom content on the map should generally match the base game's art style (similar to preexisting curated maps).\n\nHuman-like drawings such as faces and skulls should be blocky, similar to the in-game characters. This is a common source of revision requests from us.\n\nQuality Assurance\n`````````````````\n\n* | **Asset Validation**: Running the game with the :ref:`-ValidateAssets <doc_asset_validation>` command-line flag should not produce any warnings or errors.\n\n* | **English Text**: Having an English-speaking member of the mod team is recommended, and `MoltonMontro <mailto:moltonmontro@smartlydressedgames.com>`_ has offered to help with English-related questions. Most importantly in this regard is proper punctuation and grammar: while native English speakers can easily read incorrect punctuation, it is very helpful for non-native readers. Ironically this paragraph probably has some punctuation errors.\n\n* | **Project Organization**: To prevent unintended assets from being exported into asset bundles, convention is to separate the project files into Sources and MasterBundle directories. Hawaii is split between a directory called \"HawaiiMasterBundle\" in the project root, and a Sources directory which contains all of the .blend, .mb, .xcf, .psd, .ai, etc files. When exporting the asset bundle this ensures only game files like .fbx and .prefab are included.\n\n* | **Asset Duplication**: If multiple objects share identical prefabs, or use vanilla content, asset bundle size can be improved by sharing the same prefabs. For an example of this refer to the vanilla notes using Bundle_Override_Path.\n\n* | **Water Reflections**: When using water volumes, only one should have planar reflections enabled. These reflections require rendering the world a second time for each enabled volume, and are some of the most performance expensive effects in the game.\n\n* | **Overlapping Navmeshes**: No bounds should overlap. Otherwise zombies will appear and disappear unexpectedly in multiplayer.\n\n* | **Visibility Overlay**: The visibility menu in the editor sums the mesh complexity in each region. Ideally there should only be a few red zones.\n\n* | **Item Icons**: Each item should have a proper icon in the inventory. One way to quickly preview the icon is to attach an orthographic camera in Unity.\n\nContent Appropriacy\n````````````````````\n\nContent should be what is typically considered \"family-friendly\". For example:\n\n- | Text should be devoid of harsh profanity (anything considered heavy or mild cursing, slurs, or strongly implied). Some alternatives to traditional profanity include nonsense words (such as *gosh*, *darn*, *dang*, *drats*, and *heck*), cut-off text, or redactions (e.g., *\\[REDACTED]* or *\\[UNINTELLIGIBLE]*).\n\n- | Explicit depictions of drugs, alcohol, and other substances is not allowed. Similar ideas with a looser association, such as berry mixes instead of alcohol; or things like vineyards, bottles, kegs, or distilleries; is allowed. Cigarettes, vaping, smoking, and tobacco are not allowed.\n\n- | Text should be gender-neutral. For example, \"Firefighter\" instead of \"Fireman.\"\n\n- | Do not link to out-of-game content (for example, websites and phone numbers). We typically request phone numbers be changed to 555: https://en.wikipedia.org/wiki/555_(telephone_number)\n\nMenu Visibility\n---------------\n\nOne key component of sharing a curated map, trending popular workshop item, or specifically featured map is spotlighting it on the main menu. In any of these cases an article is placed above the recent news and announcements showcasing the preview image, and an expandable description.\n\nIn-game the description supports the following BBCode tags:\n\n* ``[b]``\n* ``[i]``\n* ``[list]``\n* ``[*]``\n* ``[h1]``\n* ``[img]``\n* ``[url]``\n\nIdeally descriptions are kept succinct, so separate discussion topics might be a better place for long sections like ID lists.\n\nBy default popular items are surfaced, but workshop items can be specifically featured to help bring attention to projects with a lot of effort put into them, and curated maps. This can be done for new releases or major updates. Updates can link to a separate URL for the release notes.\n\nAdditionally, curated maps are linked from the singleplayer curated maps list, and will inherit the main menu \"new\" or \"updated\" label.\n\nStockpile Preparation\n---------------------\n\nEach curated map release is usually accompanied by a few cosmetics and skins in the game's item store. Royalties from the sales are shared with the map author(s).\n\n**File Sharing**: Ideally, the items have been setup for use as clothes in-game, and then exported into a .unitypackage. This package will then be imported into the vanilla project.\n\n**Curated Workshop Item**: Payment splits are handled by a hidden curated workshop item. Setting this up usually takes a few weeks for new contributors' bank and tax information to be processed.\n\n**Bundles**: Two or three collections of sets with four to six items each. Bundles can either be a collection of loosely-related items, or a complete outfit. Outfit bundles should avoid having multiple items that take up the same cosmetic slot.\n\n**Mystery Boxes**: Fifteen to twenty items of rare, epic, or legendary rarity. The box can be themed, but all of the items should be usable individually – avoiding things like a set of matching shirts and pants that cannot be easily mixed with other cosmetic pieces.\n\n**Craftable Items**: Ten to twenty items of uncommon rarity. Unlike mystery box contents, it is far more appropriate for craftable items to have matching sets and simple recolors.\n\nFAQ\n---\n\n**Q. Are any maps planned to release under the previous program?**\n\nYes. There's several maps which predate this new program. We believe many of these will be released throughout 2025.\n\n**Q. When's the earliest we could see maps release under this new program?**\n\nSince there's already several curated maps releasing throughout this year, and some changes aren't ready for the new program yet, earliest would probably be end-of-year or sometime in 2026.\n\n**Q. Are there any upcoming changes to this program?**\n\nWe're looking to revise the single-player map selection menu, and are considering additional ways players could support their favorite maps (e.g., a cosmetic that adds a small badge next to the player's name when they're playing on a specific map). This is all – to some extent – still subject to change.\n\n**Q. Do curated maps receive updates?**\n\nWe may suggest some fixes or other adjustments necessary for the map to meet our expectations. However, additional content is largely left to the discretion of the map author(s).\n\n**Q. What game modes can maps be accepted for?**\n\nMaps designed for officially-supported modes (Survival, Arena) are the most likely to be accepted. We may occasionally consider some maps designed for popular custom game modes.\n\n**Q. Can multiple maps be released together?**\n\nIf/when considering maps to release together, we'd like to ensure it makes sense to do so. For example, an arena map and a PvE-focused survival map. This is something we're still exploring.\n"
  },
  {
    "path": "mapping/editor-asset-redirectors.rst",
    "content": ".. _doc_mapping_redirectors:\n\nEditor Asset Redirectors\n========================\n\n**Editor Asset Redirectors** allow for quickly replacing objects, resources, materials, or foliage assets in bulk.\n\nRedirects apply while loading a map in the level editor. Any changes are then kept when saving the map.\n\nCreate a file named \"**EditorAssetRedirectors.txt**\" in the Unturned folder.\n\n- Empty lines are ignored.\n- Lines starting with ``//`` or ``#`` are ignored.\n- Each redirect should include two :ref:`GUIDs <doc_data_guid>` separated by an arrow ``->``.\n\nFor example:\n\n.. code-block:: text\n\n\t// Replace Boulder_00 with Boulder_01\n\t6125b4de591b44359237f6d7191dd919 -> ee402fc9debe4f03bffb31a49eb04fb7\n\n\t// Replace Maple_0 with Maple_3\n\t63cb368c94b14000aabc5325b048cfa3 -> 011d1369cd56497488827b44509b0b4b\n"
  },
  {
    "path": "mapping/favorite-searches.rst",
    "content": ".. _doc_mapping_searches:\n\nFavorite Searches\n=================\n\nThe objects editor supports **Favorite Searches** which allows lists of objects to be quickly looked up.\n\nEntering \"fv:xyz\" in the search bar loads xyz.txt from the game folder, and will match any of the lines in the file. Empty lines and lines starting with \"//\" (comments) are ignored. The .txt file extension was chosen because it is the notepad default.\n\nFor example this matches anything with \"fire\" in the name or Road Line Cap #1:\n\n\n.. code-block:: text\n\t\n\t// Fire related props\n\tFire\n\t\n\t// Specific road prop\n\tCap #1 Road Line\n\nRecursive usage of filters is supported, so multiple favorite searches can be nested, or other filter types e.g. \"Tunnel mb:core\" includes tunnels from the vanilla objects.\n"
  },
  {
    "path": "mapping/level-batching.rst",
    "content": ".. _doc_mapping_batching:\n\nLevel Batching\n==============\n\nThis article is intended for map developers and explains how to maximize draw call batching.\n\nFor background information on the purpose of batching:\n\n- `Optimizing draw calls (Unity docs) <https://docs.unity3d.com/Manual/optimizing-draw-calls.html>`_\n- `Texture atlas (Wikipedia) <https://en.wikipedia.org/wiki/Texture_atlas>`_\n- `Static batching (Unity docs) <https://docs.unity3d.com/Manual/static-batching.html>`_\n\nEnabling batching in your level\n-------------------------------\n\nBy default batching is disabled because some parts of the level may be incompatible (causing graphical bugs), the texture atlas might be too big, it might worsen performance, etc. Publishing your map with batching enabled is only recommended after double-checking each location in singleplayer. (batching is disabled in the level editor) You can test it by adding this property to your level's ``Config.json`` file:\n\n.. code-block:: json\n\n\t\"Batching_Version\": 2\n\nThe purpose of the version number is to allow future improvements without potentially breaking existing maps. For example, if atlas generation is supported for more shaders in an update it might behave unexpectedly, so those shaders would be excluded on older versions.\n\nPurpose of atlas generation\n---------------------------\n\nUsing fewer unique materials is almost always better for performance. Combining materials which only differ in their texture allows them to benefit from static and dynamic batching. If you want you can manually create a texture atlas for your own meshes, but resizing requires updating all your mesh UVs, and is generally a hassle. Considering that most workshop maps use objects from a variety of different mod packs, atlas generation helps them all work together.\n\nThe maximum included texture size defaults to 128x128. Including bigger textures risks exceeding the maximum texture size, but can be adjusted with this option in the level config:\n\n.. code-block:: json\n\n\t\"Batching_Max_Texture_Size\": 256\n\nMaterials eligible for atlas inclusion\n--------------------------------------\n\nStandard (Decalable) or Standard (Specular setup) (Decalable):\n\n- Mode is Opaque\n- Texture is unset, or is 128x128 or smaller with Clamp wrap mode\n- All other material features are default\n\nCustom/Card: supported for the automatically generated tree skybox models.\n\nCustom/Foliage: default trees/bushes.\n\nExcluding specific objects and resources from batching\n------------------------------------------------------\n\nIf you know your asset is incompatible you can add this line to the .dat file:\n\n.. code-block:: unturneddat\n\n\tExclude_From_Level_Batching true\n\nNPCs, decals, and speedtrees (when enabled) are excluded by default. This option may be useful for elaborate setups using Unity Event components. For example if an event moves the renderer transform or sets material parameters.\n\nFinding renderers that could benefit from atlas inclusion\n---------------------------------------------------------\n\nBy default the game considers every renderer in objects and resources. You can enable logging for why each renderer is excluded with the ``-LogLevelBatchingTextureAtlasExclusions`` launch option. Inclusion in the atlas is beneficial to merge as many meshes as possible into as few static batches as possible, but ineligible renderers will use static batching regardless.\n\nNone of the messages logged are \"errors\" per se. It only explains why the game cannot (yet) atlas them. The most useful message for finding assets to modify is \"Wrap Mode is not Clamp\" because if the mesh does not require UVs outside the 0-1 square it can use ``Clamp`` wrap mode.\n\nValidating UVs\n--------------\n\nWhen textures are merged into an atlas any meshes referencing them need their UV coordinates updated. If any UVs are outside the 0-1 square they will now be overlapping a completely different texture and appear incorrectly. You can use the ``-ValidateLevelBatchingUVs`` launch option to log any batched meshes with out-of-bounds UVs. For example this error with the vanilla chess board::\n\n\tMesh \"Model_0\" in renderer \"Chess_0/Model_0\" has UVs outside [0, 1] range (should be excluded from level batching)\n\nIn the case of the chess board it was a mistake in the unwrapping which was then fixed, but in most cases this would suggest the mesh relies on ``Wrap Mode`` being ``Repeat``.\n\nPreviewing renderers using atlas\n--------------------------------\n\nYou can visualize which renderers have been included in the texture atlas by loading singleplayer with the ``-PreviewLevelBatchingTextureAtlas`` launch option:\n\n.. figure:: img/TextureAtlasPreview.jpg\n\n\tBerlin with texture atlas preview enabled.\n\nAll renderers in white were merged into a single material per shader. It is not necessarily bad that some materials were not merged. For example, the HVAC units on the rooftops in the screenshot all share a material already, so they are able to use static batching together. The same goes for the roads and overpass.\n\nPreviewing renderers using static batching\n------------------------------------------\n\nYou can visualize which mesh renderers are included in static batching by loading singleplayer with the ``-PreviewLevelBatchingUniqueMaterials`` launch option.\n\nEach unique material is assigned a random hue. The brightness of the color decreases in order of uniqueness. i.e., The brightest color is used by the most renderers, and the darkest color is used by only a few.\n"
  },
  {
    "path": "mapping/level-config.rst",
    "content": ".. _doc_mapping_config:\n\nLevel Config\n============\n\nEach level is associated with an optional Config.json file. These files were originally added to make it easy to provide extra information about the level on the main menus, but grew over time to include gameplay parameters as well. In the future some of these might be moved to a more appropriate file like a level asset.\n\nMain Menus\n----------\n\n**Creators** *string[]*: Names in credits.\n\n**Collaborators** *string[]*: Names in credits.\n\n**Thanks** *string[]*: Names in credits.\n\n**CustomCredits**: Maps header internal title(s) to a list of names. The display title is formatted according to the level's localization file. For example:\n\n.. code-block:: json\n\n\t\"CustomCredits\":\n\t{\n\t\t\"Music\":\n\t\t[\n\t\t\t\"musician67\",\n\t\t\t\"SoundDesigner (these names aren't localized)\"\n\t\t],\n\t\t\"Art\":\n\t\t[\n\t\t\t\"MyFavouriteArtist\"\n\t\t]\n\t}\n\n.. note:: In that example, the keys ``Music`` and ``Art`` would be translated from the level's localization file.\n\n**Associated_Stockpile_Items** *int[]*: Economy itemdefids to feature on map screens. One is chosen at random each time the map is shown. Used by curated maps to link their items which have payment splits.\n\n**Feedback** *string*: URL to discussions. If not explicitly set, defaults to the workshop item's discussions page.\n\n**Visible_In_Matchmaking** *bool*: Should this map be listed in the matchmaking menu? Used to filter out test and demo maps.\n\n**Version** *string*: #.#.#.# format version number. Vanilla version numbers use 3.Year.Update.Patch, but that is optional. Incrementing the version number for every upload is good practice because:\n\n1. When client and server files do not match it is more helpful to show a version number error message rather than a generic file mismatch error.\n2. Searching by map in the server browser can filter servers running the same version of the map.\n\n**Tips** *int*: Number of Tip_# keys defined in level's localization files, if any. Overrides vanilla tip messages on the loading screen.\n\n**RequiredWorkshopFileIds** *ulong[]*: Dependency workshop file IDs. If these file(s) are not loaded then singleplayer and editor menus display a \"Missing Dependencies\" message and prevent entering the map.\n\n.. code-block:: json\n\n\t\"RequiredWorkshopFileIds\":\n\t[\n\t\t123456789,\n\t\t123456789\n\t]\n\nArena Mode\n----------\n\n**Use_Arena_Compactor** *bool*: Should circles be randomized periodically?\n\n**Arena_Loadouts**: Array of items to grant when spawning into arena. Each entry has a Table_ID spawn table to generate from, and an Amount number of times to grant from spawn table. For example:\n\n.. code-block:: json\n\n\t\"Arena_Loadouts\":\n\t[\n\t\t{\n\t\t\t\"Table_ID\": 28007,\n\t\t\t\"Amount\": 1\n\t\t},\n\t\t{\n\t\t\t\"Table_ID\": 28008,\n\t\t\t\"Amount\": 1\n\t\t}\n\t]\n\nGeneral\n-------\n\n**Asset**: Object with GUID of :ref:`Level Asset <doc_assets_level>` to instantiate on this map. For example:\n\n.. code-block:: json\n\n\t\"Asset\": { \"GUID\": \"12dc9fdbe9974022afd21158ad54b76a\" }\n\n**Trains**: Array of train vehicles to spawn. Only one of each train asset can exist at a given time because the vehicle ID is used to match saved trains to tracks. Road index can be seen by selecting a road in the level editor. Placement is normalized between the start and end of the track length. For example:\n\n.. code-block:: json\n\n\t\"Trains\":\n\t[\n\t\t{\n\t\t\t\"VehicleID\": 187,\n\t\t\t\"RoadIndex\": 0,\n\t\t\t\"Min_Spawn_Placement\": 0.1,\n\t\t\t\"Max_Spawn_Placement\": 0.9\n\t\t}\n\t]\n\n**Mode_Config_Overrides**: Pairs of server config properties and values to override them. For example:\n\n.. code-block:: json\n\n\t\"Mode_Config_Overrides\":\n\t{\n\t\t\"Zombies.Min_Drops\": 5,\n\t\t\"Zombies.Max_Drops\": 10,\n\t\t\"Vehicles.Armor_Multiplier\": 0.1,\n\t\t\"Gameplay.Allow_Shoulder_Camera\": false\n\t}\n\nAdditionally, overrides can be applied per-difficulty with the ``EasyDifficulty_Config_Overrides``, ``NormalDifficulty_Config_Overrides``, and ``HardDifficulty_Config_Overrides`` properties.\n\n**Allow_Underwater_Features** *bool*: Should legacy details and navigation bounds be restricted underwater?\n\n**Terrain_Snow_Sparkle** *bool*: Should IS_SNOWING shader keyword be enabled?\n\n**Use_Legacy_Clip_Borders** *bool*: Should invisible walls matching map size be created? Defaults to true.\n\n**Use_Legacy_Ground** *bool*: Should default terrain be created? Alternative is to use landscape tiles. Defaults to true.\n\n**Use_Legacy_Water** *bool*: Should global water plane be enabled? Alternative is to use water volumes. Defaults to true.\n\n**Use_Vanilla_Bubbles** *bool*: Should vanilla water bubble effects be enabled? Defaults to true.\n\n**Use_Legacy_Snow_Height** *bool*: Should travelling vertically past snow height threshold enable snow effects? Defaults to true.\n\n**Use_Legacy_Oxygen_Height** *bool*: Should travelling vertically past a certain point deplete oxygen? Defaults to true.\n\n**Use_Rain_Volumes** *bool*: Should rain flag in ambiance volume be used?\n\n**Use_Snow_Volumes** *bool*: Should snow flag in ambiance volume be used?\n\n**Use_Underground_Whitelist** *bool*: Should underground players not inside a whitelist volume be teleported to the terrain surface? Useful to curb out-of-bounds exploits.\n\n**Is_Aurora_Borealis_Visible** *bool*: Should aurora borealis effects be enabled?\n\n**Snow_Affects_Temperature** *bool*: Should snow inflict cold damage?\n\n**Weather_Override** *ELevelWeatherOverride*: Can be set to rain or snow to lock weather type.\n\n**Has_Global_Electricity** *bool*: Should all powerable items and objects have power by default?\n\n**Gravity** *float*: Acceleration of gravity. Defaults to -9.81.\n\n**Blimp_Altitude** *float*: Height override for blimp buoyancy. Defaults to 150.\n\n**Max_Walkable_Slope** *float*: Steepest ground angle players can walk without sliding. Defaults to 59.\n\n**Prevent_Building_Near_Spawnpoint_Radius** *float*: Closest distance players can build to spawn points. Useful to override for close-quarters maps. Defaults to 16.\n\n**Spawn_Loadouts**: Array of items to grant when spawning in any mode. Refer to ``Arena_Loadouts``.\n\n**Allow_Holiday_Redirects** *bool*: Whether certain assets like objects, trees and landscapes should load alternative versions during holiday events.\n\n**Enable_Clutter_Option** *bool*: If true, \"Load Clutter\" graphics option is supported on this map. Defaults to false. This is opt-in so that the map creator(s) can decide whether the removed details are an acceptable compromise.\n\n**Batching_Version** *int*: Please refer to :ref:`doc_mapping_batching`.\n\n**Batching_Max_Texture_Size** *int*: Overrides the maximum texture size included in the :ref:`doc_mapping_batching` atlas. Please keep in mind that including bigger textures risks exceeding the maximum texture size.\n\nHUD\n---\n\nDisable various elements of the heads-up display.\n\n**PlayerUI_HealthVisible** *bool*\n\n**PlayerUI_FoodVisible** *bool*\n\n**PlayerUI_WaterVisible** *bool*\n\n**PlayerUI_VirusVisible** *bool*\n\n**PlayerUI_StaminaVisible** *bool*\n\n**PlayerUI_OxygenVisible** *bool*\n\n**PlayerUI_GunVisible** *bool*\n\n**Allow_Crafting** *bool*\n\n**Allow_Skills** *bool*\n\n**Allow_Information** *bool*\n\nDeprecated\n----------\n\n**Can_Use_Bundles** *bool*: Used in the past for timed curated maps to disable using their assets in the level editor which could break after moving the map from the vanilla content to the workshop.\n\n**Category** *ESingleplayerMapCategory*: Mostly automated now. Can be set to Misc to explicitly show in the miscellaneous map category.\n\n**Has_Atmosphere** *bool*: If false, disable stars in skybox.\n\n**Has_Discord_Rich_Presence** *bool*: Only valid for official maps. If discord integration is enabled and this flag is true discord will check for a map icon configured in their partner page.\n\n**Item** *int*: Kept for backwards compatibility. Ignored if ``Associated_Stockpile_Items`` are set.\n\n**Load_From_Resources** *bool*: Used in the past for curated maps with assets in the vanilla Resources/Bundles/* directory. Master Bundles completely replaced this.\n\n**Should_Verify_Objects_Hash** *bool*: With the newer asset integrity checks this is obsolete because each object/tree used in the level is checked with the server, and ignored if the server is missing the asset. Trees.dat and Objects.dat can always be included because missing assets do not factor into those hashes anymore.\n\n**Use_Legacy_Fog_Height** *bool*: Should default terrain height be used for fog falloff? If false, devkit landscape tile limits are used instead. Defaults to true.\n\n**Use_Legacy_Objects** *bool*: Should objects be loaded from Objects.dat file? Devkit objects were moved into this file, so this option no longer has any effect.\n"
  },
  {
    "path": "mapping/manual-object-culling.rst",
    "content": ".. _doc_mapping_culling:\n\nManual Object Culling\n=====================\n\nThis article is intended for map developers and explains **Manual Object Culling** volumes.\n\nDrawing fewer objects is usually better for performance. Culling volumes allow you to override the distance at which the contained objects are drawn where otherwise they might be drawn much further away than necessary. For example, by default the vanilla chair models are visible from quite far away in case they are placed outdoors, whereas inside an office building they only need to be seen while near the building.\n\n.. figure:: img/CullingVolumes.jpg\n\t\n\tA building in Moscow with culling volumes.\n\nThis comes with an obvious downside: when zooming in on most buildings it is readily apparent that the furniture is missing. I experimented with some workarounds like enabling objects near the center of your view while zoomed, but it did not feel any better. In my opinion the performance trade-off is worth it. \"Large\" objects like shipping containers that have higher gameplay importance as cover are excluded by default, and most buildings have their culling volumes inset from the edges slightly so that objects in the windows are excluded.\n\nEditing volumes\n---------------\n\nYou can enable the **Preview Culling** checkbox to hide all objects inside culling volumes. This is useful to find any objects that are not included when they should be. For example, while working on this update I realized the volumes in the vanilla cargo ships did not extend low enough to catch some of the furniture in the crew quarters.\n\nObjects inside volumes are found when loading the level. While working in the editor you can click **Refresh Objects** to re-find all objects/volumes on the map.\n\nUpdating the culling volumes costs some performance, so a large number of small volumes may actually make performance worse. It is worth comparing though.\n\nExcluding specific objects\n--------------------------\n\nIf you know your asset should never be managed by culling volumes you can add this line to the .dat file:\n\n.. code-block:: unturneddat\n\t\n\tExclude_From_Culling_Volumes true\n\nFor example, the aerospace facility on Germany is excluded so that the manually placed culling volumes can hide large objects like shipping containers without accidentally hiding the giant structure. Note: volumes owned by objects automatically exclude their owner object.\n\nVolumes owned by objects\n------------------------\n\nMost vanilla buildings come with default culling volumes which are not selectable because they are not saved in the level. These are the precursor to the manually placeable culling volumes, and have been invisibly hiding objects since 2014! Part of the goal with the culling volumes was to finally make these viewable in the editor because they have caused a lot of confusion over the years, especially for modded objects created without knowing they were there.\n\nThis is an area for future improvement, so I would not necessary recommend for/against adding them to your own objects. The following options are very old and poorly named, but can be specified in your object's .dat file to automatically create a culling volume:\n\n**LOD** *enum*: Can be set to ``Mesh`` or ``Area``. ``Mesh`` uses the bounds of renderers, and ``Area`` uses the size of Occlusion Area components. Note the Occlusion Area component's do not have any special functionality. At the time it was a workaround to allow placement in Unity with an otherwise unused component.\n\n**LOD_Bias** *float*: Multiplier for the default 64m culling distance. For example, 2 would be visible up to 128m.\n\n**LOD_Center_X, LOD_Center_Y, LOD_Center_Z** *float*: Offsets volume position relative to object transform along each axis.\n\n**LOD_Size_X, LOD_Size_Y, LOD_Size_Z** *float*: Offsets calculated volume size in Mesh mode. Many vanilla buildings with flat rooftops use a negative Z offset to exclude HVAC units placed on the roof.\n\nTesting culling volume performance benefit\n------------------------------------------\n\nIf you would like to check whether culling volumes are providing any benefit you can run the game with the ``-DisableCullingVolumes`` launch option. Dense areas like Seattle tend to have the most noticeable difference.\n"
  },
  {
    "path": "npcs/conditions.rst",
    "content": ".. _doc_npc_asset_conditions:\n\nConditions\n==========\n\nConditions can be held by NPCs, interactable objects, and item blueprints. Each grouping of conditions is called a **conditions list** and starts with the ``Conditions`` property.\n\nProperties in a conditions list are named in the format of ``ConditionPrefix_#_PropertyName``. For most conditions lists the prefix is ``Condition``, such as ``Condition_#_Type``. This is not always the case, such as for :ref:`blueprints <doc_item_asset_blueprints>` which use ``Blueprint_#_Conditions``.\n\n**Conditions** *byte*: Total number of conditions. There should be a number of ``Condition_#_Type`` properties equal to this value.\n\n**Condition_#_Type** *enum* (``Compare_Flags``, ``Date_Counter``, ``Flag_Bool``, ``Flag_Short``, ``Currency``, ``Experience``, ``Item``, ``Kills_Animal``, ``Kills_Horde``, ``Kills_Object``, ``Kills_Player``, ``Kills_Tree``, ``Kills_Zombie``, ``Player_Life_Food``, ``Player_Life_Health``, ``Player_Life_Stamina``, ``Player_Life_Virus``, ``Player_Life_Water``, ``Quest``, ``Reputation``, ``Skillset``, ``Holiday``, ``Time_Of_Day``, ``Volume_Overlap``, ``Weather_Blend_Alpha``, ``Weather_Status``): Specify the type of condition. Like other indexed properties, indicing starts at ``0``.\n\n**Condition_#_Reset** *flag*: Set back to equivalent of 0 when completed.\n\n**Condition_#_Logic** *enum* (``Less_Than``, ``Less_Than_Or_Equal_To``, ``Equal``, ``Not_Equal``, ``Greater_Than_Or_Equal_To``, ``Greater_Than``): Compare current state to target state.\n\n**Condition_#_UI_Requirements** *string*: Comma-separated condition indices. If set, only show this condition in the UI when the conditions with these indices are met. For example, a condition with \"1, 2\" will only be shown when conditions 1 and 2 have been completed.\n\nFlags\n-----\n\nCompare_Flags\n`````````````\n\nCompare left-hand flag A, to right-hand flag B.\n\n**Condition_#_Type** *enum* (``Compare_Flags``)\n\n**Condition_#_A_ID** *uint16*: Left-hand flag ID.\n\n**Condition_#_Allow_A_Unset** *bool*: Pass condition flag onto player, if they do not have the flag already.\n\n**Condition_#_B_ID** *uint16*: Right-hand flag ID.\n\n**Condition_#_Allow_B_Unset** *bool*: Pass condition if player does not have the flag yet.\n\nDate_Counter\n````````````\n\nEvery in-game morning, the world's \"date counter\" is incremented. In a fresh save it starts at zero. This condition takes the remainder of the date counter divided by ``Divisor`` and compares it with ``Value`` according to ``Logic``.\n\nFor example, an in-game event can be configured to occur every 4th and 5th day by setting ``Divisor`` to 5, ``Value`` to 3, and ``Logic`` to ``Greater_Than_Or_Equal_To``.\n\n**Condition_#_Type** *enum* (``Date_Counter``)\n\n**Condition_#_Value** *int64*: Number to compare the remainder with.\n\n**Condition_#_Divisor** *int64*: Number to divide the world date counter by.\n\nFlag_Bool\n`````````\n\nBoolean flag condition.\n\n**Condition_#_Type** *enum* (``Flag_Bool``)\n\n**Condition_#_ID** *uint16*: ID of flag to check.\n\n**Condition_#_Value** *bool*: Target value, as a boolean.\n\n**Condition_#_Allow_Unset** *flag*: Pass condition if player does not have the flag yet.\n\nFlag_Short\n``````````\n\nShort flag condition.\n\n**Condition_#_Type** *enum* (``Flag_Short``)\n\n**Condition_#_ID** *uint16*: ID of flag to check.\n\n**Condition_#_Value** *int16*: Target value for the flag, as a 16-bit signed integer.\n\n**Condition_#_Allow_Unset** *flag*: Pass condition if player does not have the flag yet.\n\nPlayer\n------\n\nCurrency\n````````\n\nRefer to :ref:`Currency <doc_assets_currency>` documentation.\n\n**Condition_#_Type** *enum* (``Currency``)\n\n**Condition_#_GUID** *string*: GUID of currency asset.\n\n**Condition_#_Value** *int*: Target value, in terms of currency.\n\nExperience\n``````````\n\n**Condition_#_Type** *enum* (``Experience``)\n\n**Condition_#_Value** *int*: Target value, in terms of experience.\n\nItem\n````\n\n**Condition_#_Type** *enum* (``Item``)\n\n**Condition_#_ID** *uint16*: ID of item to search player's inventory for.\n\n**Condition_#_Amount** *int*: Quantity of the item required.\n\nKills_Animal\n````````````\n\n**Condition_#_Type** *enum* (``Kills_Animal``)\n\n**Condition_#_ID** *uint16*: ID of short flag to track stat.\n\n**Condition_#_Value** *int*: Target value, in terms of animal kills.\n\n**Condition_#_Animal** *uint16*: ID of animal required.\n\nKills_Horde\n```````````\n\n**Condition_#_Type** *enum* (``Kills_Horde``)\n\n**Condition_#_ID** *uint16*: ID of short flag to track stat.\n\n**Condition_#_Value** *int*: Target value, in terms of beacons completed.\n\n**Condition_#_Nav** *byte*: Index of the navmesh that beacons should be completed in, seen as visible in the level editor.\n\nKills_Object\n````````````\n\n**Condition_#_Type** *enum* (``Kills_Object``)\n\n**Condition_#_ID** *uint16*: ID of short flag to track stat.\n\n**Condition_#_Value** *int*: Target value, in terms of object destructions.\n\n**Condition_#_Object** *string*: GUID of object required.\n\n**Condition_#_Nav** *byte*: Index of the navmesh that objects should be destroyed in, seen as visible in the level editor.\n\nKills_Player\n````````````\n\n**Condition_#_Type** *enum* (``Kills_Player``)\n\n**Condition_#_ID** *uint16*: ID of short flag to track stat.\n\n**Condition_#_Value** *int*: Target value, in terms of player kills.\n\nKills_Tree\n``````````\n\n**Condition_#_Type** *enum* (``Kills_Tree``)\n\n**Condition_#_ID** *uint16*: ID of short flag to track stat.\n\n**Condition_#_Value** *int*: Target value, in terms of resource destructions.\n\n**Condition_#_Tree** *string*: GUID of resource required.\n\nKills_Zombie\n````````````\n\n**Condition_#_Type** *enum* (``Kills_Zombie``)\n\n**Condition_#_ID** *uint16*: ID of short flag to track stat.\n\n**Condition_#_Value** *int*: Target value, in terms of zombies killed.\n\n**Condition_#_Zombie** *enum* (``Acid``, ``Boss_All``, ``Boss_Electric``, ``Boss_Elver_Stomper``, ``Boss_Fire``, ``Boss_Magma``, ``Boss_Nuclear``, ``Boss_Spirit``, ``Boss_Wind``, ``Burner``, ``Crawler``, ``DL_Blue_Volatile``, ``DL_Red_Volatile``, ``Flanker_Friendly``, ``Flanker_Stalk``, ``Mega``, ``None``, ``Normal``, ``Spirit``, ``Sprinter``): Type of zombie required.\n\n**Condition_#_Spawn_Quantity** *int*: Number of zombies to spawn. Defaults to 1.\n\n**Condition_#_Nav** *byte*: Index of the navmesh that zombies should be killed in, seen as visible in the level editor.\n\n**Condition_#_Radius** *float*: Radius around players that zombies should be killed within, in meters. When a navmesh is unset and a radius is not specified, the radius defaults to 512 meters and is used for the condition.\n\n**Condition_#_MinRadius** *float*: Zombies must be killed at least this many meters away from the player.\n\n**Condition_#_Spawn** *flag*: Specified if the zombie type should be forcefully generated upon entering the area, which will then be deleted upon leaving the area.\n\n**Condition_#_LevelTableOverride** *int*: Unique ID of a zombie type shown in the level editor. If set, the zombie spawned will use that type. Defaults to -1.\n\nPlayer_Life_Food\n````````````````\n\n**Condition_#_Type** *enum* (``Player_Life_Food``)\n\n**Condition_#_Value** *int*: Target value, in terms of the player's current food.\n\nPlayer_Life_Health\n``````````````````\n\n**Condition_#_Type** *enum* (``Player_Life_Health``)\n\n**Condition_#_Value** *int*: Target value, in terms of the player's current health.\n\nPlayer_Life_Stamina\n```````````````````\n\n**Condition_#_Type** *enum* (``Player_Life_Stamina``)\n\n**Condition_#_Value** *int*: Target value, in terms of the player's current stamina/energy.\n\nPlayer_Life_Virus\n`````````````````\n\n**Condition_#_Type** *enum* (``Player_Life_Virus``)\n\n**Condition_#_Value** *int*: Target value, in terms of the player's current immunity.\n\nPlayer_Life_Water\n`````````````````\n\n**Condition_#_Type** *enum* (``Player_Life_Water``)\n\n**Condition_#_Value** *int*: Target value, in terms of the player's current water.\n\nQuest\n`````\n\n**Condition_#_Type** *enum* (``Quest``)\n\n**Condition_#_ID** *uint16*: ID of quest to check for.\n\n**Condition_#_Status** *enum* (``None``, ``Active``, ``Ready``, ``Completed``): Current state of the quest.\n\n**Condition_#_Ignore_NPC** *flag*: Player does not need to be talking to an NPC within 20 meters for the quest to be completable and turned in.\n\nReputation\n``````````\n\n**Condition_#_Type** *enum* (``Reputation``)\n\n**Condition_#_Value** *int*: Target value, in terms of reputation.\n\nSkillset\n````````\n\n**Condition_#_Type** *enum* (``Skillset``)\n\n**Condition_#_Value** *enum* (``Army``, ``Camp``, ``Chef``, ``Farm``, ``Fire``, ``Fish``, ``Medic``, ``None``, ``Police``, ``Thief``, ``Work``): Target value, as the skillset. For example, this condition could be used to offer unique questlines, dialogue, or blueprints depending on the player's chosen skillset.\n\nWorld\n-----\n\nHoliday\n```````\n\n**Condition_#_Type** *enum* (``Holiday``)\n\n**Condition_#_Value** *enum* (:ref:`ENPCHoliday <doc_data_enpcholiday>`): Target value, as the holiday.\n\nIs_Full_Moon\n````````````\n\n**Condition_#_Type** *enum* (``Is_Full_Moon``)\n\n**Condition_#_Value** *bool*: If true the condition passes when the full moon is up, otherwise if false the condition passes when the full moon is **not** up.\n\nTime_Of_Day\n```````````\n\n**Condition_#_Type** *enum* (``Time_Of_Day``)\n\n**Condition_#_Second** *int*: Second of a 24-hour clock (military time) to compare against. For example: ``0`` is midnight (the start of a day), ``43200`` is noon (12 o'clock), and ``86400`` is midnight (the end of a day). This condition respects the map's configured \"Bias\" values, as well as the day/night cycle length of the world. As a visual reference, the `Clock <https://unturned.wiki.gg/wiki/Clock>`_ item can be used.\n\nVolume_Overlap\n``````````````\n\n**Condition_#_Type** *enum* (``Volume_Overlap``)\n\n**Condition_#_VolumeID** *string*: ID of volume(s) placed in the level editor to test.\n\n**Condition_#_PlayerCount** *int*: Target number of players in matching volumes to compare against. Volumes with identical IDs are grouped together.\n\nWeather_Blend_Alpha\n```````````````````\n\nThe weather blend alpha condition compares the current intensity to a target value. For example, an NPC could sell umbrellas while rain is greater than 50% (0.5) blended in. This condition is supported by visibility, but is more expensive for visibility than the state condition because each listening object is updated when the intensity changes by 1% (0.01).\n\n**Condition_#_Type** *enum* (``Weather_Blend_Alpha``)\n\n**Condition_#_GUID** *string*: GUID of weather required.\n\n**Condition_#_Value** *float* [0, 1]: Target value, as the weather intensity blend.\n\nWeather_Status\n``````````````\n\nThe weather status condition tests the state of the global weather. This condition is supported by visibility.\n\n**Condition_#_Type** *enum* (``Weather_Status``)\n\n**Condition_#_GUID** *string*: GUID of weather required.\n\n**Condition_#_Value** *enum* (``Active``, ``Fully_Transitioned_In``, ``Fully_Transitioned_Out``, ``Transitioning``, ``Transitioning_In``, ``Transitioning_Out``): Target value, as the weather status.\n\nLocalization\n------------\n\n**Condition_#**: Name of the condition as it appears in user interfaces.\n"
  },
  {
    "path": "npcs/currency-asset.rst",
    "content": ".. _doc_assets_currency:\n\nCurrency Assets\n===============\n\nAny collection of items with different numeric values can be associated together in a **Currency** asset. NPCs can then automatically convert between the different items, and vendor menus can display information using the linked currency. This is intended to be useful beyond real-world currencies, e.g. bartering ammunition.\n\n.. figure:: /img/VendorCurrency.jpg\n\n\tP.Riso's Hot Stuff vendor.\n\nAsset Setup\n-----------\n\nThe currency asset defines how numbers are formatted, which items make up the currency, and their individual values. An example can be found at Bundles/Items/Supplies/CanadianCurrency.asset.\n\n**Type** *string*: ``SDG.Unturned.CurrencyAsset``\n\n**ValueFormat** *string*: String to format numeric value into. For example \"${0:N0} CAD\" is the vanilla Canadian currency format.\n\n**DefaultConditionFormat** *string*: If an NPC currency condition does not specify a formatting string this is used as the default. {0} is the total value held in the player's inventory, and {1} is the condition value. For example \"${0:N0}/{1:N0} CAD\" is the vanilla Canadian currency format.\n\n**Entries**: Array of items in the currency. Each has an **Item** GUID and **Value** integer. Optionally **Is_Visible_In_Vendor_Menu** bool can be false to hide the item from the NPC vendor currency list. For example these are the $10 and $20 notes in the Canadian currency:\n\n.. code-block:: unturnedasset\n\n\t{\n\t\t\"Item\"\n\t\t{\n\t\t\t\"GUID\" \"b6b87dfad5f342dc91bbb2de950f56ee\"\n\t\t}\n\t\t\"Value\" \"10\"\n\t}\n\t{\n\t\t\"Item\"\n\t\t{\n\t\t\t\"GUID\" \"3b9847bb328d445495b64be9e5ea9400\"\n\t\t}\n\t\t\"Value\" \"20\"\n\t}\n\nTo link a vendor with a currency set the vendor asset's **Currency** to the currency asset's GUID. Vendors display all of the items sorted from lowest to highest value.\n\nNPC Logic\n---------\n\nConditions can use the **Currency** type to require different total amounts in the player's inventory. Rewards can use the **Currency** type as well to grant amounts. Refer to :ref:`Conditions <doc_npc_asset_conditions>` documentation and :ref:`Rewards <doc_npc_asset_rewards>` documentation for documentation.\n\nTesting\n-------\n\nThe built-in \"give\" command accepts currency GUIDs as an alternative to item IDs. For example the following grants $1,000 CAD to the local player:\n\n.. code-block:: shell\n\n\t/give 5150ca8f765d4a68bfe54912146da410/1000\n"
  },
  {
    "path": "npcs/dialogue-asset.rst",
    "content": ".. _doc_npc_asset_dialogue:\n\nDialogue Assets\n===============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Dialogue``)\n\n**ID** *uint16*: Must be a unique identifier. Values less than 2,000 are reserved for official content.\n\n.. tip:: To quickly test a specific dialogue, you can use the ``/dialogue guid`` command. This opens the dialogue as if your character were an NPC.\n\nMessages\n--------\n\nProperties pertaining to dialogue performed by the NPC. Dialogue can utilize conditions and rewards. Messages that meet all of their conditions will be shown, and can grant rewards when the message is shown. These are prefixed with ``Message_#_``. For example, ``Message_0_Condition_0_Type Flag_Bool``. For more information, refer to the documentation for :ref:`Conditions <doc_npc_asset_conditions>` and :ref:`Rewards <doc_npc_asset_rewards>` respectively.\n\n**Messages** *int32*: Total number of possible messages.\n\n**Message_#_Pages** *byte*: Total number of pages the message has.\n\n**Message_#_Responses** *byte*: Total number of responses to be shown when this message is shown. If 0, then all messages are automatically a candidate to be shown. Defaults to 0.\n\n**Message_#_Response_#** *byte*: Index of the response to show.\n\n**Message_#_Prev** *uint16* or *GUID*: ID or GUID of dialogue to return to if there are no responses available for this message. Defaults to 0.\n\n**Message_#_FaceOverride** *byte*: Optional index of face image to use when this message is opened. Face is reset to character's default when unspecified or when dialogue is closed.\n\nResponses\n---------\n\nProperties pertaining to dialogue available to the player. Dialogue can utilize conditions and rewards. Responses are only visible when conditions are met, and can grant rewards when selected. These are prefixed with ``Response_#_``. For example, `Response_0_Reward_0_Type Quest`. For more information, refer to the documentation for :ref:`Conditions <doc_npc_asset_conditions>` and :ref:`Rewards <doc_npc_asset_rewards>` respectively.\n\n**Responses** *byte*: Total number of possible responses.\n\n**Response_#_Messages** *byte*: Total number of messages to only show this response for. If 0, then it is shown for all messages. Defaults to 0.\n\n**Response_#_Message_#** *uint16*: Index of the message to show for.\n\n**Response_#_Dialogue** *uint16* or *GUID*: ID or GUID of the dialogue to open when selected.\n\n**Response_#_Quest** *uint16* or *GUID*: ID or GUID of the quest to preview when selected.\n\n**Response_#_Vendor** *uint16* or *GUID*: ID or GUID of the vendor to open when selected.\n\nLocalization\n------------\n\n**Message_#_Page_#** :ref:`doc_data_richtext`: Text shown for the corresponding message page.\n\n**Response_#** :ref:`doc_data_richtext`: Text shown for the corresponding response option.\n"
  },
  {
    "path": "npcs/introduction.rst",
    "content": ".. _doc_npc_asset_intro:\n\nIntroduction to NPCs\n====================\n\nModders can create interactable NPC characters, with a customized appearance. A dialogue box can be made to appear to the player when interacted with, which can display potential responses that can chain into more dialogue options. Dialogue can lead to special interactions, such as quests or vendors. Additionally, NPC interactions can have a set of conditions that dictate what is available to the player, and rewards for performing various actions such as turning in a quest.\n\nLocalization\n------------\n\nThere are additional text formatting features available for NPC localization files.\n\n**\\<color=*enum*\\>\\</color\\>**: Use a rarity color as the font color. Valid rarities are: ``common``, ``uncommon``, ``rare``, ``epic``, ``legendary``, ``mythical``, ``gold``, ``red``, ``orange``, ``yellow``, ``green``, ``blue``, and ``purple``. Alternatively, specify a six-digit hexadecimal number representing RGB color.\n\n**\\<name_npc\\>**: Insert the NPC character's name.\n\n**\\<name_char\\>**: Insert the player character's name.\n\n**\\<br\\>**: New line.\n\n**\\<pause\\>**: Pause dialogue for 0.5 seconds before continuing.\n"
  },
  {
    "path": "npcs/npc-asset.rst",
    "content": ".. _doc_object_asset_npc:\n\nNPC Character Assets\n====================\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``NPC``)\n\n**ID** *uint16*: Must be a unique identifier.\n\n**PlayerKnowsNameFlagID** *uint16*: If non-zero, NPC name is shown as ??? until bool flag is true. For example if set to 20 the NPC name is ??? until a Flag_Bool reward with ID 20 is set to true.\n\nClothing\n--------\n\n**Shirt** *uint16* or *GUID*: ID or GUID of shirt to wear.\n\n**Pants** *uint16* or *GUID*: ID or GUID of pants to wear.\n\n**Hat** *uint16* or *GUID*: ID or GUID of hat to wear.\n\n**Backpack** *uint16* or *GUID*: ID or GUID of backpack to wear.\n\n**Vest** *uint16* or *GUID*: ID or GUID of vest to wear.\n\n**Mask** *uint16* or *GUID*: ID or GUID of mask to wear.\n\n**Glasses** *uint16* or *GUID*: ID or GUID of glasses to wear.\n\nHoliday outfits\n```````````````\n\nNPC characters can have event-specific outfits, which will only appear during the assigned seasonal event.\n\n**Has_Halloween_Outfit** *flag*: Specified if event-specific clothing should be worn during the Halloween event.\n\n**Halloween_Shirt** *uint16* or *GUID*: ID or GUID of shirt to wear during the Halloween event.\n\n**Halloween_Pants** *uint16* or *GUID*: ID or GUID of pants to wear during the Halloween event.\n\n**Halloween_Hat** *uint16* or *GUID*: ID or GUID of hat to wear during the Halloween event.\n\n**Halloween_Backpack** *uint16* or *GUID*: ID or GUID of backpack to wear during the Halloween event.\n\n**Halloween_Vest** *uint16* or *GUID*: ID or GUID of vest to wear during the Halloween event.\n\n**Halloween_Mask** *uint16* or *GUID*: ID or GUID of mask to wear during the Halloween event.\n\n**Halloween_Glasses** *uint16* or *GUID*: ID or GUID of glasses to wear during the Halloween event.\n\n**Has_Christmas_Outfit** *flag*: Specified if event-specific clothing should be worn during the Festive event.\n\n**Christmas_Shirt** *uint16* or *GUID*: ID or GUID of shirt to wear.\n\n**Christmas_Pants** *uint16* or *GUID*: ID or GUID of pants to wear.\n\n**Christmas_Hat** *uint16* or *GUID*: ID or GUID of hat to wear.\n\n**Christmas_Backpack** *uint16* or *GUID*: ID or GUID of backpack to wear.\n\n**Christmas_Vest** *uint16* or *GUID*: ID or GUID of vest to wear.\n\n**Christmas_Mask** *uint16* or *GUID*: ID or GUID of mask to wear.\n\n**Christmas_Glasses** *uint16* or *GUID*: ID or GUID of glasses to wear.\n\nAppearance\n----------\n\nWhile in the Appearance menu in-game, modders can press Page Down to copy the player's current appearance to clipboard.\n\n**Face** *int*: Index of face image.\n\n**Hair** *int*: Index of hair mesh.\n\n**Beard** *int*: Index of beard mesh.\n\n**Color_Skin** *hex triplet*: Six-digit hexadecimal number representing RGB color.\n\n**Color_Hair** *hex triplet*: Six-digit hexadecimal number representing RGB color.\n\n**Backward** *flag*: Specified if character is left-handed.\n\nPose\n----\n\n**Primary** *uint16* or *GUID*: ID or GUID of the weapon carried on the character's back, parallel to the spine.\n\n**Secondary** *uint16* or *GUID*: ID or GUID of the weapon carried on the character's hip, perpendicular to the spine.\n\n**Tertiary** *uint16* or *GUID*: ID or GUID of a non-weapon item to carry.\n\n**Equipped** *enum* (``Primary``, ``Secondary``, ``Tertiary``): The item in the specified slot will be held in the character's hands, rather than carried.\n\n**Dialogue** *uint16* or *GUID*: ID or GUID of the dialogue asset to open when interacted with.\n\n**Pose** *enum* (``Asleep``, ``Crouch``, ``Passive``, ``Prone``, ``Rest``, ``Sit``, ``Stand``, ``Surrender``, ``Under_Arrest``): Idle animation.\n\n**Pose_Head_Offset** *float*: Offset of the NPC's head from their body, in meters. Positive numbers offset it forward, while negative numbers offset it backward. Defaults to 0.1.\n\n**Pose_Lean** *float*: How far the NPC leans left or right, as a number from -1 to 1. Positive numbers learn to the NPC's left, while negative numbers lean to the NPC's right. Defaults to 0.\n\n**Pose_Pitch** *float*: How far the NPC leans forward or backward, in degrees. Numbers greater than 90 lean forward, while numbers less than 90 lean backward. Defaults to 90.\n\nConditions\n----------\n\nAn NPC character can be made to only appear while certain :ref:`conditions <doc_npc_asset_conditions>` are met by the player.\n\nLocalization\n------------\n\n**Name** *string*: Object name in level editors.\n\n**Character** *string*: Character name displayed when interacted with. \n"
  },
  {
    "path": "npcs/quest-asset.rst",
    "content": ".. _doc_npc_asset_quest:\n\nQuest Assets\n============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Quest``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nConditions and Rewards\n----------------------\n\nQuests can be turned in when conditions are met, and players can receive rewards for turning quests in. For more information, refer to the documentation for :ref:`Conditions <doc_npc_asset_conditions>` and :ref:`Rewards <doc_npc_asset_rewards>` respectively.\n\nQuests have two types of rewards lists:\n\n1. ``Rewards`` are granted when the quest is completed.\n2. ``AbandonmentRewards`` are granted when the quest is removed without completing it. These are not granted when the player finishes the quest normally.\n\nLocalization\n------------\n\n**Name** *string*: Quest name in user interfaces.\n\n**Description** :ref:`doc_data_richtext`: Quest description in user interfaces.\n"
  },
  {
    "path": "npcs/rewards-list-asset.rst",
    "content": ".. _doc_npc_asset_rewards_list:\n\nRewards List Assets\n===================\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``RewardsList``)\n\nThe ``Rewards_List_Asset`` NPC reward type can either grant a rewards list asset directly, or a :ref:`Spawn Table Asset <doc_assets_spawn>` which resolves to the final asset. This could be used, for example, to randomly select one of several rewards list assets which then grants the player a gun along with related ammo items.\n\nA `Rewards List Volume` placed in the level editor can also reference a rewards list asset, and will grant the rewards if the conditions are met when a player enters the volume.\n\nConditions must be met to grant the rewards. For more information, refer to the documentation for :ref:`Conditions <doc_npc_asset_conditions>` and :ref:`Rewards <doc_npc_asset_rewards>` respectively.\n\nTip: you can use the ``/RunRewardList (guid)`` admin command to test a reward list in-game.\n"
  },
  {
    "path": "npcs/rewards.rst",
    "content": ".. _doc_npc_asset_rewards:\n\nRewards\n=======\n\n**Rewards** can be granted by NPCs, objects, and items. Each grouping of rewards is called a **rewards list** and starts with the ``Rewards`` property.\n\nProperties in a rewards list are named in the format of ``RewardPrefix_#_PropertyName``. For most rewards lists the prefix is ``Reward``, such as ``Reward_#_Type``. This is not always the case, such as with :ref:`quests <doc_npc_asset_quest>` which have two separate rewards lists named ``Rewards`` and ``AbandonmentRewards``, or consumables which use ``Quest_Rewards``.\n\n**Rewards** *byte*: Total number of rewards in the rewards list. There should be a number of ``Reward_#_Type`` properties equal to this value.\n\n**Reward_#_Type** *enum* (``Airdrop``, ``Flag_Bool``, ``Flag_Math``, ``Flag_Short``, ``Flag_Short_Random``, ``Achievement``, ``Currency``, ``Cutscene_Mode``, ``Effect``, ``Event``, ``Experience``, ``Item``, ``Item_Random``, ``Hint``, ``Player_Life_Food``, ``Player_Life_Health``, ``Player_Life_Stamina``, ``Player_Life_Virus``, ``Player_Life_Water``, ``Player_Spawnpoint``, ``Quest``, ``Reputation``, ``Rewards_List_Asset``, ``Teleport``, ``Vehicle``, ``Zombie``, ``Remove_Zombies``): Specify the type of reward. Like other indexed properties, indicing starts at ``0``.\n\n**Reward_#_GrantDelaySeconds** *float*: If set, the reward will be queued for the specified number of seconds before being granted to the player. Defaults to -1.\n\n**Reward_#_GrantDelayApplyWhenInterrupted** *bool*: If true, the reward will be granted when the player dies or disconnects. Defaults to false, in which case when the player dies any pending rewards are cancelled.\n\nFlags\n-----\n\nFlag_Bool\n`````````\n\n**Reward_#_Type** *enum* (``Flag_Bool``)\n\n**Reward_#_ID** *uint16*: ID of flag to set.\n\n**Reward_#_Value** *bool*: Set flag to Boolean value, of either \"True\" or \"False\".\n\nFlag_Math\n`````````\n\n**Reward_#_Type** *enum* (``Flag_Math``)\n\n**Reward_#_A_ID** *uint16*: ID of flag to apply math to.\n\n**Reward_#_B_ID** *uint16*: ID of flag containing value to be applied mathematically. If not specified then ``B_Value`` is used instead.\n\n**Reward_#_B_Value** *int16*: default value to be applied mathematically if flag B has not been set on the player or if ``B_ID`` is zero.\n\n**Reward_#_Operation** *enum* (``Addition``, ``Assign``, ``Division``, ``Modulo``, ``Multiplication``, ``Subtraction``, ``Random_Inclusive``, ``Random_Exclusive``): For example, using the Addition operation would set A to the value of A + B.\n\n``Random_Inclusive`` operation: Set flag A to random number between the value of A and B. For example if A is 1 and B is 3 the random number could be 1, 2, or 3.\n\n``Random_Exclusive`` operation: Set flag A to random number between the value of A and B, excluding B. For example if A is 1 and B is 3 the random number could be 1 or 2. If the value of A and B are the same then the exclusion rule is ignored.\n\nFlag_Short\n``````````\n\n**Reward_#_Type** *enum* (``Flag_Short``)\n\n**Reward_#_ID** *uint16*: ID of flag to modify.\n\n**Reward_#_Value** *int16*: Modify flag's current value with this short value.\n\n**Reward_#_Modification** *enum* (``Assign``, ``Decrement``, ``Increment``): Set value, subtract value, or add value.\n\nFlag_Short_Random\n`````````````````\n\n**Reward_#_Type** *enum* (``Flag_Short_Random``)\n\n**Reward_#_ID** *uint16*: ID of flag to modify.\n\n**Reward_#_Min_Value** *int16*: Minimum short value to modify flag's current value by.\n\n**Reward_#_Max_Value** *int16*: Maximum short value to modify flag's current value by.\n\n**Reward_#_Modification** *enum* (``Assign``, ``Decrement``, ``Increment``): Set value, subtract value, or add value.\n\nNon-flags\n---------\n\nAchievement\n```````````\n\n**Reward_#_Type** *enum* (``Achievement``)\n\n**Reward_#_ID** *string*: ID of achievement to grant. Only specific achievements can be granted as a reward.\n\nAirdrop\n````````\n\n**Reward_#_Type** *enum* (``Airdrop``)\n\n**Reward_#_Use_Random_Airdrop_Node** *bool*: If true, call in airdrop at a random airdrop node placed in the level editor.\n\n**Reward_#_Cargo** *GUID or uint16*: Optional spawn table ID overriding which items to drop.\n\n**Reward_#_Spawnpoint** *string*: Location to call in the airdrop, using the spawnpoint name as set in the nodes level editor.\n\nCurrency\n````````\n\nRefer to :ref:`Currency <doc_assets_currency>` documentation.\n\n**Reward_#_Type** *enum* (``Currency``)\n\n**Reward_#_GUID** *string*: GUID of currency asset.\n\n**Reward_#_Value** *int*: Amount of currency to reward.\n\nCutscene Mode\n`````````````\n\nNot as exciting as it sounds. While active, the first-person viewmodel is hidden and certain item actions like shooting are disabled. It's saved/loaded, but resets on death.\n\n**Reward_#_Type** *enum* (``Cutscene_Mode``)\n\n**Reward_#_Value** *bool*: Whether cutscene mode should currently be active.\n\n.. _doc_npc_asset_rewards:effect:\n\nEffect\n```````\n\n**Reward_#_Type** *enum* (``Effect``)\n\n**Reward_#_GUID** :ref:`Asset Pointer <doc_data_assetptr>`: :ref:`Effect Asset<doc_assets_effect>` to spawn.\n\n**Reward_#_Spawnpoint** *string*: Location to spawn the effect, using the spawnpoint name as set in the nodes level editor. For example, ``Liberator_Jet``.\n\n**Reward_#_AtPlayerPosition** *bool*: If true, spawn the effect at the target player's position.\n\n**Reward_#_IsReliable** *bool*: If true, multiplayer will ensure the effect is replicated. If false, it won't be retransmitted if the packet is lost. Defaults to true.\n\n**Reward_#_RelevantDistance** *float*: If set, overrides the default multiplayer relevant distance of 128 meters. Defaults to -1.\n\n**Reward_#_OnlyRelevantToInstigator** *bool*: If true, only the player triggering this reward will see the effect. Defaults to false. Takes priority over ``RelevantDistance`` if set.\n\n.. _doc_npc_asset_rewards:event:\n\nEvent\n`````\n\n**Reward_#_Type** *enum* (``Event``)\n\n**Reward_#_ID** *string*: ID of event to broadcast. This can be used by c# plugins with the ``NPCEventManager`` class, or Unity events with the :ref:`NPC Global Event component <doc_assets_mod_hooks:npc_global_event_hook>`. For example, when an 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.\n\n**Reward_#_Replicate** *bool*: If true, event is triggered on clients as well as the server. Defaults to true. If false, event is only triggered on authority (singleplayer/server).\n\n**Reward_#_InstigatorOnly** *bool*: If true, event is run only for the player triggering the reward. Defaults to false. Takes priority over ``Replicate``. In multiplayer this means the event is only broadcast for the triggering client, not the server.\n\nExperience\n``````````\n\n**Reward_#_Type** *enum* (``Experience``)\n\n**Reward_#_Value** *int*: Amount of experience to reward.\n\nItem\n````\n\n**Reward_#_Type** *enum* (``Item``)\n\n**Reward_#_ID** *uint16*: ID of item to reward.\n\n**Reward_#_Amount** *int*: Amount of item to reward.\n\n**Reward_#_Auto_Equip** *bool*: If true, the item should be automatically equipped by the player (if possible). Auto-equipping isn't possible if another item in the same slot is already equipped. Defaults to false.\n\n**Reward_#_Ammo** *byte*: Override for the amount of ammuntion that should be loaded in the item reward.\n\n**Reward_#_Barrel** *uint16*: Override for the barrel attachment that should be attached to the item reward.\n\n**Reward_#_Grip** *uint16*: Override for the grip attachment that should be attached to the item reward.\n\n**Reward_#_Magazine** *uint16*: Override for the magazine attachment that should be attached to the item reward.\n\n**Reward_#_Origin** :ref:`doc_data_eitemorigin`: Set the item origin. For example, setting the origin to ``Admin`` will cause items to spawn at full quality. Defaults to ``Craft``.\n\n**Reward_#_Sight** *uint16*: Override for the sight attachment that should be attached to the item reward.\n\n**Reward_#_Tactical** *uint16*: Override for the tactical attachment that should be attached to the item reward.\n\nItem_Random\n```````````\n\n**Reward_#_Type** *enum* (``Item_Random``)\n\n**Reward_#_ID** *uint16*: ID of spawn table that the random item reward should come from.\n\n**Reward_#_Amount** *int*: Amount of item to reward.\n\n**Reward_#_Auto_Equip** *bool*: If true, the item should be automatically equipped by the player (if possible). Auto-equipping isn't possible if another item in the same slot is already equipped. Defaults to false.\n\n**Reward_#_Origin** :ref:`doc_data_eitemorigin`: Set the item origin. For example, setting the origin to ``Admin`` will cause items to spawn at full quality. Defaults to ``Craft``.\n\nHint\n````\n\n**Reward_#_Type** *enum* (``Hint``)\n\n**Reward_#_Text** :ref:`doc_data_richtext`: Debug text that is shown when the asset's :ref:`localization file <doc_npc_asset_rewards:localization>` is empty. If a localization file has been included then the localized text is used instead.\n\n**Reward_#_Duration** *float*: Duration of the hint, in seconds. Defaults to 2 seconds.\n\n.. note::\n\n\tFor localized hints to work in multiplayer, please add ``Keep_Localization_Loaded true`` to the owning asset. Otherwise, the server's language is used.\n\n\tThis is necessary because the server doesn't currently have a way to reference the reward itself (which the client has the text loaded for), instead the asset ID and localization key are replicated.\n\nPlayer Life Food\n````````````````\n\n**Reward_#_Type** *enum* (``Player_Life_Food``)\n\n**Reward_#_Value** *int*: Amount of food to add. Can be negative to decrease food.\n\nPlayer Life Health\n``````````````````\n\n**Reward_#_Type** *enum* (``Player_Life_Health``)\n\n**Reward_#_Value** *int*: Amount of health to add. Can be negative to decrease health.\n\nPlayer Life Stamina\n```````````````````\n\n**Reward_#_Type** *enum* (``Player_Life_Stamina``)\n\n**Reward_#_Value** *int*: Amount of stamina/energy to add. Can be negative to decrease stamina level.\n\nPlayer Life Virus\n`````````````````\n\n**Reward_#_Type** *enum* (``Player_Life_Virus``)\n\n**Reward_#_Value** *int*: Amount of virus to add. Can be negative to decrease virus level.\n\nPlayer Life Water\n`````````````````\n\n**Reward_#_Type** *enum* (``Player_Life_Water``)\n\n**Reward_#_Value** *int*: Amount of water to add. Can be negative to decrease water.\n\nPlayer Spawnpoint\n`````````````````\n\n**Reward_#_Type** *enum* (``Player_Spawnpoint``)\n\n**Reward_#_ID** *string* Override the player's default spawn location, using the ID of a spawnpoint node or the name of a map location node, as set in the level editor. For example, ``Liberator_Jet``. Saved and loaded between sessions. If empty, the override is removed and the default spawns are used. The ``SetNpcSpawnId`` admin command is useful for testing this.\n\n.. hint:: On the Buak map, the player can talk with Kira to claim a room in the Factory using this reward type.\n\nQuest\n`````\n\n**Reward_#_Type** *enum* (``Quest``)\n\n**Reward_#_ID** *uint16*: Quest ID to give as a reward.\n\nRemove Zombies\n``````````````\n\nKills zombies that match a set of filters.\n\n**Reward_#_Type** *enum* (``Remove_Zombies``)\n\n**Reward_#_Zombie** *enum*: Which \"type\" of zombie to remove, the same list as zombie kills condition. To-do: move to its own page. Defaults to ``None`` in which case all zombie types match.\n\n**Reward_#_LevelTableOverride** *int*: Unique ID of a zombie type shown in the level editor. If set, only zombies spawned from this table are removed. Defaults to ``-1`` in which case all zombie tables match.\n\n**Reward_#_Nav** *byte*: Index of the navmesh that zombies should be removed from, seen as visible in the level editor. Defaults to ``255`` in which case all navmeshes match.\n\nReputation\n``````````\n\n**Reward_#_Type** *enum* (``Reputation``)\n\n**Reward_#_Value** *int*: Amount of reputation to reward.\n\nRewards List Asset\n``````````````````\n\n**Reward_#_Type** *enum* (``Rewards_List_Asset``)\n\n**Reward_#_GUID** :ref:`Asset Pointer <doc_data_assetptr>`: :ref:`Rewards List<doc_npc_asset_rewards_list>` to grant directly, or :ref:`Spawn Table <doc_assets_spawn>` to resolve into one.\n\nTeleport\n````````\n\n**Reward_#_Type** *enum* (``Teleport``)\n\n**Reward_#_Spawnpoint** *string*: Location to teleport the player to as a reward, using the ID of a spawnpoint node as set in the level editor. For example, ``Liberator_Jet``.\n\nVehicle\n```````\n\n**Reward_#_Type** *enum* (``Vehicle``)\n\n**Reward_#_ID** : ID of Vehicle to be given.\n\n**Reward_#_Spawnpoint** *string*: Location to spawn the vehicle in as a reward, using the ID of a spawnpoint node as set in the level editor. For example, ``Liberator_Jet``. If an ID is not provided, the vehicle will spawn above the NPC.\n\n**Reward_#_PaintColor** *color*: If set, overrides color of spawned vehicle. Vehicle redirector asset's ``SpawnPaintColor`` and vehicle asset's ``DefaultPaintColors`` are bypassed.\n\nZombie\n``````\n\nRespawns zombie(s) at named Spawnpoint nodes. If insufficient dead zombies are available to respawn, alive zombies are converted to the appropriate type and teleported.\n\n.. note:: Spawnpoints must be within a navmesh.\n\n**Reward_#_Type** *enum* (``Zombie``)\n\n**Reward_#_Zombie** *enum*: Which \"type\" of zombie to spawn, the same list as zombie kills condition. To-do: move to its own page.\n\n**Reward_#_Spawnpoint** *string*: Where to spawn the zombies, using the name as set in the nodes level editor. When multiple nodes share a name each zombie is spawned at a random node.\n\n**Reward_#_LevelTableOverride** *int*: Unique ID of a zombie type shown in the level editor. If set, the zombie spawned will use that type. Defaults to -1.\n\n**Reward_#_SpawnQuantity** *int*: Amount of zombies to spawn.\n\n**Reward_#_CooldownId** *string*: If set, only spawn if a named global cooldown (shared between all players) has passed.\n\n**Reward_#_CooldownDuration** *float*: Seconds since CooldownId last ran before this reward can spawn zombies again.\n\n.. _doc_npc_asset_rewards:localization:\n\nLocalization\n------------\n\nRewards lists properties can be localized in the asset's localization file.\n\n**Reward_#**: Localization for the name of the reward as it appears in user interfaces.\n\n.. tip:: Localization properties follow the same rules as other parts of the rewards list – including needing to use the correct prefix. For example, the property name for a localized hint on an interactable object would be ``Interactability_Reward_#``.\n"
  },
  {
    "path": "npcs/vendor-asset.rst",
    "content": ".. _doc_npc_asset_vendor:\n\nVendor Assets\n=============\n\n**GUID** *32-digit hexadecimal*: Refer to :ref:`GUID <doc_data_guid>` documentation.\n\n**Type** *enum* (``Vendor``)\n\n**ID** *uint16*: Must be a unique identifier.\n\nBuying\n------\n\nProperties pertaining to items that the vendor is willing to buy from players. Vendors can set conditions for the items they are buying. These conditions are prefixed with ``Buying_#_``. For example, ``Buying_0_Conditions 1``. For more information, refer to the documentation for :ref:`Conditions <doc_npc_asset_conditions>` and :ref:`Rewards <doc_npc_asset_rewards>` respectively.\n\n**Buying** *byte*: Total number items being bought by the vendor.\n\n**Buying_#_ID** *uint16*: ID of item to buy from the player.\n\n**Buying_#_Cost** *uint32*: Amount of currency to pay the player. Defaults to experience points as the currency, unless the Currency property has been set.\n\nSelling\n-------\n\nProperties pertaining to items or vehicles that the vendor is willing to sell to players. Vendors can set conditions for the items/vehicles they are selling. These conditions are prefixed with ``Selling_#_``. For example, ``Selling_0_Conditions 1``. For more information, refer to the documentation for :ref:`Conditions <doc_npc_asset_conditions>` and :ref:`Rewards <doc_npc_asset_rewards>` respectively.\n\n**Selling** *byte*: Total number of items/vehicles being sold by the vendor.\n\n**Selling_#_Type** *enum* (``Item``, ``Vehicle``): Type of asset being sold.\n\n**Selling_#_ID** *uint16*: ID of item/vehicle to sell to the player.\n\n**Selling_#_Cost** *uint32*: Amount of currency to pay the vendor. Defaults to experience points as the currency, unless the Currency property has been set.\n\n**Selling_#_Spawnpoint** *string*: Location to spawn the purchased vehicle, using the ID of a spawnpoint node as set in the level editor. For example, ``Liberator_Jet``. If an ID is not provided, the vehicle will spawn above the NPC.\n\n**Selling_#_PaintColor** *color*: If set, overrides color of purchased vehicle. Vehicle redirector asset's ``SpawnPaintColor`` and vehicle asset's ``DefaultPaintColors`` are bypassed.\n\n**Selling_#_Ammo** *byte*: Override for the amount of ammuntion that should be loaded in the item sold.\n\n**Selling_#_Barrel** *uint16*: Override for the barrel attachment that should be attached to the item sold.\n\n**Selling_#_Grip** *uint16*: Override for the grip attachment that should be attached to the item sold.\n\n**Selling_#_Magazine** *uint16*: Override for the magazine attachment that should be attached to the item sold.\n\n**Selling_#_Sight** *uint16*: Override for the sight attachment that should be attached to the item sold.\n\n**Selling_#_Tactical** *uint16*: Override for the tactical attachment that should be attached to the item sold.\n\nOther Properties\n----------------\n\n**Disable_Sorting** *flag*: Disable vendor sorting.\n\n**Currency** *string*: GUID of the :ref:`currency asset <doc_assets_currency>` to use as currency instead of experience points.\n\n**FaceOverride** *byte*: Optional index of face image to use when this vendor is opened. Face is reset to character's default when unspecified or when a new message is opened.\n\nLocalization\n------------\n\n**Name** *string*: Vendor name in user interfaces.\n\n**Description** :ref:`doc_data_richtext`: Vendor description in user interfaces.\n\n**Buying_#_Description** :ref:`doc_data_richtext`: If set, overrides item description shown in the vendor menu. I.e., how the vendor would describe the item rather than how the player would.\n\n**Selling_#_Description** :ref:`doc_data_richtext`: Same as **Buying_#_Description**.\n"
  },
  {
    "path": "requirements.in",
    "content": "# Base packages\npygments==2.20.0\nsphinx==8.1.3\nsphinx_rtd_theme==3.0.2\n\n# Sphinx/RTD dependencies\n#########################\n\n# Sphinx-RTD-Theme dependency. Previously needed to be manually specified. Likely safe to remove (and let it be auto-generated in requirements.txt).\n#sphinxcontrib-jquery\n\n# Sphinx extensions\n###################\n\n# Code tabs extension to display codeblocks in different languages as tabs.\nsphinx-tabs==3.4.7\n# Adds a 'copy' button to the right of codeblocks\nsphinx-copybutton==0.5.2\n# Custom 404 error page\nsphinx-notfound-page==1.1.0\n# OpenGraph support (URLs posted offsite appear as OneBox embeds)\nsphinxext-opengraph==0.13.0\n# 2D plotting library. Not currently used but was previously required. Might be safely removable.\nmatplotlib==3.8.0\n\n# Embed videos in documentation pages. Not currently used.\n#sphinxcontrib-video==0.4.1\n"
  },
  {
    "path": "requirements.txt",
    "content": "#\n# This file is autogenerated by pip-compile with Python 3.10\n# by the following command:\n#\n#    pip-compile requirements.in\n#\nalabaster==1.0.0\n    # via sphinx\nbabel==2.17.0\n    # via sphinx\ncertifi==2026.1.4\n    # via requests\ncharset-normalizer==3.4.4\n    # via requests\ncontourpy==1.3.2\n    # via matplotlib\ncycler==0.12.1\n    # via matplotlib\ndocutils==0.21.2\n    # via\n    #   sphinx\n    #   sphinx-rtd-theme\n    #   sphinx-tabs\nfonttools==4.61.1\n    # via matplotlib\nidna==3.11\n    # via requests\nimagesize==1.4.1\n    # via sphinx\njinja2==3.1.6\n    # via sphinx\nkiwisolver==1.4.9\n    # via matplotlib\nmarkupsafe==3.0.3\n    # via jinja2\nmatplotlib==3.8.0\n    # via -r requirements.in\nnumpy==1.26.4\n    # via\n    #   contourpy\n    #   matplotlib\npackaging==25.0\n    # via\n    #   matplotlib\n    #   sphinx\npillow==12.2.0\n    # via matplotlib\npygments==2.20.0\n    # via\n    #   -r requirements.in\n    #   sphinx\n    #   sphinx-tabs\npyparsing==3.3.1\n    # via matplotlib\npython-dateutil==2.9.0.post0\n    # via matplotlib\nrequests==2.33.0\n    # via sphinx\nsix==1.17.0\n    # via python-dateutil\nsnowballstemmer==3.0.1\n    # via sphinx\nsphinx==8.1.3\n    # via\n    #   -r requirements.in\n    #   sphinx-copybutton\n    #   sphinx-notfound-page\n    #   sphinx-rtd-theme\n    #   sphinx-tabs\n    #   sphinxcontrib-jquery\n    #   sphinxext-opengraph\nsphinx-copybutton==0.5.2\n    # via -r requirements.in\nsphinx-notfound-page==1.1.0\n    # via -r requirements.in\nsphinx-rtd-theme==3.0.2\n    # via -r requirements.in\nsphinx-tabs==3.4.7\n    # via -r requirements.in\nsphinxcontrib-applehelp==2.0.0\n    # via sphinx\nsphinxcontrib-devhelp==2.0.0\n    # via sphinx\nsphinxcontrib-htmlhelp==2.1.0\n    # via sphinx\nsphinxcontrib-jquery==4.1\n    # via sphinx-rtd-theme\nsphinxcontrib-jsmath==1.0.1\n    # via sphinx\nsphinxcontrib-qthelp==2.0.0\n    # via sphinx\nsphinxcontrib-serializinghtml==2.0.0\n    # via sphinx\nsphinxext-opengraph==0.13.0\n    # via -r requirements.in\ntomli==2.3.0\n    # via sphinx\nurllib3==2.7.0\n    # via requests\n"
  },
  {
    "path": "sdg/dat-editing-code.rst",
    "content": ".. _doc_dat_editing_code:\n\nDat Editing Code\n================\n\nThis document aims to clarify some of the thought process behind the \"editable\" and \"metadata\" additions to the ``UnturnedDat`` module.\n\nWe'll refer to ``DatValue``, ``DatDictionary``, and ``DatList`` as the \"data classes.\" They were marked public in the first version of the ``UnturnedDat`` module. They have been kept public for backwards compatibility with user code, but use of ``IDatValue``, ``IDatDictionary``, and ``IDatList`` should be preferred where possible. This will allow us to more easily maintain compatibility if additional changes are necessary.\n\nWhen parsing with metadata is enabled, the data classes are wrapped/proxied in ``*WithMetadata`` classes, and the ``*WithMetadata`` classes are inserted into the document hierarchy. Initially these were a subclass of the data class, but we wanted to keep the inheritance hierarchy shallow especially when adding the ``Editable*`` classes.\n\nAlong with editing support, we intend to use metadata for more descriptive asset parsing errors in the future.\n\nWhy not store metadata in data classes directly? We didn't want to introduce any overhead for players running without the ``-ParseAssetMetadata`` command-line flag. Also, not all nodes have metadata (only nodes created by the parser have metadata).\n\nThe ``IEditable*`` interfaces allow user code to modify documents while mostly preserving comments, white space, file layout, and line numbering.\n\n``IEditable`` types wrap/proxy data similar to metadata. They store additional info like comment overrides, preferred line numbers, margins, and insertion order. This preserves any parsed metadata rather than clobbering it.\n\nEdits modifying parsed data wrap ``*WithMetadata`` classes, whereas edits **adding** data wrap the data classes directly.\n\n.. warning:: Comments are associated with the node following them. If a comment isn't associated with a node (separated by empty lines) it will be lost (currently). We could *potentially* work around this by adding a \"FloatingComment\" node type, but it's low priority.\n"
  },
  {
    "path": "sdg/hosting-servers-using-private-workshop-files.rst",
    "content": ".. _doc_hosting_servers_using_private_workshop_files:\n\nHosting Servers Using Private Workshop Files\n============================================\n\nUnfortunately, the dedicated server cannot login to a Steam account to download private workshop files. So, a workaround is necessary.\n\nBy logging into steamcmd you can download the workshop file using your account:\n\n  #. ``login (credentials)``\n  #. ``workshop_download_item 304930 (workshopfileid)``\n\nThis will download the file into the steamcmd folder at ``steamapps/workshop/content/304930/(workshopfileid)``.\n\nYou can now create a symbolic link between the server and the workshop file.\nFor example on Linux testing map ``MyMap``, open the U3DS folder and use:\n\n``ln -S ../../workshop/content/304930/(workshopfileid)/MyMap Maps/MyMap``\n\nThe workshop file ID should still be added to ``WorkshopDownloadConfig.json`` so that clients enable it when joining.\n"
  },
  {
    "path": "sdg/legacy-id-availability.rst",
    "content": ".. _doc_legacy_id_availability:\n\nLegacy ID Availability\n======================\n\nIdeally, new content should use GUIDs when possible.\n\nCertain asset types—such as items—still rely heavily on legacy IDs. That said, they can be referenced by GUID in many cases. For example, NPC clothing and item spawn tables can reference items by GUID.\n\nTo find available legacy IDs:\n\n#. Press ``F1`` in the main menu **Workshop** sub-menu.\n#. Click **Export Asset IDs**.\n#. Open ``Extras/AssetIDs/All Assets/Grouped by Legacy Category``.\n#. Each legacy asset category (e.g., Items) has a corresponding ``Legacy ID Availability.csv`` file listing IDs and whether they are reserved for vanilla content.\n"
  },
  {
    "path": "sdg/source-code.rst",
    "content": ".. _doc_source_code:\n\nSource Code\n===========\n\nWe are hoping to release Unturned's source code in 2025. This would allow anyone to create their own spin on the game. From minor balance changes and item additions, to total conversions with new gameplay elements.\n\n.. warning:: **This information is subject to change.** Details and timelines regarding the release could be different. There's a lot of moving parts we need to consider as we work towards this goal!\n\nThere are some major obstacles that need to be addressed before we can achieve this. Some of these include:\n\n1. | Seeking legal advice. We need to review any existing license agreements, determine any intellectual property we should retain (e.g., the \"Unturned\" trademark for future games), and more advice about open sourcing the project.\n\n2. | Replacing third-party code and assets that cannot be open sourced. Most of the game's code should already be open sourceable. Certain third-party assets likely cannot be included, and some code will need to be replaced from scratch. As examples: edge highlighting should be converted to Unity's post-processing stack, water—currently a Unity 4 asset—will need a fallback, and zombie pathfinding may be able to use Unity's newer navmesh system.\n\nTackling these issues – and others – is necessary before the game is made open source.\n\nFAQ\n---\n\n**Q. Will the official Steam version continue receiving updates?**\n\nYes—we plan to continue maintaining the official Steam version with new content updates and bug fixes.\n\n**Q. Why do you want to make the game open source?**\n\nUnturned's greatest strength is our passionate community. Releasing the source files allows you and other players to further build upon the game as you see fit. Building a lasting legacy for the game regardless of the changes we make or how many years pass from now.\n\n**Q. Will you accept pull requests?**\n\nOur current goal is to simply allow players to create their own derivatives of the game. However – we haven't completely ruled this out, and we're sure there's interest in seeing community-contributed code accepted into the game.\n\n**Q. Will the open source project be kept up-to-date with the version used by the official game?**\n\nThis is our current intention.\n\n**Q. Is there anything I can't do/use?**\n\nThis is an example of something that requires further legal review before we're comfortable giving an answer.\n\n**Q. Is there anything that WON'T be available?**\n\nYes. Some content will be intentionally stripped from the open source version of the project. For example, support for the BattlEye anti-cheat. This is something that requires further review before we're comfortable giving an exhaustive list.\n\n**Q. Could I publish my derivative work on Steam?**\n\nThis requires more legal review (and consulting with Steam)! Ideally, something like that would be permissible. Possibly similar to how some games' mods (e.g., for Portal 2 and Team Fortress 2) have dedicated Store pages. https://store.steampowered.com/about/communitymods/\n\n**Q. Will there be documentation?**\n\nWe are not focused on creating documentation specifically for this purpose. However, some preexisting documentation may be helpful, along with any comments included in the source code. Community-contributed documentation on this topic may be accepted.\n\n**Q. Will other versions of Unturned (1.x, 2.x) become open-source?**\n\nWe may explore this idea in the future, but this is not a priority for us at this time.\n"
  },
  {
    "path": "sdg/test-steam-items.rst",
    "content": ".. _doc_test_steam_items:\n\nTesting Steam Items\n===================\n\n.. note:: Only applicable in development builds and the Unity editor.\n\nA temporary test inventory can be loaded from a file named ``TestInventory.dat`` in the game folder.\n\nIt contains an ``Items`` list of dictionaries, each with the following properties:\n\nDefinitionId :ref:`int32 <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::::::\n\nSteam item definition ID. The item can exist locally, i.e., not in the Inventory Service.\n\n----\n\nQuantity :ref:`int32 <doc_data_builtin_types>` ``1``\n::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nNumber of items in stack. Optional.\n\n----\n\nInstanceId :ref:`uint64 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nBy default, a relatively stable instance ID is automatically created for each test item. Can optionally be overridden using this property if necessary.\n\n----\n\nTags :ref:`string <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::\n\nDynamic per-item tags. Optional. (e.g., manually specifying ragdoll effect, crafted mythical, and/or kill counter)\n\n----\n\nRagdollEffect *enum*\n::::::::::::::::::::\n\nOptional. Any of the ragdoll effect names.\n\n----\n\nParticleEffect :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOptional legacy ID of a mythical effect. Works as if the item were crafted with this mythical effect. Useful for testing mythical effects on skins. (Unboxed mythicals unfortunately use an older, less flexible system.)\n\n----\n\nMythicSearchId :ref:`uint16 <doc_data_builtin_types>` ``0``\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nOptional legacy ID of a mythical effect. Useful for testing mythical effects on cosmetic items without knowing the DefinitionId of the variant. Set DefinitionId to the ID of the non-mythical variant of the item.\n\n----\n\nKillCounter *enum*\n::::::::::::::::::\n\nOptional. Can be set to ``Player`` or ``Total``.\n"
  },
  {
    "path": "sdg/unity-project.rst",
    "content": ".. _doc_unity_project:\n\nUnity Project\n=============\n\nDownloading\n-----------\n\nUnturned's project files are stored using the `Git <https://git-scm.com/>`_ version control system (`VCS <https://en.wikipedia.org/wiki/Version_control>`_). We have a separate document outlining how to work with Git, from downloading to contributing changes: :ref:`doc_using_git`.\n\nGetting Started\n---------------\n\nYou'll need the same version of the Unity editor as described in :ref:`doc_getting_started:installing_unity`. You can double-check the editor version in ``ProjectSettings/ProjectVersion.txt``.\n\nBlender must be available during first import to load certain meshes. On Linux, ``blender`` must be in your ``PATH``.\n\nUnfortunately, Steam needs to be running, even to launch the game in the editor. This does make certain tasks like debugging multiplayer harder. Unturned 3 is very tightly integrated with the Steam API, so this requirement is unlikely to change. Certainly an important lesson for future games: Plan ahead to support swapping out platform APIs.\n\nThe editor needs a copy of the core assets. The easiest option for this is to enable :ref:`Load Core Asset Bundle From Steam Install <load_core_asset_bundle_from_steam_install>`. Alternatively, :ref:`Export Core Asset Bundle <export_core_asset_bundle>`.\n\nMost gameplay requires remote procedure calls (RPCs) to function properly. Even singleplayer is essentially a one-player server. The RPC code is automatically generated, but this is still a manual step in the editor:\n\n#. Open **Window** > **Unturned** > **Net Gen**\n#. Click **Generate**\n#. Tab out and back in to ensure the scripts are imported\n\nFinally, to run the game in the editor, open ``Assets/Game/Sources/Scenes/Setup.unity`` and click Play.\n\n.. warning:: We recommend closing Unity's **Hierarchy** window in-game except when you need it. Unturned's scenes contain mostly top-level game objects for optimization purposes with the drawback of slowing down the Hierarchy window. For more information, `Scenes Structure > Hierarchy depth and count <https://learn.unity.com/tutorial/unity-tips#64622ce0edbc2a32a219b25e>`_.\n\nEditor Preferences\n------------------\n\nUnfortunately, Unturned doesn't support hot-reloading. If modifying code while Unity is open, we recommend changing **Script changes while playing** to **Recompile after playing**.\n\nPlay Mode Settings\n------------------\n\nAn editor window is available from Window > Unturned > Editor Settings. Primarily it sets :ref:`options <doc_launch_options>` that are otherwise specified on the command-line.\n\n**Auto Load Level and Auto Load Mode**: Set to a level's folder name to bypass the menu, going from the loading screen directly into singleplayer or the level editor.\n\n**Glazier**: Overrides default :ref:`doc_glazier`.\n\n.. _load_core_asset_bundle_from_steam_install:\n\n**Load Core Asset Bundle From Steam Install**: If enabled, core.masterbundle is loaded from the Steam version of Unturned rather than the local copy.\n\nTroubleshooting\n---------------\n\nCheck Unity's log files. On Windows there's a shortcut in the project folder to the most recent log file ``Unity Editor.log`` as well as the containing folder ``UnityEditor Logs Folder``.\n\nFile Organization\n-----------------\n\nOne could argue \"organization\" is a misnomer in this case.\n\n``Assets/CoreMasterBundle`` contains most of the Unity assets loaded at runtime. This is the only asset bundle exported for vanilla content.\n\n``Assets/Game/Sources`` contains all of the source (e.g., ``.blend``) and imported (e.g., ``.fbx``) files for Unity assets exported in the asset bundle.\n\n``Assets/Resources`` are Unity assets loaded by the ``Resources`` class. Introducing new files to this folder should be avoided if possible.\n\n``Assets/Runtime`` contains all of the player code. Certain newer features have their own folders per-assembly-definition, but most game code is in the ``Assembly-CSharp`` folder. It would be nice to rename it, but as far as I'm aware we can't do this without breaking script references in asset bundles (as of 2024-10-18).\n\n``Assets/Runtime/Assembly-CSharp/NetGen`` is all generated networking code and excluded from Git.\n\nThe ``Builds`` folder contains exported Unity players, the vanilla :ref:`\"masterbundle\" (asset bundle) <doc_asset_bundles>`, and - unintuitively - all of the important non-Unity files like :ref:`.dats <doc_asset_definitions>`.\n\nThis becomes clearer when remembering the overly-tight integration with Steam. Each subdirectory of ``Builds`` is a Steam depot (except CoreAssetBundle and Test). For future games we would instead automatically **copy** the files from the project output into a Steam depot structure. *sigh*\n\n``Economy`` contains all of the icons and configuration files for the Steam Inventory Service. It's actually gotten a lot tidier since we can refactor it without affecting mods or plugins.\n\n``IDs`` contains spreadsheets of vanilla legacy ID usage. This is hopefully obsolete after 3.24.6.0 added the Menu > Workshop > F1 > Log Asset IDs tool.\n\nExporting Core Asset Bundle (``core.masterbundle``)\n---------------------------------------------------\n\n.. _export_core_asset_bundle:\n\n#. Open Window > Unturned > Master Bundle Tool.\n#. Expand **Asset Bundles** and check the box next to **core.masterbundle**.\n#. Expand **Master Bundles**.\n#. Click **...** and navigate to the Unturned project root, ``Builds/CoreAssetBundle`` directory.\n#. Click **Export**.\n\nContinuous Integration\n----------------------\n\nFor each commit, `Jenkins <https://www.jenkins.io/>`_ builds the project and runs tests, optionally uploading to a Steam branch.\n\nAt the time of writing (2024-10-18) the Jenkins server is locally hosted and not accessible over the Internet.\n\nIt **mostly** works with Pipelines using a script at ``Build_Scripts/Jenkinsfile.txt``.\n\nLaunching the correct version of Unity relies on ``Build_Scripts/JenkinsBootstrapper.exe`` built from ``JenkinsBootstrapper`` in the project root. It expects Unity to be installed in one of these paths:\n\n- ``C:\\UnityEditors``\n- ``C:\\Unity Editors``\n- ``C:\\Program Files\\Unity\\Hub\\Editor``\n\n(Yeah, sadly the development and build processes are very Windows-centric.)\n"
  },
  {
    "path": "sdg/using-git.rst",
    "content": ".. _doc_using_git:\n\nUsing Git\n=========\n\nFirst time setup:\n\n#. Fork\n#. Clone\n#. Add Upstream\n\nDevelopment loop:\n\n#. Branch\n#. Commit and Push (repeat)\n#. Sync with Upstream\n#. Pull Request\n\nGitHub offers a `more thorough walkthrough to forking, cloning, and syncing changes <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo>`_.\n\nFork\n----\n\nThe first step is to \"fork\" the game. This creates your own personal copy to develop and experiment with.\n\nVisit the game repository, click the down arrow next to \"Fork\", and select \"Create a new fork.\"\n\nClone\n-----\n\nYou can use the Git CLI to clone (download) the files, but we recommend using a GUI. The Git website `lists a variety of great, free GUI tools <https://git-scm.com/downloads/guis>`_ including `GitHub Desktop <https://github.com/apps/desktop>`_ and `Sourcetree <https://www.sourcetreeapp.com/>`_. Nelson uses `Fork <https://git-fork.com/>`_, however it has an upfront price of $60 USD at the time of writing (2025-02-25).\n\nFrom your forked repository, click the **Code** button to get the link:\n\n.. image:: img/copy-git-url.png\n\t:scale: 50 %\n\t:alt: Clone repository dropdown in GitHub's web GUI.\n\nClone a local copy of your forked repository (in Sourcetree in this example):\n\n.. image:: img/cloning-in-sourcetree.png\n\t:scale: 50 %\n\t:alt: Entering Git URL into Sourcetree app.\n\nBranch\n------\n\nCreate a branch for your custom changes. You'll periodically **commit** changes to your branch. For example, if working on a big crafting balance overhaul you might create a branch named ``dev-crafting-balance``.\n\nCommit\n------\n\nCommits save a selection of your changes. Commit often! Don't be afraid to commit. For example, you might commit \"Added stacked logs barricade\" or \"Fixed gap in potato item model\".\n\nIt's especially useful if (when) something goes wrong. For example, if a change you were testing turns out to be a bad idea, it's easy to roll back to the previous commit.\n\nAdd Upstream\n------------\n\nTo enable you to keep your forked repository up-to-date, the next step is to add the base game repo as another **Remote** (server).\n\nThere should be an option to **Add Remote** (in Sourcetree in this example):\n\n.. image:: img/add-remote.png\n\t:scale: 50 %\n\t:alt: Finding the add remote button in Sourcetree app.\n\nSet the remote name to ``upstream``. It can technically be anything, but upstream is the conventional name.\n\nFor the remote URL use the ``.git`` URL from the base game's **Code** dropdown in the GitHub web GUI.\n\nSyncing with Upstream\n---------------------\n\nGitHub has a `more detailed article about this <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork>`_.\n\nYour fork doesn't automatically stay up-to-date with changes in the base game. It's important to sync up occasionally, or before submitting a pull request.\n\n#. **Fetch** news from all remotes. This updates the changes your local copy knows about.\n#. **Checkout** the ``main`` branch locally. (Switching away from your custom branch.)\n#. **Pull** changes from ``upstream/main`` into your local ``main``.\n#. **Checkout** your custom branch.\n#. **Merge** the ``main`` branch into your custom branch. This may require resolving merge conflicts.\n\n.. note:: This can be done in a quicker, more straightforward fashion, but this guide doesn't want to risk clobbering your changes.\n\nPush\n----\n\nPushing your changes uploads them to GitHub. By pushing occasionally you gain the added benefit of an online backup of your work!\n\nPull Request\n------------\n\nGitHub again has an `article about pull requests <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request>`_.\n\nCreate a pull request to ask for your changes to be added to the base game. From your fork's repository in GitHub's web GUI there should be a button to **Compare & pull request**.\n\nFont Atlases Dirty\n------------------\n\nIt's possible for characters not included in the font atlases to show up while playing in Unity. For example, from workshop files on the main menu or signs in multiplayer. These get added to the fallback font atlases, marking them changed in git. There's probably a better way to work around this, but one way is to tell git not to detect them as changed:\n\n``git update-index --skip-worktree \"Assets/Resources/UI/Glazier_uGUI/LiberationSans Fallback.asset\" \"Assets/Resources/UI/Glazier_uGUI/NotoSansCJK Fallback.asset\"``\n\nTo undo this (for example, when needing to discard changes):\n\n``git update-index --no-skip-worktree \"Assets/Resources/UI/Glazier_uGUI/LiberationSans Fallback.asset\" \"Assets/Resources/UI/Glazier_uGUI/NotoSansCJK Fallback.asset\"``\n\nClarifying Git vs GitHub\n------------------------\n\nIt's a common misconception that `Git <https://git-scm.com/>`_ and `GitHub <https://en.wikipedia.org/wiki/GitHub>`_ are the same thing! Git is the underlying version control system (`VCS <https://en.wikipedia.org/wiki/Version_control>`_). GitHub is a `software forge <https://en.wikipedia.org/wiki/Forge_(software)>`_ which hosts Git services.\n"
  },
  {
    "path": "servers/bookmark-host.rst",
    "content": ".. _doc_servers_bookmark_host:\n\nBookmark Host\n=============\n\nConfiguring the **Bookmark Host** property along with a :ref:`Login Token <doc_servers_gslt>` enables the bookmark button, allowing players to find your server even after an IP or port change.\n\nBy default the game supports Steam's built-in Favorites and History server lists. These lists remember your server by the combination of IPv4 address and port, so if your address or port change the link is broken. Steam mitigates this if you have a :ref:`GSLT <doc_servers_gslt>` assigned by automatically updating the saved address, but this doesn't happen in realtime. These lists also aren't compatible with the newer :ref:`Fake IP <doc_servers_fake_ip>` feature.\n\nConsidering the trend toward Fake IP, a replacement was necessary, not to mention a popular request from server hosts. Thankfully, with GSLTs in widespread use now and providing a stable persistent ID, the client can save custom per-server bookmark data. The intention is to make bookmarks a better alternative to the legacy favorites/history lists, including proper support for IPv6 at some point. At the time of writing (2024-05-24) the client doesn't save history using the bookmark host property yet, but it should be added once more hosts opt-in.\n\nTo enable bookmarking, set ``BookmarkHost`` in your :ref:`doc_servers_server_configuration` to one of these formats:\n\n1. | A DNS entry with an ``A`` record pointing to your server's public IP. For example, if you own the \"example.com\" domain you could add an A record \"myunturnedserver\" pointing at your game server IP and set ``BookmarkHost`` to \"myunturnedserver.example.com\". In this case the client will save your server's current port number, so the IP address can change but the port can't. If your server doesn't have a static public IP you could use dynamic DNS to update the DNS record periodically. Note that this option is inapplicable for servers using Fake IP because both the IP and port are randomly assigned after each restart.\n\n2. | The URL of a custom web API to return the address, and optionally the port. Clients perform a GET request if ``BookmarkHost`` begins with \"http://\" or \"https://\". The response should be plain text. Examples of valid responses include:\n\n    - 127.0.0.1\n    - 127.0.0.1:27015\n    - myunturnedserver.example.com\n    - myunturnedserver.example.com:27015\n\n  The hosts of Pandahut have generously shared an example implementation consisting of a server plugin which updates the latest server address on a custom backend, and a web request handler to serve the latest address to clients. Note that we don't necessarily recommend using this program as-is, it's just an example: `BookmarkHostPlugin by PandahutMushy <https://github.com/PandahutMushy/BookmarkHostPlugin>`_\n"
  },
  {
    "path": "servers/command-io.rst",
    "content": ".. _doc_servers_command_io:\n\nCommand IO\n==========\n\nBy default Unturned executes commands from console input, and logs information to console output. This can be overridden however, for example to interact with an external process or remote console.\n\nTo replace the vanilla implementation:\n\n1. Create a class that implements the ICommandInputOutput interface.\n2. Get the CommandWindow singleton from Dedicator.commandWindow.\n3. Pass instance to CommandWindow.setIOHandler.\n4. (Optional) Specify ``-NoDefaultConsole`` on the command-line to disable vanilla console.\n"
  },
  {
    "path": "servers/debugging-exceptions.rst",
    "content": ".. _doc_debugging_exceptions:\n\nDebugging Exceptions\n====================\n\nIn release builds it can be difficult to narrow down exactly what's causing an exception. Thanks to `DiFFoZ post here <https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/3979#issuecomment-1620788082>`_ for sharing a technique to find the line number, summarized here for posterity:\n\n#. Unity logs an IL offset in square brackets to the ``Player.log`` file. This is not included in the stack trace sent to the game for the ``Client.log`` file unfortunately. For example 0x003db in this log:\n\n\t.. code-block:: text\n\n\t\tat SDG.Unturned.ResourceSpawnpoint..ctor (System.Byte newType, System.UInt16 newID, System.Guid newGuid, UnityEngine.Vector3 newPoint, System.Boolean newGenerated, SDG.Unturned.NetId netId) [0x003db] in <08e91a6d9e1d4bd5bf2e982fa4148205>:0\n\t\t                                                                                                                                                                                              ^^^^^^^^^\n\n#. Open the related assembly (in this case ``Assembly-CSharp.dll``) in a c# decompiler like DnSpy or ILSpy.\n#. In ILSpy use ``Search`` (Ctrl+Shift+F) to find the method from the stack trace.\n#. Change display mode to ``IL with C#``.\n#. Find related line, ``IL_03db`` in the 0x003db example case.\n"
  },
  {
    "path": "servers/dedicated-workshop-update-monitor.rst",
    "content": ".. _doc_servers_workshop_update_monitor:\n\nDedicated Workshop Update Monitor\n=================================\n\nWhen hosting a server with content from the `Steam Workshop <https://steamcommunity.com/app/304930/workshop/>`_ it may be desirable to restart the server when updates are released by creators. In particular, maps have their own version numbers which the server list uses to test compatibility before players connect.\n\nBy default the game monitors for changes to the hosted map. When a change is detected it notifies players via chat and shuts down the server after a timer. This can be overridden however, for example to notify players with a custom modal prompt and perform a custom restart process.\n\nTo replace the vanilla implementation:\n\n1. Create a class that implements the IDedicatedWorkshopUpdateMonitor interface, or create a subclass of DedicatedWorkshopUpdateMonitor and override as-needed.\n2. Bind the DedicatedWorkshopUpdateMonitorFactory.onCreateForLevel event and return the custom instance.\n"
  },
  {
    "path": "servers/fake-ip.rst",
    "content": ".. _doc_servers_fake_ip:\n\nFake IP\n=======\n\nUsing a Steam **Fake IP** allows players to join your server by IP address without :ref:`port forwarding <doc_servers_port_forward>`.\n\nUnlike :ref:`Server Codes <doc_servers_server_codes>`, a server using Fake IP can be visible on the Internet server list (still without port forwarding) as long as you set a :ref:`Login Token <doc_servers_gslt>`.\n\nTo enable Fake IP, set ``Use_FakeIP`` to ``true`` in your :ref:`doc_servers_server_configuration`.\n\nAfter startup, you can run the ``CopyFakeIP`` command from the server console to copy the IP and port to your clipboard. Pasting this into the Host field of the Connect menu automatically moves the port to the Port field.\n\nTechnical Details\n-----------------\n\nConnecting by Fake IP utilizes `Steam Datagram Relay (SDR) <https://partner.steamgames.com/doc/features/multiplayer/steamdatagramrelay>`_. To quote that page: \"Relaying the traffic protects your servers and players from DoS attack, because IP addresses are never revealed. All traffic you receive is authenticated, encrypted, and rate-limited. Furthermore, for a surprisingly high number of players, we can also find a faster route through our network, which actually improves player ping times.\"\n\nThe downside of Fake IP as opposed to port forwarding is that the address and port will change after every restart, so, for example, a domain name cannot be used without custom scripts.\n\nBookmarking\n-----------\n\nUnfortunately, Fake IP is not compatible with Steam's built-in \"Favorites\" and \"History\" server lists. As an optional workaround, these servers can utilize our :ref:`Bookmarking <doc_servers_bookmark_host>` feature instead.\n"
  },
  {
    "path": "servers/game-server-login-tokens.rst",
    "content": ".. _doc_servers_gslt:\n\nGame Server Login Tokens\n========================\n\nUnturned dedicated servers can be logged-in to Steam using a **Game Server Login Token** or **GSLT**. This provides a few benefits:\n\n#. If using Server Codes to connect, your code will remain linked to your GSLT between sessions. Otherwise, each time you start the server you will need to send your friends the new code.\n#. Servers without a GSLT are considered \"anonymous\" and are hidden from the Internet server list.\n#. Steam tracks your Favorites and History lists by address and port, but with a GSLT it can automatically transfer them if the server details change. This should happen within approximately 24 hours. (Verified in `issue #3980 <https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/3980>`_ thanks to CyberAndrii and joeymisfit, and on `AlliedModders <https://forums.alliedmods.net/showthread.php?p=2529549#post2529549>`_.)\n\nCreating GSLTs\n--------------\n\nYou can manually create GSLTs while logged in with your Steam account here: https://steamcommunity.com/dev/managegameservers\n\nUse Unturned's app ID ``304930``, and a memo to remind you which server the token is for.\n\nUnturned Configuration\n----------------------\n\nThe GSLT can be set in one of two places depending on your preference:\n\n- With the ``Login_Token`` property in each :ref:`doc_servers_server_configuration` under the ``Browser`` section.\n\nOR\n\n- Using the ``GSLT`` command during startup. This can be specified in the ``Commands.dat`` file or on the command-line.\n\nAutomating GSLTs\n----------------\n\nValve provides an ``IGameServersService`` web API for managing GSLTs. Consult their documentation here: https://partner.steamgames.com/doc/webapi/IGameServersService\n"
  },
  {
    "path": "servers/glazier.rst",
    "content": ".. _doc_glazier:\n\nGlazier\n=======\n\nUnity (the game engine Unturned runs on) has three different incompatible UI systems:\n\n1. IMGUI\n2. uGUI\n3. UIToolkit\n\nUnturned has a feature nicknamed **Glazier** which abstracts the underlying UI system, allowing IMGUI, uGUI, or UIToolkit to be used.\n\nuGUI is Unity's current recommended UI system, but unfortunately some players run into visual artifacts and flickering UI with it. In those cases enabling IMGUI is recommended.\n\nContext\n-------\n\nAt its 2014 release into Early Access, Unturned used IMGUI, as it was Unity's only built-in UI system. For performance reasons, automatic layout was turned off in favor of manually specifying the position and size of UI elements.\n\nuGUI support was introduced in late 2020 for players running into issues with IMGUI. Unfortunately, IMGUI support needed to be kept for players facing different problems. Knowing that Unity was working on UIToolkit as a potential replacement, automatic layout was held off until an abstraction ideally supporting all three could be implemented.\n\nUpon updating to Unity 2021 LTS, runtime UIToolkit became available, and it could be integrated as a mostly functional Glazier option. With UIToolkit supported, automatic layout started being added to the game in the form of stats in item descriptions, multi-line text chat, and an updated main menu news feed.\n\nIMGUI\n-----\n\nYou can opt to use Unity's legacy UI system, IMGUI, by enabling a command-line argument:\n\n1. Right-click Unturned in your Steam library\n2. Click \"Properties...\"\n3. Click \"Select Launch Options...\"\n4. Add \"-Glazier=IMGUI\" without quotes\n\n**Pros:**\n\n- Faster on some systems because it has less overhead (no layout, no gameobjects).\n\n**Cons:**\n\n- Certain features like multi-line chat, extended item descriptions, and the main menu news feed are not supported in IMGUI mode.\n- Visual bugs (e.g. incorrect gamma) and input issues on both Mac and Linux.\n- Slower on some systems due to increased garbage collection.\n- Does not support layered interactive UI. Some menus like crafting and inventory selection use workarounds for this, and thus behave differently from their uGUI counterparts.\n- Plugin UIs are sorted underneath the game UI i.e. plugin UI cannot overlay.\n- Rich text does not fade out in chat.\n\nuGUI\n----\n\nThis is Unturned's current default UI system, so opting in is not necessary.\n\n**Pros:**\n\n- Faster on some systems because the UI is not rebuilt every frame.\n- More user-friendly e.g. can drag items outside the inventory to drop them.\n- Looks better e.g. nicer scaling on high DPI monitors, foreground color universally supported.\n- Rich text fades out properly in chat.\n\n**Cons:**\n\n- Visual artifacts and flickering on some systems.\n- Slower on some systems because it has more overhead (layout, gameobjects).\n\nUIToolkit\n----------\n\nIntegration into Unturned is experimental. It's not ready to be the default yet. You can check it out with a command-line argument:\n\n1. Right-click Unturned in your Steam library\n2. Click \"Properties...\"\n3. Click \"Select Launch Options...\"\n4. Add \"-Glazier=UIToolkit\" without quotes\n\n**Cons:**\n\n- Scroll views have incorrect content size (for now). With IMGUI and uGUI it was possible to explicitly specify the content size, whereas UIToolkit tries to automatically calculate it from the content bounds. Unfortunately, many of Unturned's scroll views have content clipping outside the intended content area, and so they don't appear correctly. For example, the location labels on the map can intersect the content border.\n- Text shadows and outlines are not as nice as with uGUI.\n"
  },
  {
    "path": "servers/openmod.rst",
    "content": ".. _doc_servers_openmod:\n\nOpenMod\n=======\n\n`OpenMod <https://github.com/openmod/openmod>`_ is a spiritual successor to :ref:`Rocket <doc_servers_rocket>` as developed by one of Rocket's original maintainers. It has its own plugin framework, but supports compatibility with existing Rocket plugins by integrating with RocketMod and LDM.\n\nInstallation\n------------\n\nInstalling OpenMod Using the RocketMod Installer Plugin (recommended)\n`````````````````````````````````````````````````````````````````````\n\n1. Download the latest OpenMod Installer Plugin for RocketMod from the `OpenMod.Installer.RocketMod repository <https://github.com/openmod/OpenMod.Installer.RocketMod/releases/latest>`_.\n2. Move it to the ``/Rocket/Plugins`` folder and restart your server.\n3. Run ``/openmod install`` and follow the instructions.\n4. Done! Now you can `start installing plugins <https://openmod.github.io/openmod-docs/userdoc/concepts/plugins.html>`_.\n\nInstalling OpenMod Manually\n```````````````````````````\n1. Download the latest OpenMod.Unturned.Module-vX.X.X.zip from `openmod repository <https://github.com/openmod/OpenMod/releases/latest>`_.\n2. Copy the \"OpenMod.Unturned\" folder into the \"Modules\" folder inside the Unturned installation directory.\n3. Start your server. The first start will take a while since OpenMod will download its core components.\n4. Done! Now you can `start installing plugins <https://openmod.github.io/openmod-docs/userdoc/concepts/plugins.html>`_.\n\nPlugins\n-------\n\nYou can find open-source OpenMod plugins `here <http://openmod.github.io/openmod-plugins>`_.\n\nResources\n`````````\n\n- `GitHub Repository <https://github.com/openmod/openmod>`_\n- `Documentation <https://openmod.github.io/openmod-docs/>`_\n\nRocketMod Compatibility\n```````````````````````\n\nOpenMod can be installed side-by-side with RocketMod, so you can use both RocketMod and OpenMod without any issue. OpenMod does not aim to replace RocketMod but to work with it together instead.\n"
  },
  {
    "path": "servers/port-forwarding.rst",
    "content": ".. _doc_servers_port_forward:\n\nPort Forwarding\n===============\n\n.. note:: After the 3.23.14.0 update, port forwarding is no longer necessary to make a server accessible over the Internet. It's only required if you want players to be able to join directly by IP and/or domain name. For more information on the new alternatives to port forwarding, please refer to :ref:`Server Codes <doc_servers_server_codes>` and :ref:`Fake IP <doc_servers_fake_ip>`.\n\nWhen hosting a server on a home network **port forwarding** is required in order to direct traffic to the host computer. One way to think of it is that when there are multiple devices (e.g. computers and phones) connected to the LAN, the outside Internet does not know which device is the Unturned server. In this case port forwarding specifies which LAN device is the host.\n\nTwo pieces of information: the port range and local device address are required prior to port forwarding, and are described in detail below.\n\nPort Range\n----------\n\nEach Unturned server uses two consecutive ports while running. The first is for server list queries, and the second for in-game traffic.\n\nBy default 27015 and 27016 are used. Setting a different value with the ``Port`` command uses that value and plus one. Recommended ``Port`` command settings are 27015 for the first server, 27017 for the second server, 27019 for the third server, so on and so forth.\n\nLocal Device Address\n--------------------\n\nForwarding the ports directs them to a LAN address, i.e. the computer hosting the server. To determine the local IP on Windows:\n\n1. Press Windows + R to open the Run dialog.\n\n2. Type ``cmd`` and press enter.\n3. Type ``ipconfig`` in the command prompt and press enter.\n4. Find the ``Wireless LAN adapter Wi-Fi`` or ``Ethernet adapter Ethernet`` header.\n5. Look for the ``IPv4 Address`` value and make note of it. This is the local address to forward the ports to. It likely looks something like ``192.168.0.6``.\n\nHow to Forward Ports\n--------------------\n\nInstructions vary by router, but should be doable from the web browser without any extra tools or software. This third-party website has a thorough list of routers with simple steps for each model: https://portforward.com/router.htm\n\nIn general the steps are along the lines of:\n\n1. Connect to router via web browser.\n\n2. Login with home admin credentials.\n\n3. Find Port Forwarding menu.\n\n4. Find the option to add a new rule.\n\n5. Name the new rule something related to Unturned for reference.\n\n6. Input 27015 as the starting port(s) and 27016 as the ending port(s).\n\n.. note::\n\n\tOn some routers it might not be possible to input multiple ports within a single rule. In that case multiple rules can be setup; one for each of the two ports.\n\n7. Enable UDP protocol.\n\n8. Set destination internal IP to the local host address.\n\n9. Save the new rule.\n"
  },
  {
    "path": "servers/rocket.rst",
    "content": ".. _doc_servers_rocket:\n\nRocket\n======\n\nSDG maintains a fork of **Rocket** called the Legally Distinct Missile (or LDM) after the resignation of its original community team. Using this fork is recommended because it preserves compatibility, and has fixes for important legacy Rocket issues like multithreading exceptions and teleportation exploits.\n\nInstallation\n------------\n\nThe dedicated server includes the latest version, so an external download is not necessary:\n1. Copy the Rocket.Unturned module from the game's Extras directory.\n2. Paste it into the game's Modules directory.\n\nResources\n---------\n\nBrowse the source code for the maintained version: `Legally Distinct Missile Repository <https://github.com/SmartlyDressedGames/Legally-Distinct-Missile>`_.\n\nfr34kyn01535 has listed all of the original plugins in a post to the /r/RocketMod subreddit: `List of plugins from the old repository <https://www.reddit.com/r/rocketmod/comments/ek4i7b/>`_.\n\nThe RocketMod organization on GitHub hosts several related archived projects: `RocketMod (Abandoned) <https://github.com/RocketMod>`_\n\nHistory\n-------\n\nOn the 20th of December 2019 Sven Mawby \"fr34kyn01535\" and Enes Sadık Özbek \"Trojaner\" officially ceased maintenance of Rocket. They kindly released the source code under the MIT license. `Read their full farewell statement here <https://github.com/RocketMod/Rocket/blob/master/Farewell.md>`_.\n\nFollowing their resignation SDG forked the repository to continue maintenance in sync with the game.\n\nOn the 2nd of June 2020 fr34kyn01535 requested the fork be rebranded to help distance himself from the project.\n"
  },
  {
    "path": "servers/server-auto-restart.rst",
    "content": ".. _doc_server_auto_restart:\n\nServer Auto Restart\n===================\n\nServer maintenance can be somewhat automated without plugins, by utilizing a couple features from your server's Config.json file.\n\nScheduled Maintenance\n---------------------\n\nWe recommend restarting your server once every 24 hours, as much of the game's older code still uses single-precision floating point time.\n\nThere are three settings for scheduled shutdowns:\n\n#. | **Enable_Scheduled_Shutdown**: When ``true``, the server will shutdown at a specified time.\n\n#. | **Scheduled_Shutdown_Time**: Local time for when the server will shutdown.\n\n#. | **Scheduled_Shutdown_Warnings**: Players will be notified via a chat broadcast at these times before the scheduled shutdown. For example, 30:00 will broadcast in chat 30 minutes before the shutdown.\n\nChecking for Updates\n--------------------\n\nYour server can monitor for updates, and shutdown when one is detected. Three settings are important when checking for updates:\n\n#. | **Enable_Update_Shutdown**: When ``true``, the server will monitor for updates.\n\n#. | **Update_Steam_Beta_Name**: Defaults to ``public``, but can be set to ``preview`` for servers running on the preview branch.\n\n#. | **Update_Shutdown_Warnings**: After an update is detected, the server will wait for the longest of these durations to notify players before shutdown. For example, if the longest time is 2:30, the server will broadcast in chat 2 minutes and 30 seconds before the shutdown.\n\nPractical Application\n---------------------\n\nThese options are most useful in conjunction with a script that updates and restarts the server in a loop. For example, this Windows .bat script can be placed in the steamcmd folder to infinitely update and restart the server:\n\n.. code-block:: bat\n    :linenos:\n    \n    @echo off\n    rem @ suppresses echo command from being echoed, and then disables echoing in this script.\n\n    rem This is a label for use with \"goto\". The script will return to this label to update and restart the server.\n    :loop\n\n    rem %~dp0 expands to the path to this script's directory, allowing it to be called from a different working directory.\n    rem The \"/wait\" option pauses our script until steamcmd is finished.\n    rem Start steamcmd, download latest version of Unturned Dedicated Server, then close cleanly.\n    echo Updating...\n    start \"\" /wait \"%~dp0steamcmd.exe\" +login anonymous +app_update 1110390 +quit\n\n    echo Finished update! Launching server...\n    start \"\" /wait \"%~dp0steamapps\\common\\U3DS\\Unturned.exe\" -batchmode -nographics +InternetServer/MyServer\n\n    echo Server has exited. Restarting after timeout...\n    echo:\n    echo Press CTRL+C and then Y during this timeout to cancel restart.\n    timeout 10\n\n    rem Return to the \"loop\" label to update and restart the server.\n    goto loop\n\nHere's a similar example for Linux, tested on Ubuntu. Note that the U3DS install path may be different depending how steamcmd was installed and whether ``+force_install_dir`` was specified, but typically one of these locations:\n\n1. ``~/.steam/steam/steamapps/common/U3DS``\n2. ``~/Steam/steamapps/common/U3DS``\n\nAs such, it may be helpful to create a symbolic link to the U3DS directory:\n\n``ln -s ~/.steam/steam/steamapps/common/U3DS ~/U3DS``\n\nOR\n\n``ln -s ~/Steam/steamapps/common/U3DS ~/U3DS``\n\nThis example script assumes the symbolic link exists at ``~/U3DS``.\n\n1. Save script as ``MyServer.sh`` in your home directory (e.g., ``nano ~/MyServer.sh``):\n\n.. code-block:: shell\n\t:linenos:\n\n\t#! /usr/bin/bash\n\twhile true; do\n\t\techo Updating...\n\t\tsteamcmd +login anonymous +app_update 1110390 -validate +quit\n\n\t\techo Finished update! Launching server...\n\t\tcd ~/U3DS\n\t\tsource ServerHelper.sh +InternetServer/MyServer\n\n\t\techo Server has exited. Restarting after timeout...\n\t\techo Press Ctrl+C during this timeout to cancel restart.\n\t\tread -t 10\n\tdone\n\n2. Open a screen to run the server in with ``screen -S MyServer``.\n3. Run script with ``bash MyServer.sh``.\n4. If everything's working OK, press ``Ctrl + A`` then ``D`` to detach, leaving the script running.\n5. You can re-attach to the screen with ``screen -r MyServer``.\n"
  },
  {
    "path": "servers/server-browser-curation.rst",
    "content": ".. _doc_server_browser_curation:\n\nServer Browser Curation\n=======================\n\nThis feature allows anyone to create and share lists of \"rules\" that filter or label servers in the server browser. Lists can be shared through the Steam Workshop as :ref:`Server Browser Curation Assets <doc_asset_server_browser_curation>`, or automatically downloaded from a URL on the Internet.\n\nIf you're a server host, suppose you want to prevent bad actors from copying your server details. Your first rule would ``Allow`` your genuine servers, for example, matching by ``ServerID`` (\"server code\"). Your second rule could then ``Deny`` servers with a regex that matches your server network's branding.\n\n- :ref:`Examples <doc_server_browser_curation:examples>`\n- :ref:`FAQ (Frequently Asked Questions)<doc_server_browser_curation:faq>`\n\nProperties\n----------\n\nName :ref:`string <doc_data_builtin_types>`\n:::::::::::::::::::::::::::::::::::::::::::\n\nYour display name in the user interface. For example, a server network might display as \"MyNetwork Verified Servers\", or someone creating a list of high-quality well-moderated hosts might choose \"MyName's Recommendations\".\n\nIconURL :ref:`string <doc_data_builtin_types>`\n::::::::::::::::::::::::::::::::::::::::::::::\n\nOptional URL of a 32x32 image to display in the user interface. For example, a server network might use the same icon they use in the server browser.\n\nLabels :ref:`list of dictionaries <doc_data_file_format>`\n:::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nLabels applied by rules are defined here. Each has the following properties:\n\n**Name** :ref:`string <doc_data_builtin_types>`: Name used to refer to this label from a rule.\n\n\n**Text** :ref:`string <doc_data_builtin_types>`: Rich text displayed in the server browser.\n\nFor example, defining two labels:\n\n.. code-block:: unturneddat\n\t:linenos:\n\n\tLabels\n\t[\n\t\t{\n\t\t\tName Verified\n\t\t\tText <color=green>MyNetwork Verified</color>\n\t\t}\n\t\t{\n\t\t\tName Fake\n\t\t\tText <color=red>MyNetwork Imposter</color>\n\t\t}\n\t]\n\nRules :ref:`list of dictionaries <doc_data_file_format>`\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nRules are processed from top to bottom. Each has the following properties:\n\n**Action** *enum* (``Label``, ``Allow``, ``Deny``): ``Label`` applies a label and continues processing rules, whereas ``Allow`` and ``Deny`` both stop rule processing. ``Deny`` blocks the server, either hiding it or moving it to the bottom depending on the player's settings.\n\n.. note:: ``Allow`` and ``Deny`` **can** apply labels as well. The only difference is that ``Label`` action doesn't affect whether server is allowed or denied.\n\n**Inverted** *bool*: If true, negate whether this rule matches. i.e., binary NOT.\n\n**Description** *string*: Text shown in the rules list user interface and in the tooltip for servers moved to the bottom of the list. Please use this to document *why* your rule exists!\n\n**Label** *string*: Name of a label to apply.\n\n**Type** *enum* (``Name``, ``IPv4``, ``ServerID``): Determines which server data this rule matches against.\n\n\t- **Name**: Match server's name using one or more `regular expression (regex) <https://en.wikipedia.org/wiki/Regular_expression>`_. Refer to **Regex** or **Regexes** property.\n\t- **IPv4**: Match server's public IP using one or more `CIDR addresses <https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation>`_. Refer to **Filter** or **Filters** property.\n\t- **ServerID**: Match server's ID (also referred to as \"server code\" or Steam ID). Refer to **Value** or **Values** property.\n\n**Regex** *string* or **Regexes** *list of string*: The rule matches if any of the regexes match the server name. (binary OR)\n\nOne quick way to test a regex is to prefix it with \"regex:\" in the server browser name filter to search by regex. There are also a variety of helpful, free regex creation tools online.\n\nFor example, matching any server with \"MyNetwork\" in the name: ``Regex (?i)(MyNetwork)`` (``(?i)`` enables case-insensitive matching)\n\n**Filter** or **Filters**: The rule matches if any of the rules match the server IPv4 address. (binary OR)\n\nIPv4 address with optional subnet mask and optional port number or range. Here's an example list with explanations:\n\n.. code-block:: unturneddat\n\t:linenos:\n\n\tFilters\n\t[\n\t\t// Matches any port on this IP address.\n\t\t10.8.0.1\n\n\t\t// Matches port 27015.\n\t\t10.8.0.1:27015\n\n\t\t// Matches ports 27015 through 27030 (inclusive).\n\t\t10.8.0.1:27015-27030\n\n\t\t// Matches any port on IP addresses in the range 192.168.1.0 through 192.168.1.255.\n\t\t192.168.1.0/24\n\t]\n\n**Value** *uint64* or **Values** *list of uint64*: The rule matches if any of the Steam IDs match the server's Steam ID. (binary OR)\n\nFrom the server console you can copy the server ID with \"CopyServerCode\". From the in-game server lobby screen you can copy it to the clipboard by pressing PageDown.\n\n.. _doc_server_browser_curation:examples:\n\nExamples\n--------\n\nHere's a hypothetical verification list for the \"NelsonNet\" network:\n\n.. code-block:: unturneddat\n\t:linenos:\n\n\tName NelsonNet Verification Example\n\tIconURL https://cdn.smartlydressedgames.com/ShareX/2024/12/ExampleIcon.png\n\n\tLabels\n\t[\n\t\t{\n\t\t\tName Verified\n\t\t\tText <color=#708fbd>NelsonNet Official</color>\n\t\t}\n\t]\n\n\tRules\n\t[\n\t\t{\n\t\t\tAction Allow\n\t\t\tDescription Verify NelsonNet's Steam IDs\n\t\t\tLabel Verified\n\t\t\tType ServerID\n\t\t\tValues\n\t\t\t[\n\t\t\t\t85568392932910946\n\t\t\t]\n\t\t}\n\t\t{\n\t\t\tAction Deny\n\t\t\tDescription Hide fake NelsonNet servers (case-insensitive check for \"NelsonNet\" in the name)\n\t\t\tType Name\n\t\t\tRegex (?i)(NelsonNet)\n\t\t}\n\t]\n\nFor an example of adding a curator by web URL, here's the link for that list: ``https://cdn.smartlydressedgames.com/ShareX/2024/12/ExampleCurationList.txt``\n\n.. _doc_server_browser_curation:faq:\n\nFAQ (Frequently Asked Questions)\n--------------------------------\n\nHow can I find the details for someone else's server?\n:::::::::::::::::::::::::::::::::::::::::::::::::::::\n\nPressing the **\"Clipboard Debug\"** hotkey (default **PageDown**) on the server lobby screen copies a variety of public information about the server to your clipboard. For example:\n\n.. figure:: /img/ServerInfoScreen.png\n\n\tAn example server.\n\nPressing the key on this server copies the following information to the clipboard:\n\n.. code-block:: text\n\t:linenos:\n\n\tName: Nelson's PEI Server\n\tDescription:\n\tThumbnail:\n\tAddress: 192.168.48.73\n\tConnection Port: 27016\n\tQuery Port: 27015\n\tSteamId: 85568392932910946 (k_EAccountTypeGameServer)\n\tPing: 1ms\n\t0 workshop file(s):\n\nRelevant details being:\n\n- Name (line 1) can be used in a **Name** rule.\n- Address (line 4) can be used in an **IPv4** rule.\n- SteamId (line 7) can be used in a **ServerID** rule.\n\nHow do I create a regular expression (regex)?\n:::::::::::::::::::::::::::::::::::::::::::::\n\nAs a starting point, ``(?i)(your text here)`` matches \"your text here\" (without quotes) `case-insensitively <https://en.wikipedia.org/wiki/Case_sensitivity>`_. It would also match \"Your Text Here\" or \"yOuR tExT hErE\", but not \"yourtexthere\".\n\nFor more advanced uses, we'd recommend using an online tool. At the time of writing (2025-02-07) these are top search results for \"regex tool\":\n\n#. https://regex101.com/\n#. https://regexr.com/\n#. https://regex-generator.olafneumann.org/\n#. https://www.regextester.com/\n\n\n"
  },
  {
    "path": "servers/server-codes.rst",
    "content": ".. _doc_servers_server_codes:\n\nServer Codes\n============\n\nA **Server Code** is a randomly generated, 17-digit numeric code assigned to your server. Your friends can join your multiplayer server by inputting its **Server Code** in the Connect Directly menu without you needing to :ref:`port forward <doc_servers_port_forward>`.\n\nYour server code can be found by clicking the \"Copy Server Code\" button while in your server. Alternatively, it appears in the Server Console immediately after your server finishes loading, and can be easily copied to your clipboard with the ``CopyServerCode`` command.\n\nLimitations\n-----------\n\nThe primary downside of Server Codes is their incompatibility with the pre-joining server info screen (which displays things like the server name, installed mods, current players, and other details). The info screen uses Steam's A2S protocol, which can only be queried by IP, so joining by Server Code enters the server immediately instead. You can enable :ref:`Fake IP<doc_servers_fake_ip>` to work around this limitation.\n\nYour server's Server Code will change each time your server restarts. You can assign a :ref:`Game Server Login Token <doc_servers_gslt>` to keep your Server Code linked between sessions.\n\nHow does it work?\n-----------------\n\nConnecting by Server Code utilizes `Steam Datagram Relay (SDR) <https://partner.steamgames.com/doc/features/multiplayer/steamdatagramrelay>`_. To quote that page:\n\n\t*Relaying the traffic protects your servers and players from DoS attack, because IP addresses are never revealed. All traffic you receive is authenticated, encrypted, and rate-limited. Furthermore, for a surprisingly high number of players, we can also find a faster route through our network, which actually improves player ping times.*\n"
  },
  {
    "path": "servers/server-configuration.rst",
    "content": ".. _doc_servers_server_configuration:\n\nServer Configuration\n====================\n\nMost server options are found in your server's ``Config.txt`` file (e.g., ``Servers/Default/Config.txt``). If your server was created before **3.25.8.0**, please refer to the **How is Config.json converted to Config.txt?** and **Legacy Json File** sections.\n\nTo check which options are overridden by your config you can add the ``-LogGameplayConfig`` command-line flag to print overrides to the console.\n\nValues left empty will use the default. They can be overridden by levels unless the ``-NoLevelConfigOverrides`` command-line flag is used.\n\nHow is Config.json converted to Config.txt?\n-------------------------------------------\n\nServers created before **3.25.8.0** have a ``Config.json`` file rather than ``Config.txt``. The ``.json`` file stored options for each difficuly (easy, normal, hard), so during startup a per-difficulty ``.txt`` file is converted. For example, if the server ID is \"ExampleServer\" and difficulty is Normal (default), the file will be created at:\n``Servers/ExampleServer/Config_NormalDifficulty.txt``\n\nOnly options changed from the default value are converted. This is because empty values in ``Config.txt`` indicate the default should be used.\n\nHow can I change which config file is loaded?\n---------------------------------------------\n\nYou can override the config file path with the ``-GameplayConfigFile`` command-line option. For example, if your server ID is \"ExampleServer\", here's how to use this option:\n\n``-GameplayConfigFile=\"SpecialEventConfig.txt\"``\n\nwill create\n\n``Servers/ExampleServer/SpecialEventConfig.txt``.\n\nAlternatively, you can provide an absolute file path like:\n\n``-GameplayConfigFile=\"C:/SpecialEventConfig.txt\"``\n\nHow can I remove generated comments?\n------------------------------------\n\nIf you don't want explanations for each option in ``Config.txt`` you can add the ``-GameplayConfigNoGeneratedComments`` command-line flag. This removes all comments prefixed with ``>``.\n\nThis is useful for a more concise config file.\n\nHow can I remove unused options?\n--------------------------------\n\nIf you don't want all available options listed in ``Config.txt`` you can add the ``-GameplayConfigNoEmptyValues`` command-line flag. This removes all non-overridden options.\n\nThis is useful for a more concise config file.\n\nHow can I prevent levels from overriding my config?\n---------------------------------------------------\n\nIf you assign a value in ``Config.txt`` it will take priority over level overrides, whereas empty values (default) can be overridden by levels.\n\nTo entirely prevent levels from overriding any config, you can add the ``-NoLevelConfigOverrides`` command-line flag.\n\nLegacy Json File\n----------------\n\nOlder server folders have a ``Config.json`` file. During startup, the server will automatically convert it to the newer format according to the difficulty (easy/normal/hard).\n\nDownsides of the older format:\n\n#. Level overrides take precedent over default values. The server compares level config overrides to the values in the json file, and only overrides if it matches the default value. This means if you prefer the default (e.g., Hitmarkers ON) but the level turns them off it's not possible to prevent it without the ``-NoLevelConfigOverrides`` command-line flag.\n#. It contains easy, normal, and hard difficulty values in the same file. It's confusing to change a value but not have it apply because it's for a different difficulty level.\n#. Common to forget commas after values which breaks loading the file.\n#. No support for comments.\n\nBenefits of the newer format:\n\n#. All settings have comments explaining their use, options, and default value. Your own comments are preserved alongside the autogenerated ones.\n#. Separate files per difficulty, as well as the option for additional configs with the ``-GameplayConfigFile`` command-line option.\n#. Easier for new hosts because notepad can open it by default, and commas are not required.\n\nIf you wish to continue using the ``Config.json`` file instead of the newer file, you can add this command-line flag: ``-UseLegacyJsonGameplayConfig``\n"
  },
  {
    "path": "servers/server-hosting-rules.rst",
    "content": ".. _doc_server_hosting_rules:\n\nServer Hosting Rules\n====================\n\nServer hosts are able to customize their server in order to offer a tailored gameplay experience to their players. This often includes adding new features, disabling vanilla content, or using custom rulesets. However, all servers must adhere to the rules outlined below.\n\nServers that violate these rules may be temporarily or permanently banned. To report a server for rule violations, or appeal a moderation decision applied to your server, you may file a ticket with SDG Support:\n\n* `Report a server for breaking rules <https://support.smartlydressedgames.com/hc/en-us/requests/new?ticket_form_id=12189991924500>`_\n* `Appeal a server report <https://support.smartlydressedgames.com/hc/en-us/requests/new?ticket_form_id=12189992633364>`_\n\n`View Moderation List <https://smartlydressedgames.com/UnturnedHostBans/index.html>`_\n\nRecent changes\n--------------\n\n**2025-06-12:** Clarified what counts as a \"vanilla premium content\" and what servers are allowed to do instead. (Previously, this was only detailed in the \"Recent changes\" section.)\n\n**2024-06-03:** Scaled back the degree to which the server list is moderated. The previous level was untenable especially when considering anyone can freely create an unlimited number of servers, and the moderation system is duct-taped on top of the otherwise unmoderated Steam server list. For more information, please refer to our `support article about moderation and server curation as well as some behind-the-scenes details <https://support.smartlydressedgames.com/hc/en-us/articles/34633581382676>`_.\n\nMonetization Types\n------------------\n\nServers are not allowed to sell or otherwise offer access to **vanilla premium content**. This includes the Gold Upgrade benefits in addition to any vanilla cosmetics and/or skins. For example, any item purchasable from the Stockpile or the Steam Community Market for Unturned is considered a \"vanilla premium content\".\n\nWhen offering cosmetic perks to players as a microtransaction, the server should own (or have licensed) the rights to that content. For example, you could create your own custom \"cosmetics\" and offer those to players instead.\n\nMonetization Filter\n-------------------\n\nPlayers can filter the in-game server list by this field. It is not required to configure this field, but ideally it should be set to whichever value accurately describes your server's monetization practices. When configured, this field must be configured truthfully.\n\n``Unspecified``\n```````````````\n\nThe \"Monetization\" field in each :ref:`doc_servers_server_configuration` file defaults to ``Unspecified``. If you are unsure what to configure your server's monetization type as, then you can leave it unspecified.\n\n``None``\n````````\n\nServers that are entirely unmonetized, or only offer a donation option, can use the ``None`` value.\n\n``NonGameplay``\n```````````````\n\nServers that only offer microtransactions that do not provide a gameplay advantage can use the ``NonGameplay`` value. For example, selling custom weapon skins and chat colors would not be a gameplay advantage.\n\n``Monetized``\n`````````````\n\nServers that offer *any* \"pay-to-win\" microtransactions (i.e., those that provide a gameplay advantage)—such as selling \"kits\" containing items or vehicles—should use the ``Monetized`` option.\n\nOnline Conduct\n--------------\n\nRepeat violations of `Steam's Online Conduct rules <https://store.steampowered.com/online_conduct>`_ by a multiplayer server may result in moderation. For example, servers that exist to promote the sale of cheats are not allowed.\n\nIf you encounter inappropriate behavior by *other players* while playing on a server, we encourage you to report it to the server's owner first so they are aware of the issue.\n\nRoleplaying Current Events\n--------------------------\n\nSimulating gameplay of current, real-world tragedies is **not** allowed and may result in reduced visibility or other moderation on the server. For example, roleplaying ongoing conflicts (such as the the Russo-Ukrainian War, or Israeli-Palestinian conflict) or natural disasters.\n\nAnycast Proxies\n---------------\n\nIf you use an anycast proxy, please consider `submitting a support request here <https://support.smartlydressedgames.com/hc/en-us/requests/new>`_ to ensure it is flagged correctly. Otherwise, players will almost certainly report the server.\n\nAnycast proxies are a great protection mechanism, but they significantly affect the ping reported in the server browser. For example, a server hosted in Australia may have a ping of 40ms for players in the region but a ping of 300ms for players in Europe. Using an anycast proxy, in this case, would report a much lower ping (e.g., ~30ms) to players around the globe and incorrectly sort the server among those with the lowest ping.\n\nThis is frustrating for players looking for low-latency servers, as they may join one with a low ping only to find it is much higher in-game. Servers using an anycast proxy are flagged to sort like they have a higher ping to avoid this problem. It was implemented as a direct response to complaints from players.\n\nServers using a regular proxy with ping similar to the actual in-game ping are not flagged. Only proxies with a significant ping difference are flagged.\n\nWorkshop File Copyright Infringement\n------------------------------------\n\nMod authors can submit a notice of copyright infringement here: https://steamcommunity.com/dmca/create/. These are reviewed directly by Steam's copyright agent.\n\nFAQ (Frequently Asked Questions)\n--------------------------------\n\nCan I report servers for admin abuse or pay-to-win features?\n````````````````````````````````````````````````````````````\n\nThis is not reportable. Unfortunately, the best option is to play on a different server, or to :ref:`host your own multiplayer server <doc_server_hosting>` for you and your friends. Moderating individual community servers is not tenable at our current small scale with current tools, but may be revisited if/when it becomes feasible.\n\nHow can my server mitigate Denial of Service (DoS) attacks?\n```````````````````````````````````````````````````````````\n\nIf your server is receiving DoS attacks, the :ref:`doc_servers_fake_ip` feature is a great way to protect against this behavior. It routes traffic through Steam's relay network, shielding your server's IP, and potentially reducing network latency for players.\n\nHow can I prevent people from re-uploading my Workshop files?\n`````````````````````````````````````````````````````````````\n\nUpdate your mod to include an :ref:`doc_asset_bundle_custom_data` and configure it to use the original upload's Workshop file ID. This adds a verification check to when a server attempts to download the mod – preventing it from being downloadable if the mod's Workshop file ID doesn't match the configured value. As a last resort, if your content has been reuploaded to Steam by another user without your permission, you may consider submitting a `notice of copyright infringement <https://steamcommunity.com/dmca/create/>`_. Notices of copyright infringement are reviewed by Valve's copyright agent, and should only be submitted if you understand the legal information on their submission page.\n"
  },
  {
    "path": "servers/server-hosting.rst",
    "content": ".. _doc_server_hosting:\n\nSetting up a Server\n===================\n\nPlayers can host their own multiplayer servers through the **Unturned Dedicated Server** tool. (This can be abbreviated as \"**U3DS**\".)\n\nThis tool is provided alongside Unturned but must be installed separately. It can be installed and ran from your Steam Library, or instead through :ref:`SteamCMD <doc_steamcmd>` for a much more advanced setup.\n\n.. figure:: /img/U3DS_SteamLibrary.png\n\n\tFind the **Unturned Dedicated Server** app in your Steam Library.\n\nServers can be hosted on Windows and Linux operating systems. There is no support for hosting on macOS devices.\n\n.. _doc_server_hosting:simple_setup:\n\nSimple Setup\n------------\n\nThis section provides a quick guide to creating your own server—perfect for hosting a *private* multiplayer world for just you and a few friends.\n\nPort forwarding and other optional – *but useful* – features are not covered in this section. Consider reading more advanced setup instructions once your server is functional.\n\n1. Launch the Unturned Dedicated Server app\n```````````````````````````````````````````\n\nLaunch the **Unturned Dedicated Server** app from your Steam Library.\n\nThe Server Console will open in a new window. It may take a few minutes for your server to boot up while it generates any necessary files and loads your world data.\n\n.. figure:: /img/U3DS_LoadingLevel.png\n\nYou should see \"Loading level: 100%\" when it finishes booting, along with a :ref:`Server Code <doc_servers_server_codes>`.\n\n2. Invite your Friends\n``````````````````````\n\nYou can invite players to your server through your Steam Friends List.\n\nPlayers can also join your server by using the 17-digit **Server Code** created when you opened your server. This randomly-generated code will change each time you launch the server. It can found be clicking the \"Copy Server Code\" button while in your server, or by copying it from your Server Console.\n\n.. hint::\n\n\tPlayers—including yourself—can join your server by inputting the server's **Server Code** in the **Connect Directly** menu. For friends, it's often quickest to just invite them through Steam!\n\nBy default, your server is not visible to others from the Multiplayer menu unless they are on the same LAN connection. Without following more advanced setup instructions, this *functionally* means that players can only join via your Steam Friends List or if you share the Server Code with them.\n\nSave and Shutdown\n-----------------\n\nThere is no built-in autosave feature. You must use the ``Save`` command to manually save your server while its still running, or the ``Shutdown`` command to safely save and close your server.\n\nSavedata and configuration files can be found in the ``...\\U3DS\\Servers\\`` directory. You will see a folder for each server you have created.\n\n.. _doc_server_hosting:configuration:\n\nConfigure Server Settings\n-------------------------\n\nConfiguration files can be found inside your server's server folder. Most settings cannot be configured while the server is open.\n\n.. hint::\n\n\tIf you created a server using the :ref:`Simple Setup <doc_server_hosting:simple_setup>` guide, you can find your server's settings from the ``...\\U3DS\\Servers\\Default\\`` directory.\n\nCommonly-used configuration files are:\n\n- | **\\\\Server\\\\Commands.dat** – Configure basic server settings, such as: Map, Password, and Max Players.\n\n- | **\\\\Config.txt** – Adjust difficulty settings and advanced server settings, such as: increasing Item Spawn Chance or assigning a Game Server Login Token. (see :ref:`doc_servers_server_configuration`)\n\n- | **\\\\WorkshopDownloadConfig.json** – Download mods from the Steam Workshop.\n\nCommands\n````````\n\nCommands—sometimes referred to as console commands or cheat commands—range from tweaking server settings to spawning items. Most commands are set in the **Commands.dat** file, with each command separated by a newline.\n\nLearn more about available commands on the `Unturned Wiki <https://unturned.wiki.gg/Commands>`_. Below is an example setup that includes many commonly-used commands:\n\n.. code-block:: unturneddat\n\n\t// [[ SERVER CONFIGURATION ]]\n\t// Lines starting with \"//\" are comments – which aren't read when launching your server.\n\t// Read more about commands on the game's wiki: https://unturned.wiki.gg/Commands\n\n\t// Name of your server in the server list.\n\tName My Unturned Server\n\n\t// Specify which map to load, by name.\n\t// Official maps include PEI, Washington, Yukon, Russia, and Germany.\n\t// Use the WorkshopDownloadConfig.json file to download Workshop maps.\n\tMap PEI\n\n\t// Maximum number of players that can be on the server.\n\tMaxPlayers 24\n\n\t// Assign a player's steamID64 as the \"Owner\" to give them administrator privileges, such as invoking cheat commands while in-game.\n\t// Owner YourSteamID\n\n\t// Enable \"cheat commands\" for administrators, such as spawning items or vehicles.\n\tCheats\n\n\t// Require a password to join the server.\n\t// Password ExamplePassword1234\n\n\t// Disable player-versus-player combat.\n\t// PvE\n\n\t// Limit players to a certain camera perspective, such as only first-person. By default, players can use both first-person and third-person perspectives.\n\t// Perspective First\n\t// Perspective Third\n\tPerspective Both\n\t// Perspective Vehicle\n\n\t// Which port should be used when port forwarding.\n\t// Port 27015\n\nRuntime\n~~~~~~~\n\nSome commands only work during runtime. For example, the ``Save`` command only works while the server is running.\n\nYou can use runtime commands in two ways:\n\na. Type them into the **Server Console**.\nb. From the **in-game chat** (only if you are an administrator) while prefixing them with ``@`` or ``/``.\n\n.. tip::\n\n\tAdd your Steam ID as an administrator (a) via the ``Owner`` command, (b) by using the ``Admin`` command during runtime, or (c) by including it in the **Adminlist.dat** file.\n\nUse the ``Help`` command to either view a list of *all* commands, or describe a specific command.\n\nSome runtime commands require ``Cheats`` to be enabled. For example, ``Give`` is a cheat command used to spawn items.\n\nLearn about more commands on the `Unturned Wiki <https://unturned.wiki.gg/Commands>`_.\n\nDifficulty Settings\n```````````````````\n\nConfigure your server's game rules, public server listing, and many other options from the :ref:`doc_servers_server_configuration` file.\n\nBy default, there are separate config files for each difficulty preset – Easy, Normal, and Hard. By default, servers use the Normal difficulty file.\n\n.. hint::\n\n\tYou can use the ``Difficulty`` command to use the settings configured in either the Easy or Hard files.\n\nSteam Workshop Mods\n```````````````````\n\nUse the  **WorkshopDownloadConfig.json** file to install mods from the Steam Workshop for use on your server. Players attempting to join your server will automatically download any mods configured in this file!\n\n1. | Open the **WorkshopDownloadConfig.json** file.\n\n2. | Find a mod on the Steam Workshop and copy the **File ID** in the URL. For example, the `Hawaii <https://steamcommunity.com/sharedfiles/filedetails/?id=1753134636>`_ map.\n\n\t.. code-block:: text\n\n\t\tURL: https://steamcommunity.com/sharedfiles/filedetails/?id=1753134636\n\t\tFile ID: 1753134636\n\n\n3. | Add the File ID to the **File_IDs** list. Example:\n\n\t.. code-block:: json\n\n\t\t\"File_IDs\":\n\t\t[\n\t\t\t1753134636\n\t\t],\n\n.. tip::\n\n\tYou can add multiple mods by separating each File ID with a comma. Example:\n\n\t.. code-block:: json\n\n\t\t\"File_IDs\":\n\t\t[\n\t\t\t1753134636,\n\t\t\t1702240229\n\t\t],\n\n4. During server startup, any specified mods (and their dependencies) will be installed and updated. Players will automatically begin downloading any mods while connecting to the server.\n\nCurated maps—and a few official arena maps—are only accessible via the Steam Workshop. Like other mods, they need to be downloaded by the server in order to be used:\n\n.. csv-table::\n   :file: /img/WorkshopMapIDs.csv\n   :widths: 30, 70\n   :header-rows: 1\n\n.. _doc_server_hosting:internet_server:\n\nSwitching to an Internet Server\n-------------------------------\n\nServers are hosted as a **LAN server** by default. This means players can only join when invited through your Steam friends list, or by using your randomly-generated Server Code. LAN servers are *not* visible from the Internet server list. There are a couple options for switching from a LAN server to an **Internet server**.\n\n.. attention::\n\n\tInternet servers should follow our :ref:`Server Hosting Rules <doc_server_hosting_rules>`.\n\nGet started by adding a :ref:`Game Server Login Token <doc_servers_gslt>` (GSLT). This login token is necessary when hosting an Internet server. Configuring it also means your Server Code will no longer change each time you launch your server.\n\nFor an Internet server, you must configure either :ref:`Fake IP <doc_servers_fake_ip>` or :ref:`Port Forwarding <doc_servers_port_forward>`. Configuring both is **not necessary**. Fake IP is easier to enable, and it should be adequate for most servers.\n\nRelated Topics\n--------------\n\nSome servers may benefit from a more advanced setup than the one provided in our :ref:`Simple Setup <doc_server_hosting:simple_setup>` guide. Chiefly:\n\n- :ref:`Use SteamCMD <doc_steamcmd>` to host multiple servers at once.\n- Install plugins through frameworks like :ref:`Rocket (LDM) <doc_servers_rocket>` or :ref:`OpenMod <doc_servers_openmod>`.\n"
  },
  {
    "path": "servers/server-update-notifications.rst",
    "content": ".. _doc_server_update_notifications:\n\nServer Update Notifications\n===========================\n\nChange logs are available on the `Steam News Hub <https://store.steampowered.com/news/app/304930>`_. For quick notifications with the game version number and Steam build ID consider one of the following:\n\nDiscord\n-------\n\nMessages are posted to the #dedicated-server-updates text channel on the `Official Discord Server <https://discord.gg/unturned>`_ via web hook. Each message has fields with the game version number and Steam build ID.\n\nRSS\n---\n\nEach release is posted to an RSS feed on the Smartly Dressed Games website, with the game version number and Steam build ID: https://smartlydressedgames.com/rss/unturned-steam-dedicated-server-updates.xml\n"
  },
  {
    "path": "servers/steamcmd.rst",
    "content": ".. _doc_steamcmd:\n\nUsing SteamCMD (Advanced Setup)\n===============================\n\nSome servers may benefit from a more advanced setup than the one provided in our :ref:`Simple Setup <doc_server_hosting:simple_setup>` guide. This page assumes you have read the full \":ref:`Setting up a Server <doc_server_hosting>`\" documentation.\n\nWhen hosting multiple servers at the same time, we recommend using `SteamCMD <https://developer.valvesoftware.com/wiki/SteamCMD>`_ to install the **Unturned Dedicated Server** tool rather than installing it from your Steam Library. SteamCMD is a command-line version of the Steam Client.\n\nIt is not possible to run multiple servers at once—from the same computer—*without* using SteamCMD.\n\nServers can be hosted on Windows and Linux operating systems. There is no support for hosting on macOS devices.\n\nDownload SteamCMD on Windows\n----------------------------\n\nInstallation on Windows operating systems (such as Windows 10 or Windows 11) is very straightforward.\n\n1. `Download <https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip>`_ SteamCMD for Windows.\n2. Extract the contents of the zip to somewhere you can find it again.\n3. Run ``steamcmd.exe``.\n\nDownload SteamCMD on Linux\n--------------------------\n\nInstallation on Linux varies by distribution and your admin preferences. We recommend referring to `Valve's Linux Documentation <https://developer.valvesoftware.com/wiki/SteamCMD#Linux>`_. Once downloaded, run the ``steamcmd.sh`` script.\n\nInstall the Unturned Dedicated Server with SteamCMD\n---------------------------------------------------\n\n1. | Login to Steam anonymously.\n\n.. code-block:: shell\n\n\tlogin anonymous\n\n2. | Download the Unturned Dedicated Server application.\n\n.. code-block:: shell\n\n\tapp_update 1110390\n\n.. tip:: This command can also be used to update the Unturned Dedicated Server.\n\n3. | Close SteamCMD once the download finishes.\n\n.. code-block:: shell\n\n\tquit\n\n4. | In your SteamCMD folder, the server files can now be found within the default app install directory. For the Unturned Dedicated Server, this is ``.../steamapps/common/U3DS/``.\n\nIf you need additional information, consider reading the SteamCMD wiki page's \"`Downloading an App <https://developer.valvesoftware.com/wiki/SteamCMD#Downloading_an_App>`_\" section.\n\nLaunch a Server on Windows\n--------------------------\n\nAlthough old, this video guide remains fairly accurate and can supplement the reading below: https://www.youtube.com/watch?v=8axVrnSLlx4.\n\n1. | Navigate to your server files. When using the default app install directory, these should be found at ``...\\steamcmd\\steamapps\\common\\U3DS``.\n\n2. | Create a new text file within the U3DS directory. This file can be named anything – but for the purposes of this guide, we will call it \"**MyServer**\".\n\n3. | Change the file type from a text file (.txt) to a batch script file (.bat). To do this, simply edit the file's name and replace the ``.txt`` file extension with ``.bat``. For example, \"**MyServer.bat**\".\n\n.. warning::\n\n\tIf the file name does not display the ``.txt`` file extension – e.g., you see \"MyServer\" rather than \"MyServer.txt\" – you need to enable the viewing of \"File name extensions\" in Windows.\n\n\tClick the \"View\" button in File Explorer and enable the \"File name extensions\" option. Once enabled, you can see and edit file extensions as part of file names.\n\n\t.. image:: /img/FileNameExtensions.jpg\n\n4. | Open **MyServer.bat** in any text editor, such as Notepad.\n\n5. | Copy-and-paste one of the following scripts into the file, depending on the type of server you are hosting:\n\n   For an **Internet** server:\n\n   .. code-block:: batch\n\n\t\tstart \"\" \"%~dp0ServerHelper.bat\" +InternetServer/MyServer\n\n   For a **LAN** server:\n\n   .. code-block:: batch\n\n\t\tstart \"\" \"%~dp0ServerHelper.bat\" +LanServer/MyServer\n\n.. tip::\n\n\tIn the provided scripts, \"MyServer\" is being used as the ServerID. Your server's savedata and configuration files will be found in a folder named after your chosen ServerID.\n\n\t**ExampleServer.bat** is an example of a LAN server. Opening it in a text editor will provide additional information that may be helpful should you need it.\n\n6. | Save your changes to the file and close it.\n\n7. | Double-click **MyServer.bat** to launch your server. A command-line interface should appear. Since this is the first time you have launched your server, it will need to generate your server's configuration files.\n\n.. image:: /img/InterfaceU3DS.jpg\n\n8. | You should see \"Loading level: 100%\" when the server has finished loading (and generated all necessary files). Use the ``Shutdown`` command in the command-line interface to safely save and close your server for now.\n\n9. | Your server's configuration files can be found in a newly-created folder (named after its ServerID) within the ``...\\U3DS\\Servers`` directory. This is where your savedata and configuration files are stored.\n\n.. tip::\n\n\tRefer to :ref:`Setting up a Server – Configure Server Settings <doc_server_hosting:configuration>` for guidance on customizing your server.\n\n10. | When hosting an Internet server, refer to :ref:`Setting up a Server – Switching to an Internet Server <doc_server_hosting:internet_server>` for guidance on adding a :ref:`Game Server Login Token <doc_servers_gslt>` and using either :ref:`Fake IP <doc_servers_fake_ip>` or :ref:`Port Forwarding <doc_servers_port_forward>`.\n\nOnce configured, you can open your server by running the **MyServer.bat** script!\n\nLaunch a Server on Linux\n------------------------\n\n1. | Navigate to your server files. When using the default app install directory, these should be found at ``.../steamcmd/steamapps/common/U3DS``.\n\n2. | Copy-and-paste one of the following commands into your Linux terminal, depending on the type of server you are hosting:\n\n   For an **Internet** server:\n\n   .. code-block:: batch\n\n\t\t./ServerHelper.sh +InternetServer/MyServer\n\n   For a **LAN** server:\n\n   .. code-block:: batch\n\n\t\t./ServerHelper.sh +LanServer/MyServer\n\n.. tip::\n\n\tIn the provided scripts, \"MyServer\" is being used as the ServerID. Your server's savedata and configuration files will be found in a folder named after your chosen ServerID.\n\n\t**ExampleServer.sh** is an example of a LAN server. Opening it in a text editor will provide additional information that may be helpful should you need it.\n\n3. | You should see \"Loading level: 100%\" when the server has finished loading (and generated all necessary files). Use the ``Shutdown`` command in the command-line interface to safely save and close your server for now.\n\n4. | Your server's configuration files can be found in a newly-created folder (named after its ServerID) within the ``...\\U3DS\\Servers`` directory. This is where your savedata and configuration files are stored.\n\n.. tip::\n\n\tRefer to :ref:`Setting up a Server – Configure Server Settings <doc_server_hosting:configuration>` for guidance on customizing your server.\n\n5. | When hosting an Internet server, refer to :ref:`Setting up a Server – Switching to an Internet Server <doc_server_hosting:internet_server>` for guidance on adding a :ref:`Game Server Login Token <doc_servers_gslt>` and using either :ref:`Fake IP <doc_servers_fake_ip>` or :ref:`Port Forwarding <doc_servers_port_forward>`.\n\nOnce configured, you can open your server by running the **MyServer.sh** script!\n\nRelated Topics\n--------------\n\nSome additional topics are covered elsewhere. Of particular interest:\n\n- Install plugins through frameworks like :ref:`Rocket (LDM) <doc_servers_rocket>` or :ref:`OpenMod <doc_servers_openmod>`.\n- Automate server maintenance with :ref:`Server Auto Restart <doc_server_auto_restart>` features.\n- Configure a :ref:`Bookmark Host <doc_servers_bookmark_host>` so players can \"Bookmark\" your server.\n- :ref:`Stay notified <doc_server_update_notifications>` when the Unturned Dedicated Server app has an update.\n"
  }
]