Skip to content

Local Asset Testing Workflow ​

Testing Unturned™ mod assets locally before submitting them to the Steam Workshop is a critical quality assurance step that catches authoring errors before they reach the player community. The local testing workflow covers where to place files for testing, how to force a hot-reload of asset data, how to verify .dat parsing without launching the full game, and how to test every field configuration in single-player mode.

57 Studios™ has documented the complete local testing workflow based on the official SDG documentation and community-validated testing practices. This article covers every step from initial .dat validation to final pre-submission verification.

Testing a custom item in Unturned single-player mode with the developer console open

Documentation source: This article references the official Smartly Dressed Games modding documentation and the Steam Workshop section.

Who this article is for ​

This article is written for Unturned™ mod authors who are preparing to submit their first mod to the Steam Workshop, experienced mod authors who want a structured testing checklist, and anyone troubleshooting why a mod that works in development does not work after Workshop publication.

The testing directory structure ​

For local testing, place your mod files in the local Unturned™ installation's Workshop directory. The game scans the Workshop/Content/304930/ directory for mods regardless of whether they have been published on the Workshop.

<Unturned Install>/Workshop/Content/304930/<TestModID>/
├── Bundles/
│   ├── MasterBundle.dat
│   └── <modname>.masterbundle
├── Items/
│   └── <ItemName>/
│       ├── Asset.dat
│       └── English.dat
└── Workshop.dat

The <TestModID> can be any unique identifier. It does not need to be a real Workshop file ID for local testing. Use a memorable number that identifies the test mod.

Validation without launching the game ​

Before launching Unturned™ to test a new mod, perform these validation steps that do not require the game to run.

.dat syntax validation ​

Open each .dat file in a text editor and verify:

  • All field names are spelled correctly (case-insensitive, but consistent with documentation)
  • All values match their expected types (number fields contain numbers, GUIDs are 32 hex characters)
  • Curly braces { and } are balanced for dictionaries
  • Square brackets [ and ] are balanced for arrays
  • Comments use the // prefix correctly

GUID format validation ​

Verify that every GUID in every .dat file is exactly 32 hexadecimal characters (0-9, a-f). No hyphens. No spaces.

ID uniqueness validation ​

Check that no two items in the same mod use the same ID value. Check against any other mods that will be loaded simultaneously.

Asset path validation ​

Confirm that every master bundle pointer's AssetPath matches an entry in the manifest file.

Single-player testing sequence ​

After launching Unturned™ in single-player mode, follow this testing sequence.

Step 1: Verify the asset loads ​

Open the in-game console with the tilde key ~ and type @AssetDirectories to confirm the mod directory is being scanned. If the mod directory is not listed, the folder structure may be incorrect.

Step 2: Spawn the item ​

Use the @give <itemID> command to spawn the item. If the item does not appear in the inventory, the ID may be wrong, the Type may be incorrect, or the master bundle may not be loaded.

Step 3: Visual inspection ​

Examine the item in the inventory. Verify:

  • The icon renders correctly
  • The model is visible when equipped
  • The texture is correct (not pink)
  • The scale is appropriate

Step 4: Functional testing ​

Test every field that has gameplay implications:

  • Equip the item and confirm it appears in the correct slot
  • Fire/use the item and confirm damage values match expectations
  • Test reload behavior (for guns)
  • Test durability degradation (if applicable)
  • Test attachment compatibility (for weapons)

Step 5: Edge case testing ​

Test edge cases:

  • Drop the item and pick it up again
  • Save the game, reload, and confirm the item still works
  • Equip and unequip the item multiple times
  • Test with other mods loaded to check for conflicts

The console log ​

The game's console output is the primary diagnostic tool for asset loading issues. Common messages and their meanings:

Console messageMeaningAction
Loaded asset: <GUID>Asset registered successfullyNone - normal behavior
Failed to load asset: <path>Asset file found but parsing failedCheck .dat syntax
GUID conflict: <GUID>Two assets share the same GUIDRegenerate one GUID
Missing master bundle: <name>MasterBundle.dat points to nonexistent fileVerify the bundle file exists
Asset not found: <path>Path in master bundle pointer is wrongCheck against manifest
ID conflict: <ID>Two items share the same IDChange one item's ID

