Trainz/AM&C/Fixing Assets

< Trainz‎ | AM&C

If you begin exploring Trainz as a building tool, crafting or modifying a route, or venture boldly forth onto the DLS and acquire one of the 2500+ routes uploaded in the last decade— you will indubitably end up facing the learning curve of 'fixing assets'. If you are going to make headway fixing assets, you will need to understand where to look things up. The Hierarchy Of Assets and config.txt files Asset fixing is something of a misnomer except in rare cases—most widely used assets need fixing by updating to new technology levels—because they have become out of date relative to updates in the game engine's data needs. Alas, there are some actual errors in downloadable content from not only the DLS but from otherwise reputable 3rd party content creators such as Mocrossing pack (zip file) pack—the fixing of which is covered in a forthcoming tutorial. Many times these are simple typos, some are misspellings (not every contributor speaks English as a native tongue, nor as their first language) and pre-TS08 error checking was far more lenient... leading to the fatal crash of Trainz or worse, Blue Screen of Death errors.

Trainz Asset Maintenance and Creation

Trainz Annotated Reference Pages
TOC | BeginningsFun | AM&C | Creation | InBook Refs ORP Refs:  • Index • Containers • Kinds • Tags | Appendixes  • Vers
 Mouse use
Contributing author: The Yesterdayz-Trainz group

