Skip to content

Asset Validation Rules

Every asset the Unturned™ game loads, every .dat file, .asset file, Unity prefab, texture, mesh, and audio clip, passes through a validation system that checks for structural integrity, performance problems, and configuration errors. The validation system runs in two tiers: fast basic health checks that execute during every game startup, and slower comprehensive tests that execute when the -ValidateAssets command-line flag is passed to the game executable. A modder who runs validation before publishing catches mesh defects, missing materials, oversized textures, and reference errors before they reach players; a modder who skips validation ships bugs that the validation system was designed to catch.

This article is the 57 Studios™ canonical reference for the Unturned™ asset validation system. It documents every validation rule the game enforces, the diagnostic severity classification, the validation timing (at load time versus at runtime versus on-demand with -ValidateAssets), the required fields per asset type, the GUID uniqueness requirement, the reference integrity checks, the bundle path validation, the English.dat presence rules, and a comprehensive diagnostic table that maps every validation failure to its symptom, cause, and resolution.

Validation results displayed in the Unturned Asset Errors menu

Documentation source: This article references the official Smartly Dressed Games modding documentation for the asset validation specification and the -ValidateAssets command-line flag behavior.

Who this article is for

This article is written for Unturned™ mod authors who have completed at least one item or vehicle mod and are preparing it for publication to the Steam Workshop. It presupposes that the reader has read the Data File Format Reference and the Asset Definitions Reference and understands the syntax grammar and asset structure those articles document. If you are new to Unturned™ modding, publish your first mod before returning here, validation is a pre-publication step, not a getting-started step.

What you'll learn

  • The two validation tiers: basic health checks at every startup, and comprehensive checks with the -ValidateAssets flag
  • Every documented validation rule: navmesh readability, mesh readability, missing meshes, vertex count limits, missing materials, material count limits, texture readability, texture NPOT dimensions, and audio sample analysis
  • The GUID uniqueness requirement and how duplicate GUIDs are detected
  • Required field verification: which fields must be present for each asset type
  • Type correctness validation: how the parser handles type-mismatched field values
  • Reference integrity: how the game verifies that GUID references resolve to existing assets
  • Bundle path validity: how the game checks that the bundle an asset references exists and is loadable
  • English.dat presence rules: when the game requires a localization file and when it does not
  • Validation timing: which checks run at load time versus at runtime versus on demand
  • Error severity classification: how the game categorizes validation failures
  • A diagnostic table mapping every validation failure to its symptom, cause, and resolution

Background: the two-tier validation system

The Unturned™ asset validation system is designed to catch problems at the earliest possible moment, during development and testing, before a mod reaches players. The system is organized into two tiers that trade speed for thoroughness.

Tier 1: startup health checks

During every game startup, as assets are loaded from the Bundles directory, the game runs a set of fast basic health checks on each asset. These checks are designed to complete within the normal startup time budget, they add negligible overhead to the loading process. Startup checks cover structural integrity: does the asset have a valid GUID and Type, can the referenced bundle be found, does the English.dat file exist where expected. Assets that fail a startup check are logged to Client.log and may be excluded from the loaded asset set, resulting in the item not appearing in-game.

Startup checks are always active. There is no flag to disable them, and there is no flag to make them more thorough. They represent the minimum validation bar every asset must pass to function in the game.

Tier 2: comprehensive validation with -ValidateAssets

When the game executable is launched with the -ValidateAssets command-line flag, a second tier of slower, more thorough checks executes. These checks inspect the Unity content that the asset references, meshes, textures, materials, audio clips, and report performance problems, missing or malconfigured content, and content that violates the asset authoring guidelines. The results are logged to Client.log and displayed in the Asset Errors menu, accessible from the game's main menu.

The -ValidateAssets flag adds measurable time to the startup sequence because it loads and inspects every mesh, texture, and material referenced by every asset. The time cost is proportional to the number and complexity of the assets being validated. For a typical mod project with dozens of items, the additional startup time is on the order of seconds; for a full map mod with thousands of assets, it can add minutes.

Unturned.exe -ValidateAssets

Pro tip

Run -ValidateAssets as the final step before publishing any mod. The flag catches defects that are invisible during normal single-player testing, a missing material on a rarely-seen LOD mesh, a texture with non-power-of-two dimensions that causes GPU sampling artifacts, a mesh with an unusually high vertex count that degrades server performance. These defects do not cause a visible error during gameplay but negatively affect the player experience and can generate bug reports after publication.

Startup validation: basic health checks

The following checks execute during every game startup on every loaded asset. These checks are the minimum bar; an asset that fails any of them will either not load or will load with degraded functionality.

GUID uniqueness

The game enforces that every loaded asset has a unique GUID. If two assets share the same GUID, the later-loaded asset overwrites the earlier one in the engine's internal registry. The game logs a warning when a GUID collision is detected during loading, but the startup continues, the overwritten asset is simply gone, and any references to its GUID resolve to the overwriting asset instead.