Diagnostic table ​

SymptomMost likely causeResolution
Item does not appear after @giveWrong ID or incorrect folder structureVerify the ID in the command matches the .dat ID; check folder path
Item appears but is invisible when equippedPrefab not found in bundleVerify Name field matches prefab name in bundle
Pink/white materialShader not included in bundleRe-export with multiplatform enabled
Wrong item appearsID collision between two itemsUse unique IDs in the 50000+ range
Item works in single-player but not on serverServer mod directory is differentCopy the mod to the server's Workshop directory
.dat changes not reflected after game restartFile was not saved in UTF-8 encodingRe-save as UTF-8 without BOM
Master bundle not loadedMasterBundle.dat is missing or misconfiguredVerify Asset_Bundle_Name matches the .masterbundle filename

Best practices ​

  • Test every change in single-player before publishing to the Workshop.
  • Keep a test save file with the necessary @give commands pre-typed.
  • Check the console output after every game launch for warnings or errors.
  • Use the manifest file to verify bundle contents after every export.
  • Test with a clean mod directory to rule out stale file interference.
  • Maintain a local copy of every published mod version for regression testing.

Frequently asked questions ​

How do I force a hot-reload without restarting the game? ​

Unturned™ does not support hot-reloading of asset files. You must restart the game to pick up changes to .dat files or master bundles. The only exception is server-side configuration files, which can be reloaded through commands.

Can I test Workshop mods before publishing? ​

Yes. Place the mod files in the Workshop/Content/304930/<anyID>/ directory as described above. The game loads them regardless of whether they have been published.

How do I verify .dat parsing without launching the game? ​

Check the .dat file structure manually: verify field names against documentation, check value types, and confirm GUID format. A dedicated .dat validator tool is not provided by SDG, but community tools may be available.

What should I check in the console output after launching? ​

Look for lines containing "Loaded asset", "Failed to load", "GUID conflict", "ID conflict", and "Missing". Any line containing "Error" or "Warning" related to your mod's content should be investigated.

How do I test attachment compatibility? ​

Spawn the base weapon and each attachment type using @give. Attach each attachment and verify the visual appearance and gameplay effects. Test with all attachment slots filled simultaneously.

Appendix A: Testing checklist ​

  • [ ] .dat syntax validated (braces balanced, fields correct)
  • [ ] GUID is 32 hex characters, no hyphens
  • [ ] ID is unique within the mod (50000+ range recommended)
  • [ ] Master bundle pointer paths verified against manifest
  • [ ] MasterBundle.dat present with correct Asset_Bundle_Name
  • [ ] Mod appears in @AssetDirectories output
  • [ ] Item spawns with @give <ID>
  • [ ] Visual model correct (not pink, correct scale)
  • [ ] Gameplay fields function as expected
  • [ ] Save and reload test passed
  • [ ] No errors or warnings in console related to the mod

Appendix B: External references ​

Testing with community mod tools ​

The Unturned modding community has developed several tools that can assist with local testing.

.dat validator tools ​

Community-created .dat validator tools can check your .dat files for syntax errors without launching the game. These tools typically check for balanced braces, valid field names, and correct value types. While not official SDG tools, they are widely used in the modding community.

Bundle inspection utilities ​

Tools that read and display the contents of .manifest files can help verify that the master bundle contains the expected assets. Some community tools also provide graphical browsing of bundle contents.

Testing framework scripts ​

Some community mod authors publish PowerShell or batch scripts that automate the testing workflow: copying files to the test directory, launching the game, and capturing console output. These scripts can be adapted for individual workstations.

Local testing for curated item submissions ​

When preparing a curated item submission for the Steam Workshop stockpile, the local testing workflow includes additional steps specific to the submission process.

Unity package verification ​

After testing the item locally, export a Unity package (.unitypackage) that includes the source files. Verify that the package opens correctly in a fresh Unity project.

Curated item guidelines compliance ​