Lastly and least often, there are missing texture faults and those using illegal characters (Non-ANSI character coding, mostly from non-English alphabets such as many European languages) in file names which are illegal in Trainz.

  • These can usually be cured respectively by providing a missing texture (Using PEV's Mesh Viewer to see where they occur and make an intelligent substitution) or by texture stripping the mesh (IM file) using PEV's Images2TGA in texture stripping mode.
If you are going to add changes to this page, please register as a Wikibook editor so you can be identified and you can be contacted with any questions about your solutions. Some changes have been added that can raise one's eyebrow's because they are less than optimal for newer releases. Such fixes may have been fine for the TRS2004TRS2006 builds, but are less salubrious for newer release fixing, and marginal for the TRS's!


Editor's note: In the following, the phrase is not permitted within a container of type <container-name> is most often actually a message referring to Asset 'KINDs' data definition in the config.txt file in question. A few such below also can apply to containers and/or sub-containers, but most seen refer to KINDs.

Some small numbers of "Bad Assets" can (with decreasing frequency of occurrences thanks to the systematic efforts to 'Clean Up the DLS'), and when these are found in a route many of their ills can also be fixed. Most can be graded as misuse of key words, and misspellings, missing quotes and the like. Minor repairs anyone can fix with a text editor like Notepad or Notepad++. An occasional asset will be missing a component—either a texture or a mesh (the wire frame which gets 'decorated' by textures to make a virtual object. The one is a surface, the other the skeleton of the underlying shape.) By far the majority of these have shown themselves susceptible to easy fixes by adjustment of file pathspecs, installation of a newer container style data structure in the config.txt file or adjusting file folder contents (e.g. pre-V2.4 processing of assets were able to look up and down for a primary texture or mesh (im) file which processing was abandoned in TS2009 and above) by copying up or down relevant files into the necessary folder.

Various techniques have been adopted requiring different data, or a difference in the way data is organized. Most of these changes are handled automatically within the software. When they cannot be, they generate an error, a good thing. Having an error appear in an asset is far better than having a flaw in an asset create a program crash—an all-too-frequent occurrence in the early days of TRS2006 when the first elevated measure of basic error testing was built into the CMP software with its Service Pack 1.

VE messages in T:ANE


With the introduction of T:ANE the manner of reporting errors and warnings in Content Manager has changed. Each error and warning now has a VE number. The full list of numbers is here. Each error or warning also has its own WIKI page which can be accessed by selecting the item from that page, or by right-clicking on a numbered error or warning message in the Errors and Warnings window. The information on those pages is specific to T:ANE versions. However, the information below is applicable to most of the errors and warnings reported for T:ANE.

Acquiring and Installing PEVs tools

PEVs tools in a power-users C:\Downloads folder (Yours will likely be somewhere else).

PEV's tools will be maintained by the community on one website or another as they are invaluable. Peter Villaume (PEV) is a really talented programmer (engineer, actually) situated on the opposite (or Sydney) side of Australia from N3V & Auran Holding's small town location on the Gold Coast near Brisbane, but ceased hosting his tools on his own website in mid-2013 when the task was taken over by Trainz forum guru Shane Turner on his help site here.

Shane Turner also hosts a number of question and answer threads on the Auran forums, and contributes here and the N3V wiki, plus is putting together a tutorial series on his own website. As the old guard initial Trainzers fade away more an more, newer enthusiasts like Shane are stepping up renewing the Trainz spirit of helping one another as a community. Shane, being, young, energetic and enthusiastic, very technically astute and a Trainzer of no mean expertise, Shane's contributions have and promise to continue to benefit all of us for a long time to come. Subscribing and perusing his threads and web boards and news letters promise any new Trainzer to me very worth the time. And he answers questions daily! Kudos, Shane. We need more like you.

  1. Locate PEVs tools on Shane's site and their accompanying .pdf file manuals where given.
  2. See Setting up PEVtools for a procedure and tips on where to put things.
  3. See PEVtools for some operating tips, tutorial links, and advanced setup in a local installation. Tips and tricks of useful time savers will be found there as well.
  4. While new to error fixing, set up an 'editing2_unchanged' folder in your \UserData or \UserData\editing folder, and routinely copy assets there before attempting any changes.
    1. This is a safety net just in case things seem to blow up... a way to restart when one error turns alarmingly into a list of 30...
    2. Or better yet, a way to have an original and changed copy you can use Kdiff3 to compare and let it show you where you mangled a nested '}' or added an extra quote-mark, or made some other typo that caused such parsing issue.
       • (Take a deep breath and relax, that sort of list of errors isn't real, just some punctuation somewhere needs fixed.)


If you're just starting with Trainz the attractions of the Download Station can be beguiling.
  1. Throttle your covetous side and only download in small increments, clear the errors in such as you've acquired, then move onto more greed. Having a lot of errors just confuses YOU and Content Manager, so small steps for your own sake.
  2. Suggest you initially download only by selecting Sessions, which have Routes as dependencies. CM will populate the dependencies, and a single selection can suddenly find itself swelling to over 800 assets! That will happen to you as it does to us all!
  3. If you want some practice error fixing, select some older routes of the V2.5-v2.8 vintage, where you'll find a few. Then work back into older content v2.0-v2.4 and then v1.3-v1.5 as well. Many a recent route and session will include older content, so working back that way will give experience where you need it in manageable doses, and such older assets as make it to newer routes are gems that have stood the test of time. (There are a fair number of 'less than professional grade' assets in older Trainz as many a content creating tyro added stuff that would have been better left unshared. You've been warned!


Part II
  1. Spend some time on the forums LURKING and observing. Use google's site searching feature to find entries about most any topic or question you might ask. ( "question text keywords"). That works on this site as well!
  2. Once you've learned to walk through some 10-20 errors and seen how repetitively they can be, find the Asset-X FAQ on the forum and subscribe, and start gradually working on that learning curve while regularly, steadily, fixing any additional faulty assets that come your way.
    1. Much of the How-to with Asset-X is in the Windows style help file built into the product. This can be read directly in the folder, or by Loading Asset-X and clicking on Help.
  3. Before doing so, you must have a understanding of the basic Trainz data model configurations, and fixing 20-30 errors the long way with PEV tools and an engaged brain will give you enough of a start on understanding the various forms of the Trainz evolved data models, and perhaps mastery enough of they way they interplay and differ to fly Asset-X with ability to spot when something may be wrong.
  4. Also, it is a really good idea to set up a side folder of example asset types and fill it in with copies of things you had to edit, but fixed up so they pass without even warnings. These can be compared to others of the kind, and keep you from getting stuck. That exercise will stand you in good base knowledge, and build confidence giving future asset patching much greater speed. In the end, you'll be way ahead on time save building good base knowledge of How to fix faults.

A Note on Casing in Labels


Labels created by the content creator for use in Trainz configuration files are usually not subject to any specific casing (upper-case or lower-case) rules. The general standard is to use all lower case, but for many names, any form of casing is allowed. Arbitrary names are used in many places, including filenames (images, meshes etc), names used within meshes (attachment points, textures) and labels used in lists (for example, the tracks list in an attached track container).

Some names or labels have specific casing requirements, such as 'default' for the default mesh in a mesh container. These labels should be used strictly as documented. In other places a specific casing is required, such as the tags used in a 'string-table' container, which must be all lower-case. But many others, especially file names, are entirely at the content creator's choice. But it is not easy to tell when casing matters and when it does not. Errors that otherwise appear quite mysterious might be due to a name mismatch as a result of differing casing (especially if committing an asset changes the casing of certain tags).

A good rule to follow is to make everything lower case - avoid any upper-case letters at all. This is consistent with the general Trainz standard, and also reduces problems created by Windows Explorer using its own rules for adjusting file names for display purposes.

If you run across an error where CM says something either doesn't exist or already exists when you cannot see the reason for the error, double check what casing is being used - it might be one of those times that case matters.

Note: Scripting has rules of its own. In particular, objects and methods must use the exact casing as documented and, depending on context, labels with different casing are different labels.

List of one-to-one replacements

  1. Engine spec <kuid:35837:51002> can be replaced by <kuid:44090:51016>

Content Manager Warning Messages

and what to do about them...

Content Manager validates assets when they are committed, and also includes an option to display the errors and warning for any installed asset. Below are set out some of the error messages that CM will display when it validates an asset, with a brief description. This list is based on CM v3.7, but also includes some errors that are only generated by the N3V upload validation process.

The notation <text> in this list means that the text varies according to the details of the asset.

Warning: Aliased meshes cannot currently be verified by Trainz.


One or more of the meshes used in this asset is not contained in the asset, but is contained in another asset that is referenced from this asset. This referencing is referred to as aliasing, and that other asset is referred to as an aliased asset. Aliasing is often used to create a new asset that differs from an existing asset only in the images used to render the model - this is sometimes referred to as reskinning an asset. It is widely used for traincars, and also for assets like road signs where one mesh is used with many different images. It is also used when assets are created by combining several standard meshes in different ways, such as with catenaries. Aliasing is also used by the Trainz UTC-TRS2004-era utility Paintshed.

For all versions prior to T:ANE, CM does not validate the aliased asset as part of the process of validating this asset, and therefore this asset cannot be confirmed as error free. This asset might not work in game even though it is listed as available, because the aliased asset that contains the required mesh(es) may be faulty, or the mesh might not actually exist in that asset. In most cases the asset is fine: the warning does not indicate that there will a problem with using the asset. The warning is sometimes interpreted as an error, because it often occurs with traincars that appear error-free but will not display in game.

There are other configuration items associated with meshes, such as attachment points, that are not validated if the mesh is in an aliased asset.

From build number 2.9 an alternative form of aliasing became available. From that build number it became possible to use the 'mesh-asset' tag in the mesh table container to reference a mesh in another asset. In this case the above warning should also be issued by CM, but (for versions prior to T:ANE) it isn't. So it is possible that assets that use the 'mesh-asset' tag will fail to work in game because the aliased asset is faulty or missing, but there is no warning in CM.

For build numbers above 3.8 only the 'mesh-asset' style of aliasing is supported and in T:ANE CM the aliased mesh is validated, so this warning does not exist.


  1. The warning can be suppressed by changing the top-level 'alias' tag to the 'mesh-asset' tag in the mesh table, being careful to use the same kuid. However this does not change the fact that aliased meshes are not validated - it simply stops the warning from appearing. It is probably better to leave the asset as-is, so the warning appears.
  2. If an asset that displays this warning does not appear in-game, then the aliased asset is the first place to look for the problem.

Warning: Required tag '<tag name>' was missing and has been set to default.


The tag should be added to config.txt with a suitable value.

Examples from an deliberately abused thumbnails container
  • Warning: Required tag 'height' was missing and has been set to default.
  • Warning: Required tag 'width' was missing and has been set to default.

The source line which gave these errors (testing if they could be put 'all on one line')

thumbnails { A { image "$screenshot (256).jpg" } } (The Answer was 'Yes", but the whitespace shown is necessary.)

There are some cases where this warning is actually an error because the default value is not valid for the tag. When this happens there is an error message immediately following the warning, indicating that the value is invalid. Adding the tag with the correct value removes the warning and the error.

Warning: This asset uses an obsolete trainz-build number.


Warning: This asset uses an obsolete trainz-build number. Trainz-build numbers below <build number> are no longer supported

The validation tests applied to an asset depend on the asset's build number. This message is indicating that the asset is considered obsolete and therefore the latest standards have not been applied.

This message is a warning - the asset will still work (unless there are errors). The warning can be removed by changing the build number but this will likely create new errors as the asset is validated against the later build standard. The build number should only be changed to remove this error if you are prepared to make all the other changes required to update the asset to the higher build number.

Warning: Tag '<tag name>' in the container '<container name>' is obsolete.


That tag is no longer supported and will be ignored. The tag may have been relevant at a lower build number, but is no longer applicable at the current build number.

It is possible that the tag function has been replaced by a container or by a different tag, as in the case of the tags 'category-era-nn' which are replaced by the simpler string array tag 'category-era', or similarly, the 'category-region' string array tag which replaces multiple 'category-region-NN' tags.

Examine the container specification here or in the N3V Wiki to determine whether the tag has a replacement. If a replacement is available select the value for the tag that corresponds to the value in the obsoleted item. If the corresponding value is not clear, accept the default value. In most cases the tag can be simply deleted.

Warning: The file '<name>' does not exist


This error can occur when an invalid tag is used within a container, and the validation system assumes the tag value must refer to a file. For instance, the container 'sound' can include only one tag - 'soundfile' - and the value of the tag must be a filename. If a different tag is included then rather than reporting an invalid tag error, the validation process assumes that the tag value refers to a file, and creates this warning. The fix is to remove the tag and the value.

Warning: Required container 'thumbnails' is missing.


A thumbnails container should be added to config.txt

For DLS uploads as of build 3.5 this is an error and the upload will be rejected. See the corresponding item in the error list.

Warning: This asset requires a shadow mesh, but the mesh table does not contain one.


A shadow mesh should be created for the asset and the mesh table updated.

Shadow meshes are no longer required at build 3.8 and above. However, if a shadow mesh is listed in the mesh table, the mesh must exist, and a missing mesh will be reported as an error. It is valid to specify the main mesh as the shadow mesh.

Warning: The texture '<texture name>' is a uniform color.


Uniform textures should not be used for new assets, but for older assets that would require a change to the mesh. In this case the textures should be resized to 4x4, or at least one pixel changed to a varying colour (however slight the variation). Large uniform textures are a waste of resources: do not adjust the image colour to avoid the warning without also resizing it to a suitable small size - 16x16 or smaller.

It has been reported that this warning is not generated if the image is less than 64x64, but this does not appear to be the case for Build 61388. A single pixel difference is enough to eliminate the warning.

Warning: An asset must be specified for tag 'texture-kuid'.


The texture-kuid tag is used by some containers (eg, a corona effect container) to reference a texture name. If it is used, the texture name should be specified.

This error often occurs with assets where the texture is controlled by scripting code. In this case, any texture can be nominated for the tag, as the script will update it as soon as it executes.

Warning: Progressive meshes are no longer supported by Trainz


Warning: Progressive meshes are no longer supported by Trainz. Though these meshes may work in Trainz, it is recommended that you switch to a LOD mesh. Warning: Progressive meshes are no longer supported by Trainz. Though these meshes may work in Trainz, it is recommended that you switch to a IM mesh. (Until 2008's publication of TC3 introduced the LOD technology.)

Progressive meshes (.pm) can be converted to a single Indexed mesh (.im) using the PEVtools utility PM2IM.exe.

  • There is no tool available that can convert a progressive mesh file to the multi-LOD .lm files format, which details how more than one mesh scale into view based on distance from viewpoint. Such a conversion would be done manually by copying the model and simplifying it to create multiple versions - typically, two to four meshes with progressively fewer and fewer polygons. This is not possible for repaired assets where the original model for the mesh is not available.

Warning: Indexed meshes are not supported for traincars as of trainz-build 3.8


Warning: Indexed meshes are not supported for traincars as of trainz-build 3.8. It is recommended that you upgrade <> to a LOD mesh

For traincars with a build level of 3.8 or higher the mesh must be set up as a LOD mesh or it will not be accepted for uploading. LOD meshes were introduced in Trainz TRS2004 (1st published in 2003), and consist of multiple indexed meshes which use fewer polygons as the object viewing distance increases. This helps ease processing load on the main CPU and shifts the load onto the GPU (GPU). This requirement does not apply to traincars built to a lower build level, but it is an recommended upgrade for all assets at any build level of 2.9 and above.

This warning will be an error if the asset is a traincar with a build level of 3.8 (Trainz MAC-II, and TANE) or higher that does not have a LOD mesh.

Warning: <value> is not a valid value for tag '<tag-name>'. This tag is now empty and a new value must be selected.

"Warning: 'US ' is not a valid value for tag 'category-region'. This tag is now empty and a new value must be selected."
Note carefully the exact message: Warning: 'US ' is and delete the trailing space(s) at the end of the tag value. This extra space is not visible in some editors, and explains some errors that are otherwise quite mysterious.
  • Note: Trailing spaces in any string value-field is illegal in Trainz, and will usually give this message above.

Warning: The Boolean tag '<tag name>' in container '<container name>' is not a valid Boolean value.


The tag is defined as requiring a Boolean value but some other value has been provided. Boolean means either '0' (false) or '1' (true). Use of any other integer value will cause this error message. Integer values from 2 to 7 have been observed in some older assets. It is reasonable to assume that any value other than 0 was meant to indicate 'true'.

Fix Change the value of the tag to either 0 or 1, as appropriate for the asset.
  • Note that in some cases this message actually indicates that the definition for the tag is wrong - the content creator has followed the correct rule, but validation is using a different rule. An example is the opacity tag in some versions of Trainz. In this case the correct type is 'value' (a floating-point number ranging from 0.0 to 1.0) not 'boolean'. To remove the error it is possible to re-define the type for the 'opacity' tag in the container.txt file in the folder install root\bin\TETData. Careful examination of the contents of that file should indicate the change that is needed, even though the contents do not make much sense at first sight.


Content Manager Error Messages

Using an ORed KUID list to view fixed asset, a powerful technique to modify your searching and display exactly what you want - Some faults won't show as fixed, until the asset is recommitted, or suddenly you'll find the fixed asset has component assets with problems, as in this view exploring such a situation. See the description on this image when blown up. Clicking images herein should always give you a larger view.

Acquiring assets means running a gauntlet of error in older content, and these faults can usually be fixed with a series of simple edit changes and PEVtools. This is a guideline to do such, and why such and such an error is occurring. AssetX and TARDIS scripts can be used to automate fixing many of these.

See Setting up PEVtools for some useful tricks and methods.


Error: This asset has a trainz-build number which is not recognised by this tool.


The asset has a trainz-build tag (TB, TBV) value too high for your version of Content Manager.

  • If you got this message, it likely means you have several licensed copies of Trainz, as it shouldn't happen to someone without both an older and newer release, and you won't be authorized to access content higher than your highest TBV associated with the retail version.
Editor's note: While the DLS interface to CM was overhauled some during 2015, there were some bugs (from the standpoint of an older CM) introduced deliberately in the way TANE needed to handle server data flow, and especially when a user has more than one active CM or version. Hence, as someone who runs multiple CM's often, I see this error fairly often as well. Some of the time that is because I'm cross-loading from one Trainz to another, AND the cdp is more advanced than the Trainz I'm copying into. -Fabartus

Almost all content with a higher TBV can be made usable by decreasing the build number to match your version, unless a feature available only in the later build versions (including some scripting features) has been used. For those of us running more than one version of Trainz, this message has become increasingly common as the DLS software is not always correct (and may not be checking TBV at all in TS09, TS10 & TS12 — each of which get more than a few higher three's and a smattering of V4.0+ TBVs downloading as upgrades.[note 1] The DLS has definitely become more aggressive in forwarding the most recent version to the CM requesting an asset. Even CMP has downloaded V3.7 assets when I wasn't expecting such largess.) in interpreting which version it is downloading to, particularly perhaps, when running more than one CM at a time when cross-downloading[note 2]

When such newer assets or versions use tags or containers not found in older Trainz data models they need further adjustment to remove the unsupported tag.

Such errors will be flagged explicitly by CM, often with more than one error line mentioning multiple textures and texture.txt files. In many cases the fix is to delete the offending line, relying on the default values being used. This process becomes significantly harder when regressing to a build number less than 2.9 with spline objects (long assets), as many of the tags changed at that build. For objects (Kind Scenery and related types) rolling back a Trainz-build value to anything above v1.5 is usually easy, absent texture issues, for the data models used for those and the great majority of kind Traincar data structures became stabilized by TBV 1.5 &v2.0 (UTC & TR04 respectively).

Editor's note: Just altering the trainz-build code value can appreciably change the list of errors seen! See for example Part III (next below).

  • In many cases, regressing the build number can also affect texture.txt files, requiring the removal of unsupported tags from those files.

This occurs because PEV's Images2TGA is written assuming a content creator or Trainzer is trying to 'upgrade an asset'. The designed expectation, is one is trying to convert an asset to a higher TBV.

  • Since the TRS's era CMP's give an error if encountering a compiled texture file (e.g. filename like feature.texture the Trainz compressed data form), it follows that Images2TGA has to be run to extract the editable texture.txt files and their associated various kinds of graphics data files (e.g. BMP, TGA, JPG, etc.) to feed the older Trainz release.

TANE also only opens a file to edit with the .texture file form of the data; hence Images2TGA was PEVs first and only update of his tools since the premature release of TANE-CE in late 2014. It's simply needed to get at the editable version of the files if one is to affect changes, such as repairs.

  • The most common problem taking an asset backwards to the TRS's is the AlphaHint= 'something' lines in the texture.txt files output by Images2TGA.
    The fix is easy though, just comment out the AlphaHint= 'something' lines with a make this line into a comment prefix: Add '// ' (a so called, Hack-hack comment line delimiter) to the beginning of the line, and everything else on the line coming after will be ignored in many software files, including texture.txt files.
     • It used to be usable in Trainz config.txt files too, but the programmer's got lazy in TS09 and comments in configs are no more.
     • This could run into the dozens of texture.txt files for a single asset. Consider a 'numberit' scripted locomotive-There will be four TGA textures for each digit 0-9, and a fourth (or possibly, a half) of those will have the AlphaHint tag!
  • But do not despair, there exists an easy answer, which is to just use a good programmer's text editor[note 3], such as Notepad++ which will let you search all the files in a given specified folder and make the changes all at once... opening only the one file! (It feels like cheating, but you can literally change hundreds of assets opened for edit in a few seconds! Reducing TBV's is the most common.)
  • Often the simplest 'fix' is to delete the asset and use an earlier version with a suitable build number, if available. The changes to DLS download procedures implemented August 2015 some think make it easier to download a specific version of an asset, and make it less likely that an asset with an unsuitable version is downloaded. This is true enough for TANE users, but the changes affects on older CM's is that the DLS sometimes provides kuid/cdp of a more advanced version than the one requested or desired, hence we see more of the lead Fault opening this section's topic. ('Error: This asset has a trainz-build number which is not recognised by this tool.')
  • Further, these auto-DLS controls don't apply at third-party sites, nor do they apply to manually downloading assets by FTP from the DLS web pages, so extra caution may be required to ensure only suitable versions are downloaded and integrated into your install when using these sites.

Error: The Tag '<text>' is not permitted within a container of type <container-name>


Part - Oh, intro

Alas, the Roman's never had the zero!

As can still bite and haunt the most jaded and experienced asset fixer-uppers... a really, really, really, likely first cause, of a whole group of these is missing deliminators.

  • In plain ENGLISH, are you missing a '"', or '}' character somewhere?
Hint: Search for the first tag named in the error messages (there is often a LONG list... perhaps every other word of some part of the file) and look above it for a missing something! Sometimes it's just an extra glyph, a stray (extra) double-quote mark (or curly-brace) are both common villains — or one 'end cap' (delimiter) is missing entirely. These are nesting errors, and every programmer in history makes a bunch of them on any given day... at least for a few minutes... no reason content creator's should be better than that!

Asset config.txt and texture.txt files are code as well, and syntax is not only expected to be exact, but enforced. We call them faults. In truth, they are human errors, almost always. Using a good programmer's editor like Notepad++ where you can toggle back and forth between quote-marks (F3 and SHFT+F3 gives search-down or search-up with one hand!) and the feature that highlights paired-braces, brackets and parenthesis really speeds up that sort of error hunting.

Real world example: (These were all seen whilst forgetting the inner '}' of an added thumbnails container!

  1. Error: The Tag 'author' is not permitted within a container of type 'thumbnails'.
  2. Error: The Tag 'organisation' is not permitted within a container of type 'thumbnails'.
  3. Error: The Tag 'contact-email' is not permitted within a container of type 'thumbnails'.
  4. Error: The Tag 'contact-website' is not permitted within a container of type 'thumbnails'.
  5. Error: The Tag 'license' is not permitted within a container of type 'thumbnails'.[note 4]

Part I


If the punctuation and syntax issues are not causing odd pairings of data as CM tries to make sense of those unbalanced delimiters, these errors will then ('usually') directly caused by formerly useful but now illegal tags containing values defined elsewhere, or as lines to be interpreted as documentation or information... formerly legal comments (see below) that are now supposed to be deleted, or put into the descriptions container.   Alternatively, if quoted strings, they can be left as tag quoted string pairs but moved into a string-table container. Sometimes the reverse is true, a 'future tag' is brought back to an earlier version of Trainz with a lower than sourced trainz-build (technology level!) value.   The third case is the opposite of the second, but only because in each case something is out of its proper time and place (and TBV level). That is the same quotes might appear if an advanced data tag is brought into an earlier tech-level check for faults. Easy to see. Reduce the trainz-build tag value by at least 0.5, and watch the error messages change. One thing seen often if you have to edit a built-in asset is the fact they were archived during production with globally altered TBV's, so when opened tags there for years will suddenly show up as illegal. Fun! Ha! Reduce the TBV to 2.3--2.5 and make sure it has a mesh_table, and thumbnail container and most older assets convert fine up through TANE's V4.2 updates.

Understand that Trainz data should always be considered to be a tag (keyword) and a paired Value (data). This is even true of Trainz's containers data types, wherefore the outer braces define the boundaries of the value, as it were. Similarly, when viewed as an array of values, saved in a string like category-era, category-keyword, and category-region, even multiple valued objects to us humans can be interpreted as a single paired value... just values which are expected by the software to contain multiple-sub-values, so to speak. In the end, it all depends on how the computer unpacks and utilizes the data. Paired terms, even compound one's assigned a enumerated keyword which is unambiguous and can't be confused for something else is a pretty safe way to build collected organized data that has to operate and be interpreted on the fly very quickly as a 70 mph train moves through the back streets of a city![note 5]

'Seemingly Contrarily', retrograding an asset to an earlier trainz-build tag value directly changes the error checking, so may also give such a message. Of course you could actually be taking an asset to an earlier version of Trainz as some of us do, which will up the odds considerably that you will see a 'New Tag or Container name' referenced in such a message. The two following were individually generated by taking a 'New Model'[note 6] track asset to TBV 2.9 from an original V3.5 or V3.6:

  • Error: The Tag 'follows-spline-gradient' is not permitted within a container of type 'track'.[note 7]
  • Error: The Tag 'attached-splines' is not permitted within a container of type 'track'. In actual fact, the attached-splines container is a aggregate value 'sub-type' or modifier extending the modeling software into another sub-routine to interpret its values. It is much like the kind SceneryWithTrack's track container ('attached-track container') in containing directives allowing two 'kinds' to blend characteristics, allowing industries, grade crossings and such assets like docks their capabilities.
  • All of the tags in the container that may appear in such error messages are:
  • lateral-offset, use-same-direction, spline-kuid <...>, visual-only, follows-spline-gradient, start-gap, and end gap}, which except for the referenced kuid, are all boolean valued parameters which default to 0 (False).

  The bottom line on these error messages is the software capabilities and trainz-build levels are probably out of synch. TBV values identify when certain capabilities have been added to the pallet of kinds and containers. Referencing such tags in earlier versions will cause such messages.  

The following actual error messages: are quite often duplicated 'as a group' in a ton-a-bunch of paintshed tagged reskin cars using the alias tag to reference an external mesh.

  • This group originates in the looser data definitions and handling prevalent until the TS09 release and it's stricter error testing[note 8]. Before that, any line-beginning token beginning with an alphabetical glyph that might legally evaluate as a possible keyword)(e.g. height-below, width-of-interior, etc.) could be paired with a quoted string, and were just ignored if the token was not a keyword. Also, if the line had begun with a punctuation character (';' and '/' are common), the following line up to the end-of-line code was treated as a single value, and in both such cases, also just ignored by Trainz. The keyword 'REM', from the BASIC language whilst never official was widely used to prefix entire blocks of quote-enclosed text paragraphs. Hence until TS09, CC's (Author's) could embed alternative values for their own testing, or to allow users to customize the config file to an entirely different appearance using the same meshes—or embed instructions in applying the asset, which if scripted, almost always needs something like that.
  • The "(Container type 'traincar')" message may or may not evince, depending upon the version of Content Manager parsing the config and validating the content's errors. These example fault messages are from a TS2009-SP2's CM-2.0 validation test:


  1. Error: The tag 'capacity:' is not permitted within this container. (Container type 'traincar')
  2. Error: The tag 'height:' is not permitted within this container. (Container type 'traincar')
  3. Error: The tag 'length:' is not permitted within this container. (Container type 'traincar')
  4. Error: The tag 'weight:' is not permitted within this container. (Container type 'traincar')
  5. Error: The tag 'wheelbase:' is not permitted within this container. (Container type 'traincar')
  6. Error: The tag 'width:' is not permitted within this container. (Container type 'traincar')

General Fix is to identify the start of the problem, Search (SAR or FIND, usu. CTRL+F in most editors, F3 to repeat searching downwards) for double-quotes ( " ) and either replace with single quotes, space, or nothing. Once the last error message line has been passed, Select, and drag to highlight the lot using CTRL-X to Cut the errant text, with the intent to move the now defanged lines into the description container. Paste the moving Cut-buffer (lines) low down inside the description double-quotes, copy edit, Save, and retest.

An alternative fix method using the string-table container preserves the history of the legacy method, provided the Trainz-build is above V2.3 —this involves simply relocating all the offending obsolescent tags together on successive lines, adding the tag string-table and it's curly braces '{' and '}'. This works because string-table is a legal container in every valid 'Kinds'

Editor's note:  
  • Staying inside the config file when validating errors is a good practice!
  1. Use CTRL+S (in most editors) to save the changes, then ALT+Tab ↹ and/or ⇧ Shift+ALT+Tab ↹ to resume the Content Manager Window as the in focus application.
  • Note: This won't work for all the CM versions starting with TR06's CMP through TS10's/TS2009-SP3's CM 2.0. Using these older CM's you must Submit the asset into the database (CTRL+M ) to re-test it (validate) and regenerate a new list of error messages (faults)— hopefully none! Release software versions from V3.2 (TS10-SP2) and up, including both TS09 & TS10's SP4 (both TBV 3.3) will behave and parse errors with the files still open for edit, as we recommend as more efficient, use the old reliable ALT-Tab ↹ to toggle between 'Active Windows'.
  1. RMBh+drag to View Errors and Warnings and retest the asset.
  • Often other faults will show up once certain others (normally path fixups) are fixed.
  • Note: Path fixups are by far the most common repair need for older (pre-v2.6) assets because prior to trainz-build v2.9 all the versions properly could locate asset components in the original data model folders based on asset-filename tag's assigned value, along with suffixes such as '_art', '_body', and '_shadow'. N3V's programmers discarded the small snippet of coding which made those predictable links automatically from v2.9 (TS2009-SP0) and up — forcing use of explicit paths and containers in even simple assets. Most commonly needed are thumbnails, mesh-table and bogeys container; creating a host of computer handler code created faults among other preventable fault generation messages.
  • It is strongly recommended, should you be fixing faults requiring adding these containers, you also increase the trainz-build to v2.6 and eliminate all warnings at that TBv as well. Such fixes have worked in TS12 without exception.

Part II

This mysterious message, common and often seen in older content, is not because of '?' (?, searching for '?' won't find such!) but because of the underscores (___) left behind by GMAX or another utility antedating TRS2004 (which content does not show this problem) which created the page.
"Error: The tag 'image' in '0' must have an image file extension." Another easy to fix error. The screenshot above gave it twice, but also illustrates the placeholder parameter (dummy tags or dummy keyword can be just about anything.
Try and remember that when you start creating your own assets. Not all names are equal, unless they are placeholders.

Case I:

  • 'Error: The Tag '?' is not permitted within a container of type 'engine'.'
  • 'Error: The Tag '?' is not permitted within a container of type 'bogey'.'


This mysterious message, often seen in older content, is not because of '?' (? and searching for '?' won't find anything in the config.txt file!). The error caused by gmax legacy artifact characters usually on the config's second line—unprintable characters (represented by underscores (___) in most text editors) inserted by prior processing of the file, left alone by the author (and ignored by earlier versions of Trainz)

Fix: Refer to the text of the image at right: this is likely two unprintable characters on line#2, which should just be deleted.  

case II: For example, it may be a simple spelling mistake:

  • 'Error: The Tag 'discription' is not permitted within a container of type... '

so correct the spelling to 'description'.

Asset definitions are not programming, but they are code, and spelling or other deviations from expectations are likely to generate error messages, as in this case.


case III, tags no longer in the specification:

  • 'Error: The Tag 'origin' is not permitted within this container.'


The tag was correct in an older build but is not permitted for the current build.

The Fix: Delete the line. (Consult the list of obsolete Config tags documented here in the Wikibook. These are the most common cases (scenery and trackside objects have had many changes: other containers, KINDs, and sub-containers have had a smaller number of data model changes since V2.8 (Trainz Classics 3).  

Part III

This case is the converse of the above: New tags not found in older versions!

The error is a result of inconsistencies in the validation rules issued with the different versions of Trainz.

For example:

Error: The Tag 'engine-sound-ramp-up-durations' is not permitted within a container of type 'enginesound'.
Error: The Tag 'engine-sound-ramp-down-durations' is not permitted within a container of type 'enginesound'.

These error messages occur in each of TS09, TS10 and TS12 when imported. The key to this one is to read the fine print, and examine the history of the reference page.

  • These are both new tags and parameters, formerly fulfilled by a one-size-fits-all default implementation, but the 'user Auran' (One Trainz ID is "-25", whose carelessness has done a number of problem causing upgrades to assets for N3V's TS09-TS12 release.) did not update the trainz-build (letting, in 'this case', the TB default to v1.3!) while adding the inappropriate keywords (Tags) to an asset missing in the built-ins in releases TS09—TS12 inclusive.
  • The error accordingly occurs in each because of no trainz-build tag!


  • The config for TS12 was fixed by adding trainz-build 3.6
  • The config for TS09 & TS10 was fixed by adding trainz-build 2.3 and moving the two tag lines (An array parameter containing comma delimited floating point values) into the description data... in effect deleting the lines.


Part IV


The sub-container is incorrectly identified.

Some subcontainers require a type identification, and the type indicates which tags are valid. An example is the Effects subcontainer in the Mesh Table. The type for an effects subcontainer is defined by the 'kind' tag, and can be 'animation', 'attachment', 'corona', 'name' or 'texture-replacement'. If the wrong kind is used, or if the kind tag is missing from the subcontainer, then tags that would otherwise be valid in the subcontainer can be marked as 'not permitted'. This error often creates a string of additional error messages for the subcontainer. The fix is to ensure that the correct kind has been specified, and that the tags used in the subcontainer are appropriate for that kind.

A similar example is the smoke container - the type for a smoke container is defined by the value of the 'mode' tag, and that tag value determines what other tags are required or are valid for that container.

Error: The tag 'image' in '<subcontainer name>' must have an image file extension.

real examples
Error: The tag 'image' in '1' must have an image file extension.
Error: The tag 'image' in 'c' must have an image file extension.
  • For some containers, the image tag must have a value that can be resolved to an image file without using a texture.txt file to provide the reference. The expected image file may be a texture file or it might be an image file with the extension bmp, tga or jpg. If it's a texture file the texture should be converted to an image and tag updated.

This error might be caused by a simple spelling mistake or a missing filename. Or, the value might be a reference to texture.txt file instead of the image file itself (whether the image is required, or a texture.txt file is acceptable, depends on the container in which the tag appears).

BAD     image   "filepathspec\filename.texture.txt"
OK      image   "filepathspec\filename.texture"
GOOD    image   "filepathspec\filename.tga"

Note that this error may occur in conjunction with other errors concerning a failure to find or load the image file.  

Error: Failed to commit changes to asset <kuid value> due to file access error

Failed to commit changes to asset <kuid:-25:6> due to file access error

The most likely reason for this error is that Trainz is open and the asset that is being edited is 'in-use' in the route. Most assets used in a route are loaded once when the route is loaded. These assets can be edited while the game is running. But some assets, such as some scripted assets, sounds and regions, are accessed repeatedly from the database. These assets cannot be edited while they are 'in-use' in a route in the game. Close Trainz and repeat the save.

This error might also be caused by a slower machine or too little memory combined with a large download. On the occasion where this was seen half a dozen times, the computer was a 10 year old laptop dual core and the six messages showed the assets open for edit. Each successfully validated and committed manually subsequent to viewing the download list in the CM main view.

A Solution:

Close other applications or stop any CPU- or memory-intensive activities and try again. If the problem occurs with a number of assets and cannot be cleared then the database may be corrupted.


Error: Filename '<filename>' contains illegal characters

  • Example: Error: Filename '$hirsch-tga_converted (512^2).jpg' contains illegal characters
Remove the offending hat-character by editing both the reference and the filename— this character is not permitted in file names. Note that the filename may be flagged as invalid for Trainz even though it is valid for your operating system - this is because Trainz is designed to run on multiple platforms.

Error: Tag '<tag-name>' in the container '<kind>' is obsolete.

These three faults Frequently found together
these messages occur after assets are upgraded to V2.9 and above (TS09 Trainz and versions after).
  • Error: Tag 'region' in the container 'scenery' is obsolete.
  • Error: Tag 'type' in the container 'scenery' is obsolete.
  • Error: Tag 'asset-filename' in the container 'scenery' is obsolete.

If a trainz-build tag is under V2.9 then these three deprecated tags present a Warning instead. The asset can be brought into compliance by deleting the tag from config.txt.

Error: Could not commit <'asset_username'>. The asset was not open for edit. You may need to open it for edit first


A rare message that can occur when CM gets confused about what is or is not being edited. Possibly caused by having multiple copies of CM open, or manually moving the edit folder or subfolders.

Error: Unable to read config file for asset at <location>

[[Trainz/Unable to read config file for asset at <location>|Unable to read config file for asset at <location>]]

The config.txt file could not be found or could not be read.

1. This may indicate that the asset is corrupted, or that it does not exist at the location where it was expected. This can happen if the asset is deleted but the cache has not been updated. The asset should be restored from a backup source, or reverted.

2. The error can be caused by missing critical information in the config. file. For instance, if the 'kuid' tag is not found then this error message will be reported, even though the actual error should be 'Invalid config file'. Check that all required tags are included and spelled correctly.

Error: This asset has a trainz-build number which is not recognized by this tool

The version or 'build number' of the asset is included for every Trainz item as a mandatory entry as the trainz-build tag in the asset's config.txt file.
Editor's note: Assets without a trainz-build code value default to v1.3, the last Trainz which had none. It is also quite defensible to think of Trainz UTC as the fourth Service Pack completing the design goals of the original Trainz 1.0 release for the biggest changes from v1.3 to v1.5 is the UTC addition of the first ContentManager.exe (assigned v1.4 but very different from CMP and CM which replaced those discrete modules) plus added content, and the added value of the excellent UTC included *.doc MS Word (word processor) files. In game GUI changes and additions, like between TRS04—TRS06 were minimal.
It is a curious fact that every Trainz release which includes a major change in the Trainz data model has taken about 4 service packs to set it up as a stable release. UTC as the 4th, SP4 for TRS2004, SP4 for TS09 and TS10 (co-developed). TANE with 64 bit computer architecture and lack of advance data model information from N3V Games - could go the same way.

This error occurs when you import an asset with a trainz-build tag's value which is higher than the build number (data model supported, or tech level) supported by the Trainz version.

As a mandatory data field, the trainz-build number defines to the game the technical standard to which the asset has been created. It also defines the standard to which Content Manager will validate the asset when undertaking validation and add operations to the local data base. This enables the game to validate the asset to the appropriate technical standard, and to insert defaults or ignore features as required. It is the secret which maintains Trainz compatibility version to version, and is the reason that (for example) Trainz 1.3 assets are still usable in new routes and session content.

Generally, it is possible to downgrade an asset to work in an earlier version of Trainz by adjusting the build number, but there are limitations. Scripting is one area that changes significantly between builds, and can cause problems if the build number is degraded. So adjusting an asset from (say) 3.3 to 2.9 may require removing or disabling the scripting. Also, there are some inconsistencies in the technical standards between build levels. For instance, build 3.5 allows single values for the Distance tag in the Soundscript container (as was standard prior to 2.9), but build 3.3 requires that both values are included. These changes are usually easy to adjust in the asset.

Meshes, Textures, kuid references and other similar basic elements of the asset will usually work properly in all builds back to 2.9. The required adjustments become more extensive for builds prior to 2.9.

Key Point: Hence, when this message is generated, the CM is saying it doesn't know how to validate the asset's components, that it has no knowledge of the standard.
  • Only spline based assets now modeled by kind track, map and session assets, and those assets containing script requirements requiring script capabilities not in the previous version prevent retrograding an asset to N3V era data models (TS09 and up). Most assets will work fine by simply changing the trainz-build to that of the CM or an earlier one, and perhaps compensating (TS09—TS12's to TRS's need texture file line deletions so they can use default modes for things TS09 and up allow finer control over in their improved graphics processes.) for any minor command changes in texture.txt files.

Error: Invalid position data. LoadE2MeshObject> <mesh file name>: Chunk:n invalid


There may be a technical error in the mesh. Or, TANE may have been stupid when importing a cdp[note 9] file.

  • Technically it's supposed to mean:... One or more of the vertex coordinates is not a number, or is more than 5 km from the origin of the model.
  • When a real error, this condition cannot be fixed without access to the mesh source files, then you must contact the asset's author. The problem must be referred back to the content creator.
  • The chunk number provides an indication of the portion of the mesh where the error has occurred.
  • This error occurs in TANE with some assets that use a very large mesh, even if the mesh itself is valid. TANE cannot cope with mesh sizes that were acceptable in TS12.
  • Generally, opening the asset for edit in TS09TS12 using PEVtool images2TGA.bat and copying the mesh from the older Trainz '..\editing\assetname' subfolder into TANE's edit folder has been effective in getting around TANE's false-positives giving this error message.

Error: Unable to load mesh file: '<mesh filename>'


The mesh file could not be loaded. Perhaps it is misspelled in config.txt, perhaps it is missing, perhaps it is the wrong format, or perhaps it is corrupted and unreadable.

Often Related, the newer Trainz versions may report that the anim file cannot be found. This happens often with assets that have embedded tracks that were created as kind mocrossing, for example some dock assets or early non-industry stations with attached tracks. In this case, including any anim.kin file will suppress the error without affecting the asset.

Steps to fix these
  1. Run PM2IM and see if there is an IM file generated, or Pevs Tool generates a similar error.
    This can be done from the Trainz Content Manager using the RMBh menu to launch open using PM2IM or by installing a copy of PM2IM.BAT in the \editing folder and dragging and dropping the folder of interest onto the bat file.
    1. If the latter, ask on the forum for advice and assistance.
    2. If the former, hand edit the mesh path to be correct as follows.
  2. First, Make sure you also check and update the file extension to .IM!
  3. If an IM file has been generated by the same name, check the folder/pathspec entry in the asset's mesh-table container and verify both the PATH (many older assets had a 'asset-name'+'_body' sub-folder, the convention until mid-TRS2006 versions, so likely in any v1.3-v2.4 asset), AND the filenamespec (including EXTENSION) are correct.
    1. In such older assets, where the pathspec is correct, there is likely no mesh-table installed. Adding one (at least after v2.0) will (unsurprisingly, as it's a TRS2004 introduced standard) be accepted by all Trainz since and is often demanded by the poorer parsing in N3V's TS09-TS12 releases.
    2. Most will be in a subfolder suffixed by '_body'.
      Useful timesaver tip: When in the ..\editing\asset-folder use one click on the sub-folder and then the key sequence F2+CTRL-A+CTRL-C, (then ESC) to capture the exact syntax of the sub-folder name (and not change anything).
    3. Then paste that in as the mesh-table path front end: "subfolder-name_captured\mesh_filename.IM".
    4. Example mesh-table boilerplate (adjust pathspec and filenames to match your folders contents):
mesh-table {
  default {
    mesh               ""
    auto-create        1
  shadow {
    mesh               ""
  default {
    mesh               "Subfoldername_body\"
New Trainzer's take note!:
Note that in older assets having a asset-filename tag, the edit folder and the 'Subfoldername_suffix's' are determined by the tag, which is usually lowercase and will also usually contain underscores rather than spaces.


Error: Attachment point 'numeric_name' in 'container-name' was not found.


Error: Attachment point 18 (a.passoff) in 'queues\passengers_off_0\attachment-points' was not found. Error: Attachment point 61 (a.passoff112) in 'queues\passengers_on_1\attachment-points' was not found.

There are several possible causes for this error

  1. The attachment point name is wrong, so the mesh and container listing the data point mismatch.
  2. The attachment point name has been listed with one or more additional trailng spaces.
  3. The attachment point is missing, so again the mesh and container listing the datum mismatch.

Interpretation of 'Numeric-name': The nineteenth attachment point named '18' in the mesh referenced by the queues container in the sub-container passengers_off_0 is missing. ('18' is a placeholder parameter reference—A NUMBER acting as a NAME or TAG... and could be renamed as 'xyz', 'glops' or anything without spaces, so long as it occurs on the 19th line of the container (data table).)

By convention, sub-elements in Trainz are normally given number placeholders, but in most cases any entry interpretable as a string will work.
 • As placeholder parameters, the numbers are interpreted as strings, without weight or value, just like a tag name.
 • The important thing is something be inside the {...} pair, the inside lines of which each also expects keywords (or placeholders) paired with values, as is universally true in Trainz.
 • Consider that the contents of paired { ... } braces is paired with a preceding kind or container name.
Error: Attachment point 'numeric_name' in 'container-name' was not found
 • These are manufactured errors (by adding 3 lines of false data to the container), after fixing the first error message.
 • BOTH instances give the same error message syntax... one missing correct name, the others missing the attachment points.
There are three possible common fixes...
  1. An attachment point might be added to the platform using the PEVsoft tool Attachment Maker with the name 'a.passoff_##', if it is truly missing. (This is a fairly common case in older 'passenger product' assets.)
  2. However, on the basis of the name "a.passoff", the line likely has a missing numeric suffix—nobody wastes time giving a generic attachment point on a train platform (of which there may be hundreds) a fancy name—such are usually numerically suffixed; so the message is probably issued because the container name is missing its numeric suffix, and since the placeholder sequence is:
    00  → a.passoff01,
    01  → a.passoff02,
    02  → a.passoff03, ...
    so at the entry ##-1   → a.passoff##X, add the correct suffix '##+1',
    thus in the given example adding 19 to the line of the #18 placeholder should fix the problem.
  3. If failing the rename, the line can just be deleted. If so, the 'size' tag number in the product queues container should be decremented to properly initialize the size of the array and conserve run-time memory.
People, that is passengers are 'products' the way Trainz processes passenger industry related assets such as passenger coaches and station platforms.

Error: Attachment point '<attachment point name>' in '<effect name>' must be found in mesh '<mesh name>'.


An attachment point is referred to in config.txt but it does not exist in the default mesh <mesh name>. This can often happen when a config.txt has been copied from another asset, and the attachment deleted from the mesh. For instance, a crossing gate has had a lamp attachment removed from the mesh, but the corona effect for the lamp still refers to the missing attachment point.

Example (with associated companion error):

Error: Attachment point 'a.lite121' in '133' must be found in mesh ''.
Error: The attachment point 'a.lite121' must belong to the parent mesh of the effect (mesh=malt.IM).

The error can also occur due to a misnaming of the attachment point (sometimes due to a trailing space in the name).

The effects container is typically a series of similar items that make up the model and need some form of separate processing. Examples are windows in a building that are 'back lighted', lamps on a train vehicle, passengers on a platform and trees in a 'tree group'. These effects require an attachment point on a parent mesh in order to locate the effect in the model.

Solution: If the problem is a typo then correct the naming of the attachment point in the effects container. If the correct attachment point cannot be found, or if the effect is no longer relevant to the asset, then delete the container

Notice the "fix" documented as follows:
kind                                    "scenery"
category-class                          "BC"
description                             "Large Grain Conglomerate, so I have built it in sections for easier
placement. located in Vancouver, by the BNSF yard.

Rev-A by Fabartus -- 2014-0508 Repaired these 'lights' faults by removing the #133 container to below:
Error: Attachment point 'a.lite121' in '133' must be found in mesh ''.
Error: The attachment point 'a.lite121' must belong to the parent mesh of the effect (mesh=malt.IM).
Removed/Deleted lines:
        kind                            'corona'
        att                             'a.lite121'
        texture-kuid                    <kuid:-3:10111>
        object-size                     0.21

Error: The attachment point '<attachment point name>' must belong to the parent mesh of the effect <mesh name>.


This often occurs in conjunction with the previous message. Not only was the attachment point not found in the mesh, it was not found in the parent mesh to which the effect is attached. It occurs for the same reasons as the previous message.

Error: Container '<container-name>' does not have an 'att-parent' tag which is required to reference an attachment point.


The container (subcontainer) will be in the mesh-table. The message indicates that the container is missing a required att-parent tag to indicate the parent mesh that the mesh referenced in the container is attached to. This occurs when the parent mesh is aliased - in this case CM requires the parent mesh to be explicitly nominated.

  • Look in the config.txt file of the aliased mesh to determine the relationship between meshes and add the 'att-parent' tag and the parent mesh name into the mesh container.

Error: The texture file <filename.texture.txt> contains non-ANSI characters. Textures must be ANSI.


Example:' Error: The texture file 'engine_black.texture.txt' contains non-ANSI characters. Textures must be ANSI.

Texture names should contain only ANSI characters. This rule has not been rigorously applied in the past, so it is possible that some assets downloaded from the DLS have non-ANSI characters in texture filenames. These will cause a problem if the asset is subsequently edited. An example of a non-ANSI character is À or è. It is also possible that the filename has a non-displaying invisible character.

1. Check the texture names in the mesh, using AssetX. Make sure the texture file name exactly matches the texture name from the mesh.

2. If the texture name in the mesh includes the non-ANSI character(s) then the mesh needs to be edited using a binary file editor, for instance changing è to e. Then adjust the texture filename to match. Usually, the same change will be required in the texture.txt file content and the image filename.

Error: The *.texture.txt file is missing for texture resource '<texture name>'.


A texture name used in a mesh file cannot be found, or could not be loaded. A valid texture.txt file should be created with a suitable associated image file. It is possible to search the user data folder for a texture of the same name, which might or might not be suitable for the asset. It is also possible to create a new texture.txt file and an arbitrary image - this might reveal what the image needs to be, or it might reveal that the texture doesn't matter and any image will serve to get rid of the error.

If the missing file is a 'digit_xx.texture' then any image can be used to remove the error. These files are not actually used because they are substituted with the selected digit image as part of the running number creation.

Note that this error can occur if the mesh uses a texture name with a non-ANSI character. In that case the texture.txt file (and probably its associated image file) may have been deleted at some stage of the importing process due to an invalid filename. In this case the texture name in the mesh will need to be edited to remove the non-ANSI character before replacing the texture.txt file and (perhaps) the image file.

Error: The texture '<image filename>' failed to load


Example: Error: The texture 'column1.bmp' failed to load.

There was a failure in loading the named image file as an image. The file may be corrupted, in which case it must be replaced with a valid image file. It might not be in the correct format. For instance, it might be compressed TGA: Load it into your favourite image editing program and save as uncompressed TGA. It might be sized incorrectly - images used in a mesh must have a height and width that are a power of two (that is, 2n where n is an integer) pixels. If the image is used as the primary image file and also as the alpha channel file then it must have an alpha channel: Load it into your favourite image editing program and save as uncompressed TGA at 32 bits-per-pixel.

(If MS Paint or other graphics application can load the file, then size is the most likely cause. Resize the image so that both width and height are a power of two (eg, 8x8, 16x16, 32x128, 256x64).)

Error: Unable to load alpha 'texture filename' for texture file 'filespec.texture.txt'.

Error: Unable to load alpha texture 'subfoldername/alphamaskfile.bmp' for texture file 'subfoldername/alphamaskfile.texture.txt'.


Error: Unable to load alpha texture 'night/licht1.bmp' for texture file 'night/white-licht1.texture.txt'.
Error: Unable to load alpha texture 'night/lichta.bmp' for texture file 'night/white-lichta.texture.txt'.
The original early Trainz asset did not require the tight definitions of today's assets and may not have used more than one AlphaMask for the three different .tga files mimicking light sources.
i.e. PEVTools may have created the texture.txt files correctly to the newer standard, and an alternative and simpler fix to that given below would be to just use the one .bmp file for all three by changing the newly generated texture.txt file entries.
(That 'fix' would take the fun out of experimenting though! Using 3 gives added customization ability! -ed.)
It is important to understand that prior to V2.7, TRS2004 and TRS2005 had no explicit allowable lines for AlphaMask mode changes. Every thing was a default mode. These were added later to extend the facility, so this pair of messages gives some insights into evolution of data in that era.
It may be TRS2004 assets and earlier didn't even use texture.txt files, being based on the older folders with suffixes organization. (Suspicion, ed.)Ø

  1. The above error pair of messages occurred in a v1.3 yard tower-style floodlight asset, where only one of three greyscale .bmp files were used to alter the dimness and characteristics of each light on the tower, giving them individuality and a bit of uniqueness. Arrayed beside other spotlights in the yard light tower asset, the three differing shadow masks would realistically duplicate actual attributes of individual lights in the prototype.
  2. The general fix, when a graphic file is missing entirely is to replace the file with something that will do the job.
    1. In the above case only one of three AlphaMasks were present, so that was copied, and altered to duplicate the desired individuality and satisfy the 'texture.txt' include files. (See image above and right)
  3. Other faults of this type are often because earlier Trainz would read the folder(s) contents entirely, and indiscriminately index each file and put it in a memory block—this enabled a reference to the .bmp or other supporting file anywhere in the asset folder hierarchy (including those in the asset root above).
    1. But the older method sometimes ran the risk of creating subtle problems if the content item used the same filename with differing data.
    2. The newer Trainz do not find things the same way, relying on an specified pathspec and the texture.txt files are used to make sure a correct pathspec/filenamespec is explicitly specified. When the subfolder or asset root folder had a file specified in a filename.texture.txt file. This creates the spinoff error effect... files easily found in Trainz 1.3--TRS2006 suddenly were pathspec disconnected breaking assets.

Error: Unable to load image file '<image filename>' for texture '<texture filename>' while validating mesh '<mesh filename>'

Note this and the following error (unable to load Primary Texture) often occur together.

The image referred to in the texture.txt file could not be loaded. It might be missing, the name might be misspelled in the texture.txt file, the image file might be the wrong format (for instance, compressed TGA), the image sizes might not be a power of two (where required) or the image file might be corrupted.  

Editor's note: It is also quite possible that the image file is not really missing, but the texture.txt file exists, and is not required. That is it's an extra texture.txt and/or texture. There is a scattering of assets on the DLS that have this fault reported in post-TS2009 versions.
  1. Use PEV's Mesh Viewer in one Window in Show Textures mode and compare against the folder contents (sort by name) in ..\editing\asset_folder or sub-folder. If the texture name in the error message is not in the mesh or sub-folder, that is the problem. It is not needed.
    1. As a check, change the file extension to which will then be ignored and legal.
    2. Re-validate and if the fault message goes away, the file can be deleted.
  2. Advanced alternative: Check the required lists of textures in the mesh using AssetX[note 10][1] - if the texture name is not listed for the mesh then the texture.txt file can be removed and the error will disappear.[note 11]

  Example: Error: Unable to load image file 'shadow.bmp' for texture 'shadow' while validating mesh ''

  • Solution: Shadow meshes do not require any image files. However, many shadow meshes have been created with a default image (often, black) and in some cases may have been created with several images. Recreate the shadow mesh from the existing shadow mesh using PEVs QuickShadows utility and delete images (texture.txt and image files) used by the original shadow mesh (after checking that they are not required by other meshes). Meshes created with the QuickShadows utility do not need any images.

For meshes that aren't shadows, see the following item.

Error: Unable to load primary texture '<image filename>' for texture file '<texture filename>'.

Note this and the preceding error (Unable to load image file) often (if not always will) occur together...

The primary image referred to in the texture.txt file could not be loaded. It might be missing, the name might be misspelled in the texture.txt file, the image file might be the wrong format (for instance, compressed TGA) or the image file might be corrupted.

example-1: Error: Unable to load primary texture 'shadow.bmp' for texture file 'shadow.texture.txt'.

  • Solution: Used a shadow.bmp archived in folder textures library built while fixing assets.
  • Alternative. Could have taken a black.tga, or made a new dark tga file of 4x4, 8x8, or 16x16 to serve as this shade.

  example-2: Error: Unable to load primary texture 'greyhound_stop_1_nightwindows/bussstatin1.tga' for texture file 'greyhound_stop_1_nightwindows/bussstatin1.texture.txt'.

  • Solution: Key was focusing on the key words "primary texure" ('/bussstatin1.tga'), BUT... the file was in the root of the asset folder and needed to be copied down, whereas the night mode texture.txt file was in the '..\greyhound_stop_1_nightwindows' folder below the root. It was with a 'greyhound_stop_1_nightwindows.tga' and 'greyhound_stop_1_nightwindows.bmp'which was in fact an AlphaMask image for the illuminated windows and signs.

  example-3: Error: Texture 'billboardnight/white flat.texture' is missing or could not be loaded for mesh 'billboardnight\'.

  • The fault in this case of a DLS v2.4 billboard asset (<kuid:262137:10118>) was the perfectly valid TGA file had RLE compression 'ON' (click box option in many graphics applications). TS09 and up won't tolerate pre-compressed TGA files (Trainz since do their own compressions while committing assets, PEV's Images2TGA extracts these.)
  • Solution: Use freeware GIMP, or another image processing graphics editor which gives you control over RLE compression and use 'Save As' mode to write over the asset.
(When in doubt, Save As to another name (add a suffix '-B', etc.) then alter the texture.txt file to safe the original file.
Alternatively, copy the file in Windows, then adjust it—allowing skipping the change to the texture.txt file.
Note, once acceptable, N3V's Trainz (v2.7 and up) releases (at least from TS09 and up) will likely flag the extra texture.tga as a new and different error... which by the changed message will let you know you can now delete the safety file.
Editor's note: New users may not be aware you can be daring... CTRL+R (or by menu drop down) will revert a botched repair to as if it has never been made, including closing the edit folder and deleting the botched fix contents. Hence, while safing a file like the above is good practice and retains control in your hands, messing up is not the end of the world.

Error: Image file '<image filename>' is incorrectly used as both a texture.txt source file and a raw image file.


The asset includes a texture.txt file that refers to an image file, but that image file is referred to directly from a tag in config.txt.

  • This often applies to kind groundtexture assets where the texture is also used as the thumbnail. The thumbnail reference is to the image file, but the texture tag refers to the texture.txt file.
  • This fault report also occurs where the 'normal-texture tag' has been added to the config, and the image file has been referenced directly from the tag instead of through the texture.txt file.
  • The problem also occurs when a texture.txt and image file combination is used when only an image file is allowed, for example with the 'icon-texture' tag in a product.

All references to image files other than thumbnails and some specific tags should be through the texture.txt file. Since more than one tag can refer to the same texture.txt file, the simplest fix is to change the tag value from the image file to the texture.txt file. For thumbnails, the reference can be direct rather than through a texture.txt file, provided that the thumbnail image is not used for any other purpose. If the problem is that a texture.txt file used where it is not allowed, change the tag reference to the image file and delete the texture.txt file.

Note: Many built-in assets do not display a thumbnail image in the asset details pane. This is because the asset uses a direct reference to a JPG image as the thumbnail. Assets sourced from a JA file will be missing images that are not referenced from a texture.txt file, because these images are not included in the JA. This is not relevant for users, who cannot create JA files.

There is extensive discussion of how to use texture.txt and image files in the cited footnote here.

Error: Binary conversion failed for texture resource '<texture filename>'.


The image referred to in the texture.txt file could not be processed for some reason. See previous.

Error: The primary and alpha texture are not the same size for 'texture.txt file'


When image formats other than TGA (such as BMP) are used and transparency is required, then two images must be supplied - the opaque image and the transparency mask. These two images are referred to as Primary and Alpha in the texture.txt file. In this case the two images must be the same size.

The error is reported if:

  • Two separate images are used, and the images are not the same size.
  • Two separate images are requred, but only one image can be loaded.

The problem can be fixed by

  • 1- If two separate images are provided and they are not the same size, resize one or other of the images so that they are both the same size.
    Editor's note: Freeware IrfanView and both make resizing simple, GIMP is a bit more complicated. Most graphics software applications will have the ability to resize the image.

  • 2- If two separate images are provided then this error may also be caused by a 32 bit TGA or 32 bit BMP. When two separate images are provided, they should be 24 bit format.
  • 3- If a transparency image is required (for instance, if the texture.txt file includes the tag 'AlphaHint=masked') then an 'Alpha' file must also be specified. This can be a separate file, but the simplest configuration is to add an alpha channel to an existing TGA file by changing the file format from 24-bit to 32-bit. The TGA file name is then listed in both the 'Primary' and 'Alpha' tags of the texture.txt file.
The error, accompanied by a fault message stating an inability to load a texture file might also occur when the texture file is compressed. This happens frequently with GIMP, where the option to save as compressed/uncompressed, 24-/32-bit is hidden in the options menu of the Save As mode dialog. For Paint.Net users the options are displayed as part of the Save As dialog page. (For Irfanview there is no options page for TGA files - the default format is 32-bit uncompressed).

Option 1 might be simpler for repairing some assets, but a 32-bit TGA file is by far the better alternative.

Example Problems & Solutions

Example case-1

Error shows up as being in an art subfolder:

Error: Unable to load alpha texture 'gondola4axlebn521555ant_art/gondola4axlebn521555ant_512.tga' for texture file 'gondola4axlebn521555ant_art/gondola4axlebn521555ant_art_512.texture.txt'.

Error: The primary and alpha texture are not the same size for 'gondola4axlebn521555ant_art/gondola4axlebn521555ant_art_512.texture.txt'

The texture.txt file for the asset is:

Alpha  =Gondola4axleBN521555ant_512.tga

This is a simple typing mistake in the file. Change it to:

Alpha  =Gondola4axleBN521555ant_art_512.tga

(The hint is not required. Changing the order of the lines doesn't matter but makes it easier to check the typing). The error was actually due to the fact that the alpha (transparency mask) file could not be found.

Note: Fixing the 'Unable to load..." error also removed "..not the same size" error as well.
Editor's note: Fixing problems or warnings in the art file folder of traincar assets is a simple procedure that helps ensure that the asset will continue to be valid through later versions of Trainz.
  • The 512x512 art file is no longer used, so the texture.txt file and the image file can be deleted, and the matching thumbnails table entry removed.
  • It is possible to use the 512x512 image as the 240x180 thumbnail by referencing the controlling texture.txt file, but still specifying the height and width as 180 and 240 respectively in the thumbnails container tag. However this will create a distorted image. The preferred procedure is to edit the 512x512 image in an image editor and save it as a JPG of the correct size.
  • The 128x64 icon art file is still used in lists (such as the list of traincars in Railyard, or the surveyor 'Traincars' tab lists). It is optional, and another image of a similar size will be scaled to fit, but the result is usually unacceptable. The image should be a profile view with minimal perspective and transparent background, with the traincar in the top half of the image.
  • For the 512x512 image (if used) and the 128x64 image the texture.txt file should be used (but note that AssetX will not do this - the config.txt must be edited manually). The thumbnails table entry should refer directly to the image file only for the DLS thumbnail (240x180) as strongly stated in September of 2014 by N3V Games Versions Manager James Moody. In the email cited at length in the footnote, J. Moody strongly encouraged the use of the texture.txt files[1] for all image formatted files, including the *.jpg 240x180 thumbnail screenshots. James Moody no long works for N3V.
Example case-2
Error: The primary and alpha texture are not the same size for 'kansascitysouthernsd40-2_body/reflectstrip1f-window-dark.texture.txt'

In this case use the image resize option in AssetX (or any image editing program such as Irfanview or GIMP) to adjust the image sizes in pixels so that they match in both height and width, and each dimension is an integer power of 2 (4,8, 16, 32 etc).

Error: No thumbnail image found for the asset <asset kuid>.

  • 1- The thumbnails container is missing or is empty. Add the container with a suitable thumbnail.
  • 2- The image file is in a subfolder and the folder path is wrongly formatted. For images referenced in a thumbnails container the pathname must be formatted using '/' as a separator, not the more usual '\'. For instance:
   image "Litchfield & Madison CT100_art/preview.jpg"

Error: The running number font directory '_alpha_numbers' could not be found.

  • 1- The traincar does not support running numbers, but the 'fonts' tag has a value greater than zero. Delete the 'fonts' tag, or set the value for the 'fonts' tag to zero.
  • 2- The traincar does support fonts, but the 'fontspath' tag is missing or null. Create the 'fontspath' tag and insert the correct value. The correct value is the folder name where the fonts are located, up to but not including the text "_alpha_numbers". For instance, if the fonts are in the folder "sd40-2_alpha_numbers" then the value for the fontspath tag is "sd40-2".
Editor's note: Note this partial pathspec specification is very atypical, and most pathspecs need be fully specified in Trainz config.txt contexts or within texture.txt files.

Error: The Tag '<tag name>' is not permitted within a container of type '<kind>'.


"Error: The Tag 'thumbnail' is not permitted within a container of type 'scenery'."

The tag is not recognized as valid for this type of container, the kind scenery.

  1. The tag might be a comment: earlier versions of CM ignored comments (which could be formulated in several ways[note 12] the earliest Trainz versions simply ignored invalid keywords making many constructs comments in effect. If it is simply a comment then it can be deleted.
     • Tags that are used by scripts often took advantage of the fact that The TRS's era versions simply ignored invalid tags—a processing practice which should have been continued for it took a task computers do in an eyeblink and put time demands on the many thousands of users 'Fixing assets' broken by programmer fiat!—which is why this page became necessary!
     • For instance tags used by some scripts to provide a running number range (starting and ending legal values) were often included as top-level tags in the config file. These 'custom tags' are no longer allowed as top-level tags - they must be moved to the 'extensions' container, and the script code must be modified to find them at their new location in the config soup. Or, the values can be removed from the config file and hard-coded into the script file - the details depend on the script.
  2. It might be misspelled, in which case it can be changed to the correct spelling.
  3. It might be a tag that was meaningful and useful for the container at a different build number, but is not valid for the current build number of the asset.

Assets with faults of the exact example below are likely already updated —so, as with any asset that needs fixing, check the DLS to see if there is an updated version with a fix than can just be downloaded.

  Clash between versions Examples [note 13]:

  1. Error: The Tag 'engine-sound-ramp-down-durations' is not permitted within a container of type 'enginesound'.
  2. Error: The Tag 'engine-sound-ramp-down-durations' is not permitted within a container of type 'enginesound'.[2]

In this case,... These two errors represent a Content Creator's well intended consistency with Trainz 0.9—TC3 broken by the programmer's installing fault tests in TS09 and TS10... That is, in the above two errors, both much hyphenated computerese are keywords originally in Trainz, then added during the workup or debugging of version 2.9 to those unneeded for the projected solution of Trainz several sound processing issues, then belatedly MADE MANDATORY again in version 3.4, and up!

  • Note these two errors shown above are representative of the kinds of error messages that occur when one imports or downloads a valid older era TBV engine spec to TS09-TS10, or 'back-dates' the reported TBV (TB v3.4-v3.6 or above) of a newer or updated engine asset's config file[note 14]
Solution: - Don't delete the lines just move them into the description field to document the need for them in later TBV releases and as a reminder to yourself— many such assets with these errors will give the opposite 'Required values missing' errors in TB's above v3.4 wherein N3V's programmers began making more and more data elements mandatory[note 15] with the work-over of the Trainz data models and code system for the Trainz Mac and Trainz Mac2 releases). It may also be possible to eliminate the error by changing the build number to a version in which the tag is supported. However, since that will increase or decrease the TB value, it could introduce other errors or warnings that need to be fixed, though in this case, that is very unlikely as kind engine is a very stable data type. The error was the programmer's typical arrogance.[3]
This cloned kind map asset, is missing the HTML file of the original asset.

Error: Missing or invalid selection for tag '<tag name>' in '<asset kind>'.


The value of the tag does not match one of the allowed values for this tag. For instance:

Error: Missing or invalid selection for tag 'nightmode' in 'traincar'.

For this case, the tag 'nightmode' has allowed values of "home", "lamp", "constant" or "none". Many other tags have a similar list of allowed values. If the tag value is not one of the allowed values then this error will be reported.

Error: The tag 'tag name' in '<container name>' points to a nonexistent file: '<filename>'.


This error occurs when a tag references a file and the file cannot be found.

For instance, named subcontainers in the thumbnails container have an 'image' tag that can point to a texture.txt file or to an image file. If the image file is not found - perhaps the name is misspelled, or the file is missing - this message will be logged. Similarly, the 'info-page' in a 'maps' container should point to a .htm file. If the file cannot be found the error will be logged.

Error: Incorrect number of values for the tag '<tag name>', expected <x> values, found <y>


Where a tag requires a list of values, there may be a required minimum or maximum number of entries in the list. If the correct number of entries is not provided, this error will be logged.

These fault messages are characteristic of cross-loading (importing a ..\local folder's contents into a newer version's CM) older content into TS2009 and TS2010 in particular, for the 2nd value is often optional and easy to default and that is the treatment it was given in earlier Trainz and after an earful by the Trainz community, N3V returned to in TS2012 — though the N3V Wiki mentions them as required after the TB 3.4 version. Since that is true, the minor effort to fix them means they'll likely import without troubles into later Trainz Releases.

  • General approach: Add or remove entries from the tag list as required by consulting first with the N3V Wiki for the references missing value(s). Note the container (quick Cat links) could also be a KIND (quick Cat links).

Error: Incorrect number of values for the tag 'repeat-delay', expected 2 values, found 1

Case One—repeat-delay tag paired values in sound-script containers
common in older sound effects assets (kind scenery or miscellaneous) because early Trainz versions were programmed to be smart enough to default the second value.
Actual example—an asset with three distinct sound effects

Slugsmasher's trainz-build V2-4 — SS Log Dump Diesel, <kuid2:86661:144048:2>, in upgrading to V3-7, errors from V2-9-SP2 (TS2009-SP2 messages). Remarkably, TS12 did not report the same errors, having given 0 errors and 0 warnings before importing to V3.1, though the N3V Wiki documentation says the tag is compulsory above TB V3-4.

Error: Incorrect number of values for the tag 'repeat-delay', expected 2 values, found 1.
Error: Incorrect number of values for the tag 'repeat-delay', expected 2 values, found 1.
Error: Incorrect number of values for the tag 'repeat-delay', expected 2 values, found 1.
  • Fix: Consulting repeat-delay container — the paired values are a range, if different, the difference is a range of a random value added to the first value before the sound is repeated again. Defaults are 1,1. The 3rd container is a engine, so made the values 0,0. The others logdump as 2,3 (so 1 second randomness for operator actions) and 'logdrop' 2,2 (constant delay, they only fall so far) taking the original offending single value, and adjusting accordingly.

Error: Incorrect number of values for the tag 'trackoffsets', expected 2 values, found 1

Case Two—something of a dogs-breakfast (Mess)
Error: Incorrect number of values for the tag 'trackoffsets', expected 2 values, found 1.

Category class "TB" (as of TS2009) controls both graphics rendering and also CM validation for track spline. (This effect on validation and rendering is in the history of all the Trainz data models, an oddity, the keyword (tag) value—which historically been exclusively used within CM for sorting—and was purposed mainly to convey human to human classification communication without impact on software,is now used for defining many spline sub-types of kind track.) However there is an inconsistency in the validation for TS2009 and TS2010 which allows only 2 values for offsets and directions, regardless of the number of tracks. TS12 requires the correct number of items for both lists.

Bridge asset category-class "TB" requires the trackoffsets tag, which specifies the distance that the tracks are from the centerline of the spline. The tag value is a CSL list of [note 16] decimal numbers in meters, but all bridge types (Road,[4] single tracked bridges,[5] or double track,[6] and even tunnels,[7] each with a unique KIND declaration before TS2009) in TS09 and TS10 have a coding error interpreting all bridges as double tracked in the CM validation process and always require at least two values. This accompanies a similar change in splines defining them as Track KIND sub-types and all rail Track assets as well.

  • The correct means of updating an older asset given this error message depends on which ContentManager version is reading the config file. Content Manager 2.0 through Content Manager 3.3 will incorrectly give this fault, and this is how to adjust for it. Such corrections need readjusted moving the asset to TS12 (TB V3.4 and above).
     • If to correct fault the tag is deleted in a track asset, the asset will not have any 'bridgetrack
     • The number of items in the list (and also the number of values in the list for the tag trackdirections) must match the number of tracks in the spline in bridges of TS12 and the previous Trainz to TS09.
     • For updates to single track or single spline road bridges with CMs validating errors to these versions, use two very small offsets such as trackoffsets -0.001,0.001.[note 17]
When updating or adapting an bridge asset... For build values 2.9 to 3.4 make sure there are two entries in the lists. Examples are -0.01,4.99 (5m separation) or 2.5,-2.5. These assets will have two tracks in TS12. For build values over 3.5 and higher, as in earlier KINDS of the TRS and Trainz series data models, make the number of items in the lists equal to the number of tracks, and the expected number of tracks will display.


Error: The Decimal tag '<tag name>' in container '<container name>' is not a valid Decimal value


Example: Error: The Decimal tag 'object-size' in container '14' is not a valid Decimal value.

The tag value is not a valid decimal number. For instance, a value of '0,05' has been entered instead of '0.05'. Edit the tag value so that it is a valid decimal number.

Error: Unable to load animation file '<animation file name>' (no resource).


The animation file was not found in the asset.

  • This error is common with kind mocrossing where there is no animation in the mesh. For instance, the crossing may have flashing lights and no boom or gates, or the asset may be kind mocrossing because it needs the events raised by an approaching train for some purpose other than animation. CM demands that the animation file exists for an asset that is kind mocrossing even though it is not referenced in config.txt. In this case any valid anim.kin file can be added to the asset to eliminate the error. It is possible to search for a suitable file in userdata - all that is needed is a valid .kin file to satisfy CM.

If the mesh supports animation and there is no animation file, then fixing it will be difficult. If the asset is part of a series of similar crossings then the anim.kin file from another asset in the series might work - this should be thoroughly tested. If the mesh is animated and the correct anim file is not available it may still be possible to substitute a different file with the worst case result being that the animation does not occur. There is no way to create the correct animation file from the mesh information. If substituting an animation file, be sure to test it with a Loco on the tracks, bringing it from far to nearer and nearer. If the anim does not trigger, the asset is at least usable. If it does trigger then you can decide whether or not the effect is acceptable before deciding to repair the asset further.

Error: Required container '<container name>' is missing.


This can also be a warning in some cases, even though it says 'required'. It indicates that the asset type requires a particular container but that container has not been included in the cofig.txt file. The fix for this depends on the container (some containers can be easily created, some can't) and the asset type.

Error: The kuid '<kuid>' specified in '<container>' is not of the correct type.


When a kuid is required within a container it must be a kuid of the type that is appropriate for that container.


Case 1, Queues container Example
Error: The kuid '<kuid:-3:10044>' specified in 'product-kuid' is not of the correct type.


When message is:'Error: The kuid '<kuid:-3:10044>' specified in 'product-kuid' is not of the correct type.'

In this case a product category has been specified in the allowed-products container when a product was expected.

The error has probably occurred because some assets that appear to be products are not products at all, but are actually KIND product categories. Product categories are used to classify groups of products as a particular type. Categories can be used to limit the range of products that are listed as available for adding to the asset. These kuids are not valid values for tags where a product is required, but are often mistakenly found there.

A similar error occurs if a product is used within the allowed-categories container.   The four standard product categories are:

 Bulk Load,<kuid:-3:10040>
 Liquid Load,<kuid:-3:10044>


Two easy Fixes
  1. If the container is a product container, replace the invalid product category with an appropriate product. If the queue has a product-kuid tag, use that product.
  2. If the container is a product category container, replace the product with the product category that is appropriate for the traincar.

Error: The KUID tag is not a valid KUID value: '<KUID>'


The KUID is wrongly formatted. For instance: '<kui2:287205:15361>'. Confirm the KUID and correct the formatting.

This is a typical error that can occur with assets original created at build numbers less than about 2.9, as some non-critical KUID references were simply ignored if they were incorrect. It can also occur with assets that are scripted to replace textures. In this case the texture asset is provided by script, so the KUID could be left as any text, such as 'NULLKUID'. For these cases it is possible to insert the KUID of any generic texture asset - it is either not used in the model or will be replaced by the script. It has been reported that the tag with the missing KUID can simply be deleted, however this may be dependant on how the script uses this tag, and is not recommended.

Error: Failed to load sound file '<sound file name>', please ensure this is a valid wav file.


The sound file could not be loaded. Perhaps the file is missing - it may be possible to search for the file in user data and find it. It might be corrupted or in the wrong format. If the file has been left out of the asset because it's not actually needed, then any sound file will work, at least to get the asset installed so that the function of the sound file can be determined and a suitable replacement located. For historical reasons this error can also occur in assets that are upgraded from an earlier build number - the file exists and the config.txt file entry appears to match the filename, but the warning persists. In this case ensure that the file name in config.txt is enclosed in quote marks (") - trailing spaces or tabs can confuse CM when quotes are not used.

It may also be a "Bit Rate" fault. Check with program such as Audacity (Freeware), my experience was a sound file bit rate of 4400mhz, changed to 22050 to match existing working .wav file and problem resolved. AssetX V3 and later includes a Repair option that fixes some problems with sound files.

Error: Script class does not match asset kind (<kind>).


The asset script is attempting to use a class that is not appropriate for the asset type (kind). An extreme example is trying to use a Locomotive class for a scenery asset.

  • Note that errors associated with scripting are only fully identified when an asset is committed. It is therefore possible that the error disappears when other errors are fixed and the committing succeeds. If the problem associated with this error is not obvious then leave it until all other errors are fixed, commit the asset, and then confirm that it still occurs.

(This false reporting of errors when validating an asset that is open for repair is not unique to this problem. "View errors and warnings" is not reliable when used with an asset that is open for repair, and should not be relied on. In later versions of Trainz it does not work at all when the asset is open. Always commit the asset before re-checking for errors.)

Fixing this error and preserving the script functionality is beyond the scope of the present discussion.

Error: Multiple track stretches between '<attachment point>' and '<attachment point>' in container 'attached-track'


Error: Multiple track stretches between '<attachment point>' and '<attachment point>' in container 'attached-track'. Track stretches must be unique.

  • As of CM version 3.7 this is a DLS upload validation error only.

The attached track container includes one or more vertices sub-containers. The vertex pairs listed in the sub-containers represent connections between vertices. A pair of vertices can have only one connection. Edit the vertices subcontainer by removing one of the duplicated vertex pairs.

Error: The obsolete KUID <kuid> is not part of this assets obsolete history.


This error may no longer be in effect. See the following two items.

A problem has been detected with the obsolete history for the asset. However, the description in the error message is not correct. The problem is that the asset is obsoleting an item that is already in the asset's obsolete history. For instance, asset <kuid:12345:6789> might include an obsolete table -

   0                                     <kuid:12345:6000>

indicating that it obsoletes an older version. If the asset is then released in a new version it should only use the kuid <kuid2:12345:6789:1> to indicate that the previous version is now also obsoleted. That upgraded asset should not include the obsolete table from the previous version, as that would create a duplicate obsolete reference in the asset's obsolete history. (Obsolete tables are, however, required in other cases where the version increment method is not applicable.)

Editor's note:
Why the above error occurs...
The asset.tdx (data base index file) can only contain a single reference to an asset obsoleting the KUID, hence a double entry generates the error message. While CM will 'fill in the blanks' with an assumed sequence of KUID2'swhen a superseding KUID2 skips one or more version suffixes, so knows for example, to use a '<KUID...:4> to obsolete a KUID or <KUID...:1>; but each filled in number of the sequence holds only the next superseding kuid in the index. This makes sense when one considers the role of the obsolete-table as a replacement look-up table. An asset's kuid-table listing an older kuid is compared to the list, which points to its replacement. A computer can't substitute two things for one, hence the obsolete/replacement table in the assets.tdx indexing can only hold a single entry.
  • As of CM version 3.7 this is a DLS upload validation error only.

This error has also been observed where there was no apparent duplication of superseding assets, but there was a gap in the sequence:

  • <kuid:12345:67>
  • <kuid2:12345:67:2>
  • <kuid2:12345:67:3> - rejected with error

Error: The obsolete KUID <kuid> is already marked obsolete on the server by KUID <kuid>


As of build 3.5 this is a DLS upload error only.

Two assets should not obsolete the same asset, unless they are both part of the same revision history. This asset includes an obsolete table with an entry that includes an asset that is already obsoleted by some other asset, but the two assets are not part of the same version sequence. The obsolete table should be adjusted.

Note: This error has been observed when both assets were part of the same revision history. This incorrect validation may have been fixed: See 'The previously obsolete KUID <kuid> is missing from the new assets obsolete-table'.

For example:

<kuid:12345:66> exists on the DLS. An updated version <kuid:12345:67> is uploaded, which includes an obsolete table:

  0    <kuid:12345:66>

Asset <kuid:12345:67> is then upgraded to <kuid2:12345:67:1> and uploaded. If the obsolete table is left in this version, then asset <kuid:12345:66> is now obsoleted by both updates: that should be permitted, but there are cases where the upload was rejected. The solution is to remove the obsolete-table, and rely on the kuid version number to indicate the obsoleting.

This error message may be a replacement for 'The obsolete KUID <kuid> is not part of this assets obsolete history' error message. However, it appears that a change in the validation rules for the obsolete table means this error can no longer occur for the above scenario.

Error: The previously obsolete KUID <kuid> is missing from the new assets obsolete-table


As of build 3.5 this is a DLS upload error only.

If this asset obsoletes an asset with a different Content ID then that obsoleted asset must be included in this asset's obsolete table. The message is indicating that the DLS knows that this asset obsoletes an asset with a different Content ID, but that obsoleted asset is missing from the obsolete table. The DLS likely knows of the obsoleted asset because it was in the obsolete table of an asset that this asset obsoletes.

For instance, if asset <kuid:12345:67> has an obsolete table

  0    <kuid:12345:66>

then a later version, such as <kuid2:12345:67:2> must have an obsolete table of

  0    <kuid:12345:66>
  1    <kuid:12345:67>
  2    <kuid:12345:67:1>

In other words, the obsolete table for an asset must include the asset's full obsolete history.

Note that this error message appears to contradict the message 'Error: The obsolete KUID <kuid> is already marked obsolete on the server by KUID <kuid>' and therefore is a change in validation rules for obsolete tables.

Error: TADCompileAsset unable to determine asset KUID


The kuid used for the asset could not be resolved into a valid kuid. It might be incorrect format (eg, <kuid2:-1:110000:0>) or there might be an internal issue about conflicting kuid numbers. Check the kuid in config.txt and confirm that it is correct.  

Error: Unable to commit changes to asset <kuid:xxx:yyy> as the config file contains the wrong KUID


There is an inconsistency between the kuid recorded in the database for the asset and the kuid in the config.txt file.

When an asset is opened for editing the status of the asset is recorded in the database. When the asset is committed the asset is loaded back into the database from the edit folder and the status is updated. This error is emitted if the process of loading the asset back into the database detects that the asset kuid differs from what is recorded in the database.

If an asset kuid is to be changed then the asset must be loaded through the File / Import Content (up to TS12) or File / Import Content Folder (T:ANE) menu option, and the original asset should be reverted.

Error: CRC Mismatch on '<script>.gsl' after recompile. Do you have both .gs and .gse present?


Database repair error. The asset may show in CM with an error icon but no error message is available. Opening the asset for edit and then re-committing may clear the error.




Data Model Changes

Some obsoleted data model changes in the Trainz Classics

These faults and warnings were generated bringing a well established TB v2.6 Loco into the Classics:  

Tags obsoleted in the container 'steam' in Trainz Classics.
These tag-value pairs generate Errors in the indicated container
Error: The tag 'epbrakes' is not permitted within container type 'steam-engine'
Error: The tag 'max-fire-coal-mass' is not permitted within container type 'steam'



Explanations and elaborations
  1. To the tune of well over five-hundred seen this past weekend alone, written 6 May 2019
  2. This editor has been known to have five CM's and three surveyors kept busy at the one and same time whilst sharing bandwidth with skype and observing a shared desktop view from Indiana.
  3. In this work, we review four editors available as freeware: Notepad++, Programmer's Notepad, Crimson (formerly 'Ruby'), and ConTEXT. We decidedly do not use NOTEPAD for anything but temporarily saving a cut buffer or two of data. Of these, Only Notepad++ has all the search and replace (SAR) features needed to do all the types of editing one needs in Trainz.
  4. Note this list is generated as the thumbs container was added after the description block. Adding and having a missing 'something' (delimiter or close block character)' drastically can change the fault messages reported. The computer is merely saying Hey Dummy, Get it together in pairs!
  5. The tag 'rgb' with, to us humans, three values representing Red, Green, and Blue digits ranged 0-255 (hexadecimal 0-FF) are but stored as a single computer word (32 bits fits four such byte-values, which is how transparency 'Alpha-channels' are stored in image' pixels in a word of 32 bits in many common image file formats.) so maintains the keyword--Value pairing association when saved by the file reading sub-routines. Similarly, each container has its own processing subroutine, which knows which keywords are legal within, and may also do bounds testings (Floating point or integer or boolean logic values may all look the same in some cases, but the variable and storage method used in the kernel system are vastly different.
  6. Until TS2009's release in 2008, 'kinds for other than rail splines', roads, bridges, and tunnels were all separate kinds (See: Here indented under Track) from references but they were all combined with the addition of a number of tags to control or differentiate what was being rendered by graphics. After that, bridges, tunnels, and spline objects like fences, station platforms, power line (poles & wires), any asset with length in fact, all used the kind track classification and methodology.
  7. For the curious, the 'follows-spline-gradient' Boolean tag was added during a TS12 update in the Fall of 2012 to fix some applications of the attached-track container in TS12 as documented between this edit and the one a month later. Used in TS09 and TS10, the asset would work, but show a fault in CM. The track in question was an Auran bridgetrack: "Auran Track Bridge, <kuid:523:19721247>"
  8. This remains one of the stupidest decisions I've ever seen in a software department anywhere says Fabartus, who began coding back in the late '70s. Windwalkr and crew owe many man hours to each Trainzer for this boondoggle! FrankB 01:43, 14 April 2016 (UTC)
  9. This error: --was seen several times systematically copying North American Loco digital models from TS12-SP1 by cdp export, and importing into TANE-SP1 (build 80330) in January 2016. Opening these for edit, then moving the edit folder to TS12 where PEV's tools can be run on the folder using a local batch file
  10. AssetX has built-in Windows Help files, but can still be difficult to master if one is unfamiliar with Trainz behaviors and the evolutionary changes in the Trainz data model over the years. See also the forum thread: [AssetX] for more information.
  11. AssetX solutions on this page are welcome but secondary, for to operate AssetX properly, new Trainzer's must build asset knowledge to effectively use the program. Hence, PEVtool and manual edit methods are priorities, whereas running AssetX involves adding a whole extra level of knowledge that can just get in the way. Furthermore, upgrading assets is not necessary for most fixes, and AssetX is far more suitable to update assets to the particular needs of the trainz-build than just fixing an asset so it functions.
  12. Comment methods once tolerated in Trainz:
     • The 'Hack-Hack' comment, where the line begins '// ...',
     • The BASIC language & DOS OS batch file style comment-where a quoted string is prefixed by REM or rem) and
     • The Semicolon prefixed line-like the hack-hack comment, everything on line after such was ignored— another programming language 'styled' practice often seen in config.txt files.
  13. Trainz 2009 and Trainz 2010 were together transitional, the lower for the base data model, the later for module to module inter-connectivity, communications with the outside world, and better more up to date use of extant current computer technology such as better graphics cards and multi-core processing with transitional code harnessing some capabilities of newish 64-bit CPU and operating systems. The fourth and last service pack updates for TS09 and TS10 both have and share Trainz-build 3.3 as a result. They also share some of the same shortcomings, and the two tags here are dazzling examples of N3V's sometimes careless programming.
     • With the Trainz MAC projects requiring code porting to a different operating system, differences in the operating system required certain assumptions taken for granted in code for the IBM PC and other descendants of the MSDOS operating systems and the Intel X86 family of CPU chips be made explicit, and no longer be defaulted.
     • Other software evolutionary changes suggested certain parameters should also become explicitly defined to give the CC community different capabilities afforded by long requested features and options.
     • Both measures resulted in the N3V programmers requiring more and sometimes different explicit definitions of keywords, as is sometimes well documented in the N3V Wiki and sometimes discovered only because DLS uploading software filters now reject assets without such changes.
     • It should be noted, as the DLS upload vetting process was implemented, it also began to be updated to reflect the needs and demands of the next (forthcoming or future) Trainz release under development long before the release's content manager is available. Hence, uploading to the DLS sometimes uncovers new requirements due to the more stringent testing of the evolving data model.
  14. There exists a tension, two conflicting priorities... between a CC assigning the highest trainz-build value recognized by his installs CM or CCP versus uploading a updated asset with the least changes that will be useable by the most users because it has a lower TB number.
     • The lower the TB assigned, the more people that run older versions can use the asset without adjusting it in more cases.
     • The higher TB version numbers are now driven by managerial fiat vice technological needs. N3V Games amidst much controversy and considerable user push back pretty much hi-jacked the designed purpose of the trainz-build code and began forcing uploads of TB values divorced from actual technical specifications and needs in September 2014, or equivalently, in September 2010 when they announced and began enforcing the hated Trainz Life-Cycle Policy without first establishing a baseline of uniformly cleaned up content and a long period of enforcement of well understood standards.
     • This policy mismanagement has and continues to have two effects:
    A) People who may not have the monies to afford newer computers and software, and who are often on fixed incomes as elderly retirees having no interest in learning newer systems now have to abandon Trainz updating and have effectively become second class Planet Auran citizens. This is understandably seen as a breech of faith by those older persons who are used to buying a quality product and feel uncomfortable with the slapdash casual way poor quality products are released requiring constant updating—clear measures of poor products, poor professionalism in their programmers and a certain clear indication of the piss-poor ethics of the business' managers.
    B) and —a stable transitional version where many [if not most] enginespecs were evolved and have been mostly plateaued as the 'standard' enginespec ever since) in the asset; or should one try to retrograde such an asset to an earlier Trainz.
  15. Mandatory data elements even as late as January 2015 are not always clearly and unambiguously presented as such in the Trainz Wiki. The bottom line is if an install's Content Manager is saying a TB value requires such definitions, one must be defined, or the TB value reduced to one the CM will accept.
     • In either 'fix' case, the default value per the Trainz Wiki is likely to be the correct value to assign, but as always when fixing and modifying rolling stock or other dynamic assets, the repaired files should be tested in both surveyor and driver in as many applicable installs as is possible to be certain it is a viable general fix or to ascertain that it is only a TB-range limited fix.
     • New users are cautioned that sometimes the TC3 Content Creation Guide PEV put up as a Trainz Wiki appendix must be consulted to ferret out a correct default value... and as always: the community will appreciate any page and paragraph on the Trainz Wiki updated with such esoteric information when stumbled over thereby unselfishly illuminated for the greater good.
  16. See CCGTC 'Kind: Bridge Double Track' online source here and See CCGTC 'Kind: Bridge' (Single Track) online source here as well as CCG/Kind:_Track_(Road) and CCG/Kind:_Bridge_Tunnel.
  17. Why the value cannot take a zero value is unknown, but conjecture it is used as divisor in some calculations. In any event, non-zero very small numbers occur in older CCG's as required values. 'trackoffsets -0.001,0.001' were tested in TS10-SP2 versus single track and road elements after repairs and successfully coupled to the joining roadways.



  1. . In a series of private emails, and responses, objections, clarifications and reassertions involving about 6 members of Yesterdayz-Trainz and James Moody it was proposed that
    Email exchange giving arguments made by James Moody to always use texture.txt files Except for the DLS 240x180 thumbnail.
    Hi everyone :-) > Hi guys, you'll fnd the mindset on this 'INTERESTING' See this: > > when I expanded the thumbnails table on the Wiki, then one of the few > actual edits Moody made after one of my changes... indicating their > thinking was this .texture reference as a preference.
    N3V Games' version manager James Moody replys (truncated)
    My recommendation is to absolutely 100% definitely reference a .texture

    for anything that appears in-game in either driver or surveyor.

    If Trainz encounters something that it needs to render in-game that isn't a .texture, even if it's part of the UI, it has to hack it into one on the fly. This won't be as good a texture (or as fast to use) as if CM had done it in advance at commit time.

    The exception is obviously for stuff that's intended for the web (e.g. the DLS), where you will want something a web browser understands. That's why we use .jpg for the DLS thumbnail.

    For most assets, this is "just" a performance issue, causing a disk access (and consequently a brief stutter) every time the image is encountered. However, there's actually a more serious problem hidden here too.

    If an asset gets widely used, it is likely to turn up as part of the built-in content set in a future game version, or maybe as a dependency of a DLC content pack. These assets are distributed in a form that is stripped of source textures to reduce the size of the download. If you have a .texture.txt, and still reference the source image (e.g. .tga) directly, then this will be an outright fail in this case. It's not just slower, it literally doesn't work at all. (italics emphasis added) You get an empty box - either 100% black or 100% white depending on circumstances, because that file is literally missing.

    If you want to see this bug in action, go make a consist in TS12 (or TS2010 for that matter...) using built-in rolling stock. Most of it doesn't have consist preview icons -- precisely because the content has this bug.

    —James Moody, emails September 16, 2014 12:24 EDST (Boston) to five members of Yesterdayz-Trainz
  2. Spotted in TS10 with V2.8 asset config.txt including the header lines: kuid <kuid2:60238:53042:1> username "Green Goat GENSET Engine Sounds Startup" kind "enginesound" category-class "ZS" engine-sound-ramp-up-durations 0,2.396,2.317,2.267,2.701,2.626,2.374,2.175 engine-sound-ramp-down-durations 0,2.396,2.317,2.267,2.701,2.626,2.374,2.037 category-region "US" trainz-build 2.8 category-era "2000s;2010s"
  3. When asked on point about this on-again, off-again pair of 'TAG-array of floats' definition during the T:ANE workup period ca. October of 2014 by email from Fabartus, former N3V Version's Manager James Moody was surprised that the values then showing as mandatory in TBV 3.4 and up was an older spec! It's not clear to me, he wasn't just pulling my leg, or just didn't want to answer about such an embarrassing gaff, or was just being forthright! Fabartus, 2015-0917.
  4. See CCGTC 'Kind: Track_(Road)'
  5. CCGTC 'Kind: Bridge' (Single Track)
  6. See CCGTC 'Kind: Bridge Double Track'
  7. See CCGTC 'Kind: Bridge Tunnel'