The GUID uniqueness check operates globally across all asset categories. A GUID collision between an item asset and a tag asset is treated the same as a collision between two item assets: the later-loaded asset wins.

For a complete diagnostic guide on GUID collision failures, see GUID Conflicts Between Mods.

Required identity fields

Every asset must carry a GUID field and a Type field. An asset definition file that is missing either field is logged as an error and the asset is not loaded. The GUID field must contain a non-empty value; an empty GUID field at the root level triggers the auto-generation behavior documented in the Asset Definitions Reference, but an empty GUID inside a Metadata block produces an asset with no GUID, which causes reference-resolution failures for any other asset that references it.

Required body fields per asset type

Each asset type has a set of fields that must be present for the asset to function correctly. Fields that are not present default to the C# type's default value, which may produce an asset that loads but behaves incorrectly.

Asset typeRequired fieldsConsequence of missing field
All item typesIDItem cannot be spawned via console; cross-references by ID fail
Type GunCaliberGun cannot accept any magazine; effectively non-functional
Type MagazineCaliber_Reference, AmountMagazine cannot be loaded into any gun or has zero rounds
Type MeleeNone explicitly required beyond identityAll damage fields default to 0; weapon deals no damage
Type VehicleIDVehicle cannot be spawned; cross-references fail
All assetsGUID, TypeAsset not loaded

Reference integrity at load time

At load time, the game performs basic reference validation: it checks that every ID-based cross-reference (a gun's Magazine field, a vehicle's Tire field) points to an asset that exists in the loaded set. References that cannot be resolved are logged as warnings. The referenced field is set to its default value (typically 0), and the asset loads without that cross-reference.

Reference typeField exampleValidation behavior
Within-category ID referenceMagazine 108Verified against loaded asset IDs in the same category
Cross-category GUID referenceCategoryTag "732ee6ffeb18418985cf4f9fde33dd11"Verified against loaded asset GUIDs globally
Legacy ID redirector reference@give 4 with redirector AssetCategory ItemVerified through the redirector chain

Bundle path validity

The game checks that the bundle an asset references, whether through the master bundle hierarchy, a Master_Bundle_Override, or a same-name .unity3d file, exists and is loadable. An asset whose bundle cannot be found is logged as an error. The asset definition loads (the game has the text data), but the asset's prefab, textures, and audio are not available, resulting in an invisible or silent entity in-game.

English.dat presence

Each asset looks for a localization .dat file in the same directory, named for the current language (e.g., English.dat, French.dat, German.dat). If no English.dat file is present, the game falls back to an empty display name and description for English-language players. The absence of English.dat is not logged as an error at startup (because the game cannot know whether the omission is intentional), but it produces an item whose name displays as a blank string in the inventory.

The game's localization lookup follows the current language setting. If the player's language is French, the game looks for French.dat first; if that file is not present, it falls back to English.dat; if neither is present, the item has no display name. The cohort recommendation is to always provide at least an English.dat file, and to provide localized .dat files for every language the mod targets.

Comprehensive validation: -ValidateAssets checks

The following checks execute only when the -ValidateAssets command-line flag is active. They inspect the Unity content that the asset references and report performance, configuration, and optimization issues.