Verify that the item follows the curated item guidelines for resolution, contrast, edge treatment, and art style. These guidelines are documented in the curated items section of the official SDG documentation.

Mythical effect placement verification ​

If the item is a cosmetic that supports mythical effects, verify that the "Effect" child transform is correctly positioned on both the Item.prefab and the clothing prefab. The official documentation specifies that +Z is the mythical's up direction and +Y is the mythical's forward direction.

Local testing by mod distribution method ​

Different distribution methods require different testing approaches.

Manual distribution mods ​

For mods distributed through direct file sharing (GitHub, Discord, direct download), test the mod on a clean Unturned installation that has never loaded the mod before. This simulates the end-user experience.

Workshop mods ​

For Workshop-distributed mods, create a local test with the Workshop directory structure and verify that the mod loads correctly from that location. Test the mod on a separate computer if possible to simulate a fresh download.

Server mods ​

For server-side mods, test on a local dedicated server before deploying to a production server. Verify that the mod works correctly in the server context and does not cause performance issues.

Glossary ​

TermDefinition
Local testingTesting a mod on a single-player game instance before Workshop publication.
ConsoleThe in-game command interface opened with the tilde key.
@giveThe console command to spawn an item by ID.
@AssetDirectoriesThe console command to list all scanned mod directories.
Test saveA game save file used exclusively for mod testing.
Clean mod directoryA mod folder containing only the files for the current test.
Curated itemA community-created cosmetic submitted for Stockpile consideration.
Unity packageA .unitypackage file used to transfer Unity assets between projects.

Integration with other systems ​

This configuration interacts with several other Unturned systems that the mod author should be aware of when designing content.

Interaction with the asset definition system ​

Every configuration file must include the required identity fields that the asset definition system uses to register the asset in the game's registry. Without these fields, the asset is not recognized by the game and will not appear in any system that references it.

Interaction with the localization system ​

Configuration files that display text to the player must be paired with localization files. The English.dat file provides the default language display values. Additional language files can be added for multilingual support.

Interaction with the master bundle system ​

Configuration files that reference Unity assets must use master bundle pointers correctly. The asset path in the pointer must match the path in the master bundle's manifest. A mismatch causes the asset to fail to load without crashing the game.

Interaction with the validation system ​

The game validates configuration files during the loading phase. Validation errors produce warnings in the console but do not prevent the game from starting. The affected asset may use default values for invalid fields.

Performance considerations ​

Configuration file performance is determined by the complexity of the referenced assets and the number of active instances in the game world.

Memory footprint ​

Each loaded asset occupies memory proportional to its data size. Configuration files are small (a few kilobytes each) and do not significantly impact memory usage. The memory impact comes from the Unity assets (models, textures, audio) that the configuration files reference.

Loading time ​

The game parses all configuration files during the initial loading phase. The total parsing time is proportional to the total number of configuration files and their complexity. For most mods, this overhead is negligible (milliseconds to low seconds).

Runtime performance ​

The runtime performance impact of a configuration file is zero for static properties and minimal for properties that are evaluated per-frame. Field values are cached after the initial read and are not re-read each frame.

Testing and validation ​

A structured testing approach ensures that every configuration value produces the expected behavior.

Unit testing ​

Test each configuration field independently by changing one value at a time and observing the result. This isolates the effect of each field and makes it easy to identify which field is responsible for unexpected behavior.

Integration testing ​

Test the complete configuration with all fields set to their intended values. Verify that the combination of fields produces the expected overall behavior.

Regression testing ​

After making changes, re-test previously working behavior to confirm that the changes did not break existing functionality. A change that fixes one issue should not introduce new issues in unrelated areas.

Stress testing ​

Test the configuration under high-load conditions (many concurrent players, rapid interactions) to verify that no performance issues or crashes occur.

Common authoring mistakes ​

Mistake 1: Missing identity fields ​

The most common authoring mistake is omitting required identity fields. Without a GUID, Type, and ID, the asset cannot be registered in the game's asset registry.

Mistake 2: Incorrect Type values ​

The Type field must match the expected value for the asset class being defined. An incorrect Type value causes the parser to misread the configuration fields.

Mistake 3: GUID collisions ​

Two assets with the same GUID cause the later-loaded asset to overwrite the earlier one. Generate fresh GUIDs for every new asset and never reuse GUIDs.

Mistake 4: ID collisions ​

Two items with the same ID within the same category cause unpredictable behavior. Use IDs in the 50000+ range to avoid collisions with vanilla and established community mods.

Mistake 5: Invalid field values ​

Field values must match their expected types. A string value in a numeric field is silently ignored and replaced with the default value.

Mistake 6: Unbalanced braces ​

Dictionaries opened with { must be closed with }. Lists opened with [ must be closed with ]. Unbalanced braces cause parsing errors that prevent the asset from loading.

Mistake 7: Incorrect master bundle pointers ​

The AssetPath in a master bundle pointer must match the path in the bundle's manifest exactly. Even a single-character difference causes the reference to fail.

Mistake 8: Missing localization files ​

Assets that display text to the player should have a corresponding English.dat file. Without it, the asset may display an internal identifier instead of a user-friendly name.

Design patterns ​

The completeness pattern ​

Before declaring a configuration file complete, verify that every field that has a documented default value has been explicitly considered. Some fields should use their defaults; others need explicit values. The decision should be intentional.

The documentation pattern ​

Maintain a project-level documentation file that records the purpose and expected values for every field in every configuration file. This documentation helps other mod authors understand the design intent.

The version control pattern ​

Store all configuration files in a version control system (Git). Every change is tracked with a commit message that explains why the change was made. This creates a complete history of the project's evolution.

The peer review pattern ​

Before finalizing a configuration, have another mod author review the file. A reviewer may spot errors that the original author missed, particularly in field values that were changed recently and may have unintended interactions.

Frequently asked questions (continued) ​

How do I know if my configuration file is correct? ​

The game logs any parsing errors or validation warnings during startup. Check the console output after launching the game. If no errors or warnings related to your mod appear, the configuration file is syntactically correct.

What happens when a field is omitted from a configuration file? ​

The parser assigns the default value for that field. Default values are documented in the field reference tables in this knowledge base. If you omit a field, the behavior may not match your intent.

Can I include comments in configuration files? ​

Yes. Lines starting with // are treated as comments. Comments can also be added at the end of a line if the value is enclosed in quotes.

How do I create a minimal configuration file? ​

The minimal configuration file contains only the required identity fields (GUID, Type, ID) and the fields that must differ from their defaults. All other fields use their default values.

What is the difference between a .dat file and an .asset file? ​

.dat files use the original Unturned key-value pair format. .asset files use the newer format that supports dictionaries, lists, and quoted keys/values. Both formats are valid and the parser handles both.

Glossary ​

TermDefinition
Configuration fileA text file containing key-value pairs that define an asset's properties.
Identity fieldA required field (GUID, Type, ID) that identifies the asset to the engine.
Default valueThe value used when a field is not explicitly specified in the configuration file.
Parsing errorAn error that occurs when the file format is invalid or a value cannot be interpreted.
Validation warningA warning that occurs when a parsed value is out of range or inconsistent.
Field referenceA table that documents each field's name, type, allowed values, and purpose.
Asset registryThe game's in-memory database of all loaded assets.
Master bundle pointerA structured reference to an asset within a master bundle file.
LocalizationThe system for providing language-specific display text for assets.
TemplateA pre-written configuration file with placeholder values.

Implementation roadmap ​

Phase 1: Research ​

Read the relevant reference article for the asset type. Understand the purpose of every field before writing any configuration values.

Phase 2: Planning ​

List the required and optional fields that need values. Determine the correct values based on the intended behavior.

Phase 3: Authoring ​

Create the configuration file. Fill in the identity fields first, then the gameplay fields, then the optional fields.

Phase 4: Validation ​

Check the configuration file for syntax errors. Verify that all braces and brackets are balanced. Confirm that all values match their expected types.

Phase 5: Testing ​

Place the configuration file in the mod directory. Launch the game and check for errors. Test the asset's behavior in-game.

Phase 6: Iteration ​

Adjust field values based on testing feedback. Repeat phases 4 and 5 until the behavior matches the intended design.