Object navmeshes (navigation meshes used by the game's Recast pathfinding system to generate the level navmesh) should have the CPU Readable flag enabled in Unity. If the CPU Readable flag is disabled, Recast cannot read the mesh data from the CPU side and cannot generate the level navmesh. The validation check finds object navmeshes with the CPU Readable flag disabled and logs them.

The impact of a missing navmesh readable flag is silent and severe: AI entities (zombies, animals) cannot navigate around or through the object, and pathfinding through the level is broken. This check applies primarily to map objects and barricades that define the walkable surface; it does not apply to weapon prefabs or attachment models.

Mesh readable check

Most non-navmesh meshes do not need the CPU Readable flag enabled in Unity. Keeping the flag enabled causes the mesh data to be duplicated in RAM, one copy on the GPU for rendering and one copy on the CPU, which is unnecessary for most meshes. The validation check finds non-navmesh meshes with the CPU Readable flag enabled and recommends disabling it. This is a recommendation, not a hard error, because the core game content itself has many cases that still need cleanup.

Missing meshes

Mesh filters without a mesh assigned, and mesh renderers without a mesh filter, are detected and logged. A mesh filter with no mesh reference means the renderer has nothing to render, the object is invisible at that mesh slot. A mesh renderer with no mesh filter means the renderer has no source of vertex data and cannot render anything. Both conditions produce invisible or partially invisible entities.

Mesh vertex count limits

Meshes with unusually high numbers of vertices are flagged for optimization. The recommended vertex count thresholds differ between render meshes and collider meshes:

Mesh typeRecommended maximum verticesRationale
Render meshHigher thresholdRendering complex meshes is GPU-optimized
Collider meshLower thresholdCollision detection against complex meshes is slower than rendering complex meshes

The typical optimization for a high-vertex-count mesh is to remove unused faces and vertices. Many meshes imported from 3D modelling tools carry internal geometry, hidden faces, and sub-mesh detail that is not visible in the game and should be removed before export.

Missing materials

Renderers without materials are detected and logged. A renderer with no material renders with the default Unity material (typically magenta/pink), which produces the "pink item" appearance in-game. The validation check catches materials that were not assigned in Unity before the bundle was built, which is a common authoring mistake when creating new prefabs from imported 3D models.

One exception to this check is "DepthMask" renderers, which are set by the game for specific rendering passes and whose material is managed by the engine at runtime.

Material count limits

Renderers with high numbers of materials are flagged for optimization. Each individual material on a renderer requires a separate draw call, and excessive draw calls degrade rendering performance. The recommended practice is to have one material for each render type on an object, a material for the opaque surfaces and, if needed, a material for the transparent surfaces.

Material countRecommendation
1-2Normal; no action needed
3-5Acceptable; consider consolidation if performance is a concern
6+Flagged; consolidate materials where possible

The cohort practice is to keep material counts on item prefabs to two or fewer (one opaque, one transparent if needed). High material counts are more common on map objects and structures than on individual items.

Texture readable check

Most textures do not need the CPU Readable flag enabled in Unity. Disabling the flag means a copy of the texture is not kept in RAM, reducing the game's memory footprint. One documented exception is shirt and pants textures, which are layered on the CPU and require the CPU Readable flag to be enabled.

The validation check finds textures with the CPU Readable flag enabled and recommends disabling it for textures that do not need it. This check is a recommendation; the game functions correctly with readable textures, but the memory cost accumulates across many textures.

Texture NPOT check

Most textures should have power-of-two dimensions, dimensions that are powers of two on each axis, such as 1 x 2, 4 x 4, 64 x 32, 256 x 256, 1024 x 512, and so on. GPUs are best equipped for drawing textures at these resolutions, and non-power-of-two (NPOT) textures can cause sampling artifacts, increased memory usage, and degraded rendering performance.

Texture dimensionPower of two?Recommendation
1024 x 1024YesOptimal; standard for item textures
2048 x 1024YesAcceptable for large object textures
500 x 500NoFlagged; resize to 512 x 512
750 x 350NoFlagged; resize to nearest power-of-two pair

Unity provides import options for scaling textures up or down to the nearest power of two. The cohort recommendation is to author textures at power-of-two dimensions from the start rather than relying on Unity's import-time scaling.

Audio sample check

Long audio clips with high sample frequencies are flagged for inspection. The check finds audio clips that are unusually large for their purpose, a short sound effect (a gunshot, a footstep) encoded as a long high-fidelity clip, for example. The check does not enforce a hard limit; it surfaces clips for the modder to review and decide whether the file size is justified.

Audio characteristicWhen flaggedTypical cause
Long duration + high sample rateFile size disproportionate to use caseFull song encoded as a sound effect
High sample rate for simple effectUnnecessary fidelity for a short clip48 kHz sample rate for a 0.1-second click
Extremely long clipLarge file in the bundleUnintended long recording or silence at end of clip

Validation timing: when each check runs

Understanding when each validation check executes helps the modder plan the testing workflow. Some checks run at load time (during every game startup), some at runtime (when the asset is first used), and some only on demand (with the -ValidateAssets flag).

CheckTimingScope
GUID uniquenessLoad timeAll assets
Required identity fieldsLoad timeAll assets
Required body fieldsLoad timePer asset type
Reference integrity (ID)Load timeWithin-category references
Reference integrity (GUID)RuntimeCross-category references (resolved when first accessed)
Bundle path validityLoad timeAll assets with bundle references
English.dat presenceLoad time (fallback, not error)All assets
Navmesh readable-ValidateAssets onlyObject navmeshes
Mesh readable-ValidateAssets onlyNon-navmesh meshes
Missing meshes-ValidateAssets onlyAll mesh-referencing assets
Mesh vertex counts-ValidateAssets onlyAll meshes
Missing materials-ValidateAssets onlyAll renderers
Material counts-ValidateAssets onlyAll renderers
Texture readable-ValidateAssets onlyAll textures
Texture NPOT-ValidateAssets onlyAll textures
Audio samples-ValidateAssets onlyAll audio clips

Did you know?

GUID-based cross-category references are validated at runtime, not at load time. The game does not eagerly resolve every GUID reference during startup because the full set of loaded assets may not be complete until all mods have finished loading. Instead, a GUID reference is resolved the first time it is accessed, when a blueprint is opened, when a crafting recipe is checked, or when a redirector is followed. This means a broken GUID reference may not produce an error at startup but will fail silently when the player attempts to use the feature that depends on it.

Error severity classification

The validation system classifies each finding into one of three severity levels. The severity determines whether the finding blocks the asset from loading, whether it is logged as an error or a warning, and whether it appears in the Asset Errors menu.

SeverityClassificationLoad behaviorLogged asExample
ErrorAsset cannot function correctlyAsset may be excluded from the loaded setError in Client.logMissing GUID or Type field; duplicate GUID
WarningAsset loads but has a performance or correctness issueAsset loads and functionsWarning in Client.logHigh vertex count; missing material; NPOT texture
InfoInformational finding; no functional impactNormal operationInformational entryNon-critical mesh readable flag

The Asset Errors menu, accessible from the game's main menu, displays errors and warnings from the most recent validation run. The menu groups findings by asset and by check type, allowing the modder to triage issues systematically.

Diagnostic table: validation failures and resolutions

The following table documents every validation failure the system can detect, the symptom the modder observes, the most likely cause, and the recommended resolution.

Validation failureSymptomCauseResolution
Duplicate GUIDItem overwrites or is overwritten by another itemTwo assets share the same GUIDGenerate a fresh GUID for one of the assets; ensure uniqueness across all mod files
Missing GUIDAsset does not loadGUID field absent or empty inside Metadata blockAdd a non-empty GUID field at the root level
Missing TypeAsset does not loadType field absent from asset definitionAdd the appropriate Type field
Missing IDItem cannot be spawned via @giveID field absent from item assetAdd a unique ID in the 50,000+ range
Unresolved magazine ID referenceGun accepts no magazine; cannot fireGun's Magazine field references an ID that does not existVerify the magazine asset's ID; confirm the magazine is in the loaded mod set
Bundle not foundItem is invisible in-game; prefab does not loadMaster bundle missing, Master_Bundle_Override incorrect, or bundle file not in expected locationVerify the bundle file exists; check the master bundle hierarchy; confirm Master_Bundle_Override spelling
Missing English.datItem has no display name in inventoryEnglish.dat file not present in the asset's folderCreate English.dat with Name and Description fields in the asset's folder
Navmesh not readableAI cannot navigate through/around objectNavmesh mesh has CPU Readable flag disabled in UnityEnable the CPU Readable flag on the navmesh in Unity; rebuild the bundle
Mesh missingPart of the model is invisibleMesh filter has no mesh assigned, or mesh renderer has no mesh filterAssign the mesh to the mesh filter in Unity; rebuild the bundle
High vertex count on render meshRendering performance degradationMesh contains excessive vertices, often from high-detail importsRemove unused faces and vertices in the 3D modelling tool; re-export; rebuild bundle
High vertex count on colliderCollision detection performance degradationCollider mesh is too complex for efficient collision calculationsSimplify the collider mesh or use a primitive collider instead of a mesh collider
Missing materialItem or part of item renders pink/magentaRenderer has no material assigned in UnityAssign the material to the renderer in Unity; rebuild the bundle
High material countExcessive draw calls; rendering performance degradationRenderer has many separate materialsConsolidate materials; merge texture atlases; reduce to 1-2 materials per object
Texture CPU readable enabled unnecessarilyIncreased RAM usageTexture has CPU Readable flag enabled but does not need itDisable the CPU Readable flag on the texture in Unity; rebuild the bundle
Texture NPOT dimensionsGPU sampling artifacts; increased memory usageTexture dimensions are not powers of twoResize the texture to power-of-two dimensions in the image editor or use Unity's import scaling
Long/high-freq audio clipLarge bundle file size; increased memory usageAudio clip is longer or higher quality than needed for its use caseTrim silence from clip ends; reduce sample rate for short effects; compress appropriately
Reference to nonexistent GUIDFeature that uses the reference silently does nothingGUID in CategoryTag, Effect, or other GUID field does not resolve to any loaded assetVerify the GUID spelling; confirm the referenced asset is loaded; check for GUID collision
Legacy ID redirector chain broken@give <ID> does not spawn the expected itemRedirector's TargetAsset points to a nonexistent GUIDVerify the redirector's TargetAsset GUID; confirm the target asset is loaded
Incorrect Asset_Bundle_VersionShader artifacts or rendering errors after game updateBundle was built with an older Unity version than what the game currently usesRebuild the bundle with the current Unity version; update Asset_Bundle_Version to match
Bypass_ID_Limit missingItem with ID > 2000 does not loadBypass_ID_Limit True field not presentAdd Bypass_ID_Limit True to the asset definition

Cross-reference validation in detail

The reference integrity system validates two categories of cross-references: within-category ID references and cross-category GUID references.

Within-category ID references

ID-based references link assets within the same category. A gun references its default magazine by the magazine's ID; a vehicle references its tire model by the tire asset's ID. These references are validated at load time because the full set of assets in a category is known as soon as that category finishes loading.

The validation check verifies that the referenced ID exists in the loaded set. If it does not, the reference field is set to 0 (the default) and a warning is logged. The asset loads without that cross-reference, the gun has no default magazine, the vehicle has no default tire.

Cross-category GUID references

GUID-based references link assets across categories. A blueprint's CategoryTag field references a tag asset by GUID; a crafting recipe's Effect field references an effect asset by GUID. These references are resolved at runtime, when the player opens the crafting menu or triggers the effect.

The validation check (when -ValidateAssets is active) verifies that every GUID referenced in a field typed as a GUID reference resolves to a loaded asset. Unresolved references are logged as warnings. At runtime, an unresolved GUID reference produces no visible error, the referenced entity is simply absent, and the feature that depends on it does nothing.

Reference fieldReference typeTarget categoryValidation timing
MagazineIDItem (Magazine)Load time
SightIDItem (Sight attachment)Load time
Caliber_ReferenceIDItem (linked by value, not by asset ID)Load time
CategoryTagGUIDTagRuntime (GUID resolution)
EffectGUIDEffectRuntime
TargetAssetGUIDAny (redirector target)Runtime
Landed_Barricade > GUIDGUIDBarricadeRuntime

Frequently asked questions

How do I run the -ValidateAssets check?

Launch the Unturned™ executable from the command line or from a shortcut with the -ValidateAssets flag appended. The full command is:

"C:\Program Files (x86)\Steam\steamapps\common\Unturned\Unturned.exe" -ValidateAssets

The game will start normally but execute the comprehensive validation checks during the loading sequence. Results are written to Client.log in the Unturned™ installation directory and displayed in the Asset Errors menu on the main menu.

Where do I find the Asset Errors menu?

The Asset Errors menu is accessible from the Unturned™ main menu. It displays the errors and warnings from the most recent validation run, grouped by asset and by check type. The menu is only populated when validation has been run, either during startup with -ValidateAssets or during normal loading when startup checks detect errors.

What is the Client.log file and where is it?

Client.log is the game's client-side log file, located in the Unturned™ installation directory alongside the game executable. Every validation finding, errors, warnings, and informational messages, is written to this file during loading. The file is a plain-text log that can be opened in any text editor. The log includes timestamps, severity levels, and the specific asset and field that triggered each finding.

Do validation errors prevent the game from loading?

Most validation errors do not prevent the game from loading. The game loads as many assets as possible and logs the errors for the modder to review. Only structural errors that prevent the asset from being understood at all, a missing GUID or Type field, a completely unparseable file, cause the asset to be excluded from the loaded set. All other validation failures produce warnings or informational entries, and the asset loads with the best-effort fallback behavior.

Can I run validation on a specific mod only, rather than on every loaded asset?

The -ValidateAssets flag validates every asset loaded by the game, vanilla content and mod content alike. There is no built-in mechanism to scope validation to a specific mod. The cohort practice is to run validation in an environment that loads only the mod being tested (a clean single-player session with no other mods active) and to focus on the findings that reference the mod's assets by name or GUID.

How do I check if a texture is a power-of-two size?

Open the texture file in any image editor or in File Explorer's Properties dialog. The width and height dimensions should each be a power of two: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, or 4096. The two dimensions do not need to be equal, 1024 x 512 is a valid power-of-two pair. Common non-power-of-two dimensions come from authoring a texture at an arbitrary resolution (e.g., 500 x 500) rather than at a standard power-of-two size.

What is the difference between a mesh collider and a primitive collider for validation purposes?

A mesh collider uses the exact vertex geometry of a mesh for collision detection, every vertex and face contributes to the collision shape. A primitive collider (box, sphere, capsule) uses a simple geometric shape that approximates the object's volume. Mesh colliders are more accurate but significantly slower for collision detection. The validation system flags high-vertex-count mesh colliders and recommends either simplifying the mesh or replacing it with a primitive collider.

Does the validation system check for correct C# type mapping of .dat fields?

No. The validation system does not verify that .dat field values match the expected C# types of the asset class properties. Type coercion, parsing a string value into an int, float, bool, or enum, is performed by the parser at load time, and invalid values are silently coerced to defaults. The validation system's role is to check Unity content (meshes, textures, materials, audio), not to type-check .dat field values. Modders should verify field types against the type-specific article for each asset type.

What happens if I ship a mod with validation warnings?

The mod will load and function. Validation warnings indicate performance issues, optimization opportunities, or potential problems, not functional defects. A mod with warnings is publishable, the warnings advise the modder about improvements, but the game does not block the mod from loading or functioning. The cohort recommendation is to resolve all errors and to review all warnings before publication, addressing those that affect the player experience.

Can I automate validation as part of a build pipeline?

Yes. Launching Unturned.exe -ValidateAssets from a script, waiting for the loading sequence to complete, and then parsing Client.log for error and warning entries is a viable automated-validation strategy. The log format is consistent across runs, and the asset names and GUIDs in the log entries are stable identifiers that can be matched against the mod project's asset set. The cohort practice for 57 Studios™ mod projects is to run validation as the final step in the build-and-publish pipeline, blocking publication if errors are present.

Best practices

  • Run -ValidateAssets as the final step before publishing any mod to the Steam Workshop.
  • Resolve every validation error before publication, errors indicate functional defects that will affect players.
  • Review every validation warning and resolve those that affect the player experience (missing materials, high vertex counts, NPOT textures).
  • Run validation in a clean single-player environment with no other mods active to isolate your mod's findings.
  • Check Client.log after every validation run and keep a copy for reference during the fix cycle.
  • Generate a fresh GUID for every asset and never reuse GUIDs, GUID collisions are among the hardest-to-diagnose validation failures.
  • Add Bypass_ID_Limit True to every item asset with an ID above 2,000.
  • Enable the CPU Readable flag on object navmeshes and disable it on all other meshes.
  • Author textures at power-of-two dimensions from the start, resizing after the fact can introduce scaling artifacts.
  • Keep material counts to two or fewer per renderer, consolidate materials and merge textures into atlases where possible.
  • Always provide an English.dat file in every asset folder, even if the item's display name is obvious.

Appendix A: Validation checklist for mod publication

Use this checklist before publishing any mod to the Steam Workshop. Every item on this list should be confirmed before the mod ships.

  • [ ] Run -ValidateAssets on the final mod build and review every finding in Client.log.
  • [ ] Resolve all validation errors. No errors in the log.
  • [ ] Review all validation warnings. Address those that affect gameplay, appearance, or performance.
  • [ ] Confirm every asset has a unique GUID. No two assets share a GUID.
  • [ ] Confirm every asset has a valid Type field.
  • [ ] Confirm every item asset has a unique ID in the 50,000+ range and Bypass_ID_Limit True.
  • [ ] Confirm every asset folder contains an English.dat file with Name and Description fields.
  • [ ] Confirm the master bundle (MasterBundle.dat and .masterbundle file) is present and correctly configured.
  • [ ] Confirm all magazine-caliber linkages between guns and magazines resolve correctly.
  • [ ] Confirm all mesh renderers have materials assigned (no pink/magenta items).
  • [ ] Confirm all textures are power-of-two dimensions.
  • [ ] Confirm the CPU Readable flag is disabled on all textures (except shirts and pants) and all meshes (except navmeshes).
  • [ ] Test in single-player: spawn every item, equip it, use it. Confirm every field behaves as intended.

Appendix B: Command-line validation reference

Unturned.exe -ValidateAssets

Launches Unturned with comprehensive asset validation.
Validation findings are written to Client.log and the Asset Errors menu.

Typical usage:
  1. Copy the mod's Bundles/ and Items/ folders into the game directory
  2. Launch with -ValidateAssets
  3. Wait for the main menu to appear
  4. Open Client.log in a text editor
  5. Search for your mod's asset names or GUIDs
  6. Review and resolve every finding

Appendix C: Asset Errors menu navigation

Main Menu → Asset Errors

Displays findings from the most recent validation run.
Grouped by:
  - Asset (by name and GUID)
  - Check type (navmesh, mesh, material, texture, audio)

Each finding shows:
  - Severity (error, warning, info)
  - The specific mesh, texture, or material that triggered the check
  - A brief description of the issue

Use the menu to triage issues by asset and by severity.

Worked example: a validation run on a new item mod

The following scenario traces the validation workflow for a typical item mod, a single custom melee weapon, through the full startup-plus-ValidateAssets pipeline. The scenario is composed from documented patterns observed across the cohort's mod-testing workflow.

Step 1: startup checks

The mod author launches Unturned™ without the -ValidateAssets flag to test the mod in single-player. The startup loading sequence processes the mod's .dat file and logs the following:

[INFO] Loaded asset: CustomKnife (GUID b3c4d5e6f7084a9b1c2d3e4f5a6b7c8d)
[INFO] English.dat found: Items/CustomKnife/English.dat
[INFO] MasterBundle.dat found: Bundles/MasterBundle.dat
[INFO] Asset bundle loaded: core.masterbundle

No errors or warnings. The startup checks confirm that the asset has a valid GUID and Type, that the English.dat file is present, and that the master bundle is reachable. The mod author proceeds to in-game testing and confirms that the weapon spawns, equips, and deals damage correctly.

Step 2: comprehensive validation

Before publishing, the mod author runs Unturned.exe -ValidateAssets and reviews Client.log. The comprehensive checks reveal two findings that the startup checks did not catch:

[WARN] CustomKnife: Mesh 'Blade' has 12400 vertices (recommended limit: 8000).
[WARN] CustomKnife: Texture 'CustomKnife_Albedo' is 1026x1024, non-power-of-two dimension (1026).

The vertex count warning indicates that the blade mesh, imported from a high-detail modelling session, carries more vertices than the recommendation. The NPOT warning indicates that the texture's width is 1026 pixels instead of 1024, a two-pixel discrepancy introduced during export from the image editor.

Step 3: resolution

The mod author addresses both findings:

  1. Vertex count: The blade mesh is re-imported into the 3D modelling tool. Internal geometry, hidden backfaces from the blade's tang construction, and sub-millimeter bevel detail are removed. The optimized mesh has 4,200 vertices and re-exports correctly. The bundle is rebuilt.

  2. Texture NPOT: The texture is reopened in the image editor and resized from 1026x1024 to 1024x1024 using a canvas crop (not a scale, scaling would introduce interpolation artifacts). The resized texture is re-imported into Unity. The bundle is rebuilt.

Step 4: re-validation

The mod author re-runs -ValidateAssets. The Client.log now shows:

[INFO] Loaded asset: CustomKnife (GUID b3c4d5e6f7084a9b1c2d3e4f5a6b7c8d)
[INFO] English.dat found: Items/CustomKnife/English.dat
[INFO] MasterBundle.dat found: Bundles/MasterBundle.dat
[INFO] Asset bundle loaded: core.masterbundle

No warnings. The mod passes validation and is ready for publication.

Validation pipeline flowchart

The following flowchart shows the complete validation pipeline from asset loading through to the final pass/fail report that the modder reviews before publication.

As shown in the flowchart above, the validation system operates as a two-stage pipeline. Tier 1 runs unconditionally on every startup and determines whether each asset can load at all. Tier 2 runs only when the modder explicitly requests it and provides the detailed performance and optimization feedback that drives pre-publication cleanup.

Validation checks by asset type

Different asset types are subject to different subsets of the comprehensive validation checks. An item weapon prefab is checked for mesh, material, and texture issues; a map object is also checked for navmesh readability. The following table maps each asset type to the validation checks that apply to it.

Asset typeStartup checksMesh checksMaterial checksTexture checksAudio checksNavmesh checks
Item (Melee, Gun, Magazine, Clothing, etc.)GUID, Type, ID, English.datVertex count, missing meshMissing material, material countNPOT, readable flagAudio sample-
VehicleGUID, Type, ID, English.datVertex count, missing meshMissing material, material countNPOT, readable flagAudio sample-
AnimalGUID, Type, ID, English.datVertex count, missing meshMissing material, material countNPOT, readable flagAudio sample-
Object (map object)GUID, Type, English.datVertex count, missing meshMissing material, material countNPOT, readable flagAudio sampleNavmesh readable
BarricadeGUID, Type, ID, English.datVertex count, missing meshMissing material, material countNPOT, readable flag-Navmesh readable (if walkable)
StructureGUID, Type, ID, English.datVertex count, missing meshMissing material, material countNPOT, readable flag-Navmesh readable (if walkable)
ResourceGUID, Type, ID, English.datVertex count, missing meshMissing material, material countNPOT, readable flag--
EffectGUID, Type, English.dat--NPOT, readable flagAudio sample-
TagGUID, Type-----
RedirectorGUID, Type, TargetAsset-----

The table shows that tag and redirector assets, which have no Unity bundle content, are subject only to the startup identity checks. Map objects and barricades carry the largest validation surface because they interact with the AI navigation system in addition to the rendering system.

Common failure-mode scenarios

The following scenarios document failure modes that recur across the cohort's mod-testing experience. Each scenario is a composite of documented patterns; the resolution path is validated against the validation rules documented in this article.

Scenario 1: the invisible weapon

A mod author publishes a new melee weapon to the Steam Workshop and receives a player report that the weapon is invisible when equipped. The .dat file is present and correctly authored; the mod loads without startup errors; the weapon can be spawned with @give and appears in the player's inventory. But when equipped, no model appears in the player's hands.

The validation investigation reveals that the master bundle MasterBundle.dat is not reachable through the hierarchy search. The mod author placed the MasterBundle.dat file in the mod's root Bundles/ directory, but the asset's folder is nested several levels deeper, and the distance between them causes the upward hierarchy search to terminate at a higher-level Bundles/ directory that contains a different MasterBundle.dat. The fix is to add Master_Bundle_Override <bundle-name> to the asset's .dat file, which bypasses the hierarchy search and points directly to the correct bundle.

Scenario 2: the pink magazine

A mod author publishes a custom magazine for an existing rifle mod and receives reports that the magazine model renders solid pink/magenta when held in the player's hands. The magazine functions correctly, it loads into the gun, the correct round count is displayed, and firing works, but the visual is wrong.

The validation investigation reveals that the magazine's prefab in the master bundle has a mesh renderer component but no material assigned. The missing-material check (a Tier 2 comprehensive validation check) would have caught this, but the mod author did not run -ValidateAssets before publication. The fix is to assign the material in Unity, rebuild the bundle, and republish.

Scenario 3: the enormous texture

A mod author receives a community report that a custom vehicle mod causes the game's memory usage to spike when the vehicle is in view. FPS drops measurably for players near the vehicle. The vehicle's visual quality is otherwise good, no pink materials, no invisible parts.

The validation investigation reveals that the vehicle's body texture is 4096x4096 pixels (a 4K texture) but the vehicle's body mesh is simple enough that the texture resolution is far higher than necessary. The texture readable flag is also enabled, causing a 64 MB copy of the texture to reside in system RAM in addition to the GPU copy. The fix is to reduce the texture to 2048x2048 (a quarter of the memory footprint), disable the CPU Readable flag, rebuild the bundle, and republish.

Scenario 4: the silent gunfire

A mod author publishes a custom rifle and receives reports that the gun makes no sound when fired. The rifle's model is visible, the firing animation plays, projectiles are spawned and deal damage, but there is no audio. The mod author confirms that the audio clip exists in the master bundle and that the gun's .dat file includes the correct audio field values.

The validation investigation reveals that the audio clip is encoded at 96 kHz with a 32-bit sample depth, formats that the Unturned™ audio system does not support. The parser loads the audio field correctly, but the runtime audio system cannot decode the clip and falls back to silence. The audio sample check in Tier 2 validation would have flagged this clip as unusually large for a gunfire effect. The fix is to re-encode the audio clip at 44.1 kHz, 16-bit, mono, in a supported format, rebuild the bundle, and republish.

Validation severity decision matrix

When the modder reviews validation findings, each finding must be classified as "must fix before publication", "should fix before publication", or "can ship with this finding". The following matrix provides the cohort-validated decision guidance.

Validation findingSeverityFix before publication?Rationale
Missing GUID or TypeErrorYes, must fixAsset will not load
Duplicate GUIDErrorYes, must fixOne asset overwrites the other
Missing IDErrorYes, must fixItem cannot be spawned or referenced
Bundle not reachableErrorYes, must fixItem is invisible; no model loads
Missing materialWarningYes, should fixPink/magenta rendering is a visible defect
Missing meshWarningYes, should fixMissing geometry is a visible defect
Navmesh not readableWarningYes, should fix for map objectsAI pathfinding breaks through affected area
High vertex count (render mesh, 2x+ over limit)WarningYes, should fixPerformance impact on lower-end hardware
High vertex count (render mesh, 1-2x over limit)WarningConsider fixingMinor performance impact
High vertex count (collider mesh)WarningYes, should fixServer-side collision cost affects all players
High material count (6+)WarningYes, should fixExcessive draw calls
High material count (3-5)WarningConsider fixingModest draw-call impact
Texture NPOTWarningYes, should fixGPU sampling artifacts; avoidable defect
Texture readable flag enabled unnecessarilyWarningConsider fixingRAM cost accumulates; fix for large textures
Audio clip unusually largeWarningConsider fixingBundle size; fix for clips over 1 MB
Missing English.datInfo (not an error)Yes, should fixItem has no display name; visible to players
CPU Readable on non-navmesh meshInfoOptionalRAM cost; low priority

Appendix D: Texture dimension reference for common mod asset types

The following table provides the cohort-recommended texture dimensions for common mod asset categories. Authoring textures at these dimensions from the start avoids NPOT validation findings.

Asset typeRecommended albedo textureRecommended normal mapNotes
Small item (knife, pistol magazine)512 x 512512 x 512Low screen footprint
Medium item (rifle, SMG)1024 x 10241024 x 1024Standard for most weapon mods
Large item (LMG, sniper rifle)2048 x 10242048 x 1024Rectangular UV layout common for long weapons
Small vehicle part (wheel)512 x 512512 x 512Reused across multiple instances
Vehicle body2048 x 20482048 x 2048Largest screen footprint in the vehicle category
Map object (small, e.g., crate)512 x 512512 x 512Viewed from variable distances
Map object (large, e.g., building)2048 x 20482048 x 2048May use multiple materials; one texture per material
UI element (icon, HUD)256 x 256 or 512 x 512Not typically neededPower-of-two requirement still applies
Clothing (shirt, pants)1024 x 1024512 x 512CPU Readable flag must be enabled for clothing textures

Cross-references

Document history

VersionDateAuthorNotes
1.02026-07-2657 StudiosInitial publication. Complete validation rules reference sourced from official SDG documentation.

Glossary

TermDefinition
Asset Errors menuThe in-game menu that displays findings from the most recent validation run
Client.logThe game's client-side log file, located in the Unturned™ installation directory
CPU ReadableA Unity import flag that keeps a copy of mesh or texture data in system RAM for CPU access
DepthMaskA special renderer type managed by the game engine for specific rendering passes
Draw callA single instruction from the CPU to the GPU to render a batch of geometry with a specific material
LODLevel of Detail, a lower-polygon version of a mesh used when the object is distant from the camera
Material countThe number of separate materials assigned to a renderer
NavmeshNavigation mesh, a simplified representation of walkable surfaces used by AI pathfinding
NPOTNon-Power-Of-Two, texture dimensions that are not powers of two on one or both axes
RecastThe pathfinding library Unturned™ uses to generate level navigation meshes
Reference integrityThe property that every ID and GUID cross-reference resolves to an existing asset
Startup checksValidation checks that execute during every game startup
Tier 1 / Tier 2The two validation tiers: fast startup checks and comprehensive -ValidateAssets checks
Vertex countThe number of vertex points in a mesh; higher counts increase rendering and collision cost
-ValidateAssetsThe command-line flag that enables comprehensive asset validation