Authoring checklist ​

Before finalizing a configuration file for publication, confirm the following items:

  • [ ] All identity fields are present (GUID, Type, ID)
  • [ ] GUID is unique and freshly generated
  • [ ] Type field matches the expected asset class
  • [ ] ID is in the 50000+ range
  • [ ] All gameplay fields have intentional values (not accidentally omitted)
  • [ ] Master bundle pointers are correctly configured and paths match the manifest
  • [ ] Localization file is present and contains the expected fields
  • [ ] Testing has confirmed every field produces the expected behavior
  • [ ] No parsing errors or validation warnings in the console
  • [ ] The asset works in both single-player and multiplayer

Troubleshooting common issues ​

Issue: Asset does not appear in game ​

If the asset does not appear after following all configuration steps, check the console output for error messages. Common causes include incorrect directory structure, missing MasterBundle.dat, or invalid GUID format.

Issue: Asset appears with wrong values ​

If the asset appears but behaves differently than expected, check that all field values are spelled correctly and are within valid ranges. The parser silently ignores fields with incorrect names and applies the default value instead.

Issue: Asset works in single-player but not on server ​

Multiplayer issues are often caused by missing files on the server. Copy all configuration files and master bundles to the server's mod directory. Verify that the server and client have the same mod version.

Issue: Asset causes game crash ​

If an asset causes the game to crash, check for the following: extremely large field values (such as very high damage numbers), nested dictionaries that exceed the parser's recursion limit, or master bundle references to nonexistent assets.

Validation checklist ​

Before publishing an asset or configuration, run through this checklist to catch common issues.

  • [ ] Configuration file syntax is valid (braces balanced, quotes matched)
  • [ ] GUID is 32 hexadecimal characters, no hyphens, no spaces
  • [ ] Type field uses the correct class name
  • [ ] ID is numeric and does not conflict with other items
  • [ ] All referenced GUIDs point to existing, loaded assets
  • [ ] Master bundle pointer paths match the manifest exactly
  • [ ] Localization file contains all required text entries
  • [ ] Asset has been tested in single-player
  • [ ] Asset has been tested in multiplayer
  • [ ] Console log shows no errors or warnings related to the asset

Glossary ​

TermDefinition
AssetA data entity registered in the game's asset system with a unique GUID and Type.
ConfigurationThe set of key-value pairs that define an asset's properties and behavior.
Default valueThe value applied by the parser when a field is omitted from the configuration.
ParsingThe process of reading and interpreting a configuration file's key-value pairs.
RegistryThe in-memory database of all loaded assets, indexed by GUID.
ValidationThe process of checking that parsed values are within allowed ranges.
Master bundleA Unity AssetBundle file containing packaged game assets.
LocalizationLanguage-specific display text for assets.
ManifestA file listing all assets in a master bundle with their paths and types.
WorkshopThe Steam platform for distributing mods to players.

Configuration file management ​

Version numbering ​

Assign version numbers to each configuration file to track changes over time. Include the version number in a comment at the top of the file. When publishing updates, increment the version number and document the changes.

Change documentation ​

Maintain a changelog file alongside the configuration files. Record the date, version, author, and description of each change. This helps other mod authors understand how the configuration has evolved.

File naming conventions ​

Use consistent file naming conventions across all configuration files. The recommended convention is descriptive lowercase names with underscores separating words (snake_case).

Frequently asked questions (continued) ​

How do I roll back a configuration change? ​

Restore the previous version from version control. If version control is not in use, restore from a manual backup. This is why version control is strongly recommended.

What information should I include in a changelog entry? ​

Each changelog entry should include the date, the configuration file name, the changed field or section, the old value, the new value, and the reason for the change.

How do I share configuration best practices with my team? ​

Maintain a shared style guide document that records naming conventions, field ordering preferences, and commenting standards. Review pull requests to ensure compliance.

Cross-references ​

Document history ​

VersionDateAuthorNotes
1.02026-07-2657 StudiosInitial publication. Complete local testing workflow, directory structure, pre-launch validation, single-player testing sequence, diagnostic table.