<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.trainzsimulator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pcas1986</id>
	<title>TrainzOnline - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.trainzsimulator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pcas1986"/>
	<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/wiki/Special:Contributions/Pcas1986"/>
	<updated>2026-11-05T06:50:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Help:VE189&amp;diff=47503</id>
		<title>Help:VE189</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Help:VE189&amp;diff=47503"/>
		<updated>2026-09-05T03:36:36Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Added link to HowTo/Configure a spline for collsions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Collision data exceeds 64KB and has been simplified. Consider using a different generation method or a simplified mesh.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The asset contains complex geometry for which the selected (or default) collision geometry generation technique generated excessively complex results. This would increase memory usage and decrease performance, and as such is prevented by the game- a simplified collision geometry is used instead. This may be harmless, but it also may result in collision detection behaviour from differing from the creator&#039;s expectations. Either way, it costs unnecessary performance when installing or validating the asset, and emits undesirable warning messages.&lt;br /&gt;
&lt;br /&gt;
Resolving this message may involve one or more of:&lt;br /&gt;
&lt;br /&gt;
1. Lowering the amount of detail in the mesh in question. If this can be achieved without degrading the visual quality of the asset, then this is a win both from the perspective of removing the collision data problems, and also from the perspective of rendering performance. This approach is not recommended if visual detail needs to be sacrificed.&lt;br /&gt;
&lt;br /&gt;
2. Overriding the [[&amp;quot;mesh-table&amp;quot; container#collision-data-generation-mode|collision generation settings]] for the mesh-table entry in question to select a more efficient method. This is suitable in scenarios where a simplified collision data technique can be used on the mesh without compromising physical responses (such as PFX collisions) to any significant degree. This does not have any effect on the visuals.&lt;br /&gt;
&lt;br /&gt;
3. Using the [[&amp;quot;mesh-table&amp;quot; container#collision-mesh|collision-mesh tag]] to specify a separate lower-detail mesh to use for collision purposes. This approach offers the ultimate in manual control at the expense of having to maintain an additional mesh purely for collision purposes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Additional Help&#039;&#039;&#039;: See also this article about splines and collision data: [[HowTo/Configure a spline for collisions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Validation Errors]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=%22mesh-table%22_container&amp;diff=47502</id>
		<title>&quot;mesh-table&quot; container</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=%22mesh-table%22_container&amp;diff=47502"/>
		<updated>2026-09-05T03:32:33Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: /* collision-data-generation-mode */  Added link to HowTo/Configure a spline for collisions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ORP-top}}&lt;br /&gt;
==KIND Hierarchy==&lt;br /&gt;
The &amp;quot;mesh-table&amp;quot; container is a top-level [[config.txt file]] entry used by various [[Content_Configuration#Content_Types|Content Types]].&lt;br /&gt;
&lt;br /&gt;
The mesh-table is a list of mesh subcontainers with no standalone tags. Each mesh subcontainer uses the following format. Tags are parsed in a standardised format, but not all [[Content_Configuration#Content_Types|Content Types]] support the full range of tags listed below. Each mesh derives its name from the subcontainer&#039;s tag name. These names are used to refer to specific meshes from within the mesh-table and also from script.&lt;br /&gt;
&lt;br /&gt;
This page describes [[trainz-build]] 4.1.&lt;br /&gt;
&lt;br /&gt;
==Known Dependent Parent Types==&lt;br /&gt;
:&#039;&#039;Main article, see: [[KIND Mesh]]&#039;&#039;&lt;br /&gt;
The Content Types listed here use the mesh-table container as part of their definition.&lt;br /&gt;
&lt;br /&gt;
* [[KIND Industry]]&lt;br /&gt;
* [[KIND MOJunction]]&lt;br /&gt;
* [[KIND Pantograph]]&lt;br /&gt;
* [[KIND Scenery]]&lt;br /&gt;
* [[KIND Track]]&lt;br /&gt;
* [[KIND Traincar]]&lt;br /&gt;
&lt;br /&gt;
The following config containers also reference back to their Asset&#039;s mesh-table container in some fashion:&lt;br /&gt;
* [[&amp;quot;junction-vertices&amp;quot; container]]&lt;br /&gt;
* [[&amp;quot;track-lod-tree&amp;quot; container]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See also&#039;&#039;&#039;{{bullR}} [[Modeling Guidelines]] {{bull}} [[Modeling Scenery]] &lt;br /&gt;
&lt;br /&gt;
==Level of Detail (LOD)==&lt;br /&gt;
&lt;br /&gt;
For discussions of LOD see [[Level of Detail]], [[LOD Example]], [[mesh-table LOD]] and [[LM.txt file]]&lt;br /&gt;
&lt;br /&gt;
==Mesh subcontainer==&lt;br /&gt;
Each mesh subcontainer supports the following tags. Each tag is shown here with its default value. &lt;br /&gt;
&lt;br /&gt;
{| border=0&lt;br /&gt;
  |+ &lt;br /&gt;
|-&lt;br /&gt;
  | anim&lt;br /&gt;
  | &amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
  | animation-loop-speed&lt;br /&gt;
  | 0&lt;br /&gt;
|-&lt;br /&gt;
  | att&lt;br /&gt;
  | &amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
  | att-parent&lt;br /&gt;
  | &amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
  | auto-create&lt;br /&gt;
  | 0&lt;br /&gt;
|-&lt;br /&gt;
  | collision-data-generation-mode&lt;br /&gt;
  | &amp;quot;default&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
 | collision-mesh&lt;br /&gt;
 | &amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
  | critical-animation&lt;br /&gt;
  | 1&lt;br /&gt;
|-&lt;br /&gt;
  | does-cast-shadows&lt;br /&gt;
  | 1&lt;br /&gt;
|-&lt;br /&gt;
  | effects&lt;br /&gt;
  | {&lt;br /&gt;
|-&lt;br /&gt;
  | }&lt;br /&gt;
|-&lt;br /&gt;
  | lod-level&lt;br /&gt;
  | 255&lt;br /&gt;
|-&lt;br /&gt;
  | mesh&lt;br /&gt;
  | &amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
  | mesh-asset&lt;br /&gt;
  | &amp;lt;NULLKUID&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
  | mesh-scale&lt;br /&gt;
  | 0,0,0&lt;br /&gt;
|-&lt;br /&gt;
  | mesh-season&lt;br /&gt;
  | 255&lt;br /&gt;
|-&lt;br /&gt;
  | night-mesh-base&lt;br /&gt;
  | &amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
  | opacity&lt;br /&gt;
  | 1.0&lt;br /&gt;
|-&lt;br /&gt;
  | orientation&lt;br /&gt;
  | 0,0,0&lt;br /&gt;
|-&lt;br /&gt;
  | position&lt;br /&gt;
  | 0,0,0&lt;br /&gt;
|-&lt;br /&gt;
  | should-respond-to-clicks&lt;br /&gt;
  | 1&lt;br /&gt;
|-&lt;br /&gt;
  | use-parent-bounds&lt;br /&gt;
  | 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;*&amp;lt;/big&amp;gt; The att-parent defaults to &amp;quot;default&amp;quot; which is the parent mesh.  The att-parent tag can include a path.&lt;br /&gt;
&lt;br /&gt;
==Supported Tags==&lt;br /&gt;
Each mesh subcontainer supports the following tags. &lt;br /&gt;
&lt;br /&gt;
===anim===&lt;br /&gt;
:Type:       File&lt;br /&gt;
:Default:    &amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc:       The animation file (.kin) exported from the 3D modelling tool and/or [[Trainz_Mesh_Importer|TrainzMeshImporter]]. This may include a sub-path.&lt;br /&gt;
&lt;br /&gt;
===animation-loop-speed===&lt;br /&gt;
:Type: Float&lt;br /&gt;
:Default: 0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: This tag must be present if the asset is to animate when placed. If this tag is not present when placed the animation will not play by default, but may play if controlled by script. A different value (e.g. 0.5, 2.0) may be used in the tag to play the animation at a different speed from that created in the 3D modelling tool.&lt;br /&gt;
&lt;br /&gt;
===att===&lt;br /&gt;
:Type: Attachment point&lt;br /&gt;
:Default: &amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: The mesh (and animation if present) is inserted at a mesh attachment point rather than the origin (without this line the mesh is placed relative to the origin of the parent model).&lt;br /&gt;
&lt;br /&gt;
===att-parent===&lt;br /&gt;
:Type: Mesh name&lt;br /&gt;
:Default: Defaults to &amp;quot;default&amp;quot; which is the parent mesh&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: The tag tells Trainz in which mesh the attachment point is located. The insertion attachment point is located within the mesh ‘name’ , as listed in the config.txt.&lt;br /&gt;
&lt;br /&gt;
===auto-create===&lt;br /&gt;
:Type: Bool&lt;br /&gt;
:Default: 0&lt;br /&gt;
:Compulsory No&lt;br /&gt;
:Desc: The model is generated automatically when placed, or when you load a map which includes the model. In some instances you don’t want the mesh visible (as this may be controlled through script). If auto-create is 0 the mesh will not be visible when placed.&lt;br /&gt;
&lt;br /&gt;
===collision-data-generation-mode===&lt;br /&gt;
:Type: Collision mode&lt;br /&gt;
:Default: &amp;quot;default&amp;quot;&lt;br /&gt;
:Compulsory No&lt;br /&gt;
:Desc: Determines the method to use to generate collision data for this mesh. Collision data is used to select and move the asset in surveyor, and for physics simulation when necessary.&lt;br /&gt;
:Supported collision data generation modes:&lt;br /&gt;
:* &amp;quot;default&amp;quot; - use game&#039;s default value (in general &amp;quot;collated&amp;quot;, but can vary in specific cases)&lt;br /&gt;
:* &amp;quot;disabled&amp;quot; - completely discard this sub-mesh for collision data generation purposes. Causes the sub-mesh to be fully ignored for asset picking and physics simulation.&lt;br /&gt;
:* &amp;quot;collated&amp;quot; - the geometry of this sub-mesh will be added to that of the other sub-meshes selecting this option (within the asset), and one collision object will be generated for the resulting conglomerate.&lt;br /&gt;
:* &amp;quot;separate-shape-convex-hull&amp;quot; - this sub-mesh will generate its own individual collision object, as a convex hull.&lt;br /&gt;
:* &amp;quot;separate-shape-triangle-mesh&amp;quot; - this sub-mesh will generate its own individual collision object, as a triangle mesh. This is the most accurate option but also the most costly in terms of performance, only use when specifically needed.&lt;br /&gt;
&lt;br /&gt;
If you get the error &amp;quot;Failed to generate collision data&amp;quot;. This will be because one of your meshes must have collision in order for Trainz to generate the collision data from it. If your mesh isn&#039;t suitable for collision generation then look at using a collision mesh. See [[%22mesh-table%22_container#Mesh-Table_Example_.28with_collision.29|Mesh-Table Example (with collision)]] at the bottom of this page on how to do this. See also this article discussing splines and collision data. [[HowTo/Configure a spline for collisions]]&lt;br /&gt;
&lt;br /&gt;
===collision-mesh===&lt;br /&gt;
:Type: Mesh name&lt;br /&gt;
:Default: &amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory No&lt;br /&gt;
:Desc: Specifies a mesh to use instead of this mesh to generate collision data - must be an entry of this mesh-table. The method used to generate the collision data (through the &amp;quot;[[%22mesh-table%22_container#collision-data-generation-mode|collision-data-generation-mode]]&amp;quot; tag) is the one specified on this entry, which is allowed to be different from that of the referenced mesh.&lt;br /&gt;
&lt;br /&gt;
===critical-animation===&lt;br /&gt;
:Type: Bool&lt;br /&gt;
:Default: 1  (TBD: surely this should be false (0))&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: &amp;quot;critical-animation&amp;quot; indicates that this mesh&#039;s animation generates events which are critical to the script system&#039;s behavior. If your asset is not scripted, does not use scripted animation events, or only uses the events for display purposes and will not break if the occasional event is missed, this tag should be set to &#039;&#039;false (0)&#039;&#039;. Leaving this flag set to &#039;&#039;true (1)&#039;&#039; is a &#039;&#039;&#039;significant&#039;&#039;&#039; performance penalty.&lt;br /&gt;
&lt;br /&gt;
====custom-render-plugin====&lt;br /&gt;
:Type: [[KUID]]&lt;br /&gt;
:Default: &amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc:  TBD&lt;br /&gt;
&lt;br /&gt;
===does-cast-shadows===&lt;br /&gt;
:Type: Bool&lt;br /&gt;
:Default: 1&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: &amp;quot;does-cast-shadows&amp;quot; determines if this mesh will cast shadows when the user has shadows enabled in the settings. Setting this tag to &#039;&#039;false (0)&#039;&#039; means the mesh will not cast shadows. Setting this tag to &#039;&#039;true (1)&#039;&#039; means the mesh will cast shadows.&lt;br /&gt;
:Trainz build 4.4&lt;br /&gt;
&lt;br /&gt;
===effects===&lt;br /&gt;
:Type: [[Corona Effect]] | [[Name Effect]] | [[Attachment Effect]] | [[Animation Effect]] | [[Texture-Replacement Effect]]&lt;br /&gt;
:Default {}&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: The effects container can contain a list of effect subcontainers. The effect subcontainers support the following generic tags.&lt;br /&gt;
&lt;br /&gt;
: kind &amp;quot;&amp;quot;&lt;br /&gt;
: name &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:Each effect subcontainer supports additional tags depending on the effect kind. The following effect kinds are supported:&lt;br /&gt;
&lt;br /&gt;
:* [[Corona Effect]]&lt;br /&gt;
:* [[Name Effect]]&lt;br /&gt;
:* [[Attachment Effect]]&lt;br /&gt;
:* [[Animation Effect]]&lt;br /&gt;
:* [[Texture-Replacement Effect]]&lt;br /&gt;
&lt;br /&gt;
===lod-level===&lt;br /&gt;
:Type: Int (0-8)&lt;br /&gt;
:Default: 255&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: The [[mesh-table LOD]] level at which this mesh is displayed. The default value (255) indicates that this mesh is visible at all detail levels.  See also [[KIND Mesh]] for the &#039;mesh-detail-level&#039; tag.&lt;br /&gt;
&lt;br /&gt;
===mesh===&lt;br /&gt;
:Type: Mesh name&lt;br /&gt;
:Default: &amp;quot;&amp;quot; (will raise error if null)&lt;br /&gt;
:Compulsory: Yes (3.4)&lt;br /&gt;
:Desc: The ‘main’ mesh name. This may include a sub-path.  ie: mesh nightwindows/nightwindows.im, where the file nightwindows.im has been placed in the subdirectory nightwindows. Use .im files or reference an [[LM.txt_file]] file if you wish your asset to have ‘Level of Detail’ mesh reduction.&lt;br /&gt;
:The mesh name can also refer to an IM file or an [[LM.txt_file]] file in a mesh asset library if the mesh-asset tag is specified.  The LM.TXT file should be in the mesh asset library.&lt;br /&gt;
&lt;br /&gt;
===mesh-asset===&lt;br /&gt;
:Type: [[KUID]]&lt;br /&gt;
:Default: &amp;lt;NULLKUID&amp;gt;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: Specifies a mesh asset to be used in conjunction with the &#039;mesh&#039; tag when the mesh is not contained within the current asset. The mesh name specified in the &#039;mesh&#039; tag must be located in the mesh asset as Content Manager does not check for the existence of the mesh and will not report an error if it is missing.  If the mesh is not located in the root folder of the mesh asset then the mesh name in the &#039;mesh&#039; tag must include the path to the folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #ddf5eb;border-style: dotted; width:800px; overflow:auto; &amp;quot;&amp;gt;&lt;br /&gt;
NOTE: There may be several different versions of the mesh asset installed, with different meshes.  The mesh asset KUID number must be the version of the asset in which the mesh in the &#039;mesh&#039; tag exists. &lt;br /&gt;
&lt;br /&gt;
Example: If the mesh in the &#039;mesh&#039; tag was added in kuid2:12345:9876:2 and does not exist in earlier versions, then this is the kuid number you must specify in the mesh-asset tag; specifying an older revision number (ie kuid:12345:9876 or kuid2:12345:9876:1) will result in errors.  This applies even if the only change between versions is that the mesh is in a different folder.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===mesh-scale===&lt;br /&gt;
:Type: Floatlist&lt;br /&gt;
:Default: 1.0,1.0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: This tag defines a minimum and maximum scaling value for the mesh, where 1.0 is the size as modelled. Each instance of the mesh that exists in the world will randomise within this range. Randomisation will not change between runs or between Trainz editions, but may change based on factors such as the position of the mesh in the world. This tag is currently only supported on SpeedTree assets; attempts to use this tag on other assets results in undefined behaviour.&lt;br /&gt;
&lt;br /&gt;
===mesh-season===&lt;br /&gt;
:Type: Int (0-250)&lt;br /&gt;
:Default: 255&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: The season index for which this mesh is displayed. The default value (255) indicates that this mesh is visible in all seasons.  See also [[&amp;quot;Season-selector&amp;quot; container]].&lt;br /&gt;
&lt;br /&gt;
===night-mesh-base===&lt;br /&gt;
:Type: Mesh name &lt;br /&gt;
:Default: &amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: Defines this mesh as a &amp;quot;nightmode&amp;quot; mesh. This mesh is visible only at &amp;quot;night&amp;quot; (the exact meaning of which is defined by the [[KIND Scenery#nightmode|nightmode]] tag in the top level of this asset&#039;s [[config.txt file]]. This mesh becomes invisible if the specified base mesh is invisible. Prior to [[&amp;quot;Trainz-build&amp;quot; tag|v4.3]], nightmode meshes have a [[material emissive color]] (currently 2.0, 2.0, 2.0) forcibly applied to them. From v4.3 upward, it is expected that the creator will set any necessary emissive coloration in the [[IM files|mesh file]] itself.&lt;br /&gt;
&lt;br /&gt;
===opacity===&lt;br /&gt;
:Type: Float (0.0 - 1.0)(See below)&lt;br /&gt;
:Default: 1.0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: Specifies the overall transparency of the mesh. Values other than 0.0 or 1.0 employ alpha blending and a value of 0.0 has the same effect as hiding the mesh. Note that this tag is buggy in TS2009 prior to SP4.&lt;br /&gt;
&lt;br /&gt;
===orientation===&lt;br /&gt;
:Type: Floatlist (radians)&lt;br /&gt;
:Default: 0,0,0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: Orientation of X,Y,Z axes. Allows a submesh to be rotated relative to its insertion point.  To reverse a mesh by 180 degrees about the Z axis, add the tag: orientation 0,0,3.14159&lt;br /&gt;
&lt;br /&gt;
===position===&lt;br /&gt;
:Type: Floatlist (metres)&lt;br /&gt;
:Default: 0,0,0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: Position of the mesh using X,Y,Z axes relative to its insertion point.&lt;br /&gt;
&lt;br /&gt;
===radius===&lt;br /&gt;
:Type: Float &lt;br /&gt;
:Default: TBD&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: TBD (should this be in [[&amp;quot;mesh-table&amp;quot;_container_(interior_version)]]?)&lt;br /&gt;
&lt;br /&gt;
===should-respond-to-clicks===&lt;br /&gt;
:Type: Bool &lt;br /&gt;
:Default: True(1)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: If set to false (0) on a mesh that is part of an asset, it will remove that mesh from the calculation of the &#039;bounding box&#039; that will be used to check whether the user clicked on that particular asset.  This is useful for light ray effects or animations which are significantly outside the normal bounding volume, and may cause movement to focus on the wrong asset.  For instance, a traincar may need a mesh marked with should-respond-to-clicks set to false in order to ensure that the click is detected for the correct traincar when it is part of a consist. First introduced with TS12 SP1 HF4 (build 61388). Default value (True) is the prior behaviour (the mesh &#039;&#039;will&#039;&#039; be considered part of the bounding box for the purpose of registering clicks). &lt;br /&gt;
&lt;br /&gt;
===test-collisions===&lt;br /&gt;
:Type: Bool &lt;br /&gt;
:Default: TBD&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: TBD (should this be in [[&amp;quot;mesh-table&amp;quot;_container_(interior_version)]]?)&lt;br /&gt;
&lt;br /&gt;
===use-parent-bounds===&lt;br /&gt;
:Type: Bool &lt;br /&gt;
:Default: False(0)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc: When enabled, this tag indicates that render culling should occur using the whole object&#039;s bounding box rather than this mesh&#039;s bounding box. Bounding boxes on individual meshes may not update correctly when animation moves the object&#039;s geometry any significant distance from the bind position. This flag can help mitigate such effects, at a tiny performance penalty.&lt;br /&gt;
&lt;br /&gt;
==Mesh-Table Example==&lt;br /&gt;
The following is an example of a simple mesh-table which implements two levels of detail.&lt;br /&gt;
&lt;br /&gt;
 mesh-table&lt;br /&gt;
 {&lt;br /&gt;
   default-lod0&lt;br /&gt;
   {&lt;br /&gt;
     mesh &amp;quot;example-lod0.im&amp;quot;&lt;br /&gt;
     auto-create 1&lt;br /&gt;
     lod-level 0&lt;br /&gt;
   }&lt;br /&gt;
   default-lod1&lt;br /&gt;
   {&lt;br /&gt;
     mesh &amp;quot;example-lod1.im&amp;quot;&lt;br /&gt;
     auto-create 1&lt;br /&gt;
     lod-level 1&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Mesh-Table Example (with collision)==&lt;br /&gt;
The following is an example of a mesh table with a separate collision mesh. For this, we are using a low polygon collision mesh with no material (null.m.notex) in place of any collision the game would generate for us. It&#039;s important to put the collision-data-generation-mode to &amp;quot;disabled&amp;quot; for every other mesh that is not the collision mesh. Otherwise, the game will assume the mesh can be used for collision and create unwanted results.&lt;br /&gt;
&lt;br /&gt;
 mesh-table&lt;br /&gt;
 {&lt;br /&gt;
   default&lt;br /&gt;
   {&lt;br /&gt;
     mesh &amp;quot;example.lm&amp;quot;&lt;br /&gt;
     auto-create 1&lt;br /&gt;
     collision-data-generation-mode      &amp;quot;disabled&amp;quot;&lt;br /&gt;
     collision-mesh &amp;quot;collision&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   collision&lt;br /&gt;
   {&lt;br /&gt;
     mesh &amp;quot;collision.trainzmesh&amp;quot;&lt;br /&gt;
     collision-data-generation-mode      &amp;quot;separate-shape-triangle-mesh&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:Config Container|mesh-table container]]&lt;br /&gt;
{{ORP-bot|mesh-table container}}&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=TrainzScript_Message_Reference&amp;diff=47473</id>
		<title>TrainzScript Message Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=TrainzScript_Message_Reference&amp;diff=47473"/>
		<updated>2026-08-31T02:53:02Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Replaced example with one that works without obsolete functions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What are Messages and how can they be used?==&lt;br /&gt;
&lt;br /&gt;
Messages: &lt;br /&gt;
* Are internal communications between objects within Trainz.&lt;br /&gt;
* Are completely hidden from the normal user, who won&#039;t be aware of their existence.&lt;br /&gt;
* Provide notification of events within the Trainz script environment.&lt;br /&gt;
* Provide a means of opening direct communications between objects.&lt;br /&gt;
* Provide a means of sending instructions from one script to another.&lt;br /&gt;
* Provide a means of timing scripted actions.&lt;br /&gt;
&lt;br /&gt;
Messages are managed by the &#039;&#039;Router&#039;&#039;, a sort of internal post office, and can be exchanged between any objects which descend from &#039;&#039;[[GameObject]]&#039;&#039;, this includes driver commands, rules and libraries as well as almost all mesh based scriptable objects.&lt;br /&gt;
&lt;br /&gt;
Scripts can:&lt;br /&gt;
* Listen for messages and use them to take appropriate actions in response to events and instructions. &lt;br /&gt;
* Use the message to extract information about the object sending or receiving the message.&lt;br /&gt;
* Define and issue their own messages.&lt;br /&gt;
* Listen in to messages intended for other objects.&lt;br /&gt;
* Send messages to themselves, to arrive after a specified delay, as a &#039;reminder&#039; to do something at a future time. &lt;br /&gt;
&lt;br /&gt;
Messages are small data objects containing five pieces of information:&lt;br /&gt;
* &#039;&#039;msg.major&#039;&#039;: A string identifying the message type.&lt;br /&gt;
* &#039;&#039;msg.minor&#039;&#039;: A string containing the message subtype or additional information. &lt;br /&gt;
* &#039;&#039;msg.src&#039;&#039;: A reference to the object that sent the message.&lt;br /&gt;
* &#039;&#039;msg.dst&#039;&#039;: The intended recipient. May be null if the message was &#039;&#039;broadcast&#039;&#039; (legacy behavior, no longer supported).&lt;br /&gt;
* &#039;&#039;msg.paramSoup&#039;&#039;: A Soup object containing extra data about the message (may be null).&lt;br /&gt;
&lt;br /&gt;
==How to listen for Messages==&lt;br /&gt;
&lt;br /&gt;
There are three techniques you can use:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;[[GameObject#AddHandler|AddHandler()]]&#039;&#039; This is the simplest listening device and is most useful when you know that you will always be interested in this type of message. &#039;&#039;[[GameObject#AddHandler|AddHandler()]]&#039;&#039; is usually set up in the &#039;&#039;Init()&#039;&#039; method of a script. Hint: omit any optional spaces in statements that include an AddHandler function, as including them causes the function to be ignored without notification in TRS2004 and perhaps other versions as well.&lt;br /&gt;
* A &#039;&#039;[[TrainzScript Keywords#wait|wait()]]&#039;&#039; loop. This needs to run in a separate thread and allows for a temporary arrangement where you want to know about messages for a shorter period or under a specified set of conditions.&lt;br /&gt;
* &#039;&#039;[[GameObject#Sniff|Sniff()]]&#039;&#039;.  This allows you to &#039;eavesdrop&#039; on messages being sent to another object.&lt;br /&gt;
&lt;br /&gt;
==When and how to send Messages==&lt;br /&gt;
&lt;br /&gt;
You might consider issuing messages of your own under the following circumstances:&lt;br /&gt;
&lt;br /&gt;
* When an event has taken place in your script and other objects might need to know about it.&lt;br /&gt;
* When you want to make your object available to other scripts to allow them to call your methods directly.&lt;br /&gt;
* When you need to issue instructions to another object to carry out a particular task and you know that the target object will be able to understand your message.&lt;br /&gt;
* When you want your own script to take an action at some time in the future, or at regular intervals.&lt;br /&gt;
&lt;br /&gt;
There are three routines you can use to issue messages:&lt;br /&gt;
&lt;br /&gt;
* [[GameObject#SendMessage|SendMessage()]] dispatches the message immediately.  Do not use SendMessage() within a message handler and use PostMessage() instead.  A message handler is a static thread and using SendMessage() within a static thread will raise an exception.&lt;br /&gt;
* [[GameObject#PostMessage|PostMessage()]] dispatches the message via the Router with a specified delay (which can be zero). The message will be executed on the next Router update after the delay has elapsed.&lt;br /&gt;
* [[Class Router#PostMessage|Router.PostMessage()]] allows messages to be dispatched even if the object you are scripting doesn&#039;t have its own messaging capabilities.&lt;br /&gt;
&lt;br /&gt;
If the message destination is entered as &#039;&#039;me&#039;&#039; (meaning the current object) the message will be sent to the object which owns the script. If the destination is &#039;&#039;null&#039;&#039; the message will be &#039;&#039;broadcast&#039;&#039; and therefore available to any object in the session. Message broadcasting is obsolete as of TRS19 however, and may result in script exceptions or silent failures (depending on the local players compatibility setting).&lt;br /&gt;
&lt;br /&gt;
If you have a reference to the message target (or if you know its name or id) you should consider the following:&lt;br /&gt;
&lt;br /&gt;
* If you know which methods to use it might be more appropriate to call the other script directly.&lt;br /&gt;
* You should always avoid broadcasting messages if it is possible to send them directly to the intended recipient.&lt;br /&gt;
&lt;br /&gt;
==Never Assume Anything==&lt;br /&gt;
&lt;br /&gt;
The messaging system contains many traps for the unwary.  If you are working with a junction for instance you will receive an &#039;&#039;Object,Enter&#039;&#039; message whenever a train enters your object&#039;s trigger zone.  It is not safe however to assume that a subsequent &#039;&#039;Object,Leave&#039;&#039; means that the train has crossed the junction and left on the other side. Any of the following would also produce &#039;&#039;Object,Leave&#039;&#039;:&lt;br /&gt;
* The train might have stopped and reversed away from your object.&lt;br /&gt;
* An intervening junction might have been toggled so that the train is no longer visible to your object.&lt;br /&gt;
* The train might have coupled to another (and therefore ceased to exist) before reaching your object.&lt;br /&gt;
It is usually necessary to treat a message as an indication that the event you are interested in could have happened and to use other tests to confirm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
Listening for messages and using message handler methods&lt;br /&gt;
&lt;br /&gt;
 include &amp;quot;World.gs&amp;quot;&lt;br /&gt;
 include &amp;quot;gstracksearch.gs&amp;quot;&lt;br /&gt;
 // include this in your config.txt&lt;br /&gt;
 // script-include-table&lt;br /&gt;
 // {&lt;br /&gt;
 //  0                                     &amp;lt;kuid2:388413:439002:5&amp;gt;&lt;br /&gt;
 // } &lt;br /&gt;
 include &amp;quot;traintools.gs&amp;quot;&lt;br /&gt;
 // script can be attached to any scenery object&lt;br /&gt;
 // enable the message window to view the output in Driver mode&lt;br /&gt;
 class Messenger isclass Buildable {&lt;br /&gt;
   // Global&lt;br /&gt;
   Train train;&lt;br /&gt;
   // Function prototypes&lt;br /&gt;
 thread void GetATrainAndJunctions(void);&lt;br /&gt;
 &lt;br /&gt;
 public void Init(Asset asset) {&lt;br /&gt;
   inherited(asset);&lt;br /&gt;
   int module = World.GetCurrentModule();&lt;br /&gt;
   Interface.Log(&amp;quot;Messenger-&amp;gt;Init - current module is &amp;quot; + module);&lt;br /&gt;
   // see world.gs for module defines&lt;br /&gt;
   if (module == World.NO_MODULE) {return;} // do nothing&lt;br /&gt;
   AddHandler(Interface,&amp;quot;World&amp;quot;,&amp;quot;ModuleInit&amp;quot;,&amp;quot;ModuleInitHandler&amp;quot;);&lt;br /&gt;
 } &lt;br /&gt;
  &lt;br /&gt;
 // Listens for trigger messages activated by a train.&lt;br /&gt;
 // Listening terminates if a train stops within the trigger radius.&lt;br /&gt;
 thread void TriggerMonitor(void) {&lt;br /&gt;
   // Trigger messages will be passed to us as a result of the &lt;br /&gt;
   // Sniff() call in GetATrainAndJunctions&lt;br /&gt;
   Interface.Log(&amp;quot;Messenger-&amp;gt;TriggerMonitor - started&amp;quot;);&lt;br /&gt;
   Message msg;&lt;br /&gt;
   wait() {&lt;br /&gt;
      // listen for Trigger,Enter, print a message when heard, continue listening&lt;br /&gt;
      on &amp;quot;Trigger&amp;quot;,&amp;quot;Enter&amp;quot;,msg: {&lt;br /&gt;
         Interface.Log(&amp;quot;Messenger-&amp;gt;TriggerMonitor - a train has entered a trigger&amp;quot;);&lt;br /&gt;
         continue;&lt;br /&gt;
      }&lt;br /&gt;
      // listen for Trigger,Stopped, print a message when heard and then quit the thread&lt;br /&gt;
      on &amp;quot;Trigger&amp;quot;,&amp;quot;Stopped&amp;quot;,msg: {&lt;br /&gt;
         Interface.Log(&amp;quot;Messenger-&amp;gt;TriggerMonitor - a train has stopped on a trigger&amp;quot;);&lt;br /&gt;
         Interface.Log(&amp;quot;Messenger-&amp;gt;TriggerMonitor - trigger monitoring discontinued&amp;quot;);&lt;br /&gt;
         break;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // A function to take some action when a message &amp;quot;Junction, Toggled&amp;quot; is sent. &lt;br /&gt;
 void ToggleHandler(Message msg) {&lt;br /&gt;
   // print a message whenever Junction,Toggled is broadcast&lt;br /&gt;
   Interface.Log(&amp;quot;Messenger-&amp;gt;ToggleHandler - a junction has been toggled&amp;quot;);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 // Seaches for train in the session and returns the first in the list.&lt;br /&gt;
 // The search uses the asynchonous method that replaces the now obsolete &amp;quot;World.GetTrainList()&amp;quot;&lt;br /&gt;
 thread void GetATrainAndJunctions(void) {&lt;br /&gt;
   // get a train and wait for a result&lt;br /&gt;
   NamedObjectInfo[] searchResults;&lt;br /&gt;
   AsyncObjectSearchResult searchObject = World.GetNamedObjectList(AssetCategory.Consist, &amp;quot;&amp;quot;);&lt;br /&gt;
   Sniff(searchObject, &amp;quot;ObjectSearch&amp;quot;, &amp;quot;&amp;quot;, true);&lt;br /&gt;
   // and wait&lt;br /&gt;
   Message msg;&lt;br /&gt;
   wait()&lt;br /&gt;
   {&lt;br /&gt;
     on &amp;quot;ObjectSearch&amp;quot;, &amp;quot;&amp;quot;, msg:&lt;br /&gt;
       if (msg.src == searchObject) {&lt;br /&gt;
         break;&lt;br /&gt;
       }&lt;br /&gt;
   }  &lt;br /&gt;
   Sniff(searchObject, &amp;quot;ObjectSearch&amp;quot;, &amp;quot;&amp;quot;, false); // stop listening &lt;br /&gt;
   // proceed if no errors&lt;br /&gt;
   if (searchObject.GetSearchErrorCode() == AsyncObjectSearchResult.ERROR_NONE) {&lt;br /&gt;
      searchResults = searchObject.GetResults();  // get list of trains (consists)&lt;br /&gt;
      if (searchResults.size() &amp;gt; 0) { &lt;br /&gt;
        train = cast &amp;lt;Train&amp;gt; searchResults[0].objectRef;  // could be null if a train isn&#039;t loaded&lt;br /&gt;
        // This can return the name of the consist or the driver name. &lt;br /&gt;
        Interface.Log(&amp;quot;Messenger-&amp;gt;GetATrainAndJunctions-&amp;gt; got &amp;quot; + train.GetTrainDisplayName());&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else {  &lt;br /&gt;
      train = null; // default anyway&lt;br /&gt;
      Interface.Log(&amp;quot;Messenger-&amp;gt;GetATrainAndJunctions-&amp;gt; could not get a train&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (train) {&lt;br /&gt;
      Sniff(train,&amp;quot;Trigger&amp;quot;,&amp;quot;&amp;quot;,true); // listen for trigger messages sent to the train&lt;br /&gt;
      TriggerMonitor(); // and monitor those messages&lt;br /&gt;
    } &lt;br /&gt;
    // Now find some junctions and add handlers for them.&lt;br /&gt;
    // Note that the tracksearch will stop when the track is broken, such as a junction point,&lt;br /&gt;
    // or at 8000 metres.&lt;br /&gt;
    if (train) {&lt;br /&gt;
 	// get some junctions for the test&lt;br /&gt;
  	Vehicle vehicle  = TrainTools.GetFrontVehicle(train);&lt;br /&gt;
  	GSTrackSearch gst = vehicle.BeginTrackSearch(TrainTools.VehicleToTrainDriveDirection(vehicle, true)); // Start track search in the driving direction of vehicle&lt;br /&gt;
        Junction junction;&lt;br /&gt;
        MapObject obj = gst.SearchNext();  // prime the search&lt;br /&gt;
        while (obj) {&lt;br /&gt;
          if(gst.GetDistance() &amp;gt; 8000.0) break;&lt;br /&gt;
          junction = cast &amp;lt;Junction&amp;gt; obj;&lt;br /&gt;
          if(junction) {&lt;br /&gt;
      	    AddHandler(junction,&amp;quot;Junction&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;ToggleHandler&amp;quot;);&lt;br /&gt;
      	    Interface.Log(&amp;quot;Messenger-&amp;gt;GetATrainAndJunctions-&amp;gt; found junction-&amp;gt; &amp;quot; + junction.GetLocalisedName());&lt;br /&gt;
          }&lt;br /&gt;
          obj = gst.SearchNext();&lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      Interface.Log(&amp;quot;Messenger-&amp;gt;GetATrain-&amp;gt; can&#039;t start trigger monitor as there is no train.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
 void ModuleInitHandler(Message msg) {&lt;br /&gt;
   Interface.Log(&amp;quot;Messenger-&amp;gt;ModuleInitHandler-&amp;gt; module is &amp;quot; + World.GetCurrentModule());&lt;br /&gt;
   if (World.GetCurrentModule() == World.DRIVER_MODULE) {&lt;br /&gt;
     GetATrainAndJunctions();&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[List of Standard Messages]]&lt;br /&gt;
* [[Animation-Event Message]]&lt;br /&gt;
* [[Browser Messages]]&lt;br /&gt;
* [[Camera Messages]]&lt;br /&gt;
* [[Interface Messages]]&lt;br /&gt;
* [[MapObject Messages]]&lt;br /&gt;
* [[ModuleInit Message]]&lt;br /&gt;
* [[Object Messages]]&lt;br /&gt;
* [[pfx Message]]&lt;br /&gt;
* [[Signal Messages]]&lt;br /&gt;
* [[Train Messages]]&lt;br /&gt;
* [[Vehicle Messages]]&lt;br /&gt;
* [[GameObject]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=ModuleInit_Message&amp;diff=47472</id>
		<title>ModuleInit Message</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=ModuleInit_Message&amp;diff=47472"/>
		<updated>2026-08-31T02:13:09Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Changed the target object in the AddHandler() call to Interface.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Switching directly from Surveyor to Driver mode via the ^F2 shortcut or the &#039;&#039;Quick Drive&#039;&#039; button allows a Driver session to be launched directly from from Surveyor.   &lt;br /&gt;
 &lt;br /&gt;
However Trainz carries out initialisation tasks for scripted objects when they are loaded into Surveyor and many of these do not need to be repeated when the user switches to Driver mode.  Some tasks, such as monitoring threads, will be started by the game if Driver is the first module called, but not otherwise.  In consequence these tasks will not run if Driver is launched via ^F2.&lt;br /&gt;
&lt;br /&gt;
The message &#039;&#039;World,ModuleInit&#039;&#039; is provided to allow this issue to be overcome.&lt;br /&gt;
&lt;br /&gt;
If this handler is added in &#039;&#039;Init()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 public void Init(void) {&lt;br /&gt;
    inherited();&lt;br /&gt;
    AddHandler(Interface, &amp;quot;World&amp;quot;, &amp;quot;ModuleInit&amp;quot;, &amp;quot;ModuleInitHandler&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
It will be possible to track the change between Driver and Surveyor and take any necessary corrective measures in the ModuleInitHandler method.&lt;br /&gt;
&lt;br /&gt;
 void ModuleInitHandler(Message msg) {&lt;br /&gt;
    if (World.GetCurrentModule() == World.DRIVER_MODULE) {&lt;br /&gt;
       InitialiseDriverTasks();&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Class World#GetCurrentModule|&#039;&#039;World.GetCurrentModule()&#039;&#039;]] allows the current module to be queried from script.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[List of Standard Messages]]&lt;br /&gt;
* [[TrainzScript Message Reference]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=User:Zahlebme1z&amp;diff=46148</id>
		<title>User:Zahlebme1z</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=User:Zahlebme1z&amp;diff=46148"/>
		<updated>2026-04-10T01:15:16Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Replaced content with &amp;quot;Content deleted - spam&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Content deleted - spam&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=User:Nettikasinot33&amp;diff=45905</id>
		<title>User:Nettikasinot33</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=User:Nettikasinot33&amp;diff=45905"/>
		<updated>2026-02-10T11:10:13Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Replaced content with &amp;quot;Content deleted.  Spam/possible phishing.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Content deleted.  Spam/possible phishing.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Help:ContentManager:Getting_Started&amp;diff=45799</id>
		<title>Help:ContentManager:Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Help:ContentManager:Getting_Started&amp;diff=45799"/>
		<updated>2026-01-15T07:19:51Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Undo revision 45798 by Alimagdy (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Getting Started with Content Manager=&lt;br /&gt;
Content Manager provides a range of tools to manage, download, and export content in Trainz.&lt;br /&gt;
&lt;br /&gt;
[[File:content-manager-main-view.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Content Menu==&lt;br /&gt;
The top menu in Content Manager shows the same menu options as on the [[Help:TRS19_Launcher|Launcher Screen]], with an additional menu called the Content menu.&lt;br /&gt;
&lt;br /&gt;
The Content menu provides access to all of the options you need for editing, submitting, and managing your content.&lt;br /&gt;
&lt;br /&gt;
===Show Asset Details (CTRL + I)===&lt;br /&gt;
Will open a window showing the thumbnail, description, and other details for the selected asset.&lt;br /&gt;
&lt;br /&gt;
===Download===&lt;br /&gt;
Will download the selected asset from the Download Station. If a newer version of the asset is available, then that version will be downloaded.&lt;br /&gt;
&lt;br /&gt;
===Download this Version===&lt;br /&gt;
Will download the selected version of the asset from the Download Station. Will ignore any newer versions that may be available for download.&lt;br /&gt;
&lt;br /&gt;
===Upload to DLS===&lt;br /&gt;
Will upload the selected asset, if it has your UserID number, to the Download Station. Note, if you have modified another person&#039;s content then you MUST obtain permission directly from that person before uploading. Some assets may have restrictions, or permissions, outlined in the License of the asset&#039;s config.txt file.&lt;br /&gt;
&lt;br /&gt;
===Clone (CTRL + D)===&lt;br /&gt;
Will clone the selected asset. The cloned asset will have the &#039;KUID&#039; number updated to your UserID number, and the next available AssetID number for your UserID.&lt;br /&gt;
&lt;br /&gt;
===Create New Version===&lt;br /&gt;
Only available for content under your UserID number. This will create a new version/revision of the asset (ie an asset with the AssetID number &amp;lt;kuid:12345:9876&amp;gt; will become &amp;lt;kuid2:12345:9876:1&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Automatically generate Thumbnail(s)===&lt;br /&gt;
Will automatically generate a thumbnail for the selected asset.&lt;br /&gt;
&lt;br /&gt;
===Disable===&lt;br /&gt;
Will disable the selected asset. This will prevent the asset from appearing in the content lists/tabs in Surveyor. However it will still be fully functional for any routes/sessions/other assets that have it as a dependency.&lt;br /&gt;
&lt;br /&gt;
===Delete (CTRL + Delete)===&lt;br /&gt;
Deletes the currently selected asset.&lt;br /&gt;
&lt;br /&gt;
===Open...===&lt;br /&gt;
Will show the &#039;Open&#039; list for assets, which allows you to open for edit or view assets in Trainz from the Content Manager tool.&lt;br /&gt;
&lt;br /&gt;
====Open for editing====&lt;br /&gt;
Will open the selected asset for editing. This will place the selected asset in the &#039;Editing&#039; folder of your LocalData.&lt;br /&gt;
&lt;br /&gt;
====Show in Explorer====&lt;br /&gt;
Will open the selected asset for editing, and then open an Explorer or Finder window with the asset&#039;s folder in the Editing folder of your LocalData shown.&lt;br /&gt;
&lt;br /&gt;
====Edit Config File Text====&lt;br /&gt;
Will open the selected asset for edit, and then open the asset&#039;s &#039;config.txt&#039; file in your computer&#039;s default text editor (ie Notepad on Windows, unless another is set as default).&lt;br /&gt;
&lt;br /&gt;
====Edit Primary Script====&lt;br /&gt;
Will open the selected asset for edit, and then open the asset&#039;s primary &#039;script&#039; file (ie the &#039;.gs&#039; file) in your computer&#039;s default text editor (ie Notepad on Windows, unless another is set as default). Note that some assets may not have a script, or may have a non editable encrypted script file.&lt;br /&gt;
&lt;br /&gt;
====Open Asset in Surveyor====&lt;br /&gt;
This option is only available for Route and Session assets. This will open the selected route or session for editing in Surveyor (the same as the Edit Route option from the Driver/Surveyor menu).&lt;br /&gt;
&lt;br /&gt;
====Open Asset in Driver====&lt;br /&gt;
This option is only available for Route and Session assets. This will open the selected route or session into Driver mode (the same as the Drive Session option from the Driver/Surveyor menu).&lt;br /&gt;
&lt;br /&gt;
====Preview Asset====&lt;br /&gt;
Will display the selected asset in the Asset Preview window. This provides a range of content performance information, and allows you to preview any installed asset in an &#039;in-game&#039; environment. Will only display the selected asset, no other content is shown in this view.&lt;br /&gt;
&lt;br /&gt;
===Revert Unsubmitted Edits===&lt;br /&gt;
If an asset has been opened for edit, this will revert the asset back to it&#039;s previous state, reverting any edits performed since it was last opened for edit.&lt;br /&gt;
&lt;br /&gt;
===Revert if Unchanged===&lt;br /&gt;
If an asset has been opened for edit, and has not been modified, then this will revert it back to it&#039;s previous state.&lt;br /&gt;
&lt;br /&gt;
===Revert to Original===&lt;br /&gt;
This option only applies to Built-in or Payware content. If an asset has been opened for edit, and has been modified and then submitted, this will revert it back to it&#039;s originally installed state.&lt;br /&gt;
&lt;br /&gt;
===Submit Edits (CTRL + Shift + E)===&lt;br /&gt;
If an asset has been opened for edit, then this will submit the asset with any edits that have been made. Note that for built-in and Download Station content, this will result in the asset as being shown as &#039;modified&#039;.&lt;br /&gt;
&lt;br /&gt;
===View Errors and Warnings===&lt;br /&gt;
This will show any applicable warnings or errors for the selected asset.&lt;br /&gt;
&lt;br /&gt;
If an asset has errors, then it will be marked as &#039;faulty&#039; and will not work in Trainz.&lt;br /&gt;
If an asset has warnings, then this indicates that it may have issues that may impact on performance, or may cause it to operate in unexpected ways, but it should still function in Trainz.&lt;br /&gt;
&lt;br /&gt;
===List Dependencies===&lt;br /&gt;
Lists the dependencies of the selected asset. Dependencies are other assets required for the selected asset to function (ie the dependencies of a route will include all ground textures, track splines, etc on the route).&lt;br /&gt;
&lt;br /&gt;
===List Dependencies Recursively===&lt;br /&gt;
Lists the dependencies of the selected asset, and the dependencies of the asset&#039;s dependencies, and so on. In many cases, an asset used on a route (such as an industry object) may have it&#039;s own dependencies (ie the attached track, and the commodities used by the industry, and other assets); this option will display the dependencies of any assets used by the selected asset.&lt;br /&gt;
&lt;br /&gt;
===List Dependants===&lt;br /&gt;
Lists any assets that depend on the selected asset. For example, if you select a route asset, and click on &#039;List Dependants&#039;, it will show the sessions that require that route to function.&lt;br /&gt;
&lt;br /&gt;
===List Asset Versions===&lt;br /&gt;
Lists all versions/revisions of the selected asset. For example if an asset has had an update released on the Download Station, this list will show the available update.&lt;br /&gt;
&lt;br /&gt;
===List Assets in New Window===&lt;br /&gt;
If you have selected several assets from a larger list in Content Manager, this will list the selected asset in a new window.&lt;br /&gt;
&lt;br /&gt;
===Add to Pick List===&lt;br /&gt;
Allows you to add the selected asset to either the Default Pick List, a custom Pick List, or to a New Pick List.&lt;br /&gt;
&lt;br /&gt;
See [[Help/Content_Search_Filter#Pick_List|Pick Lists]] for further information on Pick Lists in Trainz.&lt;br /&gt;
&lt;br /&gt;
===Edit Pick Lists===&lt;br /&gt;
Allows you to edit the Pick Lists in Trainz. &lt;br /&gt;
&lt;br /&gt;
See [[Help/Content_Search_Filter#Pick_List|Pick Lists]] for further information on Pick Lists in Trainz.&lt;br /&gt;
&lt;br /&gt;
==Content Filters==&lt;br /&gt;
The Content Filters system in Content Manager provides a very powerful system to search for content that is installed, or available from the Download Station.&lt;br /&gt;
&lt;br /&gt;
===The Filters Tool===&lt;br /&gt;
To open the Filters tool, click on the grey &#039;arrow&#039; icon to the right of &#039;Filter:&#039;.&lt;br /&gt;
&lt;br /&gt;
===Changing the Filter===&lt;br /&gt;
By default, the filter shown will be &#039;Installed = True&#039;. To change this, click on the left hand drop down box and select the filter you would like.&lt;br /&gt;
&lt;br /&gt;
To change the setting or option for the filter, either enter the desired text into the right hand box, or select the desired option from the right hand drop down box. Different filters will use either a text input, or a drop down box, depending on the type of filter.&lt;br /&gt;
&lt;br /&gt;
===Adding a New Filter===&lt;br /&gt;
To add a new filter, click on the &#039;+&#039; button at the right hand end of the filters list.&lt;br /&gt;
&lt;br /&gt;
===Removing a Filter===&lt;br /&gt;
To remove a filter from the filters list, click on the &#039;-&#039; button at the right hand end of the filters list.&lt;br /&gt;
&lt;br /&gt;
===Predefined Filters===&lt;br /&gt;
Content Manager includes several Predefined Filters. To select one, click on the drop down box to the right of &amp;quot;Filters:&amp;quot; and then click on the filter you would like.&lt;br /&gt;
&lt;br /&gt;
===Saving a new Predefined Filter===&lt;br /&gt;
If you have create a custom set of filters that you would like to set as a Predefined Filter, click on the Save button to the right of the Predefined Filters drop down box. You will then need to name, then save, the Predefined Filer.&lt;br /&gt;
&lt;br /&gt;
==The Search Box==&lt;br /&gt;
At the right hand side of the Content Manager screen is the Search box. This allows you to enter a Keyword search into Content Manager to search/filter the current Asset List.&lt;br /&gt;
&lt;br /&gt;
==The Asset List==&lt;br /&gt;
The Asset list is the main portion of the Content Manager screen, and the content that meets the current filter set.&lt;br /&gt;
&lt;br /&gt;
==Asset List Columns==&lt;br /&gt;
The Asset List is separated into several columns which show details for each asset. By clicking on the header of each column, you can sort the order of the column (ie by clicking on the &#039;Upload Date&#039; column, you can sort the assets by the date they were uploaded).&lt;br /&gt;
&lt;br /&gt;
To add columns, right click on any of the column headers, then go to &amp;quot;Insert Column&amp;quot;, then click on the column you wish to insert.&lt;br /&gt;
&lt;br /&gt;
To remove columns, right click on the header of the column you wish to remove, then click on &#039;Remove Column&#039;.&lt;br /&gt;
&lt;br /&gt;
You can adjust the width of each column by clicking on the dividing line between column headers, and then dragging to the width you require.&lt;br /&gt;
&lt;br /&gt;
You can move columns by clicking and dragging the column header.&lt;br /&gt;
&lt;br /&gt;
Return To: [[Help:Content_Manager|Content Manager Help]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Help|Content Manager]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Help:VE39&amp;diff=45093</id>
		<title>Help:VE39</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Help:VE39&amp;diff=45093"/>
		<updated>2025-09-18T03:27:20Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Update for TRS22 SP6 - assuming that the changes required are still relevant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;The texture &#039;&#039;texture-filename&#039;&#039; is a uniform color.&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&#039;&#039;&#039;The texture &#039;&#039;texture-filename&#039;&#039; is unnecessarily large given it is a uniform color.&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These messages indicates that the entirety of the specified texture file is the same color.  The second error message was introduced with TRS22 SP6.&lt;br /&gt;
&lt;br /&gt;
This is an error for content at [[trainz-build]] 3.6 and up, which is larger than 64 texels in area (eg. 8x8 texels.) This condition is an error because the asset in question is wasting disk space, loading performance, video memory, and runtime performance for no benefit.&lt;br /&gt;
&lt;br /&gt;
Smaller textures generate a warning, since it is frequently pointless to use a texture which contains no detail.&lt;br /&gt;
&lt;br /&gt;
The error is suppressed on older (3.5 and below) content to avoid breaking older content which did not show this error when it was created. The issue is still a performance problem for older content, and should be fixed when feasible.&lt;br /&gt;
&lt;br /&gt;
The most obvious fix for the error is to reduce the texture to an 8x8 square. Since the texture contains no distinguishing features, this will not affect the visual result.&lt;br /&gt;
&lt;br /&gt;
To get rid of the warning entirely, you may wish to consider avoiding a uniform texture. Depending on your specific usage, a variety of alternative techniques exist, including:&lt;br /&gt;
* If the texture is a diffuse, consider using a [[Material_Types#m.notex|m.notex]] material.&lt;br /&gt;
* If the texture is a normal, consider switching to a material which does not require a normal map.&lt;br /&gt;
* If the texture is used only for a small part of the asset, consider combining the texture into one of the other textures used in the asset.&lt;br /&gt;
* If the texture is used for a large part or all of the asset, consider whether you can provide a more meaningful texture. Uniform-color textures typically produce an unrealistic visual result for most uses.&lt;br /&gt;
&lt;br /&gt;
While it is possible to avoid this error by simply introducing a minor variation into the texture, it is strongly recommended that you avoid this approach: you are simply hiding the issue from validation rather than fixing it. The performance issues will remain.&lt;br /&gt;
&lt;br /&gt;
[[Category:Validation Errors]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=TrainzScript_Message_Reference&amp;diff=44619</id>
		<title>TrainzScript Message Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=TrainzScript_Message_Reference&amp;diff=44619"/>
		<updated>2025-06-28T04:31:42Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Added warning about using SendMessage() within a message handler (static thread).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What are Messages and how can they be used?==&lt;br /&gt;
&lt;br /&gt;
Messages: &lt;br /&gt;
* Are internal communications between objects within Trainz.&lt;br /&gt;
* Are completely hidden from the normal user, who won&#039;t be aware of their existence.&lt;br /&gt;
* Provide notification of events within the Trainz script environment.&lt;br /&gt;
* Provide a means of opening direct communications between objects.&lt;br /&gt;
* Provide a means of sending instructions from one script to another.&lt;br /&gt;
* Provide a means of timing scripted actions.&lt;br /&gt;
&lt;br /&gt;
Messages are managed by the &#039;&#039;Router&#039;&#039;, a sort of internal post office, and can be exchanged between any objects which descend from &#039;&#039;[[GameObject]]&#039;&#039;, this includes driver commands, rules and libraries as well as almost all mesh based scriptable objects.&lt;br /&gt;
&lt;br /&gt;
Scripts can:&lt;br /&gt;
* Listen for messages and use them to take appropriate actions in response to events and instructions. &lt;br /&gt;
* Use the message to extract information about the object sending or receiving the message.&lt;br /&gt;
* Define and issue their own messages.&lt;br /&gt;
* Listen in to messages intended for other objects.&lt;br /&gt;
* Send messages to themselves, to arrive after a specified delay, as a &#039;reminder&#039; to do something at a future time. &lt;br /&gt;
&lt;br /&gt;
Messages are small data objects containing five pieces of information:&lt;br /&gt;
* &#039;&#039;msg.major&#039;&#039;: A string identifying the message type.&lt;br /&gt;
* &#039;&#039;msg.minor&#039;&#039;: A string containing the message subtype or additional information. &lt;br /&gt;
* &#039;&#039;msg.src&#039;&#039;: A reference to the object that sent the message.&lt;br /&gt;
* &#039;&#039;msg.dst&#039;&#039;: The intended recipient. May be null if the message was &#039;&#039;broadcast&#039;&#039; (legacy behavior, no longer supported).&lt;br /&gt;
* &#039;&#039;msg.paramSoup&#039;&#039;: A Soup object containing extra data about the message (may be null).&lt;br /&gt;
&lt;br /&gt;
==How to listen for Messages==&lt;br /&gt;
&lt;br /&gt;
There are three techniques you can use:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;[[GameObject#AddHandler|AddHandler()]]&#039;&#039; This is the simplest listening device and is most useful when you know that you will always be interested in this type of message. &#039;&#039;[[GameObject#AddHandler|AddHandler()]]&#039;&#039; is usually set up in the &#039;&#039;Init()&#039;&#039; method of a script. Hint: omit any optional spaces in statements that include an AddHandler function, as including them causes the function to be ignored without notification in TRS2004 and perhaps other versions as well.&lt;br /&gt;
* A &#039;&#039;[[TrainzScript Keywords#wait|wait()]]&#039;&#039; loop. This needs to run in a separate thread and allows for a temporary arrangement where you want to know about messages for a shorter period or under a specified set of conditions.&lt;br /&gt;
* &#039;&#039;[[GameObject#Sniff|Sniff()]]&#039;&#039;.  This allows you to &#039;eavesdrop&#039; on messages being sent to another object.&lt;br /&gt;
&lt;br /&gt;
==When and how to send Messages==&lt;br /&gt;
&lt;br /&gt;
You might consider issuing messages of your own under the following circumstances:&lt;br /&gt;
&lt;br /&gt;
* When an event has taken place in your script and other objects might need to know about it.&lt;br /&gt;
* When you want to make your object available to other scripts to allow them to call your methods directly.&lt;br /&gt;
* When you need to issue instructions to another object to carry out a particular task and you know that the target object will be able to understand your message.&lt;br /&gt;
* When you want your own script to take an action at some time in the future, or at regular intervals.&lt;br /&gt;
&lt;br /&gt;
There are three routines you can use to issue messages:&lt;br /&gt;
&lt;br /&gt;
* [[GameObject#SendMessage|SendMessage()]] dispatches the message immediately.  Do not use SendMessage() within a message handler and use PostMessage() instead.  A message handler is a static thread and using SendMessage() within a static thread will raise an exception.&lt;br /&gt;
* [[GameObject#PostMessage|PostMessage()]] dispatches the message via the Router with a specified delay (which can be zero). The message will be executed on the next Router update after the delay has elapsed.&lt;br /&gt;
* [[Class Router#PostMessage|Router.PostMessage()]] allows messages to be dispatched even if the object you are scripting doesn&#039;t have its own messaging capabilities.&lt;br /&gt;
&lt;br /&gt;
If the message destination is entered as &#039;&#039;me&#039;&#039; (meaning the current object) the message will be sent to the object which owns the script. If the destination is &#039;&#039;null&#039;&#039; the message will be &#039;&#039;broadcast&#039;&#039; and therefore available to any object in the session. Message broadcasting is obsolete as of TRS19 however, and may result in script exceptions or silent failures (depending on the local players compatibility setting).&lt;br /&gt;
&lt;br /&gt;
If you have a reference to the message target (or if you know its name or id) you should consider the following:&lt;br /&gt;
&lt;br /&gt;
* If you know which methods to use it might be more appropriate to call the other script directly.&lt;br /&gt;
* You should always avoid broadcasting messages if it is possible to send them directly to the intended recipient.&lt;br /&gt;
&lt;br /&gt;
==Never Assume Anything==&lt;br /&gt;
&lt;br /&gt;
The messaging system contains many traps for the unwary.  If you are working with a junction for instance you will receive an &#039;&#039;Object,Enter&#039;&#039; message whenever a train enters your object&#039;s trigger zone.  It is not safe however to assume that a subsequent &#039;&#039;Object,Leave&#039;&#039; means that the train has crossed the junction and left on the other side. Any of the following would also produce &#039;&#039;Object,Leave&#039;&#039;:&lt;br /&gt;
* The train might have stopped and reversed away from your object.&lt;br /&gt;
* An intervening junction might have been toggled so that the train is no longer visible to your object.&lt;br /&gt;
* The train might have coupled to another (and therefore ceased to exist) before reaching your object.&lt;br /&gt;
It is usually necessary to treat a message as an indication that the event you are interested in could have happened and to use other tests to confirm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
Listening for messages and using message handler methods&lt;br /&gt;
&lt;br /&gt;
 include &amp;quot;MapObject.gs&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=#808080&amp;gt;// script can be attached to any scenery object&lt;br /&gt;
 // enable the message window to view the output in Driver mode&amp;lt;/font&amp;gt;&lt;br /&gt;
 class Messenger isclass MapObject {&lt;br /&gt;
 &lt;br /&gt;
    public void Init(void) {&lt;br /&gt;
       inherited();&lt;br /&gt;
       &amp;lt;font color=#808080&amp;gt;// listen for Junction and World,ModuleInit messages&amp;lt;/font&amp;gt;&lt;br /&gt;
       AddHandler(me,&amp;quot;Junction&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;ToggleHandler&amp;quot;);&lt;br /&gt;
       AddHandler(me,&amp;quot;World&amp;quot;,&amp;quot;ModuleInit&amp;quot;,&amp;quot;ModuleInitHandler&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    thread void TriggerMonitor(void) {&lt;br /&gt;
       &amp;lt;font color=#808080&amp;gt;// Trigger messages will be passed to us as a result of the &lt;br /&gt;
       // Sniff() call in ModuleInitHandler&amp;lt;/font&amp;gt;&lt;br /&gt;
       Message msg;&lt;br /&gt;
       wait() {&lt;br /&gt;
          &amp;lt;font color=#808080&amp;gt;// listen for Trigger,Enter, print a message when heard, continue listening&amp;lt;/font&amp;gt;&lt;br /&gt;
          on &amp;quot;Trigger&amp;quot;,&amp;quot;Enter&amp;quot;,msg: {&lt;br /&gt;
             Interface.Print(&amp;quot;A train has entered a trigger&amp;quot;);&lt;br /&gt;
             continue;&lt;br /&gt;
          }&lt;br /&gt;
          &amp;lt;font color=#808080&amp;gt;// listen for Trigger,Stopped, print a message when heard and then quit the thread&amp;lt;/font&amp;gt;&lt;br /&gt;
          on &amp;quot;Trigger&amp;quot;,&amp;quot;Stopped&amp;quot;,msg: {&lt;br /&gt;
             Interface.Print(&amp;quot;A train has stopped on a trigger&amp;quot;);&lt;br /&gt;
             Interface.Print(&amp;quot;Trigger monitoring discontinued&amp;quot;);&lt;br /&gt;
             break;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    void ToggleHandler(Message msg) {&lt;br /&gt;
       &amp;lt;font color=#808080&amp;gt;// print a message whenever Junction,Toggled is broadcast&amp;lt;/font&amp;gt;&lt;br /&gt;
       Interface.Print(&amp;quot;A junction has been toggled&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    void ModuleInitHandler(Message msg) {&lt;br /&gt;
       if (World.GetCurrentModule() == World.DRIVER_MODULE) {&lt;br /&gt;
          &amp;lt;font color=#808080&amp;gt;// attach a handler to the first train on the map instructing it&lt;br /&gt;
          // to copy any Trigger messages to us&amp;lt;/font&amp;gt;&lt;br /&gt;
          Sniff(World.GetTrainList()[0],&amp;quot;Trigger&amp;quot;,&amp;quot;&amp;quot;,true);&lt;br /&gt;
          &amp;lt;font color=#808080&amp;gt;// start monitoring Trigger messages&amp;lt;/font&amp;gt;&lt;br /&gt;
          TriggerMonitor();&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[List of Standard Messages]]&lt;br /&gt;
* [[Animation-Event Message]]&lt;br /&gt;
* [[Browser Messages]]&lt;br /&gt;
* [[Camera Messages]]&lt;br /&gt;
* [[Interface Messages]]&lt;br /&gt;
* [[MapObject Messages]]&lt;br /&gt;
* [[ModuleInit Message]]&lt;br /&gt;
* [[Object Messages]]&lt;br /&gt;
* [[pfx Message]]&lt;br /&gt;
* [[Signal Messages]]&lt;br /&gt;
* [[Train Messages]]&lt;br /&gt;
* [[Vehicle Messages]]&lt;br /&gt;
* [[GameObject]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Help:VE181&amp;diff=43809</id>
		<title>Help:VE181</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Help:VE181&amp;diff=43809"/>
		<updated>2025-01-19T02:18:46Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: First version.  Feel free to add to, update, or clarify.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This config tag needs at least the [[&amp;quot;Trainz-build&amp;quot;_tag|Trainz-Build]] tag identified in the error message.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
  - &amp;lt;kuid2:nnnnnn:nnn:n&amp;gt; : VE181: The tag &#039;mesh-table-lod-transition-distances&#039; requires a minimum asset version of 4.6&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Help:VE275&amp;diff=43808</id>
		<title>Help:VE275</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Help:VE275&amp;diff=43808"/>
		<updated>2025-01-19T02:12:52Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: First version.  Feel free to add to, update, or clarify.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are an excessive number of [[Render_chunk|chunks]] in this mesh.  This may cause poor performance and should be avoided.  This is an issue the asset author should address.&lt;br /&gt;
&lt;br /&gt;
Excessive chunks can be avoided by:&lt;br /&gt;
*   Reducing the number of polygons for the mesh.&lt;br /&gt;
*   Making use of [[Normal_map|normal]] maps to reduce mesh detail.&lt;br /&gt;
*   Reducing the number of unique materials for the mesh.&lt;br /&gt;
*   Combining textures used for logos, and other decals used on the model.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Name_Effect&amp;diff=42284</id>
		<title>Name Effect</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Name_Effect&amp;diff=42284"/>
		<updated>2024-06-17T05:06:53Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Some clarification of usage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Name effect kind is a [[&amp;quot;mesh-table&amp;quot; Container]] effect container. The following tags are supported: &lt;br /&gt;
&lt;br /&gt;
 kind &amp;quot;name&amp;quot;&lt;br /&gt;
 name &amp;quot;&amp;quot;&lt;br /&gt;
 att &amp;quot;&amp;quot;&lt;br /&gt;
 value &amp;quot;(same as name)&amp;quot;&lt;br /&gt;
 font &amp;quot;swiss&amp;quot;&lt;br /&gt;
 fontsize 12&lt;br /&gt;
 fontcolor 0,0,0&lt;br /&gt;
&lt;br /&gt;
===Explanations and default values===&lt;br /&gt;
&lt;br /&gt;
Kind &#039;name&#039; effect is used to place a user-defined text string on a mesh.&lt;br /&gt;
&lt;br /&gt;
kind: The kind of this effects container.&lt;br /&gt;
:Type: Text&lt;br /&gt;
:Compulsory. &amp;quot;name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
name: A name for this effects container. Used by a script to set the value of the effect.  i.e. the text displayed at the attachment point.&lt;br /&gt;
:Type: Text&lt;br /&gt;
:Optional. Default &amp;quot;parent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
att: The attachment point used for placing this effect.  i.e. something like &amp;quot;a.name0&amp;quot;.&lt;br /&gt;
:Type: Text&lt;br /&gt;
:Compulsory.&lt;br /&gt;
&lt;br /&gt;
value: The text to be used for this effect.&lt;br /&gt;
:Type: Text&lt;br /&gt;
:Optional: Default (same as name)&lt;br /&gt;
&lt;br /&gt;
font: The font to be used for this name.&lt;br /&gt;
:List item. {&amp;quot;arial&amp;quot;, &amp;quot;console&amp;quot;, &amp;quot;comic_sans&amp;quot;, &amp;quot;courier&amp;quot;, &amp;quot;cordia&amp;quot;, &amp;quot;century_gothic&amp;quot;, &amp;quot;garamond&amp;quot;, &amp;quot;helvetica&amp;quot;, &amp;quot;impact&amp;quot;, &amp;quot;sans_serif&amp;quot;, &amp;quot;swiss&amp;quot;, &amp;quot;tahoma&amp;quot;, &amp;quot;times_new_roman&amp;quot;, &amp;quot;verdana&amp;quot;} &lt;br /&gt;
:Optional. Default &amp;quot;swiss&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
fontsize: The font size to be used for this effect.&lt;br /&gt;
:Type Float&lt;br /&gt;
:Optional. Default 12. &lt;br /&gt;
&lt;br /&gt;
fontcolor: The color to be used for this effect.&lt;br /&gt;
:Type: RGB triplet&lt;br /&gt;
:Optional. Default 0,0,0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Config Container]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials&amp;diff=40184</id>
		<title>HowTo/WagonX - Browser Properties Examples and Basic Tutorials</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials&amp;diff=40184"/>
		<updated>2024-03-05T01:00:15Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Added an example of a multiple mesh toggle with a child property.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--the next line is the page title--&amp;gt;&lt;br /&gt;
&amp;lt;!--HowTo/WagonX - Browser Properties Examples and Basic Tutorials--&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red; font-weight: 700; font-size: 15px;&amp;quot;&amp;gt;Please note:  Much of this page still needs some validation.  If you find issues then please contact PCAS1986 in the Trainz Forums or in the Trainz Discord Server.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Document Structure =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
The WagonX Tutorial set is written over several pages.  This page contains some example WagonX config containers and basic guidance for setting up those containers.  Other pages in the series are listed below:&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
# [[HowTo/Use the WagonX Library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Technical Reference]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Traincar Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [https://docs.google.com/document/d/1jd5nZNQJI_gKQp-X2GjNCBij9fZGAwgJy_BgBiXf3_8/edit#bookmark=id.kupvwsc34hnk| The asset author&#039;s documentation]&lt;br /&gt;
&lt;br /&gt;
= General Comments =&lt;br /&gt;
Most of the notes and examples here are for Version 1 but WagonX continues to be developed.  Features and/or changes for versions later than V1 are identified in the text.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Browser property tutorials=&lt;br /&gt;
&amp;lt;!--start of Browser property example--&amp;gt;&lt;br /&gt;
This tutorial takes you each step of creating a simple mesh toggle example. It is for a handbrake mesh, including animation, that the user may want to show (make visible) or hide (make invisible).  We will add each property tag and explain its purpose.&lt;br /&gt;
It may be useful to have the [[HowTo/WagonX - Technical Reference|WagonX Technical Reference]] page open in a browser to examine details of the various tags.&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
==Creating a basic mesh toggle==&lt;br /&gt;
*Start with an empty browser-properties container like this:&lt;br /&gt;
    &lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add an empty property container and name it &amp;quot;0&amp;quot;.  The names are not used but should be unique.  When we add more properties, you should name them “1”, “2”, “3”, etc.&lt;br /&gt;
   &lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*There is no order required for each property, but using a standard order makes it easier to follow. Each tag is hyperlinked to the browser-property, so you can see more information about it.&lt;br /&gt;
The first tag to add is [[HowTo/WagonX - Technical Reference#enabled|enabled]]. This determines whether or not the property is activated. Set it to 1, since we want our property to work in-game.&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the visibility of the property using [[HowTo/WagonX - Technical Reference#property-visibility|property-visibility]] and make that 1.  Note this value is an integer and doesn&#039;t require quotes around it. A value of 1 makes the property visible in both Surveyor and Driver. See the reference for other available values.&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#name|name]] of our property. The name will appear before the [[HowTo/WagonX - Technical Reference#display-values|display-values]], which we will get to in a moment. You also will want to add a space at the end; otherwise, the property name and display-value will appear as one word.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#property-id|property-id]], which can be anything as long as it is unique and doesn&#039;t contain [[HowTo/WagonX - Technical Reference#Restricted_Characters|restricted characters]]. Trainz will use this to identify this property.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#description|description]]. This will appear as the tool-tip when you hover over a browser-property.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the mesh&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the property [[HowTo/WagonX - Technical Reference#kind|kind]]. Since we want a mesh-attachment kind, we must also specify the [[HowTo/WagonX - Technical Reference#mesh-attachment-type|mesh-attachment-type]] which for this application is mesh-toggle.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Now add a [[HowTo/WagonX - Technical Reference#meshes|meshes]] tag to specify what mesh we want to toggle. The mesh name must exist in the config mesh-table. We will use the script author&#039;s prestwins handbrake lever for this demo.&lt;br /&gt;
&lt;br /&gt;
Here is part of the config mesh-table:&lt;br /&gt;
 handbrake-lever&lt;br /&gt;
 {&lt;br /&gt;
  mesh                                &amp;quot;mesh/handbrake.lm&amp;quot;&lt;br /&gt;
  anim                                &amp;quot;mesh/handbrake_scene.kin&amp;quot;&lt;br /&gt;
  auto-create                         1&lt;br /&gt;
  att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#values|values]] tag. This determines what the state of the object will be at each index. The values tag varies depending on the kind and, since this is a toggle, we want a true (1) or false (0) value. For kind mesh-toggle, we set it at 0 to hide the mesh, and 1 to show the mesh. Each index is comma separated, so we will set the first one at 1, and the second one at 0.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#default-index|default-index]]. This is an integer value starting from 0 and which indicates the position in a list.  0 is the first in the list, 1 is the second, and so on.  &amp;lt;i&amp;gt;(The reasons for this are somewhat historical but also based on how computers find things in memory.)&amp;lt;/i&amp;gt;  If we set it to 1, it will start at the second comma-separated values tag which is &amp;quot;0&amp;quot;.  If we set it at -1, it will pick a random index within the size of the values tag.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#trigger|trigger]] tag. We want our property to activate when a user presses a button on the properties page, so we will set it to &amp;lt;b&amp;gt;user&amp;lt;/b&amp;gt;. If we set it to &amp;lt;b&amp;gt;event&amp;lt;/b&amp;gt;, however, we could make it activate based on an event within the train or in the world, such as handbrake apply, or enabling it when it gets dark, and disabling it when its daytime again, but for now, we will leave it at user.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Specify the [[HowTo/WagonX - Technical Reference#display-type|display-type]]. Looking at the options, we see that &amp;lt;b&amp;gt;link&amp;lt;/b&amp;gt; is what we want.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Finally, the last tag we need is the display-values tag, which we talked about earlier. Since we have two states for our property (specified in the values tag), we will create two comma-separated values for each state. We will call the first “Enabled”, and the second “Hidden”, which corresponds with the numbers we set in the values tag.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Enabled,Hidden&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And that&#039;s it! Run the asset into trainz, and when you view the properties, you should see your property appear:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--Insert pic of View Details with suitable property shown--&amp;gt;&lt;br /&gt;
[[File:Toggle_handbrake_mesh_in_View_Details.jpg]]&lt;br /&gt;
 &lt;br /&gt;
And when you click on the underlined part of your property, the property should change to “Hidden”, as we specified, and the handbrake on the underframe should disappear.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Handbrake_mesh_show_%26_hide.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Browser-Property Examples =&lt;br /&gt;
== User-Triggered Properties ==&lt;br /&gt;
Here are a number of examples for user triggering - i.e. in the View Details property browser. Detailed information on the property browser tags can be found on the [[HowTo/WagonX - Reference|WagonX Reference]] page.&lt;br /&gt;
&amp;lt;!--start of mesh toggle property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===Mesh-toggle property===&lt;br /&gt;
This property allows you to show or hide a mesh that is in the config mesh-table.  The values are 0 and 1 to represent false and true. The default is 0 or hidden when first placed.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   enabled               1 &lt;br /&gt;
   property-visibility   1&lt;br /&gt;
   name                  &amp;quot;Toggle: &amp;quot;&lt;br /&gt;
   property-id           &amp;quot;p_toggle&amp;quot;&lt;br /&gt;
   description           &amp;quot;Hide or display the roof mesh&amp;quot;&lt;br /&gt;
   kind                  &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type  &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                &amp;quot;roof&amp;quot;&lt;br /&gt;
   values                &amp;quot;0,1&amp;quot;&lt;br /&gt;
   duration              3 &lt;br /&gt;
   default-index         0&lt;br /&gt;
   trigger               &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type          &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values        &amp;quot;Hidden,Visible&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture-replacement property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===texture-replacement property===&lt;br /&gt;
This allows the choice of a texture from either local texture files (i.e. contained within the asset), or from a texture group asset, to retexture or reskin a mesh. You could use it for swapping between clean, dirty or weathered textures, logos and also entire liveries. &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture replacement using local texture files example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
====Texture replacement using local texture files====&lt;br /&gt;
&lt;br /&gt;
For fx-replacement-type texture-replacement-texture, the comma and/or semicolon-separated values are the names of the files (ideally without the path or extension) to be referenced at that index. The values tag will contain a list of texture(.txt) files including a folder name if used.  This is an example of three textures.&lt;br /&gt;
&lt;br /&gt;
 values     &amp;quot;images/congleton.texture,images/burntisland.texture,images/buxton.texture,images/none.texture&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
If you have the same path (and same extension) for all your files, you can greatly reduce the clutter by just specifying the path and extension once using the files-path tag.  See the files-path and values usage below.  Note that the display-values tag contains similar information but that is for the user to see.&lt;br /&gt;
&lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Workflow Text: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_workflow&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets the Workflow&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
   consist-property-sync      1&lt;br /&gt;
   meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-extra&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;null&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
   values                     &amp;quot;congleton,burntisland,buxton,none&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;list&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Congleton,Burntisland,Buxton,None&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture replacement using a texture-group example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
====Texture replacement using a texture-group library asset====&lt;br /&gt;
You will need to specify the texture group asset in the kuid-table and give it a name such as &amp;quot;texturelib&amp;quot; or &amp;quot;gwrtexturelib&amp;quot;,  The name should not have any spaces or other special characters.&lt;br /&gt;
This property container is set up to allow for three different variations of the the material used for the asset.  They are named in the &amp;quot;display-values&amp;quot; tag as Skin 1, Skin 2, and Skin 3. &lt;br /&gt;
Since it is a PBR material there are three textures used in the materail: the albedo, parameters, and normal.  The normal texture is common to all three versions so it need not be changed.&lt;br /&gt;
The &amp;quot;values&amp;quot; tag contains six numbers which are the numbers of the textures in the texture-group asset.  For Skin 1 the &amp;quot;12&amp;quot; refers to the albedo texture, and the &amp;quot;15&amp;quot; refers to the parameter texture. &amp;quot;13&amp;quot; and &amp;quot;16&amp;quot; are the pair for Skin2, and &amp;quot;14&amp;quot; and &amp;quot;17&amp;quot; are the pair for Skin 3.&lt;br /&gt;
The &amp;quot;effects&amp;quot; tag contains the texture effect names for meshes in the mesh-table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   enabled             1&lt;br /&gt;
   property-visibility 1&lt;br /&gt;
   name                &amp;quot;Weathering: &amp;quot;&lt;br /&gt;
   property-id         &amp;quot;p_skin&amp;quot;&lt;br /&gt;
   description         &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
   kind                &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   meshes              &amp;quot;null&amp;quot;&lt;br /&gt;
   effects             &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
   asset               &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   files-path          &amp;quot;null&amp;quot;&lt;br /&gt;
   values              &amp;quot;12;15,13;16,14;17&amp;quot;&lt;br /&gt;
   default-index       -1&lt;br /&gt;
   trigger             &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type        &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values      &amp;quot;Skin 1,Skin 2,Skin 3&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== User-Triggered Properties with Child Properties ==&lt;br /&gt;
In some situations it isn&#039;t possible to make changes with just one property.  WagonX can achieve multiple related changes using a child property.  A parent can have one or more children but a child cannot have another child property.  &lt;br /&gt;
The parent child relationship works by the parent passing the choice made by either the user or an event to the child.  So, if a user has chosen option 2 in the parent then the value 2 is passed to the child.&lt;br /&gt;
  &lt;br /&gt;
Here are a number of examples:&lt;br /&gt;
&amp;lt;!--start of mesh toggle property with child example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===Mesh-toggle property with child property===&lt;br /&gt;
&lt;br /&gt;
In this instance a car has the option of three different bogies: two &amp;quot;4 wheel&amp;quot; bogies and a &amp;quot;6 wheel bogie&amp;quot;. For this to work all the relevant bogie meshes must be contained in the one bogie asset.&lt;br /&gt;
This is the parent property:&lt;br /&gt;
	&lt;br /&gt;
  7 {&lt;br /&gt;
    enabled                           1&lt;br /&gt;
    property-visibility               1&lt;br /&gt;
    name                              &amp;quot;Bogie type: &amp;quot;&lt;br /&gt;
    description                       &amp;quot;Swap between Gresley, Wolverton and Pullman bogies&amp;quot;&lt;br /&gt;
    property-id                       &amp;quot;p_bogey0&amp;quot;&lt;br /&gt;
    child-properties                  &amp;quot;8&amp;quot;&lt;br /&gt;
    kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
    mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;  &lt;br /&gt;
    target-asset                      &amp;quot;bogey-1&amp;quot;&lt;br /&gt;
    meshes                            &amp;quot;frame-0,axle0-0,axle0-1,axle0-1,frame-1,axle1-0,axle1-1,axle1-1,frame-2,axle2-0,axle2-1,axle2-2&amp;quot;&lt;br /&gt;
    values                            &amp;quot;1;1;1;1;0;0;0;0;0;0;0;0, 0;0;0;0;1;1;1;1;0;0;0;0, 0;0;0;0;0;0;0;0;1;1;1;1&amp;quot;&lt;br /&gt;
    default-index                     0&lt;br /&gt;
    duration                          0&lt;br /&gt;
    trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
    display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
    display-values                    &amp;quot;Gresley 4 wheel,Wolverton 4 wheel,Pullman 6 wheel&amp;quot;&lt;br /&gt;
  }	 &lt;br /&gt;
&lt;br /&gt;
The three choices are in the &amp;quot;display-values&amp;quot; tag.&amp;lt;br&amp;gt;&lt;br /&gt;
The &amp;quot;target-asset&amp;quot; tag contains an identification of the bogey concerned.  This name is a special format that should consist of &amp;quot;bogey-&amp;quot; plus the index of the bogey sub containeer in the traincar bogey container. In this case this is bogey number 1.&amp;lt;br&amp;gt;&lt;br /&gt;
The &amp;quot;meshes&amp;quot; tag contains a list, separated by commas, of the affected meshes.  The first four are related to the first choice, the second four for the second choice, and the final four are for the last choice.&amp;lt;br&amp;gt;&lt;br /&gt;
The &amp;quot;values&amp;quot; tag contains three sets of boolean (false/true) values that indicate whether the related meshes in the meshes tag should be shown (1) or hidden (0).  For each set we need a boolean value for each mesh.&amp;lt;br&amp;gt;&lt;br /&gt;
The &amp;quot;child-properties&amp;quot; tag identifies the child properties by using their property id.  In this case we only need one which is property 8.&lt;br /&gt;
&lt;br /&gt;
This is the child property.  It is virtually the same as the parent except for the target-asset, that identifies the second bogie, the trigger that uses the &amp;quot;parent&amp;quot; option, and the removal of several tags that are not needed for a child property.&lt;br /&gt;
&lt;br /&gt;
  8 {&lt;br /&gt;
    enabled                           1&lt;br /&gt;
    property-visibility               0&lt;br /&gt;
    property-id                       &amp;quot;p_bogey1&amp;quot;&lt;br /&gt;
    kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
    mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;  &lt;br /&gt;
    target-asset                      &amp;quot;bogey-0&amp;quot;&lt;br /&gt;
    meshes                            &amp;quot;frame-0,axle0-0,axle0-1,axle0-1,frame-1,axle1-0,axle1-1,axle1-1,frame-2,axle2-0,axle2-1,axle2-2&amp;quot;&lt;br /&gt;
    values                            &amp;quot;1;1;1;1;0;0;0;0;0;0;0;0, 0;0;0;0;1;1;1;1;0;0;0;0, 0;0;0;0;0;0;0;0;1;1;1;1&amp;quot;&lt;br /&gt;
    default-index                     0&lt;br /&gt;
    duration                          0&lt;br /&gt;
    trigger                           &amp;quot;parent&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;!--Insert pic of View Details with above example--&amp;gt;&lt;br /&gt;
[[File:Swap_Bogies_in_View_Details.jpg]]  &lt;br /&gt;
	&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Event-Triggered Properties ==&lt;br /&gt;
&amp;lt;!--start of loading-doors property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===loading-doorsProperty ===&lt;br /&gt;
The ‘meshes’ tag references a mesh-table asset named ‘loading-doors’, and sets the frame to 30 when begin-load is called (to open the doors), and 0 when end-load is called (to close the door). The default index is 0 (the animation frame will be at 0), and the animation duration is 1.5 seconds.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    0&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_doors&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;loading-doors&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0,30&amp;quot;&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;end-load,begin-load&amp;quot;&lt;br /&gt;
   duration                   1.5&lt;br /&gt;
   default-index              0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
An alternate way to do it is use mesh-attachment-type &amp;quot;mesh-animation-state&amp;quot;, and set a bool int (0 or 1) for the values tag.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    0&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_doors&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-state&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;loading-doors&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0,1&amp;quot;&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;end-load,begin-load&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you want two doors to open at the same time, instead of creating another property, you can use a semicolon split in the values tag to change two in a single property:&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;door-1,door-2&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
   events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
   duration                   3.0&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Weather-Based property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
===Weather-Based Texture Replacement===&lt;br /&gt;
The texture effect will change based on the weather. It will display a snowy texture when the weather type is 6 (medium snow), a wet, rainy texture when the weather type is 3 (rain), and a dry texture when the weather type is 0.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_weather_skin&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-weather&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
   values                     &amp;quot;texture-snow,texture-rain,texture-dry&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;weather-6,weather-3,weather-0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--start of day and night lights example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
===Day and Night Light Control===&lt;br /&gt;
WagonX Version 1.2 or greater only.&amp;lt;br&amp;gt;&lt;br /&gt;
This event property controls a set of eight exteruir lights on a traincar that must turn on for night and off for day.  It also requires a locomotive at the head of its train for the lights to come on.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The property is a kind fx-replacement of type corona. Turning a corona on and off requires a valid corona to be turned on and usually a null value to turn it off.  In this case, instead of a null, we will use an invisible mesh, &amp;lt;kuid:217537:100812&amp;gt;, to achieve the same result.  We do this because WagonX needs to obtain an asset from the asset kuid-table.&amp;lt;br&amp;gt;&lt;br /&gt;
There are two events to consider: the &amp;quot;World, Day&amp;quot; message represented as &amp;quot;world-day&amp;quot;, and the &amp;quot;World, Night&amp;quot; message represented as &amp;quot;world-night&amp;quot;.&lt;br /&gt;
The requirement for a loco requires a conditions tag using the logic described at (insert link when tech ref updated).  The results are boolean (false or true) and the first will be true if no loco exists at the head of the train, and the second if there is a loco.  So the possible results are &amp;quot;1;0&amp;quot; (no loco) or &amp;quot;1;0&amp;quot; (loco exists) using the WagonX syntax.&amp;lt;br&amp;gt;&lt;br /&gt;
The effects tag contains a list of the corona effects from the asset mesh-table. Each is separated by a comma.&amp;lt;br&amp;gt;&lt;br /&gt;
The values tag contains two sets of kuid-table mesh references. Each set is separated by a comma, and the list within each set separated by a semi-colon. The first set turns off the eight coronas when the loco doesn&#039;t exist, and the second set turns the coronas on using the same corona asset for each light. You could have different coronas.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                           1&lt;br /&gt;
   property-visibility               0&lt;br /&gt;
   property-id                       &amp;quot;p_exterior_lights&amp;quot;&lt;br /&gt;
   kind                              &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type               &amp;quot;corona&amp;quot;&lt;br /&gt;
   duration                          0    &lt;br /&gt;
   effects                           &amp;quot;leftlight-0,leftlight-1,leftlight-2,leftlight-3,rightlight-0,rightlight-1,rightlight-2,rightlight-3&amp;quot;&lt;br /&gt;
   values                            &amp;quot;nl;nl;nl;nl;nl;nl;nl;nl,exla;exla;exla;exla;exla;exla;exla;exla&amp;quot;                                   &lt;br /&gt;
   trigger                           &amp;quot;multiple&amp;quot;&lt;br /&gt;
   conditions                        &amp;quot;tra_frontmost-locomotive|==|0,tra_frontmost-locomotive|==|1&amp;quot;&lt;br /&gt;
   events                            &amp;quot;world-day,world-night&lt;br /&gt;
 }&lt;br /&gt;
  ...&lt;br /&gt;
 kuid-table {&lt;br /&gt;
   ...&lt;br /&gt;
   exla                                    &amp;lt;kuid:104722:100&amp;gt;     // a white corona&lt;br /&gt;
   nl                                      &amp;lt;kuid:217537:100812&amp;gt;  // an invisible mesh&lt;br /&gt;
 } &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
===Day and Night Interior Control===&lt;br /&gt;
WagonX Version 1.2 or greater only.&amp;lt;br&amp;gt;&lt;br /&gt;
This example controls the visibility of day and night traincar interiors using the &amp;quot;World, Day/Night&amp;quot; messages.  The night interior will not show unless a locomotive is at the head of the traincar&#039;s train.&amp;lt;br&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   enabled                           1&lt;br /&gt;
   property-visibility               0&lt;br /&gt;
   property-id                       &amp;quot;p_interior_lighting&amp;quot;&lt;br /&gt;
   kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                            &amp;quot;day-interior,night-interior&amp;quot;&lt;br /&gt;
   values                            &amp;quot;1;0,0;1&amp;quot;&lt;br /&gt;
   default-index                     0&lt;br /&gt;
   duration                          0&lt;br /&gt;
   trigger                           &amp;quot;multiple&amp;quot;&lt;br /&gt;
   conditions                        &amp;quot;tra_frontmost-locomotive|==|0,tra_frontmost-locomotive|==|1&amp;quot;&lt;br /&gt;
   events                            &amp;quot;world-day,world-night&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of discussion about use of semicolons--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
== Using semicolons to set multiple values in one property ==&lt;br /&gt;
When assigning values for a certain property, you will specify the mesh/effect/sound, etc that needs to be edited, and specify how you want to manipulate it (fx-replacement-type, mesh-attachment-type, etc), and set the value for a certain index. For example, In a texture replacement where a texture is being replaced by an external texture-group asset, the property would look something like this.&lt;br /&gt;
&lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_parameter&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-albedo&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,2,3,4&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
As you can see, the comma-separated numbers in the “values” tag indicate the index in the texture-group asset to find the texture; here are the first few lines for that. Texture indexes 0, 1, 2, and 3 are referenced for the albedo texture types, since we have 4 weathering types.&lt;br /&gt;
&lt;br /&gt;
 kuid                                    &amp;lt;kuid2:661805:500009:0&amp;gt;&lt;br /&gt;
 username                                &amp;quot;BR GrainHop Texture Group&amp;quot;&lt;br /&gt;
 kind                                    &amp;quot;texture-group&amp;quot;&lt;br /&gt;
 trainz-build                            5.0&lt;br /&gt;
 category-class                          &amp;quot;JO&amp;quot;&lt;br /&gt;
 author                                  &amp;quot;dundun92&amp;quot;&lt;br /&gt;
 contact-email                           &amp;quot;jbvector93@outlook.com&amp;quot;&lt;br /&gt;
 description                             &amp;quot;A texture group for my GrainHop wagons&amp;quot;&lt;br /&gt;
 textures&lt;br /&gt;
 {&lt;br /&gt;
   0                                   &amp;quot;270cgo/0albedo.texture&amp;quot;&lt;br /&gt;
   1                                   &amp;quot;270cgo/1albedo.texture&amp;quot;&lt;br /&gt;
   2                                   &amp;quot;270cgo/2albedo.texture&amp;quot;&lt;br /&gt;
   3                                   &amp;quot;270cgo/2albedo.texture&amp;quot;&lt;br /&gt;
   4                                   &amp;quot;270cgo/0parameter.texture&amp;quot;&lt;br /&gt;
   5                                   &amp;quot;270cgo/1parameter.texture&amp;quot;&lt;br /&gt;
   6                                   &amp;quot;270cgo/2parameter.texture&amp;quot;&lt;br /&gt;
   .........&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
We specified the texture-group library in the kuid table, and referenced it in the “asset” tag.&lt;br /&gt;
 kuid-table&lt;br /&gt;
 {&lt;br /&gt;
   acslib                                &amp;lt;kuid2:60850:89100&amp;gt;&lt;br /&gt;
   meshlib                               &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   texturelib                            &amp;lt;kuid2:661805:500009&amp;gt;&lt;br /&gt;
   lamp                                  &amp;lt;kuid2:661805:500003&amp;gt;&lt;br /&gt;
   enginespec                            &amp;lt;kuid2:368699:50064&amp;gt;&lt;br /&gt;
   bogie                                 &amp;lt;kuid2:661805:400003&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And then we specified the effect we wanted to change, (currently just the texture-albedo), inside the “effects” tag (this is not the effects tag below in this mesh table asset, but rather the one in the browser-properties at the top of this section!).&lt;br /&gt;
 body&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;mesh/body.lm&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
     effects&lt;br /&gt;
     {&lt;br /&gt;
       texture-albedo&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_albedo.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
       texture-normal&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_normal.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
       texture-parameter&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_parameter.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
But say you want to replace the normal map as well. You would probably just create another browser property and specify the proper index for the normals.&lt;br /&gt;
      &lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_parameter&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Paramenter Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-albedo&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,2,3,4&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 1&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_normal&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Normal Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-normal&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;7,8,9,10&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
But we can&#039;t forget the parameter map… that will require a third property. What&#039;s worse, we will now have three different properties in the view details page that will each have to be clicked on to change each map! Assigning properties this way can get tedious and create extra clutter in the config. Thankfully, for properties that share the same kind and type, it can all be done in a single property using semicolons:&lt;br /&gt;
      &lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;effects                    &amp;quot;texture-albedo,texture-parameter,texture-normal&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;null&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;values                     &amp;quot;0;4;8,1;5;9,2;6;10,3;7;11&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;display-values             &amp;quot;Clean,Weathered,Dirty,Rusty&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Take note of the three tag entries above: the &amp;lt;b&amp;gt;effects&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;values&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;display-values&amp;lt;/b&amp;gt; tags. The &amp;lt;b&amp;gt;display-values&amp;lt;/b&amp;gt; tag is what the user sees and can choose from. Our interest is in the remaining two tags as shown below:&lt;br /&gt;
&lt;br /&gt;
 effects                    &amp;quot;texture-albedo,texture-parameter,texture-normal&amp;quot;&lt;br /&gt;
 values                     &amp;quot;0;4;8,1;5;9,2;6;9,3;7;11&amp;quot; &lt;br /&gt;
&lt;br /&gt;
There are four user options and, since each option requires three textures, the total number of textures is 12. The &amp;lt;b&amp;gt;values&amp;lt;/b&amp;gt; tag contains a string of four groups of texture numbers separated by a comma.  Within each texture group the texture numbers are delimited by a semi colon.&lt;br /&gt;
&lt;br /&gt;
To clarify, we can list the three textures associated with each user choice:&lt;br /&gt;
&lt;br /&gt;
 0;4;8 -&amp;gt; Clean&lt;br /&gt;
 1;5;9 -&amp;gt; Weathered&lt;br /&gt;
 2;6;10 -&amp;gt; Dirty&lt;br /&gt;
 3;7;11 -&amp;gt; Rusty&lt;br /&gt;
 &lt;br /&gt;
The first column of 0,1,2,3 identify the albedo textures. The second column of 4,5,6,7 identify the parameters textures, The third column of 8,9,10,11 identify the normal textures.  Note that the numbers do not need to be in sequence or even consecutive.  All those numbers do is to identify the correct texture in the texture-group asset.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
This system works for other kinds of properties, too. In this case, we are setting the animation frame of both the handbrake-lever, and braking system at the same time using the same property (triggered by the same event).&lt;br /&gt;
        		  &lt;br /&gt;
  1      &lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
   events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
   duration                   3.2&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of discussion about Naming ACS mesh-table attachments--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
== Naming ACS mesh-table attachments ==&lt;br /&gt;
Please refer to this page on the ACS coupling system for setting up the “active-coupling-standard-60850” extensions container (which will be required for the ACS coupling to work): [[ACS_Coupling_System|ACS Coupling System]]&lt;br /&gt;
&lt;br /&gt;
These are the mesh-table naming conventions you must use for the beginning of the name of each ACS attachment mesh. The others will vary depending on the “animated” property above. &amp;lt;b&amp;gt;You must spell them exactly as shown below&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*coupler&lt;br /&gt;
*gangway&lt;br /&gt;
*airbrake&lt;br /&gt;
*vacbrake&lt;br /&gt;
*multiworking&lt;br /&gt;
*heating&lt;br /&gt;
*rch&lt;br /&gt;
&lt;br /&gt;
If the “animated” tag in the acs container (see [[HowTo/WagonX_-_Technical_Reference#ACS|acs]]) is set to 1, then the naming is quite simple. It&#039;s one of the 7 callbacks above + a dash + “&amp;lt;i&amp;gt;front&amp;lt;/i&amp;gt;” or “&amp;lt;i&amp;gt;back&amp;lt;/i&amp;gt;”. The anim tag must be present to specify the animation for it. Frame 0 is the uncoupled state, and the last frame is the coupled state. This setup is shown below:&lt;br /&gt;
&lt;br /&gt;
 coupler-front&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;coupler-screwlink-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 coupler-back&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;coupler-screwlink-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;vacbrake-single-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-back&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;vacbrake-single-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If, however, you do not want to use animations, but want to use separate meshes for each state (coupled and uncoupled), it gets a bit more complicated. The naming will follow the same as above at first, but you must add a third piece to it to specify the exact type of ACS attachment this is. The information on what to put there is originally from the [[ACS_Coupling_SystemACS Coupling System|ACS page]], but the 7 callbacks have been added plus the sub-callback here to make it easier (the third callback options are the ones with a delta symbol &amp;amp;Delta; ). And for the uncoupled state, the third callback is “non” (e.g. coupler-front-screwlink, and coupler-front-none).&lt;br /&gt;
&lt;br /&gt;
*coupler&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;hook&amp;lt;/b&amp;gt;&amp;quot; -- connects to screwlink/instanter/3link/hst-emergency-bar.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;3link&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;instanter&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;screwlink&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;hst-emergency-bar&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar-full&amp;lt;/b&amp;gt;&amp;quot; -- connects to &amp;quot;bar-none&amp;quot;. Half of a handed pair for when one vehicle has the entire bar coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar-none&amp;lt;/b&amp;gt;&amp;quot; -- connected to by &amp;quot;bar-full&amp;quot;. The other half of the handed pair.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar&amp;lt;/b&amp;gt;&amp;quot; -- connects to self only. Used when both vehicles have half the bar coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;knuckle&amp;lt;/b&amp;gt;&amp;quot; - standard knuckle coupler.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;tightlock&amp;lt;/b&amp;gt;&amp;quot; -- different from a standard knuckle, refers to a knuckle style coupler often fitted to multiple unit trains that also include electrical connections.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;wedgelock&amp;lt;/b&amp;gt;&amp;quot; -- London Underground coupler.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bsi&amp;lt;/b&amp;gt;&amp;quot; -- Found on Sprinter DMUs and derived designs.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;dellner&amp;lt;/b&amp;gt;&amp;quot; -- Also compatible with Scharfenberg coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;scharfenberg&amp;lt;/b&amp;gt;&amp;quot; -- Also compatible with dellner coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(&amp;lt;b&amp;gt;other string identifier&amp;lt;/b&amp;gt;)&amp;quot; -- Any string that is not recognized from the above list is assumed to be a symmetrical meet-in-the-middle type of coupler.&lt;br /&gt;
::&amp;amp;Delta; “&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;”&lt;br /&gt;
::Examples: &amp;lt;b&amp;gt;coupler-front-instanter&amp;lt;/b&amp;gt;, coupler-back-none&lt;br /&gt;
&lt;br /&gt;
*gangway&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;rubbing-plate&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;gangway&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;gangway-front-gangway&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*airbrake&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;twin&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;single&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;airbrake-back-none&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*vacbrake&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;twin&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;single&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;high&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;vacbrake-back-twin&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*multiworking&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(color)-(shape)&amp;quot; -- e.g. &amp;quot;&amp;lt;b&amp;gt;blue-star&amp;lt;/b&amp;gt;&amp;quot; or &amp;quot;&amp;lt;b&amp;gt;red-diamond&amp;lt;/b&amp;gt;&amp;quot;, etc&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;AAR&amp;lt;/b&amp;gt;&amp;quot; -- as used on GM locos&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;SR27&amp;lt;/b&amp;gt;&amp;quot; -- bagpipes&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(other identifier string e.g. classname)&amp;quot;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;multiworking-front-blue-square&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*heating&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;steam&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;electric&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;dual&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;southern-electric&amp;lt;/b&amp;gt;&amp;quot; &lt;br /&gt;
::Example: &amp;lt;b&amp;gt;heating-back-steam&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*rch&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;high&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;low&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;rch-back-high&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And an example how it would look inside a config.txt. The back attachments have been omitted for brevity. &lt;br /&gt;
  &lt;br /&gt;
 coupler-front-screwlink&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-coupled.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 coupler-front-none&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-retracted.lm&amp;quot;&lt;br /&gt;
       auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front-single&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-coupled.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front-none&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-retracted.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
=Copyright Notice=&lt;br /&gt;
Much of the content on this page and child pages was derived from Dundun92&#039;s original Google Docs document.  Permission was granted to use that information here.&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Swap_Bogies_in_View_Details.jpg&amp;diff=40183</id>
		<title>File:Swap Bogies in View Details.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Swap_Bogies_in_View_Details.jpg&amp;diff=40183"/>
		<updated>2024-03-05T00:54:58Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Used in WagonX documentation examples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in WagonX documentation examples&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40182</id>
		<title>HowTo/WagonX - Technical Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40182"/>
		<updated>2024-03-05T00:13:04Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: /* trigger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= Document Structure =&lt;br /&gt;
&lt;br /&gt;
The WagonX Tutorial set is written over several pages.  This page is a base reference for using WagonX config containers, their properties and the values for those properties.  Other pages in the series are:&lt;br /&gt;
&lt;br /&gt;
# [[HowTo/Use the WagonX Library|How to use the WagonX library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials|WagonX Examples and Basic Tutorials]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Traincar Tutorial|WagonX Traincar Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial|WagonX Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= The WagonX Reference =&lt;br /&gt;
&lt;br /&gt;
This page contains details of the WagonX extension container and sub-containers.  Links to examples of use will be provided when available.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= Restricted Characters =&lt;br /&gt;
&lt;br /&gt;
The characters in the list below cannot be used for some property tag values as they are used by the script to parse or identify values such as list items and other information. They can be used in name and description tags. Use of these characters in tag values is identified in the properties descriptions that follow. See also [[#display-values|display-values]].&lt;br /&gt;
 &lt;br /&gt;
*Comma ( , ) &lt;br /&gt;
*Semicolon ( ; ) &lt;br /&gt;
*Backtick/Grave ( ` )&lt;br /&gt;
*Colon ( : )&lt;br /&gt;
*Caret ( ^ )	&lt;br /&gt;
*Round brackets ( and )&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Using commas and semi-colons in a list ==&lt;br /&gt;
WagonX uses commas to identify items in a list. Some examples might be &amp;quot;1,2,3,4&amp;quot;for a list of four integers, &amp;quot;Rita, Rose, Ruth&amp;quot; of three nameboards for a Pullman car, and &amp;quot;0,1&amp;quot; for a list of booleans (false and true).&amp;lt;br&amp;gt;&lt;br /&gt;
Semi-colons are used to items in a set, where sets are items in a list.  Le&#039;s say we have three sets each consisting of integer numbers,then we might use something like &amp;quot;1;2;3;4,9;3;6;5,13;12;15;16&amp;quot;.  The first set is 1,2,3 and 4, the second set 9,3,6 and 5, and the last 13,12,15 and 16.&lt;br /&gt;
&amp;lt;br&amp;gt;This notation is common where we might want apply some value to items in a set.  For example, our sets might each consist of four meshes for a car to which we want to apply a particular livery. List such as these are commonly used in the [[#values|values]] tag.&lt;br /&gt;
&amp;lt;br&amp;gt;See also [[WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Using_semicolons_to_set_multiple_values_in_one_property|Using semicolons to set multiple values in one property]].&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Using the grave symbol in a list ==&lt;br /&gt;
The backtick or grave symbol allows you to set multiple variables on a single function in one property. It&#039;s typically used to set the value for all the parameters in the pfx emitter functions. It&#039;s also used for mest-attachment-type mesh-translation-orientation parameters.&lt;br /&gt;
For example, if you want to set the start color with these values (0,0,128,128,128,64), but you want each of those variables to be set in one property then use &amp;quot;0`0`128`128`128`64&amp;quot;.&lt;br /&gt;
You can also use this symbol to populate your set of parameters with variables such as &amp;quot;veh_velocity|/|2`veh_velocity|+2`veh_velocity|-|loc_abs_reverser&amp;quot;.  In simple english that means the first parameter is the vehicle velocity divided by 2, the second parameter is the vehicle velocity plus 2, and the final parameter is the vehicle length minus the absolute value of the loco reverser.  Hmm, that doesn&#039;t make a lot of sense but its only an example.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Other special characters ==&lt;br /&gt;
Caret - The caret/circumflex symbol (^) is a math power operator.  It can be used in variables.&amp;lt;br&amp;gt;&lt;br /&gt;
Round Brackets - Round brackets are used to group mesh vectors translation and orientation.  In this instance, colons are used to separate the vectors.  For example, &amp;quot;(0`2`4):(1.2`2`2),(0`0`0):(0`0`0)&amp;quot;.  See [[#values|values]].&amp;lt;br&amp;gt;&lt;br /&gt;
Colon - See Round Brackets above.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
= General Layout =&lt;br /&gt;
&lt;br /&gt;
WagonX config tags are defined in the extensions container along with other extensions such as ACS Lib. The general layout of the extensions container that also includes ACS Lib might look like this:&lt;br /&gt;
 extensions&lt;br /&gt;
 {&lt;br /&gt;
   max_permitted_speed-60850     &amp;quot;50mph&amp;quot;&lt;br /&gt;
   active-coupling-standard-60850&lt;br /&gt;
   {&lt;br /&gt;
    ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
    ...&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= WagonX Properties =&lt;br /&gt;
&lt;br /&gt;
	There are currently four standard or &amp;quot;top level&amp;quot; WagonX containers that define properties for Marker Lights,text-x, a variation of ACSLib and Misc (miscellaneous).  In addition to the standard containers, you can define zero or more additonal property containers that are identified by integer value names starting from 0.  Each of these containers are defined below.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of ACS table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== ACS ==&lt;br /&gt;
For help on creating the acs extensions and setting up the acs mesh-table objects, see [[HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Naming_ACS_mesh-table_attachments|Naming ACS mesh-table attachments]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each tag is shown here with sample values. There are no default values.&lt;br /&gt;
&lt;br /&gt;
 acs&lt;br /&gt;
 {&lt;br /&gt;
   animated                            1&lt;br /&gt;
   use-jbv-animation                   1&lt;br /&gt;
   duration                            1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;animated (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:This determines whether to use animations to move between the coupled and uncoupled state, or use individual static assets for each state.&lt;br /&gt;
*&amp;lt;b&amp;gt;use-jbv-animation (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:An animation system the author (DunDun92) made for compressing buffers and dynamic couplings and hoses, which is now being phased out due to performance problems. leave it at 0, unless you are using the JBV BR Mesh Library or BR class 101 mesh library, or any of his other libraries.&lt;br /&gt;
*&amp;lt;b&amp;gt;duration (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time, in seconds, that the mesh animation will take to move between the two states. If animated is set to 0, this will determine the fade duration when switching between meshes (fade duration on mesh objects in trainzbuild 5.0 + can get buggy)&lt;br /&gt;
*&amp;lt;b&amp;gt;buffer-length-front  float&amp;lt;/b&amp;gt;&lt;br /&gt;
:The distance between a.couple0 and a.limfront in meters. To be used with the jbv animation system. Requires the  ‘use-jbv-animation’ tag to be set to 1&lt;br /&gt;
*&amp;lt;b&amp;gt;buffer-length-back  float&amp;lt;/b&amp;gt;&lt;br /&gt;
:The distance between a.couple1 and a.limback in meters. To be used with the jbv animation system. Requires the  ‘use-jbv-animation’ tag to be set to 1&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== text-x ==&lt;br /&gt;
&amp;lt;!--start of ACS table--&amp;gt;&lt;br /&gt;
WagonX V1.2 or greater.&lt;br /&gt;
(description yet to be included - ARN and/or headcodes? - validation required)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;controller string&amp;lt;/b&amp;gt; &lt;br /&gt;
:Determines how the property will be controlled. Can be controlled by the user, the running number, or a custom range. &lt;br /&gt;
:::*user&lt;br /&gt;
:::*arn&lt;br /&gt;
:::*range&lt;br /&gt;
*&amp;lt;b&amp;gt;range  string&amp;lt;/b&amp;gt; &lt;br /&gt;
:Defines the range of values the for the text proprety. It will choose a random index to start&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;value  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:The default value for the text property. This can be formated in two ways. For texture files with single-character identifiers, each character can be written together (e.g. “a12d”). For texture files with multiple-character identifiers, each identifier needs to be separated by a comma (e.g. “dot,3,dash,k”).&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;font  int&amp;lt;/b&amp;gt;&lt;br /&gt;
:The default font index for the text property, these values can be changeed by adding a “config-edit” property to the browser-properties.&lt;br /&gt;
*&amp;lt;b&amp;gt;files-path  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:An optional tag that shortens the number of characters that need to be written to the “values“ tag, assuming they all share the same path or asset library and extension. The path and extension can be specified here (e.g. files-path “images/left/.texture”), where images/left is the path, and .texture is the extension for all the files.&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;textures  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:The list of texture files to use. The ‘#’ symbol is used by the script as a placeholder identifier for the value input. For example, if it is set to ‘alpha_digit-#’, each letter and number will go where the ‘#’, e.g. If the first chartcher in the value tag is ‘a’, it will look for the texture ‘images/alpha_digit-a.texture’, to use for the first texture effect digit. Each comma separated value coorispinds to the font to use at each index.&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;effects  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:The texture replacement effects to use for displaying the text.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each tag is shown here with sample values.&lt;br /&gt;
&lt;br /&gt;
 text-x&lt;br /&gt;
 {&lt;br /&gt;
  text-properties&lt;br /&gt;
  {&lt;br /&gt;
    headcode&lt;br /&gt;
    {&lt;br /&gt;
    controller                &amp;quot;user&amp;quot;&lt;br /&gt;
    range                     &amp;quot;null&amp;quot;&lt;br /&gt;
    value                     &amp;quot;2,5,dots,2&amp;quot;&lt;br /&gt;
    font                      0&lt;br /&gt;
    files-path                &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
    textures                  &amp;quot;fd-#&amp;quot;&lt;br /&gt;
    effects                   &amp;quot;fdigit-1,fdigit-2,fdigit-3,fdigit-4&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Misc table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Misc ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Note for page author - is this for proper industries such as cargo or is it used for passengers at stations as well?--&amp;gt;&lt;br /&gt;
The misc container currently contains times, in seconds, for industry loading and unloading.  Usually, these times are used to enable animations to run before or after loading/unloading.&lt;br /&gt;
&lt;br /&gt;
Each available tag is shown here with sample values.  There are no defaults.&lt;br /&gt;
&lt;br /&gt;
 misc&lt;br /&gt;
 {&lt;br /&gt;
   begin-load-time                   5.0&lt;br /&gt;
   begin-unload-time                 5.0&lt;br /&gt;
   end-load-time                     1.0&lt;br /&gt;
   end-unload-time                   1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;mobile  float&amp;lt;/b&amp;gt; &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt; &lt;br /&gt;
:Setting this to 1 indicates this asset is indended for use on trainz mobile platforms. This will disable and/or compromise certain script features to reduce complexity and improve performance for mobile devices.&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;update-frequency  float&amp;lt;/b&amp;gt; &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:The frequency, in seconds, at which certain event triggered browser-properties are updated. This has a huge impact on performance, and it is best kept as high as possible, ideally 5 or more secconds. The minimum allowed value is 1. If the moible tag is set to 1, the minumum allowed value is 3 secconds.&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to load at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to unloading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon end loading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to end unloading at an industry&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of misc table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Marker-Lights table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Marker-Lights ==&lt;br /&gt;
The Marker-Lights container is used to show or hide light meshes that are identied by entries in the config mesh-table.&lt;br /&gt;
&lt;br /&gt;
Each tag is shown here with sample values.  There are no defaults. &lt;br /&gt;
&lt;br /&gt;
 marker-lights&lt;br /&gt;
 {&lt;br /&gt;
   enabled                             1&lt;br /&gt;
   car-minimum-count                   1&lt;br /&gt;
   require-locomotive                  1&lt;br /&gt;
   night-only                          0&lt;br /&gt;
   front&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;null&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   back&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;enabled (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Whether or not the marker lights are active on this asset.&lt;br /&gt;
*&amp;lt;b&amp;gt;car-minimum-count (an integer number)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The minimum number of cars that must be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;require-locomotive (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, a traincar of Class locomotive will need to be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;night-only (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, the lamps will only be visible at night, otherwise they will be displayed 24/7.&lt;br /&gt;
*&amp;lt;b&amp;gt;Front/back head/tail containers&amp;lt;/b&amp;gt;&lt;br /&gt;
:These containers identify the mesh to use for the front, back, head, and tail lamps.  These meshes must be in the config mesh-table.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of Marker-Lights table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Browser-Properties container table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Browser-Properties ==&lt;br /&gt;
&lt;br /&gt;
*The browser-properties container is a set of zero or more property containers that hold settings for a property such as a smoke effect, an attachment or even texture replacement. They are quite flexible and suitable most any traincar/loco property.&lt;br /&gt;
*A property can have sub properties that are activated with their parent.&lt;br /&gt;
*A property container has a number of tags with values.  Many are common to different property types but some are unique to a property.&lt;br /&gt;
*A container need not contain all available tags.&lt;br /&gt;
*We start with a sample of two properties: one for a texture replacement (skin) and the second for a handbrake activation. These are representative only and may not be suitable for your asset,&lt;br /&gt;
&lt;br /&gt;
  browser-properties&lt;br /&gt;
  {&lt;br /&gt;
    0&lt;br /&gt;
    {&lt;br /&gt;
      enabled                    1&lt;br /&gt;
      property-visibility        1&lt;br /&gt;
      name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
      property-id                &amp;quot;p_skin&amp;quot;&lt;br /&gt;
      consist-property-sync      1&lt;br /&gt;
      description                &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
      kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
      fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
      meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
      effects                    &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
      asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
      files-path                 &amp;quot;null&amp;quot;&lt;br /&gt;
      values                     &amp;quot;0;3,1;4,2;5&amp;quot;&lt;br /&gt;
      default-index              -1&lt;br /&gt;
      trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
      display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
      display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    1&lt;br /&gt;
    {&lt;br /&gt;
      enabled                    1&lt;br /&gt;
      property-visibility        0&lt;br /&gt;
      name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
      property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
      description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
      kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
      mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
      meshes                     &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
      values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
      events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
      duration                   3.2&lt;br /&gt;
      default-index              0&lt;br /&gt;
      trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
      display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
      display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start supported tags--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
===Supported Tags===&lt;br /&gt;
Tag explanations.  Some examples are included in the definition and, for others, see above for sample of usage.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end supported tags--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start asset tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    asset &amp;quot;texturelib&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The kuid-table asset to be used by the property. Use this for cases where you need to reference another asset, such as a texture-replacement library.  Use this tag, the [[#effects|effects]] tag, the [[#meshes|meshes]] tag, or the [[#particle-effects|particle-effects]] tag, but not more than one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end asset tag--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====child-properties====&lt;br /&gt;
:Type:       A string of numbers separated by commas.&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The list of properties that will activate when this property is activated. They will activate at the same index as the parent, similar to consist-property-sync. The property-visibility tag for the child properties should be set to 0. The child properties cannot have their own child-properties tag, and the property-visibility of the child-property must be 0, else it will not activate. You cannot set the child-property to yourself either.&lt;br /&gt;
:Example:    child-properties  &amp;quot;2,4,5&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====conditions====&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “condition”. An array of conditional event(s) that must take place for the property value at the index to activate. Can be one of the following (separated by forward slashes and commas to save space). &lt;br /&gt;
::The format in each comma-separated condition is a basic comparison operation with a left side, an operator, and a right side. The left and right sides can either be a variable (listed below), or a number (integer or float). The three parts are separated by a vertical bar. You can add more comparison operations to the same condition by adding an “&amp;amp;” (and) symbol after the first condition, then adding the second comparison operator (shown in the default conditions example above in black)(this is separate from the comma separation). You can add as many “&amp;amp;”s as you want to the operation, however it will get very long very quickly. The operators used are “==” (equals), “&amp;gt;” (greater than), “&amp;lt;” (less than), “&amp;gt;=” (greater than or equal to), “&amp;lt;=” (less than or equal to), and “!=” (not equal to), and must follow that format.&lt;br /&gt;
&lt;br /&gt;
:::*veh&lt;br /&gt;
::::Contains functions used within Class Vehicle. Subclasses can be any of the listed ones below. All of these are derived from [[#Class_Vehicle|Class Vehicle]]. Please refer to that page for information on function behavior and usage.&amp;lt;br&amp;gt;&lt;br /&gt;
::::&amp;lt;b&amp;gt;example 1: veh_velocity|&amp;gt;=|5&amp;amp;veh_mass&amp;gt;1500  -&amp;gt;&amp;lt;/b&amp;gt; in plain English this reads, “If vehicle velocity is greater than or equal to 5 m/s and the mass is greater then 1500, then…. do something.&lt;br /&gt;
::::&amp;lt;b&amp;gt;example 2: veh_engine-param_main-reservoir-pressure|&amp;lt;|0.5 -&amp;gt;&amp;lt;/b&amp;gt; in plain English this reads, “If the vehicles engine parameter, ‘main-reservoir-pressure’ is greater than 0.5,  then…. do something.&lt;br /&gt;
&lt;br /&gt;
:::::For float:&lt;br /&gt;
::::::*velocity (float)&lt;br /&gt;
::::::*abs-velocity (float)&lt;br /&gt;
:::::::The absolute value of the velocity, this is useful because moving in reverse will give negative inputs for “velocity”, but positive for “abs-velocity”&lt;br /&gt;
::::::*mass (float)&lt;br /&gt;
::::::*length (float)&lt;br /&gt;
::::::*load-time (float)&lt;br /&gt;
::::::*odometer-distance (float)&lt;br /&gt;
::::::*trip-meter-distance (float)&lt;br /&gt;
::::::*track-gradient (float)&lt;br /&gt;
::::::*maximum-tractive-effort (float)&lt;br /&gt;
::::::*default-maximum-tractive-effort (float)&lt;br /&gt;
::::::*wheelslip-traction-multiplier (float)&lt;br /&gt;
::::::*traction-multiplier (float)&lt;br /&gt;
::::::*aux-reservoir-pressure (float)&lt;br /&gt;
::::::*brake-cylinder-pressure (float)&lt;br /&gt;
::::::*brake-pipe-pressure (float)&lt;br /&gt;
::::::*cabin-sway-amount (float)&lt;br /&gt;
::::::*coupling-stress (float)&lt;br /&gt;
::::::*default-cabin-sway-amount (float)&lt;br /&gt;
::::::*default-maximum-coupler-compression-stress (float)&lt;br /&gt;
::::::*default-maximum-coupler-expansion-stress (float)&lt;br /&gt;
::::::*maximum-coupler-compression-stress (float)&lt;br /&gt;
::::::*maximum-coupler-expansion-stress (float)&lt;br /&gt;
::::::*maximum-couple-velocity (float)&lt;br /&gt;
::::::*default-maximum-couple-velocity (float)&lt;br /&gt;
:::::For bool:&lt;br /&gt;
::::::*coupler-breakage-enabled (bool)&lt;br /&gt;
::::::*direction-relative-to-train (bool)&lt;br /&gt;
::::::*drain-cocks (bool)&lt;br /&gt;
::::::*random-automatic-running-number-support (bool)&lt;br /&gt;
::::::*automatic-running-number (bool)&lt;br /&gt;
::::::*high-beams (bool)&lt;br /&gt;
::::::*is-ditch-flashing (bool)&lt;br /&gt;
::::::*automatic-fireman-state (bool)&lt;br /&gt;
::::::*interior-light (bool)&lt;br /&gt;
::::::*interior-light-state (bool)&lt;br /&gt;
::::::*bell-state (bool)&lt;br /&gt;
::::::*has-bell (bool)&lt;br /&gt;
::::::*in-tunnel (bool)&lt;br /&gt;
::::::*on-bridge (bool)&lt;br /&gt;
::::::*derailed (bool)&lt;br /&gt;
::::::*loaded-this-stop (bool)&lt;br /&gt;
::::::*unloaded-this-stop (bool)&lt;br /&gt;
:::::For integer:&lt;br /&gt;
::::::*engine-type (int)&lt;br /&gt;
::::::*vehicle-type-flags (int)&lt;br /&gt;
:::::For string:&lt;br /&gt;
::::::*running-number (string)&lt;br /&gt;
:::::And the engine parameter string:&lt;br /&gt;
::::::*engine-param&lt;br /&gt;
:::::::The main engine parameter strings you can use with this method are:&lt;br /&gt;
:::::::*applied-force&lt;br /&gt;
:::::::*brake-cylinder-pressure&lt;br /&gt;
:::::::*brake-pipe-pressure&lt;br /&gt;
:::::::*current-drawn&lt;br /&gt;
:::::::*equaliser-pressure&lt;br /&gt;
:::::::*flow&lt;br /&gt;
:::::::*horn&lt;br /&gt;
:::::::*main-reservoir-pressure&lt;br /&gt;
:::::::*max-te&lt;br /&gt;
:::::::*no3-pipe-pressure&lt;br /&gt;
:::::::*wheelslip&lt;br /&gt;
:::::::Values that refer only to steam engines:&lt;br /&gt;
:::::::*coal-mass&lt;br /&gt;
:::::::*engine-force&lt;br /&gt;
:::::::*fire-temperature&lt;br /&gt;
:::::::*max-coal-mass&lt;br /&gt;
:::::::*max-fire-temperature&lt;br /&gt;
:::::::*steam-boiler-liquid-percent&lt;br /&gt;
:::::::*steam-boiler-pressure&lt;br /&gt;
:::::::*steam-piston-cycle&lt;br /&gt;
:::*loc&lt;br /&gt;
::::Contains functions used within Class Locomotive. Subclasses can be any of the listed ones below. All of these are derived for Class Locomotive. Please refer to that page for information on function behavior and usage.&lt;br /&gt;
::::*engine-setting&lt;br /&gt;
:::::*The engine setting, currently the only one for the parent class ‘loc’.&lt;br /&gt;
:::::*dynamic-brake&lt;br /&gt;
:::::*headlight &lt;br /&gt;
:::::*horn&lt;br /&gt;
:::::*injector&lt;br /&gt;
:::::*loco-auto-brake&lt;br /&gt;
:::::*pantograph&lt;br /&gt;
:::::*regulator&lt;br /&gt;
:::::*reverser&lt;br /&gt;
:::::*abs-reverser&lt;br /&gt;
:::::*steam-blower&lt;br /&gt;
:::::*throttle&lt;br /&gt;
:::::*train-auto-brake &lt;br /&gt;
:::::*train-lap-brake&lt;br /&gt;
:::::*script-brake-pressure&lt;br /&gt;
:::*tra&lt;br /&gt;
::::For class Train&lt;br /&gt;
::::For float:&lt;br /&gt;
::::*smoothed-velocity (float)&lt;br /&gt;
::::*train-velocity (float)&lt;br /&gt;
::::*abs-smoothed-velocity (float)&lt;br /&gt;
::::*abs-train-velocity (float)&lt;br /&gt;
::::*dcc-throttle (float)&lt;br /&gt;
::::*train-brakes (float)&lt;br /&gt;
::::*speed-limit (float)&lt;br /&gt;
::::*advisory-limit (float)&lt;br /&gt;
::::*advisory-limit-2 (float)&lt;br /&gt;
::::*ai-train-max-speed (float)&lt;br /&gt;
::::For integer:&lt;br /&gt;
::::*autopilot-mode (int)&lt;br /&gt;
::::*reverser (int)&lt;br /&gt;
::::*pantograph-state (int)&lt;br /&gt;
::::*classification-signal (int)&lt;br /&gt;
::::*train-priority-number (int)&lt;br /&gt;
::::*frontmost-locomotive (int-bool)&lt;br /&gt;
::::For bool:&lt;br /&gt;
::::*allows-user-control (bool)&lt;br /&gt;
::::*headlight-state (bool)&lt;br /&gt;
::::*ditchlight-state (bool)&lt;br /&gt;
::::*bell-state (bool)&lt;br /&gt;
::::For string:&lt;br /&gt;
::::*train-display-name (string)&lt;br /&gt;
::::*owning-client (string)&lt;br /&gt;
&lt;br /&gt;
:::*wor&lt;br /&gt;
::::For class World&lt;br /&gt;
::::For float:&lt;br /&gt;
::::*camera-yaw&lt;br /&gt;
::::*camera-pitch&lt;br /&gt;
::::*camera-zoom&lt;br /&gt;
::::*game-time&lt;br /&gt;
::::*game-season&lt;br /&gt;
::::For integer:&lt;br /&gt;
::::*weather-type&lt;br /&gt;
::::*weather-changeability&lt;br /&gt;
::::*camera-mode&lt;br /&gt;
::::*camera-flags&lt;br /&gt;
::::*game-time&lt;br /&gt;
::::*game-year&lt;br /&gt;
::::*game-month&lt;br /&gt;
::::*game-date&lt;br /&gt;
::::*game-session&lt;br /&gt;
::::*current-module&lt;br /&gt;
::::For string:&lt;br /&gt;
::::*local-player-name (string)&lt;br /&gt;
::::For bool:&lt;br /&gt;
::::*restart-stuck-ai (bool)&lt;br /&gt;
::::*asset-restriction-in-effect (bool)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--end conditions--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====consist-property-sync====&lt;br /&gt;
:Type:       Integer - (0 off, 1 on (button), 2 on (automatic)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       Whether or not to sync the property within the consist, if a tag with the same [[#property-sync-id|property-sync-id]] exists in the other assets. Omitting or setting the tag to 0 disables this. Setting it to 1 will create a button to the right of the property that can be clicked on to sync the property. Setting it to 2 will automatically sync the property across the consist whenever a change in the property is detected.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start default-index--&amp;gt;&lt;br /&gt;
====default-index====&lt;br /&gt;
:Type:       Integer (-1 = random)&lt;br /&gt;
:Example:    default-index  0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0&lt;br /&gt;
:Desc:       The default index for the property to start at. This will be 0 if the tag is left out. If it is -1, it will choose a random index to start at.&amp;lt;br&amp;gt;&lt;br /&gt;
Warning:  If you have a list of values such as &amp;quot;1,2,3,4&amp;quot; and you want to set a default, then you should subtract 1 from the preferred value.  For example if you want the first in the list then set the default to 0.  This is because the browser counts the list entries from 0 and not 1.&lt;br /&gt;
&amp;lt;!--end default-index--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====description====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The description of this attachment as it will appear in the Properties Browser.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-type--&amp;gt;&lt;br /&gt;
====display-type====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only. The type of button this will be. It can be any of the trainz property browser value types, plus “manual”, but not map-object or asset-list. &amp;lt;b&amp;gt;For trainzbuild 5.1 and 5.0, only link is supported for the View Details page.&amp;lt;/b&amp;gt; Omitting this tag in combination with property-visibility set to 0 is useful for non-user triggers, such as world or train events.&lt;br /&gt;
:::*string&lt;br /&gt;
:::*int&lt;br /&gt;
:::*float&lt;br /&gt;
:::*list&lt;br /&gt;
:::*link	&lt;br /&gt;
&amp;lt;!--end display-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-values--&amp;gt;&lt;br /&gt;
====display-values====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only, and required for trigger type “user” properties to work, but optional for trigger type “event”. A list of comma-separated values which will be displayed in the view details page for the respective property. The number of values here must match the number of values in the “values” tag.&lt;br /&gt;
&amp;lt;!--end display-values--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start duration--&amp;gt;&lt;br /&gt;
====duration====&lt;br /&gt;
:Type:       Float&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind mesh-animation and mesh-toggle. This tag determines the time to transition to the next state for the value. If it is 0, the transition will occur instantaneously. &amp;lt;b&amp;gt;(There may be issues with using this tag with mesh-toggle.)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Example:    duration 3.2&lt;br /&gt;
&amp;lt;!--end duration--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start of effects (textures)--&amp;gt;&lt;br /&gt;
====effects====&lt;br /&gt;
:Type:       String - (a list of texture names (i.e. texture.txt names without the .txt) each separated by a comma)&lt;br /&gt;
:Example:    effects &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated effect(s) to be modified by the property. Only use this tag if you are using [[#kind|kind]] fx-replacement. Use this tag, the mesh tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end of effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====enabled====&lt;br /&gt;
:Type:       Boolean (1 = true, 0=false)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    No default.&lt;br /&gt;
:Desc:       Whether or not this property is active. This is useful for debugging, or if you want to disable it without removing everything.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start events--&amp;gt;&lt;br /&gt;
====events====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    events  &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “event” only. An array of the event(s) that must take place for the property value at the index to activate. Can be one of the following (separated by forward slashes and commas to save space). &lt;br /&gt;
:::*begin-load/end-load/begin-unload/end-unload&lt;br /&gt;
:::*started-moving/stopped-moving &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*handbrake-apply/handbrake-release&lt;br /&gt;
:::*trainbrake-apply/trainbrake-release&lt;br /&gt;
:::*headlight-on, headlight-off&lt;br /&gt;
:::*throttle-changed &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*front-coupled/back-coupled,front-uncoupled/back-uncoupled &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*view-internal, view-external, view-tracking, view-roaming &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*horn&lt;br /&gt;
:::*bell&lt;br /&gt;
:::*sanding&lt;br /&gt;
:::*pantograph-state-0/1/2/3 (see [[Class_Train#GetPantographState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetPantographState&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*weather-0/1/2/3/4/5/6/7 (see [[Class_World#GetWeatherType|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetWeatherType&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*world-day/world-night&lt;br /&gt;
:::*priority-number-(0 - ∞) (e.g. priority-number-2) &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*arn-(0 -∞ ) (e.g. arn-92220, arn-844) &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*queue-(0 - ∞)- loaded/empty (e.g. &amp;lt;b&amp;gt;queue-0-loaded, queue-1-empty&amp;lt;/b&amp;gt;)&lt;br /&gt;
&amp;lt;!--end events--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start files-path tag--&amp;gt;&lt;br /&gt;
====files-path====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    files-path &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       An optional tag that shortens the number of characters that need to be written to the “values“ tag, assuming they all share the same path or asset library and extension. The path and extension can be specified here (e.g. &amp;lt;b&amp;gt;files-path “images/left/.texture”&amp;lt;/b&amp;gt;), where images/left is the path, and .texture is the extension for all the files.&lt;br /&gt;
&amp;lt;!--end files-path tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start fx-replacement-type--&amp;gt;&lt;br /&gt;
====fx-replacement-type====&lt;br /&gt;
:Type:       String)(kind fx-replacement only)&lt;br /&gt;
:Example:    kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
:::fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of fx replacement effect this property will be if the [[#kind|kind]] tag is set to fx-replacement. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[#values|values]] for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacement|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one within a texture-group asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacementTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement-texture&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one located within this asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXCoronaTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;corona&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a corona effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXNameText|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a name effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAttachment|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;attachment&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces an attachment effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;animation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Plays/Stops an animation effect in the asset.&lt;br /&gt;
&amp;lt;!--end fx-replacement-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====kind====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of property this will be. Can be one of the options below. Most of these are derived from [[Class MeshObject|Class_MeshObject]]. For more info on implementing these, see [[#values|values]].&lt;br /&gt;
::*mesh-attachment&lt;br /&gt;
:::Manipulate the mesh’s animation, position, visibility, etc. See mesh-attachment-type.&lt;br /&gt;
::*fx-replacement&lt;br /&gt;
:::Change an effect in the mesh. See [[#fx-replacement-type|fx-replacement-type]].&lt;br /&gt;
::*particle-effect&lt;br /&gt;
:::Activate/Deactivate/Edit a particle effect (smoke0, smoke1, etc). See [[#particle-effects|particle-effects]] and [[#particle-effect=type|particle-effect-type]].&lt;br /&gt;
::*sound-script&lt;br /&gt;
:::Used to play a sound-script sound within this asset. See [[#sound-triggers|sound-triggers]].&lt;br /&gt;
::*config-edit&lt;br /&gt;
:::Used to edit a tag in the wagon-x config soup. See paths.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start meshes--&amp;gt;&lt;br /&gt;
====meshes====&lt;br /&gt;
:Type:       String - (a list of mesh names from the mesh-table separated by commas)&lt;br /&gt;
:Example:    meshes &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated mesh-table asset(s) to be modified by the property. Use this for [[#kind|kind]] mesh-toggle or kind mesh-animation. Use this tag, the effect tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end meshes--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start mesh-attachment--&amp;gt;&lt;br /&gt;
====mesh-attachment-type====&lt;br /&gt;
:Type:       String - (kind mesh-attachment only)&lt;br /&gt;
:Example:    kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
::           mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of mesh property this property will be if the kind tag is set to mesh-attachment. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See values for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshVisible|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-toggle&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Toggle between the mesh(s) being visible or hidden.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshOrientation|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-translation-orientation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the translation and orientation of the mesh(es)&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationFrame|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-frame&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the frame(s) the meshes animation will move between. Useful for door opening and closing animations, or animations that require more than 2 states.&lt;br /&gt;
::*[[Class_MeshObject#StartMeshAnimationLoop|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-loop&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Start or stop an animation-loop on the mesh.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-state&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the state of the mesh(s) animation.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationSpeed|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-speed&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Changes the speed of the meshes animation.&lt;br /&gt;
&amp;lt;!--end mesh-attachment--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====name====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The display name of this property, as will appear on the properties page.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of particle-effects--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====particle-effects====&lt;br /&gt;
:Type:       String - (a list of integer numbers as a string)&lt;br /&gt;
:Example:    particle-effects &amp;quot;0,1&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind particle-effect. The comma-separated list of PFX effects to be modified by the property. See kind for help on implementation. &amp;lt;b&amp;gt;There is currently no use for this tag as of yet. pfx-message doesn&#039;t need this because everything is already specified in the values tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--end particle-effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of particle-effect-type--&amp;gt;&lt;br /&gt;
&amp;lt;!--need to come back and check this as I don&#039;t understand how this works--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====particle-effect-type====&lt;br /&gt;
:Type:       String (kind mesh-attachment only)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of PFX function this property will be if the [[#kind|kind]] tag is set to particle-effect.&lt;br /&gt;
Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[#values|values]] for instructions on how to implement these properties.  Most of these are derived for the PFXEmitter properties specified in [[MapObject|Class MapObject]], with the prefix “GetPFXEmitter” omitted. All except [[MapObject#SetPFXEmitterTexture|SetPFXEmitterTexture]] are supported.&lt;br /&gt;
:Example:    kind  &amp;quot;particle-effect&amp;quot;&lt;br /&gt;
:            particle-effect-type &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
:Comments:  Needs to be validated with examples!&lt;br /&gt;
::*[[pfx_Message|pfx-message]]&lt;br /&gt;
:::Send a message to enable/disable a particle effect.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterConeSize|cone-size &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the cone size with x,y and z sizes in values tag.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterEmitParticles|emit-particles &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the number of particles and time they will be created.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterEndColor|end-color &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the end colour of the particles.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterStartColor|start-color &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the start colour of the particles.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterLifetime|lifetime &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the emitter lifetime using seconds.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMaxRate|max-rate &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the emitter maximum rate per second.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMinRate|min-rate &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the emitter minimum rate per second.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMaxSize|max-size &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the maximum size size of particles. The size is a single float.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMinSize|min-size &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the minimum size of particles.  The size is a single float.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterPhysicsDelay|physics-delay &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the physics delay for the emitter.  The delay value is in seconds.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterRate|rate &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Set a new rate of particle creation per second.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterVelocity|velocity &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Set the emitter velocity in metres per second along the direction vector.&lt;br /&gt;
&lt;br /&gt;
For examples see.... (tbd)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--THIS DOESN&#039;T LOOK RIGHT - CHECK--&amp;gt;&lt;br /&gt;
====paths====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    paths                      &amp;quot;marker-lights/night-only&amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind config-edit. A comma-separated list of paths that point to the tag in the wagon-x config to edit.&lt;br /&gt;
&amp;lt;!--end paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start property-id tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The formal name (ID) of this property, used to identify and change this property. For example, If the name is &amp;lt;b&amp;gt;Workflow&amp;lt;/b&amp;gt;, it might be a good idea to call this &amp;lt;b&amp;gt;p_workflow&amp;lt;/b&amp;gt;. &amp;lt;div style=&amp;quot;color: #ff0080&amp;quot;&amp;gt;This must be unique for each browser-property&amp;lt;/div&amp;gt;.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start property-sync-id tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-sync-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The ID that determines which assets will be affected when consist-property-sync is activated. Only assets that share this ID will be synced in the consist, so be sure to make it particular and unique.&lt;br /&gt;
:Example:    property-sync-id  &amp;quot;soundBell&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start property-visibility tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====property-visibility====&lt;br /&gt;
:Type:       Integer - (0 = Hidden, 1 = Visible, 2 = Surveyor Only, 3 = Driver Only) &lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0 (hidden)&lt;br /&gt;
:Desc:       Indicates whether the property will be visible in the Properties Browser and in what mode.	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start sound-triggers--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====sound-triggers====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    sound-triggers             &amp;quot;bell_1,bell_2&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind sound-script only. This specifies the soundscript trigger(s) (comma separated) that this property will start/stop when the property is activated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end sound-triggers--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start target-asset tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====target-asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    target-asset &amp;quot;bogey-0&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       This determines which assets config this property will manipulate. This tag is currently only used for manipulating a vehicles bogey (e.g. texture replacement). The name must be “bogey-” + the index of the bogey to edit. This gives you full access to the bogeys mesh-table, allowing you to set texture replacements, mesh toggles, and other properties within the bogey. This tag can be omitted if you are not doing bogey texture replacements. &amp;lt;b&amp;gt;Only properties of kind “mesh-attachment” or “fx-replacement” can be used for properties that use this tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end target-asset tag--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start trigger--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====trigger====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    Null (ignored)&lt;br /&gt;
:Desc:       The event that will trigger/activate this property. Can be either an external event, such as a coal-loading animation, or a user-controlled event, or both. Setting it to none is useful if this is a [[#child-properties|child-properties]] property of another property. Possible values are:&lt;br /&gt;
:::*user&lt;br /&gt;
:::*event&lt;br /&gt;
:::*parent&lt;br /&gt;
:::*condition &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*variable &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
::::multiple &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*both &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(obsolete as of v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*none&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:User:      Used when the property is updated by the user in the Properties Browser.&lt;br /&gt;
:Event:     Used when the property is to be triggering by an event initiated by Trainz such as day to night.  These are generally the result of messages posted either by the system or other asset scripts.&lt;br /&gt;
:Parent:    Used in a child property where the property is to be activated by a parent property.&lt;br /&gt;
:Condition: TBA&lt;br /&gt;
:Variable:  TBA	&lt;br /&gt;
:Multiple:  TBA&lt;br /&gt;
:Both:      TBA&lt;br /&gt;
:None:      No trigger.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end trigger--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start update-events--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====update-events====&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       Very similar to the ‘events’ tag, except this tag triggers a refresh of the conditional and variable events within this property based on the triggered event. By default, conditional events refresh at a certain time interval, based on the ‘update-frequency’ tag. Adding this tag will refresh the property immediately when the trigger event is activated. Can be any of the property events in the ‘events’ tag.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end update-events--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start values tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====values====&lt;br /&gt;
:Type:       String - (a string list separated by special characters)&lt;br /&gt;
:Example1    values                     &amp;quot;0,15,30&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       A comma-separated (and optionally semicolon-separated) list of all the files/values to be switched between. If the files-path tag is used, only include each file’s name (exclude the path and extension). This tag is required for all properties. If it is not wanted, leave the value at “1”, but keep the tag still. For booleans, use 1 for true, and 0 for false. For animations, specify the animation frames you want to toggle through. For details on using the semicolon separator to shorten properties, see [[WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Using_semicolons_to_set_multiple_values_in_one_property|Examples and Basic Tutorials]].&amp;lt;br&amp;gt;&lt;br /&gt;
Each kind has its own rules for what to put here, explained below. See the [[#kind|kind]] property for more info on these.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--mesh-attachment--&amp;gt;&lt;br /&gt;
:::*For kind mesh-attachment:&lt;br /&gt;
::::*For mesh-attachment-type mesh-toggle, the value must be either 0 or 1 (visible/hidden) ???&lt;br /&gt;
::::*For mesh-attachment-type mesh-translation-orientation, the value must be a 3-dimensional vector with values separated by backticks, enclosed with round brackets for the translation, followed by a colon, then another round bracket-enclosed 3d vector for the orientation, as shown below. 0`2`4 is the translation, and 1.2`2`2 is the orientation (we have to use backticks because the comma is already used here for separating each index value).&lt;br /&gt;
::::Example: values  &amp;quot;(0`2`4):(1.2`2`2),(0`0`0):(0`0`0)&amp;quot;&lt;br /&gt;
&amp;lt;!--mesh-attachment-type--&amp;gt;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-speed, the value is the speed of the animation for that index&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value will be an integer bool (0 or 1) to indicate whether to start the loop, or stop it. You can create a separate property that controls the mesh-animation-speed, and link it via a [[#child-properties|child-properties]] property to control the speed of the loop.&lt;br /&gt;
:::*For mesh-attachment type mesh-animation-frame, the value is the frame of the animation to jump to. Setting it to -1 will put that index at the last animation frame in the mesh (see [[Class_MeshObject#GetMeshAnimationFrameCount|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetMeshAnimationFrameCount&amp;lt;/span&amp;gt;]]).&lt;br /&gt;
::::Example:  values  &amp;quot;0,30&amp;quot;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value can be 0 or 1, to start/stop the loop&lt;br /&gt;
&amp;lt;!--sound-script--&amp;gt;&lt;br /&gt;
:::*For kind sound-script, the value can be 0 or 1, to start/stop the soundscript event&lt;br /&gt;
&amp;lt;!--config-edit--&amp;gt;&lt;br /&gt;
:::*For kind config-edit, the value is a string indicating the string value to assign to the config tag.&lt;br /&gt;
&amp;lt;!--particle-effect--&amp;gt;&lt;br /&gt;
:::*For kind particle-effect:&lt;br /&gt;
:::*For particle-effect-type pfx-message, the value follows the same rules for [[Pfx_Message|pfx message]].&lt;br /&gt;
::::*particle-effect-type       &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
::::Example:  values  &amp;quot;+0+1,-1-0&amp;quot;&lt;br /&gt;
&amp;lt;!--fx-replacement--&amp;gt;&lt;br /&gt;
:::*For kind fx-replacement:&lt;br /&gt;
::::*For fx-replacement-type texture-replacement, the comma and/or. semicolon-separated values represent the index in the texture-group asset to find the texture. Setting the first value to 1 will reference the texture index 1, shown in the partial config for a textures asset below:&lt;br /&gt;
::::Values “0,2,1” will reference the textures in the texture container at indexes 0, 2, and 1, in that order when cycled through.&lt;br /&gt;
::::Example: values  “0,2,1”&lt;br /&gt;
&lt;br /&gt;
  kuid          &amp;lt;kuid:1234:123456&amp;gt;&lt;br /&gt;
  username      &amp;quot;test texture group asset&amp;quot;&lt;br /&gt;
  trainz-build  4.6&lt;br /&gt;
  description   &amp;quot;test texture group&amp;quot;&lt;br /&gt;
  textures&lt;br /&gt;
  {&lt;br /&gt;
  0           &amp;quot;textures\0albedo.texture&amp;quot;&lt;br /&gt;
  1           &amp;quot;textures\1albedo.texture&amp;quot;&lt;br /&gt;
  2           &amp;quot;textures\2albedo.texture&amp;quot;&lt;br /&gt;
  3           &amp;quot;textures\0parameter.texture&amp;quot;&lt;br /&gt;
  4           &amp;quot;textures\1parameter.texture&amp;quot;&lt;br /&gt;
  5           &amp;quot;textures\2parameter.texture&amp;quot; &lt;br /&gt;
  6           &amp;quot;textures\0normal.texture&amp;quot;&lt;br /&gt;
  7           &amp;quot;textures\1normal.texture&amp;quot;&lt;br /&gt;
  8           &amp;quot;textures\2normal.texture&amp;quot;         &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type texture-replacement-texture, the comma and/or semicolon-separated values are the names of the files (ideally without the path or extension) to be referenced at that index. &lt;br /&gt;
::::Example: values  &amp;quot;images/congleton.texture,images/burntisland.texture,images/buxton.texture,images/none.texture&amp;quot;&lt;br /&gt;
::::If you have the same path (and same extension) for all your files, you can greatly reduce the clutter by just specifying the path and extension once using the files-path tag.  So, in this case the values entry would be:&lt;br /&gt;
::::Example: values &amp;quot;congleton,burntisland,buxton,none&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
  enabled                    1&lt;br /&gt;
  property-visibility        1&lt;br /&gt;
  name                       &amp;quot;Workflow Text: &amp;quot;&lt;br /&gt;
  property-id                &amp;quot;p_workflow&amp;quot;&lt;br /&gt;
  description                &amp;quot;Sets the Workflow&amp;quot;&lt;br /&gt;
  kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
  fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
  consist-property-sync      1&lt;br /&gt;
  meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
  effects                    &amp;quot;texture-extra&amp;quot;&lt;br /&gt;
  asset                      &amp;quot;null&amp;quot;&lt;br /&gt;
  files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
  values                     &amp;quot;congleton,burntisland,buxton,none&amp;quot;&lt;br /&gt;
  default-index              0&lt;br /&gt;
  trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
  display-type               &amp;quot;list&amp;quot;&lt;br /&gt;
  display-values             &amp;quot;Congleton,Burntisland,Buxton,None&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type attachment, the values are the names of the attachment effects to be replaced by the specified [[#asset|asset]].&lt;br /&gt;
::::*For fx-replacement-type corona, the values are the names of the corona effects to be replaced by the specified [[#asset|asset]].&lt;br /&gt;
::::*For fx-replacement-type animation, the values are the names of the animation effects to be replaced by the specified [[#asset|asset]].&lt;br /&gt;
::::*For fx-replacement-type name, the values are the names that will replace the current name of the specified name effect.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end values tag--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start variables--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====variables====&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Added in version 1.2 (needs validation)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “variable”. An array of variable event(s) that control the value of the property using any of the conditional values and five arithmetic operators, ‘+’ (addition), ‘-’ (subtraction), ‘*’ (multiplication), ‘/’ (division), ‘^’ (exponent). You can use as many ‘|’ separated operators as you want. The operations do not follow the standard PEMDAS order of operations but are performed in a left-to-right additive manner. &lt;br /&gt;
:Example1:    a*b+c is the same as (a*b)+c,&lt;br /&gt;
:Example2:    c+a*b is the same as (c+a)*b, and&lt;br /&gt;
:Example3:    a*b+c/2 is the same as ((a*b)+c)/2&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end variables--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start copyright notice--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
=Copyright Notice=&lt;br /&gt;
Much of the content on this page and child pages was derived from Dundun92&#039;s original Google Docs document.  Permission was granted to use that information here.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end copyright notice--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40169</id>
		<title>HowTo/WagonX - Technical Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40169"/>
		<updated>2024-02-29T06:24:52Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Added changes for WagonX 1.2 (still in development) and some tidy up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= Document Structure =&lt;br /&gt;
&lt;br /&gt;
The WagonX Tutorial set is written over several pages.  This page is a base reference for using WagonX config containers, their properties and the values for those properties.  Other pages in the series are:&lt;br /&gt;
&lt;br /&gt;
# [[HowTo/Use the WagonX Library|How to use the WagonX library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials|WagonX Examples and Basic Tutorials]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Traincar Tutorial|WagonX Traincar Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial|WagonX Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= The WagonX Reference =&lt;br /&gt;
&lt;br /&gt;
This page contains details of the WagonX extension container and sub-containers.  Links to examples of use will be provided when available.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= Restricted Characters =&lt;br /&gt;
&lt;br /&gt;
The characters in the list below cannot be used for some property tag values as they are used by the script to parse or identify values such as list items and other information. They can be used in name and description tags. Use of these characters in tag values is identified in the properties descriptions that follow. See also [[#display-values|display-values]].&lt;br /&gt;
 &lt;br /&gt;
*Comma ( , ) &lt;br /&gt;
*Semicolon ( ; ) &lt;br /&gt;
*Backtick/Grave ( ` )&lt;br /&gt;
*Colon ( : )&lt;br /&gt;
*Caret ( ^ )	&lt;br /&gt;
*Round brackets ( and )&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Using commas and semi-colons in a list ==&lt;br /&gt;
WagonX uses commas to identify items in a list. Some examples might be &amp;quot;1,2,3,4&amp;quot;for a list of four integers, &amp;quot;Rita, Rose, Ruth&amp;quot; of three nameboards for a Pullman car, and &amp;quot;0,1&amp;quot; for a list of booleans (false and true).&amp;lt;br&amp;gt;&lt;br /&gt;
Semi-colons are used to items in a set, where sets are items in a list.  Le&#039;s say we have three sets each consisting of integer numbers,then we might use something like &amp;quot;1;2;3;4,9;3;6;5,13;12;15;16&amp;quot;.  The first set is 1,2,3 and 4, the second set 9,3,6 and 5, and the last 13,12,15 and 16.&lt;br /&gt;
&amp;lt;br&amp;gt;This notation is common where we might want apply some value to items in a set.  For example, our sets might each consist of four meshes for a car to which we want to apply a particular livery. List such as these are commonly used in the [[#values|values]] tag.&lt;br /&gt;
&amp;lt;br&amp;gt;See also [[WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Using_semicolons_to_set_multiple_values_in_one_property|Using semicolons to set multiple values in one property]].&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Using the grave symbol in a list ==&lt;br /&gt;
The backtick or grave symbol allows you to set multiple variables on a single function in one property. It&#039;s typically used to set the value for all the parameters in the pfx emitter functions. It&#039;s also used for mest-attachment-type mesh-translation-orientation parameters.&lt;br /&gt;
For example, if you want to set the start color with these values (0,0,128,128,128,64), but you want each of those variables to be set in one property then use &amp;quot;0`0`128`128`128`64&amp;quot;.&lt;br /&gt;
You can also use this symbol to populate your set of parameters with variables such as &amp;quot;veh_velocity|/|2`veh_velocity|+2`veh_velocity|-|loc_abs_reverser&amp;quot;.  In simple english that means the first parameter is the vehicle velocity divided by 2, the second parameter is the vehicle velocity plus 2, and the final parameter is the vehicle length minus the absolute value of the loco reverser.  Hmm, that doesn&#039;t make a lot of sense but its only an example.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Other special characters ==&lt;br /&gt;
Caret - The caret/circumflex symbol (^) is a math power operator.  It can be used in variables.&amp;lt;br&amp;gt;&lt;br /&gt;
Round Brackets - Round brackets are used to group mesh vectors translation and orientation.  In this instance, colons are used to separate the vectors.  For example, &amp;quot;(0`2`4):(1.2`2`2),(0`0`0):(0`0`0)&amp;quot;.  See [[#values|values]].&amp;lt;br&amp;gt;&lt;br /&gt;
Colon - See Round Brackets above.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
= General Layout =&lt;br /&gt;
&lt;br /&gt;
WagonX config tags are defined in the extensions container along with other extensions such as ACS Lib. The general layout of the extensions container that also includes ACS Lib might look like this:&lt;br /&gt;
 extensions&lt;br /&gt;
 {&lt;br /&gt;
   max_permitted_speed-60850     &amp;quot;50mph&amp;quot;&lt;br /&gt;
   active-coupling-standard-60850&lt;br /&gt;
   {&lt;br /&gt;
    ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
    ...&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
= WagonX Properties =&lt;br /&gt;
&lt;br /&gt;
	There are currently four standard or &amp;quot;top level&amp;quot; WagonX containers that define properties for Marker Lights,text-x, a variation of ACSLib and Misc (miscellaneous).  In addition to the standard containers, you can define zero or more additonal property containers that are identified by integer value names starting from 0.  Each of these containers are defined below.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of ACS table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== ACS ==&lt;br /&gt;
For help on creating the acs extensions and setting up the acs mesh-table objects, see [[HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Naming_ACS_mesh-table_attachments|Naming ACS mesh-table attachments]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each tag is shown here with sample values. There are no default values.&lt;br /&gt;
&lt;br /&gt;
 acs&lt;br /&gt;
 {&lt;br /&gt;
   animated                            1&lt;br /&gt;
   use-jbv-animation                   1&lt;br /&gt;
   duration                            1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;animated (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:This determines whether to use animations to move between the coupled and uncoupled state, or use individual static assets for each state.&lt;br /&gt;
*&amp;lt;b&amp;gt;use-jbv-animation (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:An animation system the author (DunDun92) made for compressing buffers and dynamic couplings and hoses, which is now being phased out due to performance problems. leave it at 0, unless you are using the JBV BR Mesh Library or BR class 101 mesh library, or any of his other libraries.&lt;br /&gt;
*&amp;lt;b&amp;gt;duration (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time, in seconds, that the mesh animation will take to move between the two states. If animated is set to 0, this will determine the fade duration when switching between meshes (fade duration on mesh objects in trainzbuild 5.0 + can get buggy)&lt;br /&gt;
*&amp;lt;b&amp;gt;buffer-length-front  float&amp;lt;/b&amp;gt;&lt;br /&gt;
:The distance between a.couple0 and a.limfront in meters. To be used with the jbv animation system. Requires the  ‘use-jbv-animation’ tag to be set to 1&lt;br /&gt;
*&amp;lt;b&amp;gt;buffer-length-back  float&amp;lt;/b&amp;gt;&lt;br /&gt;
:The distance between a.couple1 and a.limback in meters. To be used with the jbv animation system. Requires the  ‘use-jbv-animation’ tag to be set to 1&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== text-x ==&lt;br /&gt;
&amp;lt;!--start of ACS table--&amp;gt;&lt;br /&gt;
WagonX V1.2 or greater.&lt;br /&gt;
(description yet to be included - ARN and/or headcodes? - validation required)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;controller string&amp;lt;/b&amp;gt; &lt;br /&gt;
:Determines how the property will be controlled. Can be controlled by the user, the running number, or a custom range. &lt;br /&gt;
:::*user&lt;br /&gt;
:::*arn&lt;br /&gt;
:::*range&lt;br /&gt;
*&amp;lt;b&amp;gt;range  string&amp;lt;/b&amp;gt; &lt;br /&gt;
:Defines the range of values the for the text proprety. It will choose a random index to start&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;value  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:The default value for the text property. This can be formated in two ways. For texture files with single-character identifiers, each character can be written together (e.g. “a12d”). For texture files with multiple-character identifiers, each identifier needs to be separated by a comma (e.g. “dot,3,dash,k”).&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;font  int&amp;lt;/b&amp;gt;&lt;br /&gt;
:The default font index for the text property, these values can be changeed by adding a “config-edit” property to the browser-properties.&lt;br /&gt;
*&amp;lt;b&amp;gt;files-path  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:An optional tag that shortens the number of characters that need to be written to the “values“ tag, assuming they all share the same path or asset library and extension. The path and extension can be specified here (e.g. files-path “images/left/.texture”), where images/left is the path, and .texture is the extension for all the files.&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;textures  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:The list of texture files to use. The ‘#’ symbol is used by the script as a placeholder identifier for the value input. For example, if it is set to ‘alpha_digit-#’, each letter and number will go where the ‘#’, e.g. If the first chartcher in the value tag is ‘a’, it will look for the texture ‘images/alpha_digit-a.texture’, to use for the first texture effect digit. Each comma separated value coorispinds to the font to use at each index.&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;effects  string&amp;lt;/b&amp;gt;&lt;br /&gt;
:The texture replacement effects to use for displaying the text.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each tag is shown here with sample values.&lt;br /&gt;
&lt;br /&gt;
 text-x&lt;br /&gt;
 {&lt;br /&gt;
  text-properties&lt;br /&gt;
  {&lt;br /&gt;
    headcode&lt;br /&gt;
    {&lt;br /&gt;
    controller                &amp;quot;user&amp;quot;&lt;br /&gt;
    range                     &amp;quot;null&amp;quot;&lt;br /&gt;
    value                     &amp;quot;2,5,dots,2&amp;quot;&lt;br /&gt;
    font                      0&lt;br /&gt;
    files-path                &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
    textures                  &amp;quot;fd-#&amp;quot;&lt;br /&gt;
    effects                   &amp;quot;fdigit-1,fdigit-2,fdigit-3,fdigit-4&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Misc table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Misc ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Note for page author - is this for proper industries such as cargo or is it used for passengers at stations as well?--&amp;gt;&lt;br /&gt;
The misc container currently contains times, in seconds, for industry loading and unloading.  Usually, these times are used to enable animations to run before or after loading/unloading.&lt;br /&gt;
&lt;br /&gt;
Each available tag is shown here with sample values.  There are no defaults.&lt;br /&gt;
&lt;br /&gt;
 misc&lt;br /&gt;
 {&lt;br /&gt;
   begin-load-time                   5.0&lt;br /&gt;
   begin-unload-time                 5.0&lt;br /&gt;
   end-load-time                     1.0&lt;br /&gt;
   end-unload-time                   1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;mobile  float&amp;lt;/b&amp;gt; &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt; &lt;br /&gt;
:Setting this to 1 indicates this asset is indended for use on trainz mobile platforms. This will disable and/or compromise certain script features to reduce complexity and improve performance for mobile devices.&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;update-frequency  float&amp;lt;/b&amp;gt; &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:The frequency, in seconds, at which certain event triggered browser-properties are updated. This has a huge impact on performance, and it is best kept as high as possible, ideally 5 or more secconds. The minimum allowed value is 1. If the moible tag is set to 1, the minumum allowed value is 3 secconds.&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to load at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to unloading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon end loading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to end unloading at an industry&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of misc table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Marker-Lights table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Marker-Lights ==&lt;br /&gt;
The Marker-Lights container is used to show or hide light meshes that are identied by entries in the config mesh-table.&lt;br /&gt;
&lt;br /&gt;
Each tag is shown here with sample values.  There are no defaults. &lt;br /&gt;
&lt;br /&gt;
 marker-lights&lt;br /&gt;
 {&lt;br /&gt;
   enabled                             1&lt;br /&gt;
   car-minimum-count                   1&lt;br /&gt;
   require-locomotive                  1&lt;br /&gt;
   night-only                          0&lt;br /&gt;
   front&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;null&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   back&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;enabled (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Whether or not the marker lights are active on this asset.&lt;br /&gt;
*&amp;lt;b&amp;gt;car-minimum-count (an integer number)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The minimum number of cars that must be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;require-locomotive (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, a traincar of Class locomotive will need to be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;night-only (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, the lamps will only be visible at night, otherwise they will be displayed 24/7.&lt;br /&gt;
*&amp;lt;b&amp;gt;Front/back head/tail containers&amp;lt;/b&amp;gt;&lt;br /&gt;
:These containers identify the mesh to use for the front, back, head, and tail lamps.  These meshes must be in the config mesh-table.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of Marker-Lights table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Browser-Properties container table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
== Browser-Properties ==&lt;br /&gt;
&lt;br /&gt;
*The browser-properties container is a set of zero or more property containers that hold settings for a property such as a smoke effect, an attachment or even texture replacement. They are quite flexible and suitable most any traincar/loco property.&lt;br /&gt;
*A property can have sub properties that are activated with their parent.&lt;br /&gt;
*A property container has a number of tags with values.  Many are common to different property types but some are unique to a property.&lt;br /&gt;
*A container need not contain all available tags.&lt;br /&gt;
*We start with a sample of two properties: one for a texture replacement (skin) and the second for a handbrake activation. These are representative only and may not be suitable for your asset,&lt;br /&gt;
&lt;br /&gt;
  browser-properties&lt;br /&gt;
  {&lt;br /&gt;
    0&lt;br /&gt;
    {&lt;br /&gt;
      enabled                    1&lt;br /&gt;
      property-visibility        1&lt;br /&gt;
      name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
      property-id                &amp;quot;p_skin&amp;quot;&lt;br /&gt;
      consist-property-sync      1&lt;br /&gt;
      description                &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
      kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
      fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
      meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
      effects                    &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
      asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
      files-path                 &amp;quot;null&amp;quot;&lt;br /&gt;
      values                     &amp;quot;0;3,1;4,2;5&amp;quot;&lt;br /&gt;
      default-index              -1&lt;br /&gt;
      trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
      display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
      display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    1&lt;br /&gt;
    {&lt;br /&gt;
      enabled                    1&lt;br /&gt;
      property-visibility        0&lt;br /&gt;
      name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
      property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
      description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
      kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
      mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
      meshes                     &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
      values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
      events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
      duration                   3.2&lt;br /&gt;
      default-index              0&lt;br /&gt;
      trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
      display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
      display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start supported tags--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
===Supported Tags===&lt;br /&gt;
Tag explanations.  Some examples are included in the definition and, for others, see above for sample of usage.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end supported tags--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start asset tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    asset &amp;quot;texturelib&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The kuid-table asset to be used by the property. Use this for cases where you need to reference another asset, such as a texture-replacement library.  Use this tag, the [[#effects|effects]] tag, the [[#meshes|meshes]] tag, or the [[#particle-effects|particle-effects]] tag, but not more than one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end asset tag--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====child-properties====&lt;br /&gt;
:Type:       A string of numbers separated by commas.&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The list of properties that will activate when this property is activated. They will activate at the same index as the parent, similar to consist-property-sync. The property-visibility tag for the child properties should be set to 0. The child properties cannot have their own child-properties tag, and the property-visibility of the child-property must be 0, else it will not activate. You cannot set the child-property to yourself either.&lt;br /&gt;
:Example:    child-properties  &amp;quot;2,4,5&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====conditions====&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “condition”. An array of conditional event(s) that must take place for the property value at the index to activate. Can be one of the following (separated by forward slashes and commas to save space). &lt;br /&gt;
::The format in each comma-separated condition is a basic comparison operation with a left side, an operator, and a right side. The left and right sides can either be a variable (listed below), or a number (integer or float). The three parts are separated by a vertical bar. You can add more comparison operations to the same condition by adding an “&amp;amp;” (and) symbol after the first condition, then adding the second comparison operator (shown in the default conditions example above in black)(this is separate from the comma separation). You can add as many “&amp;amp;”s as you want to the operation, however it will get very long very quickly. The operators used are “==” (equals), “&amp;gt;” (greater than), “&amp;lt;” (less than), “&amp;gt;=” (greater than or equal to), “&amp;lt;=” (less than or equal to), and “!=” (not equal to), and must follow that format.&lt;br /&gt;
&lt;br /&gt;
:::*veh&lt;br /&gt;
::::Contains functions used within Class Vehicle. Subclasses can be any of the listed ones below. All of these are derived from [[#Class_Vehicle|Class Vehicle]]. Please refer to that page for information on function behavior and usage.&amp;lt;br&amp;gt;&lt;br /&gt;
::::&amp;lt;b&amp;gt;example 1: veh_velocity|&amp;gt;=|5&amp;amp;veh_mass&amp;gt;1500  -&amp;gt;&amp;lt;/b&amp;gt; in plain English this reads, “If vehicle velocity is greater than or equal to 5 m/s and the mass is greater then 1500, then…. do something.&lt;br /&gt;
::::&amp;lt;b&amp;gt;example 2: veh_engine-param_main-reservoir-pressure|&amp;lt;|0.5 -&amp;gt;&amp;lt;/b&amp;gt; in plain English this reads, “If the vehicles engine parameter, ‘main-reservoir-pressure’ is greater than 0.5,  then…. do something.&lt;br /&gt;
&lt;br /&gt;
:::::For float:&lt;br /&gt;
::::::*velocity (float)&lt;br /&gt;
::::::*abs-velocity (float)&lt;br /&gt;
:::::::The absolute value of the velocity, this is useful because moving in reverse will give negative inputs for “velocity”, but positive for “abs-velocity”&lt;br /&gt;
::::::*mass (float)&lt;br /&gt;
::::::*length (float)&lt;br /&gt;
::::::*load-time (float)&lt;br /&gt;
::::::*odometer-distance (float)&lt;br /&gt;
::::::*trip-meter-distance (float)&lt;br /&gt;
::::::*track-gradient (float)&lt;br /&gt;
::::::*maximum-tractive-effort (float)&lt;br /&gt;
::::::*default-maximum-tractive-effort (float)&lt;br /&gt;
::::::*wheelslip-traction-multiplier (float)&lt;br /&gt;
::::::*traction-multiplier (float)&lt;br /&gt;
::::::*aux-reservoir-pressure (float)&lt;br /&gt;
::::::*brake-cylinder-pressure (float)&lt;br /&gt;
::::::*brake-pipe-pressure (float)&lt;br /&gt;
::::::*cabin-sway-amount (float)&lt;br /&gt;
::::::*coupling-stress (float)&lt;br /&gt;
::::::*default-cabin-sway-amount (float)&lt;br /&gt;
::::::*default-maximum-coupler-compression-stress (float)&lt;br /&gt;
::::::*default-maximum-coupler-expansion-stress (float)&lt;br /&gt;
::::::*maximum-coupler-compression-stress (float)&lt;br /&gt;
::::::*maximum-coupler-expansion-stress (float)&lt;br /&gt;
::::::*maximum-couple-velocity (float)&lt;br /&gt;
::::::*default-maximum-couple-velocity (float)&lt;br /&gt;
:::::For bool:&lt;br /&gt;
::::::*coupler-breakage-enabled (bool)&lt;br /&gt;
::::::*direction-relative-to-train (bool)&lt;br /&gt;
::::::*drain-cocks (bool)&lt;br /&gt;
::::::*random-automatic-running-number-support (bool)&lt;br /&gt;
::::::*automatic-running-number (bool)&lt;br /&gt;
::::::*high-beams (bool)&lt;br /&gt;
::::::*is-ditch-flashing (bool)&lt;br /&gt;
::::::*automatic-fireman-state (bool)&lt;br /&gt;
::::::*interior-light (bool)&lt;br /&gt;
::::::*interior-light-state (bool)&lt;br /&gt;
::::::*bell-state (bool)&lt;br /&gt;
::::::*has-bell (bool)&lt;br /&gt;
::::::*in-tunnel (bool)&lt;br /&gt;
::::::*on-bridge (bool)&lt;br /&gt;
::::::*derailed (bool)&lt;br /&gt;
::::::*loaded-this-stop (bool)&lt;br /&gt;
::::::*unloaded-this-stop (bool)&lt;br /&gt;
:::::For integer:&lt;br /&gt;
::::::*engine-type (int)&lt;br /&gt;
::::::*vehicle-type-flags (int)&lt;br /&gt;
:::::For string:&lt;br /&gt;
::::::*running-number (string)&lt;br /&gt;
:::::And the engine parameter string:&lt;br /&gt;
::::::*engine-param&lt;br /&gt;
:::::::The main engine parameter strings you can use with this method are:&lt;br /&gt;
:::::::*applied-force&lt;br /&gt;
:::::::*brake-cylinder-pressure&lt;br /&gt;
:::::::*brake-pipe-pressure&lt;br /&gt;
:::::::*current-drawn&lt;br /&gt;
:::::::*equaliser-pressure&lt;br /&gt;
:::::::*flow&lt;br /&gt;
:::::::*horn&lt;br /&gt;
:::::::*main-reservoir-pressure&lt;br /&gt;
:::::::*max-te&lt;br /&gt;
:::::::*no3-pipe-pressure&lt;br /&gt;
:::::::*wheelslip&lt;br /&gt;
:::::::Values that refer only to steam engines:&lt;br /&gt;
:::::::*coal-mass&lt;br /&gt;
:::::::*engine-force&lt;br /&gt;
:::::::*fire-temperature&lt;br /&gt;
:::::::*max-coal-mass&lt;br /&gt;
:::::::*max-fire-temperature&lt;br /&gt;
:::::::*steam-boiler-liquid-percent&lt;br /&gt;
:::::::*steam-boiler-pressure&lt;br /&gt;
:::::::*steam-piston-cycle&lt;br /&gt;
:::*loc&lt;br /&gt;
::::Contains functions used within Class Locomotive. Subclasses can be any of the listed ones below. All of these are derived for Class Locomotive. Please refer to that page for information on function behavior and usage.&lt;br /&gt;
::::*engine-setting&lt;br /&gt;
:::::*The engine setting, currently the only one for the parent class ‘loc’.&lt;br /&gt;
:::::*dynamic-brake&lt;br /&gt;
:::::*headlight &lt;br /&gt;
:::::*horn&lt;br /&gt;
:::::*injector&lt;br /&gt;
:::::*loco-auto-brake&lt;br /&gt;
:::::*pantograph&lt;br /&gt;
:::::*regulator&lt;br /&gt;
:::::*reverser&lt;br /&gt;
:::::*abs-reverser&lt;br /&gt;
:::::*steam-blower&lt;br /&gt;
:::::*throttle&lt;br /&gt;
:::::*train-auto-brake &lt;br /&gt;
:::::*train-lap-brake&lt;br /&gt;
:::::*script-brake-pressure&lt;br /&gt;
:::*tra&lt;br /&gt;
::::For class Train&lt;br /&gt;
::::For float:&lt;br /&gt;
::::*smoothed-velocity (float)&lt;br /&gt;
::::*train-velocity (float)&lt;br /&gt;
::::*abs-smoothed-velocity (float)&lt;br /&gt;
::::*abs-train-velocity (float)&lt;br /&gt;
::::*dcc-throttle (float)&lt;br /&gt;
::::*train-brakes (float)&lt;br /&gt;
::::*speed-limit (float)&lt;br /&gt;
::::*advisory-limit (float)&lt;br /&gt;
::::*advisory-limit-2 (float)&lt;br /&gt;
::::*ai-train-max-speed (float)&lt;br /&gt;
::::For integer:&lt;br /&gt;
::::*autopilot-mode (int)&lt;br /&gt;
::::*reverser (int)&lt;br /&gt;
::::*pantograph-state (int)&lt;br /&gt;
::::*classification-signal (int)&lt;br /&gt;
::::*train-priority-number (int)&lt;br /&gt;
::::*frontmost-locomotive (int-bool)&lt;br /&gt;
::::For bool:&lt;br /&gt;
::::*allows-user-control (bool)&lt;br /&gt;
::::*headlight-state (bool)&lt;br /&gt;
::::*ditchlight-state (bool)&lt;br /&gt;
::::*bell-state (bool)&lt;br /&gt;
::::For string:&lt;br /&gt;
::::*train-display-name (string)&lt;br /&gt;
::::*owning-client (string)&lt;br /&gt;
&lt;br /&gt;
:::*wor&lt;br /&gt;
::::For class World&lt;br /&gt;
::::For float:&lt;br /&gt;
::::*camera-yaw&lt;br /&gt;
::::*camera-pitch&lt;br /&gt;
::::*camera-zoom&lt;br /&gt;
::::*game-time&lt;br /&gt;
::::*game-season&lt;br /&gt;
::::For integer:&lt;br /&gt;
::::*weather-type&lt;br /&gt;
::::*weather-changeability&lt;br /&gt;
::::*camera-mode&lt;br /&gt;
::::*camera-flags&lt;br /&gt;
::::*game-time&lt;br /&gt;
::::*game-year&lt;br /&gt;
::::*game-month&lt;br /&gt;
::::*game-date&lt;br /&gt;
::::*game-session&lt;br /&gt;
::::*current-module&lt;br /&gt;
::::For string:&lt;br /&gt;
::::*local-player-name (string)&lt;br /&gt;
::::For bool:&lt;br /&gt;
::::*restart-stuck-ai (bool)&lt;br /&gt;
::::*asset-restriction-in-effect (bool)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--end conditions--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====consist-property-sync====&lt;br /&gt;
:Type:       Integer - (0 off, 1 on (button), 2 on (automatic)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       Whether or not to sync the property within the consist, if a tag with the same [[#property-sync-id|property-sync-id]] exists in the other assets. Omitting or setting the tag to 0 disables this. Setting it to 1 will create a button to the right of the property that can be clicked on to sync the property. Setting it to 2 will automatically sync the property across the consist whenever a change in the property is detected.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start default-index--&amp;gt;&lt;br /&gt;
====default-index====&lt;br /&gt;
:Type:       Integer (-1 = random)&lt;br /&gt;
:Example:    default-index  0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0&lt;br /&gt;
:Desc:       The default index for the property to start at. This will be 0 if the tag is left out. If it is -1, it will choose a random index to start at.&amp;lt;br&amp;gt;&lt;br /&gt;
Warning:  If you have a list of values such as &amp;quot;1,2,3,4&amp;quot; and you want to set a default, then you should subtract 1 from the preferred value.  For example if you want the first in the list then set the default to 0.  This is because the browser counts the list entries from 0 and not 1.&lt;br /&gt;
&amp;lt;!--end default-index--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====description====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The description of this attachment as it will appear in the Properties Browser.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-type--&amp;gt;&lt;br /&gt;
====display-type====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only. The type of button this will be. It can be any of the trainz property browser value types, plus “manual”, but not map-object or asset-list. &amp;lt;b&amp;gt;For trainzbuild 5.1 and 5.0, only link is supported for the View Details page.&amp;lt;/b&amp;gt; Omitting this tag in combination with property-visibility set to 0 is useful for non-user triggers, such as world or train events.&lt;br /&gt;
:::*string&lt;br /&gt;
:::*int&lt;br /&gt;
:::*float&lt;br /&gt;
:::*list&lt;br /&gt;
:::*link	&lt;br /&gt;
&amp;lt;!--end display-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-values--&amp;gt;&lt;br /&gt;
====display-values====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only, and required for trigger type “user” properties to work, but optional for trigger type “event”. A list of comma-separated values which will be displayed in the view details page for the respective property. The number of values here must match the number of values in the “values” tag.&lt;br /&gt;
&amp;lt;!--end display-values--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start duration--&amp;gt;&lt;br /&gt;
====duration====&lt;br /&gt;
:Type:       Float&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind mesh-animation and mesh-toggle. This tag determines the time to transition to the next state for the value. If it is 0, the transition will occur instantaneously. &amp;lt;b&amp;gt;(There may be issues with using this tag with mesh-toggle.)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Example:    duration 3.2&lt;br /&gt;
&amp;lt;!--end duration--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start of effects (textures)--&amp;gt;&lt;br /&gt;
====effects====&lt;br /&gt;
:Type:       String - (a list of texture names (i.e. texture.txt names without the .txt) each separated by a comma)&lt;br /&gt;
:Example:    effects &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated effect(s) to be modified by the property. Only use this tag if you are using [[#kind|kind]] fx-replacement. Use this tag, the mesh tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end of effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====enabled====&lt;br /&gt;
:Type:       Boolean (1 = true, 0=false)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    No default.&lt;br /&gt;
:Desc:       Whether or not this property is active. This is useful for debugging, or if you want to disable it without removing everything.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start events--&amp;gt;&lt;br /&gt;
====events====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    events  &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “event” only. An array of the event(s) that must take place for the property value at the index to activate. Can be one of the following (separated by forward slashes and commas to save space). &lt;br /&gt;
:::*begin-load/end-load/begin-unload/end-unload&lt;br /&gt;
:::*started-moving/stopped-moving &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*handbrake-apply/handbrake-release&lt;br /&gt;
:::*trainbrake-apply/trainbrake-release&lt;br /&gt;
:::*headlight-on, headlight-off&lt;br /&gt;
:::*throttle-changed &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*front-coupled/back-coupled,front-uncoupled/back-uncoupled &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*view-internal, view-external, view-tracking, view-roaming &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*horn&lt;br /&gt;
:::*bell&lt;br /&gt;
:::*sanding&lt;br /&gt;
:::*pantograph-state-0/1/2/3 (see [[Class_Train#GetPantographState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetPantographState&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*weather-0/1/2/3/4/5/6/7 (see [[Class_World#GetWeatherType|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetWeatherType&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*world-day/world-night&lt;br /&gt;
:::*priority-number-(0 - ∞) (e.g. priority-number-2) &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*arn-(0 -∞ ) (e.g. arn-92220, arn-844) &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*queue-(0 - ∞)- loaded/empty (e.g. &amp;lt;b&amp;gt;queue-0-loaded, queue-1-empty&amp;lt;/b&amp;gt;)&lt;br /&gt;
&amp;lt;!--end events--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start files-path tag--&amp;gt;&lt;br /&gt;
====files-path====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    files-path &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       An optional tag that shortens the number of characters that need to be written to the “values“ tag, assuming they all share the same path or asset library and extension. The path and extension can be specified here (e.g. &amp;lt;b&amp;gt;files-path “images/left/.texture”&amp;lt;/b&amp;gt;), where images/left is the path, and .texture is the extension for all the files.&lt;br /&gt;
&amp;lt;!--end files-path tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start fx-replacement-type--&amp;gt;&lt;br /&gt;
====fx-replacement-type====&lt;br /&gt;
:Type:       String)(kind fx-replacement only)&lt;br /&gt;
:Example:    kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
:::fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of fx replacement effect this property will be if the [[#kind|kind]] tag is set to fx-replacement. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[#values|values]] for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacement|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one within a texture-group asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacementTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement-texture&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one located within this asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXCoronaTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;corona&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a corona effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXNameText|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a name effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAttachment|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;attachment&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces an attachment effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;animation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Plays/Stops an animation effect in the asset.&lt;br /&gt;
&amp;lt;!--end fx-replacement-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====kind====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of property this will be. Can be one of the options below. Most of these are derived from [[Class MeshObject|Class_MeshObject]]. For more info on implementing these, see [[#values|values]].&lt;br /&gt;
::*mesh-attachment&lt;br /&gt;
:::Manipulate the mesh’s animation, position, visibility, etc. See mesh-attachment-type.&lt;br /&gt;
::*fx-replacement&lt;br /&gt;
:::Change an effect in the mesh. See [[#fx-replacement-type|fx-replacement-type]].&lt;br /&gt;
::*particle-effect&lt;br /&gt;
:::Activate/Deactivate/Edit a particle effect (smoke0, smoke1, etc). See [[#particle-effects|particle-effects]] and [[#particle-effect=type|particle-effect-type]].&lt;br /&gt;
::*sound-script&lt;br /&gt;
:::Used to play a sound-script sound within this asset. See [[#sound-triggers|sound-triggers]].&lt;br /&gt;
::*config-edit&lt;br /&gt;
:::Used to edit a tag in the wagon-x config soup. See paths.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start meshes--&amp;gt;&lt;br /&gt;
====meshes====&lt;br /&gt;
:Type:       String - (a list of mesh names from the mesh-table separated by commas)&lt;br /&gt;
:Example:    meshes &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated mesh-table asset(s) to be modified by the property. Use this for [[#kind|kind]] mesh-toggle or kind mesh-animation. Use this tag, the effect tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end meshes--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start mesh-attachment--&amp;gt;&lt;br /&gt;
====mesh-attachment-type====&lt;br /&gt;
:Type:       String - (kind mesh-attachment only)&lt;br /&gt;
:Example:    kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
::           mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of mesh property this property will be if the kind tag is set to mesh-attachment. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See values for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshVisible|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-toggle&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Toggle between the mesh(s) being visible or hidden.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshOrientation|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-translation-orientation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the translation and orientation of the mesh(es)&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationFrame|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-frame&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the frame(s) the meshes animation will move between. Useful for door opening and closing animations, or animations that require more than 2 states.&lt;br /&gt;
::*[[Class_MeshObject#StartMeshAnimationLoop|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-loop&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Start or stop an animation-loop on the mesh.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-state&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the state of the mesh(s) animation.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationSpeed|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-speed&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Changes the speed of the meshes animation.&lt;br /&gt;
&amp;lt;!--end mesh-attachment--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====name====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The display name of this property, as will appear on the properties page.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of particle-effects--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====particle-effects====&lt;br /&gt;
:Type:       String - (a list of integer numbers as a string)&lt;br /&gt;
:Example:    particle-effects &amp;quot;0,1&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind particle-effect. The comma-separated list of PFX effects to be modified by the property. See kind for help on implementation. &amp;lt;b&amp;gt;There is currently no use for this tag as of yet. pfx-message doesn&#039;t need this because everything is already specified in the values tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--end particle-effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of particle-effect-type--&amp;gt;&lt;br /&gt;
&amp;lt;!--need to come back and check this as I don&#039;t understand how this works--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====particle-effect-type====&lt;br /&gt;
:Type:       String (kind mesh-attachment only)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of PFX function this property will be if the [[#kind|kind]] tag is set to particle-effect.&lt;br /&gt;
Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[#values|values]] for instructions on how to implement these properties.  Most of these are derived for the PFXEmitter properties specified in [[MapObject|Class MapObject]], with the prefix “GetPFXEmitter” omitted. All except [[MapObject#SetPFXEmitterTexture|SetPFXEmitterTexture]] are supported.&lt;br /&gt;
:Example:    kind  &amp;quot;particle-effect&amp;quot;&lt;br /&gt;
:            particle-effect-type &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
:Comments:  Needs to be validated with examples!&lt;br /&gt;
::*[[pfx_Message|pfx-message]]&lt;br /&gt;
:::Send a message to enable/disable a particle effect.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterConeSize|cone-size &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the cone size with x,y and z sizes in values tag.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterEmitParticles|emit-particles &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the number of particles and time they will be created.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterEndColor|end-color &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the end colour of the particles.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterStartColor|start-color &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the start colour of the particles.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterLifetime|lifetime &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the emitter lifetime using seconds.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMaxRate|max-rate &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the emitter maximum rate per second.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMinRate|min-rate &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the emitter minimum rate per second.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMaxSize|max-size &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the maximum size size of particles. The size is a single float.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterMinSize|min-size &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the minimum size of particles.  The size is a single float.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterPhysicsDelay|physics-delay &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Update the physics delay for the emitter.  The delay value is in seconds.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterRate|rate &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Set a new rate of particle creation per second.&lt;br /&gt;
::*[[Class_MapObject#SetPFXEmitterVelocity|velocity &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;]]&lt;br /&gt;
:::Set the emitter velocity in metres per second along the direction vector.&lt;br /&gt;
&lt;br /&gt;
For examples see.... (tbd)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--THIS DOESN&#039;T LOOK RIGHT - CHECK--&amp;gt;&lt;br /&gt;
====paths====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    paths                      &amp;quot;marker-lights/night-only&amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind config-edit. A comma-separated list of paths that point to the tag in the wagon-x config to edit.&lt;br /&gt;
&amp;lt;!--end paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start property-id tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The formal name (ID) of this property, used to identify and change this property. For example, If the name is &amp;lt;b&amp;gt;Workflow&amp;lt;/b&amp;gt;, it might be a good idea to call this &amp;lt;b&amp;gt;p_workflow&amp;lt;/b&amp;gt;. &amp;lt;div style=&amp;quot;color: #ff0080&amp;quot;&amp;gt;This must be unique for each browser-property&amp;lt;/div&amp;gt;.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start property-sync-id tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-sync-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The ID that determines which assets will be affected when consist-property-sync is activated. Only assets that share this ID will be synced in the consist, so be sure to make it particular and unique.&lt;br /&gt;
:Example:    property-sync-id  &amp;quot;soundBell&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start property-visibility tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====property-visibility====&lt;br /&gt;
:Type:       Integer - (0 = Hidden, 1 = Visible, 2 = Surveyor Only, 3 = Driver Only) &lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0 (hidden)&lt;br /&gt;
:Desc:       Indicates whether the property will be visible in the Properties Browser and in what mode.	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start sound-triggers--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====sound-triggers====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    sound-triggers             &amp;quot;bell_1,bell_2&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind sound-script only. This specifies the soundscript trigger(s) (comma separated) that this property will start/stop when the property is activated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end sound-triggers--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start target-asset tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====target-asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    target-asset &amp;quot;bogey-0&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       This determines which assets config this property will manipulate. This tag is currently only used for manipulating a vehicles bogey (e.g. texture replacement). The name must be “bogey-” + the index of the bogey to edit. This gives you full access to the bogeys mesh-table, allowing you to set texture replacements, mesh toggles, and other properties within the bogey. This tag can be omitted if you are not doing bogey texture replacements. &amp;lt;b&amp;gt;Only properties of kind “mesh-attachment” or “fx-replacement” can be used for properties that use this tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end target-asset tag--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start trigger--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====trigger====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    Null (ignored)&lt;br /&gt;
:Desc:       The event that will trigger/activate this property. Can be either an external event, such as a coal-loading animation, or a user-controlled event, or both. Setting it to none is useful if this is a [[#child-properties|child-properties]] property of another property. Possible values are:&lt;br /&gt;
:::*user&lt;br /&gt;
:::*event&lt;br /&gt;
:::*condition &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*variable &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
::::multiple &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*both &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(obsolete as of v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:::*none	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end trigger--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start update-events--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====update-events====&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;(added in v1.2)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       Very similar to the ‘events’ tag, except this tag triggers a refresh of the conditional and variable events within this property based on the triggered event. By default, conditional events refresh at a certain time interval, based on the ‘update-frequency’ tag. Adding this tag will refresh the property immediately when the trigger event is activated. Can be any of the property events in the ‘events’ tag.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end update-events--&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start values tag--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====values====&lt;br /&gt;
:Type:       String - (a string list separated by special characters)&lt;br /&gt;
:Example1    values                     &amp;quot;0,15,30&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       A comma-separated (and optionally semicolon-separated) list of all the files/values to be switched between. If the files-path tag is used, only include each file’s name (exclude the path and extension). This tag is required for all properties. If it is not wanted, leave the value at “1”, but keep the tag still. For booleans, use 1 for true, and 0 for false. For animations, specify the animation frames you want to toggle through. For details on using the semicolon separator to shorten properties, see [[WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Using_semicolons_to_set_multiple_values_in_one_property|Examples and Basic Tutorials]].&amp;lt;br&amp;gt;&lt;br /&gt;
Each kind has its own rules for what to put here, explained below. See the [[#kind|kind]] property for more info on these.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--mesh-attachment--&amp;gt;&lt;br /&gt;
:::*For kind mesh-attachment:&lt;br /&gt;
::::*For mesh-attachment-type mesh-toggle, the value must be either 0 or 1 (visible/hidden) ???&lt;br /&gt;
::::*For mesh-attachment-type mesh-translation-orientation, the value must be a 3-dimensional vector with values separated by backticks, enclosed with round brackets for the translation, followed by a colon, then another round bracket-enclosed 3d vector for the orientation, as shown below. 0`2`4 is the translation, and 1.2`2`2 is the orientation (we have to use backticks because the comma is already used here for separating each index value).&lt;br /&gt;
::::Example: values  &amp;quot;(0`2`4):(1.2`2`2),(0`0`0):(0`0`0)&amp;quot;&lt;br /&gt;
&amp;lt;!--mesh-attachment-type--&amp;gt;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-speed, the value is the speed of the animation for that index&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value will be an integer bool (0 or 1) to indicate whether to start the loop, or stop it. You can create a separate property that controls the mesh-animation-speed, and link it via a [[#child-properties|child-properties]] property to control the speed of the loop.&lt;br /&gt;
:::*For mesh-attachment type mesh-animation-frame, the value is the frame of the animation to jump to. Setting it to -1 will put that index at the last animation frame in the mesh (see [[Class_MeshObject#GetMeshAnimationFrameCount|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetMeshAnimationFrameCount&amp;lt;/span&amp;gt;]]).&lt;br /&gt;
::::Example:  values  &amp;quot;0,30&amp;quot;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value can be 0 or 1, to start/stop the loop&lt;br /&gt;
&amp;lt;!--sound-script--&amp;gt;&lt;br /&gt;
:::*For kind sound-script, the value can be 0 or 1, to start/stop the soundscript event&lt;br /&gt;
&amp;lt;!--config-edit--&amp;gt;&lt;br /&gt;
:::*For kind config-edit, the value is a string indicating the string value to assign to the config tag.&lt;br /&gt;
&amp;lt;!--particle-effect--&amp;gt;&lt;br /&gt;
:::*For kind particle-effect:&lt;br /&gt;
:::*For particle-effect-type pfx-message, the value follows the same rules for [[Pfx_Message|pfx message]].&lt;br /&gt;
::::*particle-effect-type       &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
::::Example:  values  &amp;quot;+0+1,-1-0&amp;quot;&lt;br /&gt;
&amp;lt;!--fx-replacement--&amp;gt;&lt;br /&gt;
:::*For kind fx-replacement:&lt;br /&gt;
::::*For fx-replacement-type texture-replacement, the comma and/or. semicolon-separated values represent the index in the texture-group asset to find the texture. Setting the first value to 1 will reference the texture index 1, shown in the partial config for a textures asset below:&lt;br /&gt;
::::Values “0,2,1” will reference the textures in the texture container at indexes 0, 2, and 1, in that order when cycled through.&lt;br /&gt;
::::Example: values  “0,2,1”&lt;br /&gt;
&lt;br /&gt;
  kuid          &amp;lt;kuid:1234:123456&amp;gt;&lt;br /&gt;
  username      &amp;quot;test texture group asset&amp;quot;&lt;br /&gt;
  trainz-build  4.6&lt;br /&gt;
  description   &amp;quot;test texture group&amp;quot;&lt;br /&gt;
  textures&lt;br /&gt;
  {&lt;br /&gt;
  0           &amp;quot;textures\0albedo.texture&amp;quot;&lt;br /&gt;
  1           &amp;quot;textures\1albedo.texture&amp;quot;&lt;br /&gt;
  2           &amp;quot;textures\2albedo.texture&amp;quot;&lt;br /&gt;
  3           &amp;quot;textures\0parameter.texture&amp;quot;&lt;br /&gt;
  4           &amp;quot;textures\1parameter.texture&amp;quot;&lt;br /&gt;
  5           &amp;quot;textures\2parameter.texture&amp;quot; &lt;br /&gt;
  6           &amp;quot;textures\0normal.texture&amp;quot;&lt;br /&gt;
  7           &amp;quot;textures\1normal.texture&amp;quot;&lt;br /&gt;
  8           &amp;quot;textures\2normal.texture&amp;quot;         &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type texture-replacement-texture, the comma and/or semicolon-separated values are the names of the files (ideally without the path or extension) to be referenced at that index. &lt;br /&gt;
::::Example: values  &amp;quot;images/congleton.texture,images/burntisland.texture,images/buxton.texture,images/none.texture&amp;quot;&lt;br /&gt;
::::If you have the same path (and same extension) for all your files, you can greatly reduce the clutter by just specifying the path and extension once using the files-path tag.  So, in this case the values entry would be:&lt;br /&gt;
::::Example: values &amp;quot;congleton,burntisland,buxton,none&amp;quot; &lt;br /&gt;
&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
  enabled                    1&lt;br /&gt;
  property-visibility        1&lt;br /&gt;
  name                       &amp;quot;Workflow Text: &amp;quot;&lt;br /&gt;
  property-id                &amp;quot;p_workflow&amp;quot;&lt;br /&gt;
  description                &amp;quot;Sets the Workflow&amp;quot;&lt;br /&gt;
  kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
  fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
  consist-property-sync      1&lt;br /&gt;
  meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
  effects                    &amp;quot;texture-extra&amp;quot;&lt;br /&gt;
  asset                      &amp;quot;null&amp;quot;&lt;br /&gt;
  files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
  values                     &amp;quot;congleton,burntisland,buxton,none&amp;quot;&lt;br /&gt;
  default-index              0&lt;br /&gt;
  trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
  display-type               &amp;quot;list&amp;quot;&lt;br /&gt;
  display-values             &amp;quot;Congleton,Burntisland,Buxton,None&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type attachment, the values are the names of the attachment effects to be replaced by the specified [[#asset|asset]].&lt;br /&gt;
::::*For fx-replacement-type corona, the values are the names of the corona effects to be replaced by the specified [[#asset|asset]].&lt;br /&gt;
::::*For fx-replacement-type animation, the values are the names of the animation effects to be replaced by the specified [[#asset|asset]].&lt;br /&gt;
::::*For fx-replacement-type name, the values are the names that will replace the current name of the specified name effect.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end values tag--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start variables--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====variables====&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Added in version 1.2 (needs validation)&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “variable”. An array of variable event(s) that control the value of the property using any of the conditional values and five arithmetic operators, ‘+’ (addition), ‘-’ (subtraction), ‘*’ (multiplication), ‘/’ (division), ‘^’ (exponent). You can use as many ‘|’ separated operators as you want. The operations do not follow the standard PEMDAS order of operations but are performed in a left-to-right additive manner. &lt;br /&gt;
:Example1:    a*b+c is the same as (a*b)+c,&lt;br /&gt;
:Example2:    c+a*b is the same as (c+a)*b, and&lt;br /&gt;
:Example3:    a*b+c/2 is the same as ((a*b)+c)/2&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end variables--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start copyright notice--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
=Copyright Notice=&lt;br /&gt;
Much of the content on this page and child pages was derived from Dundun92&#039;s original Google Docs document.  Permission was granted to use that information here.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end copyright notice--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials&amp;diff=40164</id>
		<title>HowTo/WagonX - Browser Properties Examples and Basic Tutorials</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials&amp;diff=40164"/>
		<updated>2024-02-28T01:22:25Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Added some more examples and some updates for WagonX 1.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--the next line is the page title--&amp;gt;&lt;br /&gt;
&amp;lt;!--HowTo/WagonX - Browser Properties Examples and Basic Tutorials--&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red; font-weight: 700; font-size: 15px;&amp;quot;&amp;gt;Please note:  Much of this page still needs some validation.  If you find issues then please contact PCAS1986 in the Trainz Forums or in the Trainz Discord Server.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Document Structure =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
The WagonX Tutorial set is written over several pages.  This page contains some example WagonX config containers and basic guidance for setting up those containers.  Other pages in the series are listed below:&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
# [[HowTo/Use the WagonX Library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Technical Reference]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Traincar Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [https://docs.google.com/document/d/1jd5nZNQJI_gKQp-X2GjNCBij9fZGAwgJy_BgBiXf3_8/edit#bookmark=id.kupvwsc34hnk| The asset author&#039;s documentation]&lt;br /&gt;
&lt;br /&gt;
= General Comments =&lt;br /&gt;
Most of the notes and examples here are for Version 1 but WagonX continues to be developed.  Features and/or changes for versions later than V1 are identified in the text.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Browser property tutorials=&lt;br /&gt;
&amp;lt;!--start of Browser property example--&amp;gt;&lt;br /&gt;
This tutorial takes you each step of creating a simple mesh toggle example. It is for a handbrake mesh, including animation, that the user may want to show (make visible) or hide (make invisible).  We will add each property tag and explain its purpose.&lt;br /&gt;
It may be useful to have the [[HowTo/WagonX - Technical Reference|WagonX Technical Reference]] page open in a browser to examine details of the various tags.&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
==Creating a basic mesh toggle==&lt;br /&gt;
*Start with an empty browser-properties container like this:&lt;br /&gt;
    &lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add an empty property container and name it &amp;quot;0&amp;quot;.  The names are not used but should be unique.  When we add more properties, you should name them “1”, “2”, “3”, etc.&lt;br /&gt;
   &lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*There is no order required for each property, but using a standard order makes it easier to follow. Each tag is hyperlinked to the browser-property, so you can see more information about it.&lt;br /&gt;
The first tag to add is [[HowTo/WagonX - Technical Reference#enabled|enabled]]. This determines whether or not the property is activated. Set it to 1, since we want our property to work in-game.&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the visibility of the property using [[HowTo/WagonX - Technical Reference#property-visibility|property-visibility]] and make that 1.  Note this value is an integer and doesn&#039;t require quotes around it. A value of 1 makes the property visible in both Surveyor and Driver. See the reference for other available values.&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#name|name]] of our property. The name will appear before the [[HowTo/WagonX - Technical Reference#display-values|display-values]], which we will get to in a moment. You also will want to add a space at the end; otherwise, the property name and display-value will appear as one word.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#property-id|property-id]], which can be anything as long as it is unique and doesn&#039;t contain [[HowTo/WagonX - Technical Reference#Restricted_Characters|restricted characters]]. Trainz will use this to identify this property.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#description|description]]. This will appear as the tool-tip when you hover over a browser-property.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the mesh&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the property [[HowTo/WagonX - Technical Reference#kind|kind]]. Since we want a mesh-attachment kind, we must also specify the [[HowTo/WagonX - Technical Reference#mesh-attachment-type|mesh-attachment-type]] which for this application is mesh-toggle.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Now add a [[HowTo/WagonX - Technical Reference#meshes|meshes]] tag to specify what mesh we want to toggle. The mesh name must exist in the config mesh-table. We will use the script author&#039;s prestwins handbrake lever for this demo.&lt;br /&gt;
&lt;br /&gt;
Here is part of the config mesh-table:&lt;br /&gt;
 handbrake-lever&lt;br /&gt;
 {&lt;br /&gt;
  mesh                                &amp;quot;mesh/handbrake.lm&amp;quot;&lt;br /&gt;
  anim                                &amp;quot;mesh/handbrake_scene.kin&amp;quot;&lt;br /&gt;
  auto-create                         1&lt;br /&gt;
  att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#values|values]] tag. This determines what the state of the object will be at each index. The values tag varies depending on the kind and, since this is a toggle, we want a true (1) or false (0) value. For kind mesh-toggle, we set it at 0 to hide the mesh, and 1 to show the mesh. Each index is comma separated, so we will set the first one at 1, and the second one at 0.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#default-index|default-index]]. This is an integer value starting from 0 and which indicates the position in a list.  0 is the first in the list, 1 is the second, and so on.  &amp;lt;i&amp;gt;(The reasons for this are somewhat historical but also based on how computers find things in memory.)&amp;lt;/i&amp;gt;  If we set it to 1, it will start at the second comma-separated values tag which is &amp;quot;0&amp;quot;.  If we set it at -1, it will pick a random index within the size of the values tag.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#trigger|trigger]] tag. We want our property to activate when a user presses a button on the properties page, so we will set it to &amp;lt;b&amp;gt;user&amp;lt;/b&amp;gt;. If we set it to &amp;lt;b&amp;gt;event&amp;lt;/b&amp;gt;, however, we could make it activate based on an event within the train or in the world, such as handbrake apply, or enabling it when it gets dark, and disabling it when its daytime again, but for now, we will leave it at user.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Specify the [[HowTo/WagonX - Technical Reference#display-type|display-type]]. Looking at the options, we see that &amp;lt;b&amp;gt;link&amp;lt;/b&amp;gt; is what we want.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Finally, the last tag we need is the display-values tag, which we talked about earlier. Since we have two states for our property (specified in the values tag), we will create two comma-separated values for each state. We will call the first “Enabled”, and the second “Hidden”, which corresponds with the numbers we set in the values tag.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Enabled,Hidden&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And that&#039;s it! Run the asset into trainz, and when you view the properties, you should see your property appear:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--Insert pic of View Details with suitable property shown--&amp;gt;&lt;br /&gt;
[[File:Toggle_handbrake_mesh_in_View_Details.jpg]]&lt;br /&gt;
 &lt;br /&gt;
And when you click on the underlined part of your property, the property should change to “Hidden”, as we specified, and the handbrake on the underframe should disappear.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Handbrake_mesh_show_%26_hide.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Browser-Property Examples =&lt;br /&gt;
== User-Triggered Properties ==&lt;br /&gt;
Here are a number of examples for user triggering - i.e. in the View Details property browser. Detailed information on the property browser tags can be found on the [[HowTo/WagonX - Reference|WagonX Reference]] page.&lt;br /&gt;
&amp;lt;!--start of mesh toggle property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===Mesh-toggle property===&lt;br /&gt;
This property allows you to show or hide a mesh that is in the config mesh-table.  The values are 0 and 1 to represent false and true. The default is 0 or hidden when first placed.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   enabled               1 &lt;br /&gt;
   property-visibility   1&lt;br /&gt;
   name                  &amp;quot;Toggle: &amp;quot;&lt;br /&gt;
   property-id           &amp;quot;p_toggle&amp;quot;&lt;br /&gt;
   description           &amp;quot;Hide or display the roof mesh&amp;quot;&lt;br /&gt;
   kind                  &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type  &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                &amp;quot;roof&amp;quot;&lt;br /&gt;
   values                &amp;quot;0,1&amp;quot;&lt;br /&gt;
   duration              3 &lt;br /&gt;
   default-index         0&lt;br /&gt;
   trigger               &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type          &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values        &amp;quot;Hidden,Visible&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture-replacement property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===texture-replacement property===&lt;br /&gt;
This allows the choice of a texture from either local texture files (i.e. contained within the asset), or from a texture group asset, to retexture or reskin a mesh. You could use it for swapping between clean, dirty or weathered textures, logos and also entire liveries. &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture replacement using local texture files example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
====Texture replacement using local texture files====&lt;br /&gt;
&lt;br /&gt;
For fx-replacement-type texture-replacement-texture, the comma and/or semicolon-separated values are the names of the files (ideally without the path or extension) to be referenced at that index. The values tag will contain a list of texture(.txt) files including a folder name if used.  This is an example of three textures.&lt;br /&gt;
&lt;br /&gt;
 values     &amp;quot;images/congleton.texture,images/burntisland.texture,images/buxton.texture,images/none.texture&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
If you have the same path (and same extension) for all your files, you can greatly reduce the clutter by just specifying the path and extension once using the files-path tag.  See the files-path and values usage below.  Note that the display-values tag contains similar information but that is for the user to see.&lt;br /&gt;
&lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Workflow Text: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_workflow&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets the Workflow&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
   consist-property-sync      1&lt;br /&gt;
   meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-extra&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;null&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
   values                     &amp;quot;congleton,burntisland,buxton,none&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;list&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Congleton,Burntisland,Buxton,None&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture replacement using a texture-group example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
====Texture replacement using a texture-group library asset====&lt;br /&gt;
You will need to specify the texture group asset in the kuid-table and give it a name such as &amp;quot;texturelib&amp;quot; or &amp;quot;gwrtexturelib&amp;quot;,  The name should not have any spaces or other special characters.&lt;br /&gt;
This property container is set up to allow for three different variations of the the material used for the asset.  They are named in the &amp;quot;display-values&amp;quot; tag as Skin 1, Skin 2, and Skin 3. &lt;br /&gt;
Since it is a PBR material there are three textures used in the materail: the albedo, parameters, and normal.  The normal texture is common to all three versions so it need not be changed.&lt;br /&gt;
The &amp;quot;values&amp;quot; tag contains six numbers which are the numbers of the textures in the texture-group asset.  For Skin 1 the &amp;quot;12&amp;quot; refers to the albedo texture, and the &amp;quot;15&amp;quot; refers to the parameter texture. &amp;quot;13&amp;quot; and &amp;quot;16&amp;quot; are the pair for Skin2, and &amp;quot;14&amp;quot; and &amp;quot;17&amp;quot; are the pair for Skin 3.&lt;br /&gt;
The &amp;quot;effects&amp;quot; tag contains the texture effect names for meshes in the mesh-table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   enabled             1&lt;br /&gt;
   property-visibility 1&lt;br /&gt;
   name                &amp;quot;Weathering: &amp;quot;&lt;br /&gt;
   property-id         &amp;quot;p_skin&amp;quot;&lt;br /&gt;
   description         &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
   kind                &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   meshes              &amp;quot;null&amp;quot;&lt;br /&gt;
   effects             &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
   asset               &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   files-path          &amp;quot;null&amp;quot;&lt;br /&gt;
   values              &amp;quot;12;15,13;16,14;17&amp;quot;&lt;br /&gt;
   default-index       -1&lt;br /&gt;
   trigger             &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type        &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values      &amp;quot;Skin 1,Skin 2,Skin 3&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Event-Triggered Properties ==&lt;br /&gt;
&amp;lt;!--start of loading-doors property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===loading-doorsProperty ===&lt;br /&gt;
The ‘meshes’ tag references a mesh-table asset named ‘loading-doors’, and sets the frame to 30 when begin-load is called (to open the doors), and 0 when end-load is called (to close the door). The default index is 0 (the animation frame will be at 0), and the animation duration is 1.5 seconds.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    0&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_doors&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;loading-doors&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0,30&amp;quot;&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;end-load,begin-load&amp;quot;&lt;br /&gt;
   duration                   1.5&lt;br /&gt;
   default-index              0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
An alternate way to do it is use mesh-attachment-type &amp;quot;mesh-animation-state&amp;quot;, and set a bool int (0 or 1) for the values tag.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    0&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_doors&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-state&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;loading-doors&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0,1&amp;quot;&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;end-load,begin-load&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you want two doors to open at the same time, instead of creating another property, you can use a semicolon split in the values tag to change two in a single property:&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;door-1,door-2&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
   events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
   duration                   3.0&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Weather-Based property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
===Weather-Based Texture Replacement===&lt;br /&gt;
The texture effect will change based on the weather. It will display a snowy texture when the weather type is 6 (medium snow), a wet, rainy texture when the weather type is 3 (rain), and a dry texture when the weather type is 0.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_weather_skin&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-weather&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
   values                     &amp;quot;texture-snow,texture-rain,texture-dry&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;weather-6,weather-3,weather-0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!--start of day and night lights example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
===Day and Night Light Control===&lt;br /&gt;
WagonX Version 1.2 or greater only.&amp;lt;br&amp;gt;&lt;br /&gt;
This event property controls a set of eight exteruir lights on a traincar that must turn on for night and off for day.  It also requires a locomotive at the head of its train for the lights to come on.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The property is a kind fx-replacement of type corona. Turning a corona on and off requires a valid corona to be turned on and usually a null value to turn it off.  In this case, instead of a null, we will use an invisible mesh, &amp;lt;kuid:217537:100812&amp;gt;, to achieve the same result.  We do this because WagonX needs to obtain an asset from the asset kuid-table.&amp;lt;br&amp;gt;&lt;br /&gt;
There are two events to consider: the &amp;quot;World, Day&amp;quot; message represented as &amp;quot;world-day&amp;quot;, and the &amp;quot;World, Night&amp;quot; message represented as &amp;quot;world-night&amp;quot;.&lt;br /&gt;
The requirement for a loco requires a conditions tag using the logic described at (insert link when tech ref updated).  The results are boolean (false or true) and the first will be true if no loco exists at the head of the train, and the second if there is a loco.  So the possible results are &amp;quot;1;0&amp;quot; (no loco) or &amp;quot;1;0&amp;quot; (loco exists) using the WagonX syntax.&amp;lt;br&amp;gt;&lt;br /&gt;
The effects tag contains a list of the corona effects from the asset mesh-table. Each is separated by a comma.&amp;lt;br&amp;gt;&lt;br /&gt;
The values tag contains two sets of kuid-table mesh references. Each set is separated by a comma, and the list within each set separated by a semi-colon. The first set turns off the eight coronas when the loco doesn&#039;t exist, and the second set turns the coronas on using the same corona asset for each light. You could have different coronas.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                           1&lt;br /&gt;
   property-visibility               0&lt;br /&gt;
   property-id                       &amp;quot;p_exterior_lights&amp;quot;&lt;br /&gt;
   kind                              &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type               &amp;quot;corona&amp;quot;&lt;br /&gt;
   duration                          0    &lt;br /&gt;
   effects                           &amp;quot;leftlight-0,leftlight-1,leftlight-2,leftlight-3,rightlight-0,rightlight-1,rightlight-2,rightlight-3&amp;quot;&lt;br /&gt;
   values                            &amp;quot;nl;nl;nl;nl;nl;nl;nl;nl,exla;exla;exla;exla;exla;exla;exla;exla&amp;quot;                                   &lt;br /&gt;
   trigger                           &amp;quot;multiple&amp;quot;&lt;br /&gt;
   conditions                        &amp;quot;tra_frontmost-locomotive|==|0,tra_frontmost-locomotive|==|1&amp;quot;&lt;br /&gt;
   events                            &amp;quot;world-day,world-night&lt;br /&gt;
 }&lt;br /&gt;
  ...&lt;br /&gt;
 kuid-table {&lt;br /&gt;
   ...&lt;br /&gt;
   exla                                    &amp;lt;kuid:104722:100&amp;gt;     // a white corona&lt;br /&gt;
   nl                                      &amp;lt;kuid:217537:100812&amp;gt;  // an invisible mesh&lt;br /&gt;
 } &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
===Day and Night Interior Control===&lt;br /&gt;
WagonX Version 1.2 or greater only.&amp;lt;br&amp;gt;&lt;br /&gt;
This example controls the visibility of day and night traincar interiors using the &amp;quot;World, Day/Night&amp;quot; messages.  The night interior will not show unless a locomotive is at the head of the traincar&#039;s train.&amp;lt;br&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   enabled                           1&lt;br /&gt;
   property-visibility               0&lt;br /&gt;
   property-id                       &amp;quot;p_interior_lighting&amp;quot;&lt;br /&gt;
   kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                            &amp;quot;day-interior,night-interior&amp;quot;&lt;br /&gt;
   values                            &amp;quot;1;0,0;1&amp;quot;&lt;br /&gt;
   default-index                     0&lt;br /&gt;
   duration                          0&lt;br /&gt;
   trigger                           &amp;quot;multiple&amp;quot;&lt;br /&gt;
   conditions                        &amp;quot;tra_frontmost-locomotive|==|0,tra_frontmost-locomotive|==|1&amp;quot;&lt;br /&gt;
   events                            &amp;quot;world-day,world-night&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of discussion about use of semicolons--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
== Using semicolons to set multiple values in one property ==&lt;br /&gt;
When assigning values for a certain property, you will specify the mesh/effect/sound, etc that needs to be edited, and specify how you want to manipulate it (fx-replacement-type, mesh-attachment-type, etc), and set the value for a certain index. For example, In a texture replacement where a texture is being replaced by an external texture-group asset, the property would look something like this.&lt;br /&gt;
&lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_parameter&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-albedo&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,2,3,4&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
As you can see, the comma-separated numbers in the “values” tag indicate the index in the texture-group asset to find the texture; here are the first few lines for that. Texture indexes 0, 1, 2, and 3 are referenced for the albedo texture types, since we have 4 weathering types.&lt;br /&gt;
&lt;br /&gt;
 kuid                                    &amp;lt;kuid2:661805:500009:0&amp;gt;&lt;br /&gt;
 username                                &amp;quot;BR GrainHop Texture Group&amp;quot;&lt;br /&gt;
 kind                                    &amp;quot;texture-group&amp;quot;&lt;br /&gt;
 trainz-build                            5.0&lt;br /&gt;
 category-class                          &amp;quot;JO&amp;quot;&lt;br /&gt;
 author                                  &amp;quot;dundun92&amp;quot;&lt;br /&gt;
 contact-email                           &amp;quot;jbvector93@outlook.com&amp;quot;&lt;br /&gt;
 description                             &amp;quot;A texture group for my GrainHop wagons&amp;quot;&lt;br /&gt;
 textures&lt;br /&gt;
 {&lt;br /&gt;
   0                                   &amp;quot;270cgo/0albedo.texture&amp;quot;&lt;br /&gt;
   1                                   &amp;quot;270cgo/1albedo.texture&amp;quot;&lt;br /&gt;
   2                                   &amp;quot;270cgo/2albedo.texture&amp;quot;&lt;br /&gt;
   3                                   &amp;quot;270cgo/2albedo.texture&amp;quot;&lt;br /&gt;
   4                                   &amp;quot;270cgo/0parameter.texture&amp;quot;&lt;br /&gt;
   5                                   &amp;quot;270cgo/1parameter.texture&amp;quot;&lt;br /&gt;
   6                                   &amp;quot;270cgo/2parameter.texture&amp;quot;&lt;br /&gt;
   .........&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
We specified the texture-group library in the kuid table, and referenced it in the “asset” tag.&lt;br /&gt;
 kuid-table&lt;br /&gt;
 {&lt;br /&gt;
   acslib                                &amp;lt;kuid2:60850:89100&amp;gt;&lt;br /&gt;
   meshlib                               &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   texturelib                            &amp;lt;kuid2:661805:500009&amp;gt;&lt;br /&gt;
   lamp                                  &amp;lt;kuid2:661805:500003&amp;gt;&lt;br /&gt;
   enginespec                            &amp;lt;kuid2:368699:50064&amp;gt;&lt;br /&gt;
   bogie                                 &amp;lt;kuid2:661805:400003&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And then we specified the effect we wanted to change, (currently just the texture-albedo), inside the “effects” tag (this is not the effects tag below in this mesh table asset, but rather the one in the browser-properties at the top of this section!).&lt;br /&gt;
 body&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;mesh/body.lm&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
     effects&lt;br /&gt;
     {&lt;br /&gt;
       texture-albedo&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_albedo.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
       texture-normal&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_normal.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
       texture-parameter&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_parameter.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
But say you want to replace the normal map as well. You would probably just create another browser property and specify the proper index for the normals.&lt;br /&gt;
      &lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_parameter&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Paramenter Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-albedo&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,2,3,4&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 1&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_normal&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Normal Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-normal&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;7,8,9,10&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
But we can&#039;t forget the parameter map… that will require a third property. What&#039;s worse, we will now have three different properties in the view details page that will each have to be clicked on to change each map! Assigning properties this way can get tedious and create extra clutter in the config. Thankfully, for properties that share the same kind and type, it can all be done in a single property using semicolons:&lt;br /&gt;
      &lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;effects                    &amp;quot;texture-albedo,texture-parameter,texture-normal&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;null&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;values                     &amp;quot;0;4;8,1;5;9,2;6;10,3;7;11&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;display-values             &amp;quot;Clean,Weathered,Dirty,Rusty&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Take note of the three tag entries above: the &amp;lt;b&amp;gt;effects&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;values&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;display-values&amp;lt;/b&amp;gt; tags. The &amp;lt;b&amp;gt;display-values&amp;lt;/b&amp;gt; tag is what the user sees and can choose from. Our interest is in the remaining two tags as shown below:&lt;br /&gt;
&lt;br /&gt;
 effects                    &amp;quot;texture-albedo,texture-parameter,texture-normal&amp;quot;&lt;br /&gt;
 values                     &amp;quot;0;4;8,1;5;9,2;6;9,3;7;11&amp;quot; &lt;br /&gt;
&lt;br /&gt;
There are four user options and, since each option requires three textures, the total number of textures is 12. The &amp;lt;b&amp;gt;values&amp;lt;/b&amp;gt; tag contains a string of four groups of texture numbers separated by a comma.  Within each texture group the texture numbers are delimited by a semi colon.&lt;br /&gt;
&lt;br /&gt;
To clarify, we can list the three textures associated with each user choice:&lt;br /&gt;
&lt;br /&gt;
 0;4;8 -&amp;gt; Clean&lt;br /&gt;
 1;5;9 -&amp;gt; Weathered&lt;br /&gt;
 2;6;10 -&amp;gt; Dirty&lt;br /&gt;
 3;7;11 -&amp;gt; Rusty&lt;br /&gt;
 &lt;br /&gt;
The first column of 0,1,2,3 identify the albedo textures. The second column of 4,5,6,7 identify the parameters textures, The third column of 8,9,10,11 identify the normal textures.  Note that the numbers do not need to be in sequence or even consecutive.  All those numbers do is to identify the correct texture in the texture-group asset.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
This system works for other kinds of properties, too. In this case, we are setting the animation frame of both the handbrake-lever, and braking system at the same time using the same property (triggered by the same event).&lt;br /&gt;
        		  &lt;br /&gt;
  1      &lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
   events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
   duration                   3.2&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of discussion about Naming ACS mesh-table attachments--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
== Naming ACS mesh-table attachments ==&lt;br /&gt;
Please refer to this page on the ACS coupling system for setting up the “active-coupling-standard-60850” extensions container (which will be required for the ACS coupling to work): [[ACS_Coupling_System|ACS Coupling System]]&lt;br /&gt;
&lt;br /&gt;
These are the mesh-table naming conventions you must use for the beginning of the name of each ACS attachment mesh. The others will vary depending on the “animated” property above. &amp;lt;b&amp;gt;You must spell them exactly as shown below&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*coupler&lt;br /&gt;
*gangway&lt;br /&gt;
*airbrake&lt;br /&gt;
*vacbrake&lt;br /&gt;
*multiworking&lt;br /&gt;
*heating&lt;br /&gt;
*rch&lt;br /&gt;
&lt;br /&gt;
If the “animated” tag in the acs container (see [[HowTo/WagonX_-_Technical_Reference#ACS|acs]]) is set to 1, then the naming is quite simple. It&#039;s one of the 7 callbacks above + a dash + “&amp;lt;i&amp;gt;front&amp;lt;/i&amp;gt;” or “&amp;lt;i&amp;gt;back&amp;lt;/i&amp;gt;”. The anim tag must be present to specify the animation for it. Frame 0 is the uncoupled state, and the last frame is the coupled state. This setup is shown below:&lt;br /&gt;
&lt;br /&gt;
 coupler-front&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;coupler-screwlink-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 coupler-back&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;coupler-screwlink-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;vacbrake-single-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-back&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;vacbrake-single-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If, however, you do not want to use animations, but want to use separate meshes for each state (coupled and uncoupled), it gets a bit more complicated. The naming will follow the same as above at first, but you must add a third piece to it to specify the exact type of ACS attachment this is. The information on what to put there is originally from the [[ACS_Coupling_SystemACS Coupling System|ACS page]], but the 7 callbacks have been added plus the sub-callback here to make it easier (the third callback options are the ones with a delta symbol &amp;amp;Delta; ). And for the uncoupled state, the third callback is “non” (e.g. coupler-front-screwlink, and coupler-front-none).&lt;br /&gt;
&lt;br /&gt;
*coupler&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;hook&amp;lt;/b&amp;gt;&amp;quot; -- connects to screwlink/instanter/3link/hst-emergency-bar.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;3link&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;instanter&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;screwlink&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;hst-emergency-bar&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar-full&amp;lt;/b&amp;gt;&amp;quot; -- connects to &amp;quot;bar-none&amp;quot;. Half of a handed pair for when one vehicle has the entire bar coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar-none&amp;lt;/b&amp;gt;&amp;quot; -- connected to by &amp;quot;bar-full&amp;quot;. The other half of the handed pair.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar&amp;lt;/b&amp;gt;&amp;quot; -- connects to self only. Used when both vehicles have half the bar coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;knuckle&amp;lt;/b&amp;gt;&amp;quot; - standard knuckle coupler.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;tightlock&amp;lt;/b&amp;gt;&amp;quot; -- different from a standard knuckle, refers to a knuckle style coupler often fitted to multiple unit trains that also include electrical connections.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;wedgelock&amp;lt;/b&amp;gt;&amp;quot; -- London Underground coupler.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bsi&amp;lt;/b&amp;gt;&amp;quot; -- Found on Sprinter DMUs and derived designs.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;dellner&amp;lt;/b&amp;gt;&amp;quot; -- Also compatible with Scharfenberg coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;scharfenberg&amp;lt;/b&amp;gt;&amp;quot; -- Also compatible with dellner coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(&amp;lt;b&amp;gt;other string identifier&amp;lt;/b&amp;gt;)&amp;quot; -- Any string that is not recognized from the above list is assumed to be a symmetrical meet-in-the-middle type of coupler.&lt;br /&gt;
::&amp;amp;Delta; “&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;”&lt;br /&gt;
::Examples: &amp;lt;b&amp;gt;coupler-front-instanter&amp;lt;/b&amp;gt;, coupler-back-none&lt;br /&gt;
&lt;br /&gt;
*gangway&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;rubbing-plate&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;gangway&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;gangway-front-gangway&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*airbrake&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;twin&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;single&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;airbrake-back-none&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*vacbrake&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;twin&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;single&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;high&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;vacbrake-back-twin&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*multiworking&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(color)-(shape)&amp;quot; -- e.g. &amp;quot;&amp;lt;b&amp;gt;blue-star&amp;lt;/b&amp;gt;&amp;quot; or &amp;quot;&amp;lt;b&amp;gt;red-diamond&amp;lt;/b&amp;gt;&amp;quot;, etc&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;AAR&amp;lt;/b&amp;gt;&amp;quot; -- as used on GM locos&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;SR27&amp;lt;/b&amp;gt;&amp;quot; -- bagpipes&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(other identifier string e.g. classname)&amp;quot;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;multiworking-front-blue-square&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*heating&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;steam&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;electric&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;dual&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;southern-electric&amp;lt;/b&amp;gt;&amp;quot; &lt;br /&gt;
::Example: &amp;lt;b&amp;gt;heating-back-steam&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*rch&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;high&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;low&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;rch-back-high&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And an example how it would look inside a config.txt. The back attachments have been omitted for brevity. &lt;br /&gt;
  &lt;br /&gt;
 coupler-front-screwlink&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-coupled.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 coupler-front-none&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-retracted.lm&amp;quot;&lt;br /&gt;
       auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front-single&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-coupled.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front-none&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-retracted.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
=Copyright Notice=&lt;br /&gt;
Much of the content on this page and child pages was derived from Dundun92&#039;s original Google Docs document.  Permission was granted to use that information here.&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40098</id>
		<title>HowTo/WagonX - Technical Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40098"/>
		<updated>2024-02-23T05:02:46Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: /* default-index */  added a warning about setting a default value.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Document Structure =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;The WagonX Tutorial set is written over several pages.  This page is a base reference for using WagonX config containers, their properties and the values for those properties.  Other pages in the series are listed below:&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
# [[HowTo/Use the WagonX Library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Traincar Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= The WagonX Reference =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;This page contains details of the WagonX extension container and sub-containers.  Practical examples of usage can be found in the tutorials listed above.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Restricted Characters =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The characters in the list below cannot be used for some property tag values as they are used by the script to parse or identify values such as list items and other information. They can be used in name and description tags. Use of these characters in tag values is identified in the properties descriptions that follow. 	Tutorial sections give examples of use.  See also [[HowTo/WagonX - Technical Reference#display-values|display-values]].&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
*Comma ( , )&lt;br /&gt;
*Semicolon ( ; )&lt;br /&gt;
*Backtick ( ` )&lt;br /&gt;
*Colon ( : )	&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= General Layout =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WagonX config tags are defined in the extensions container along with other extensions such as ACS Lib. The general layout of the extensions container that also includes ACS Lib might look like this:&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 extensions&lt;br /&gt;
 {&lt;br /&gt;
   max_permitted_speed-60850     &amp;quot;50mph&amp;quot;&lt;br /&gt;
   active-coupling-standard-60850&lt;br /&gt;
   {&lt;br /&gt;
     ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     ...&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= WagonX Properties =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;There are currently three standard or &amp;quot;top level&amp;quot; WagonX containers that define properties for Marker Lights, a variation of ACSLib and Misc (miscellaneous).  In addition to the standard containers, you can define zero or more additonal property containers that are identified by integer value names starting from 0.  Each of these containers are defined below.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
== ACS ==&lt;br /&gt;
&amp;lt;!--start of ACS table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
For help on creating the acs extensions and setting up the acs mesh-table objects, see [[HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Naming_ACS_mesh-table_attachments|Naming ACS mesh-table attachments]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each tag is shown here with sample values. There are no default values.&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 acs&lt;br /&gt;
 {&lt;br /&gt;
   animated                            1&lt;br /&gt;
   use-jbv-animation                   1&lt;br /&gt;
   duration                            1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;animated (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:This determines whether to use animations to move between the coupled and uncoupled state, or use individual static assets for each state.&lt;br /&gt;
*&amp;lt;b&amp;gt;use-jbv-animation (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:An animation system the author (DunDun92) made for compressing buffers and dynamic couplings and hoses, which is now being phased out due to performance problems. leave it at 0, unless you are using the JBV BR Mesh Library or BR class 101 mesh library, or any of his other libraries.&lt;br /&gt;
*&amp;lt;b&amp;gt;duration (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time, in seconds, that the mesh animation will take to move between the two states. If animated is set to 0, this will determine the fade duration when switching between meshes (fade duration on mesh objects in trainzbuild 5.0 + can get buggy)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &amp;lt;!--end of ACS table--&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&amp;lt;!--start of Misc table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;!--Note for page author - is this for proper industries such as cargo or is it used for passengers at stations as well?--&amp;gt;&lt;br /&gt;
The misc container currently contains times, in seconds, for industry loading and unloading.  Usually, these times are used to enable animations to run before or after loading/unloading.&lt;br /&gt;
&lt;br /&gt;
Each available tag is shown here with sample values.  There are no defaults.&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 misc&lt;br /&gt;
 {&lt;br /&gt;
   begin-load-time                   5.0&lt;br /&gt;
   begin-unload-time                 5.0&lt;br /&gt;
   end-load-time                     1.0&lt;br /&gt;
   end-unload-time                   1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to load at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to unloading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon end loading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to end unloading at an industry&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of misc table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marker-Lights ==&lt;br /&gt;
&amp;lt;!--start of Marker-Lights table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
The Marker-Lights container is used to show or hide light meshes that are identied by entries in the config mesh-table.&lt;br /&gt;
&lt;br /&gt;
Each tag is shown here with sample values.  There are no defaults. &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 marker-lights&lt;br /&gt;
 {&lt;br /&gt;
   enabled                             1&lt;br /&gt;
   car-minimum-count                   1&lt;br /&gt;
   require-locomotive                  1&lt;br /&gt;
   night-only                          0&lt;br /&gt;
   front&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;null&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   back&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;enabled (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Whether or not the marker lights are active on this asset.&lt;br /&gt;
*&amp;lt;b&amp;gt;car-minimum-count (an integer number)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The minimum number of cars that must be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;require-locomotive (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, a traincar of Class locomotive will need to be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;night-only (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, the lamps will only be visible at night, otherwise they will be displayed 24/7.&lt;br /&gt;
*&amp;lt;b&amp;gt;Front/back head/tail containers&amp;lt;/b&amp;gt;&lt;br /&gt;
:These containers identify the mesh to use for the front, back, head, and tail lamps.  These meshes must be in the config mesh-table.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of Marker-Lights table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser-Properties ==&lt;br /&gt;
&amp;lt;!--start of Browser-Properties container table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
*The browser-properties container is a set of zero or more property containers that hold settings for a property such as a smoke effect, an attachment or even texture replacement. They are quite flexible and suitable most any traincar/loco property.&lt;br /&gt;
*A property can have sub properties that are activated with their parent.&lt;br /&gt;
*A property container has a number of tags with values.  Many are common to different property types but some are unique to a property.&lt;br /&gt;
*A container need not contain all available tags.&lt;br /&gt;
*We start with a sample of two properties: one for a texture replacement (skin) and the second for a handbrake activation. These are representative only and may not be suitable for your asset,&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
   0&lt;br /&gt;
   {&lt;br /&gt;
     enabled                    1&lt;br /&gt;
     property-visibility        1&lt;br /&gt;
     name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
     property-id                &amp;quot;p_skin&amp;quot;&lt;br /&gt;
     consist-property-sync      1&lt;br /&gt;
     description                &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
     kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
     fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
     meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
     effects                    &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
     asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
     files-path                 &amp;quot;null&amp;quot;&lt;br /&gt;
     values                     &amp;quot;0;3,1;4,2;5&amp;quot;&lt;br /&gt;
     default-index              -1&lt;br /&gt;
     trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
     display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
     display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   1&lt;br /&gt;
   {&lt;br /&gt;
     enabled                    1&lt;br /&gt;
     property-visibility        0&lt;br /&gt;
     name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
     property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
     description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
     kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
     mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
     meshes                     &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
     values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
     events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
     duration                   3.2&lt;br /&gt;
     default-index              0&lt;br /&gt;
     trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
     display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
     display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
===Supported Tags===&lt;br /&gt;
Tag explanations.  Some examples are included in the definition and, for others, see above for sample of usage.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====enabled====&lt;br /&gt;
:Type:       Boolean (1 = true, 0=false)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    No default.&lt;br /&gt;
:Desc:       Whether or not this property is active. This is useful for debugging, or if you want to disable it without removing everything.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====property-visibility====&lt;br /&gt;
:Type:       Integer - (0 = Hidden, 1 = Visible, 2 = Surveyor Only, 3 = Driver Only) &lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0 (hidden)&lt;br /&gt;
:Desc:       Indicates whether the property will be visible in the Properties Browser and in what mode.	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====name====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The display name of this property, as will appear on the properties page.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====child-properties====&lt;br /&gt;
:Type:       A string of numbers separated by commas.&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The list of properties that will activate when this property is activated. They will activate at the same index as the parent, similar to consist-property-sync. The property-visibility tag for the child properties should be set to 0. The child properties cannot have their own child-properties tag, and the property-visibility of the child-property must be 0, else it will not activate. You cannot set the child-property to yourself either.&lt;br /&gt;
:Example:    child-properties  &amp;quot;2,4,5&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The formal name (ID) of this property, used to identify and change this property. For example, If the name is &amp;lt;b&amp;gt;Workflow&amp;lt;/b&amp;gt;, it might be a good idea to call this &amp;lt;b&amp;gt;p_workflow&amp;lt;/b&amp;gt;. &amp;lt;div style=&amp;quot;color: #ff0080&amp;quot;&amp;gt;This must be unique for each browser-property&amp;lt;/div&amp;gt;.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====consist-property-sync====&lt;br /&gt;
:Type:       Integer - (0 off, 1 on (button), 2 on (automatic)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       Whether or not to sync the property within the consist, if a tag with the same [[HowTo/WagonX - Technical Reference#property-sync-id]] exists in the other assets. Omitting or setting the tag to 0 disables this. Setting it to 1 will create a button to the right of the property that can be clicked on to sync the property. Setting it to 2 will automatically sync the property across the consist whenever a change in the property is detected.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-sync-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The ID that determines which assets will be affected when consist-property-sync is activated. Only assets that share this ID will be synced in the consist, so be sure to make it particular and unique.&lt;br /&gt;
:Example:    property-sync-id  &amp;quot;soundBell&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====description====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The description of this attachment as it will appear in the Properties Browser.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====kind====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of property this will be. Can be one of the options below. Most of these are derived from [[Class MeshObject|Class_MeshObject]]. For more info on implementing these, see [[HowTo/WagonX - Technical Reference#values]].&lt;br /&gt;
::*mesh-attachment&lt;br /&gt;
:::Manipulate the mesh’s animation, position, visibility, etc. See mesh-attachment-type.&lt;br /&gt;
::*fx-replacement&lt;br /&gt;
:::Change an effect in the mesh. See [[HowTo/WagonX - Technical Reference#fx-replacement-type]].&lt;br /&gt;
::*particle-effect&lt;br /&gt;
:::Activate/Deactivate/Edit a particle effect (smoke0, smoke1, etc). See [[HowTo/WagonX - Technical Reference#particle-effects]] and [[HowTo/WagonX - Technical Reference#particle-effect-type]].&lt;br /&gt;
::*sound-script&lt;br /&gt;
:::Used to play a sound-script sound within this asset. See [[HowTo/WagonX - Technical Reference#sound-triggers]].&lt;br /&gt;
::*config-edit&lt;br /&gt;
:::Used to edit a tag in the wagon-x config soup. See paths.&lt;br /&gt;
&amp;lt;!--need to come back and check this as I don&#039;t understand how this works--&amp;gt;&lt;br /&gt;
====particle-effect-type====&lt;br /&gt;
:Type:       String (kind mesh-attachment only)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of PFX function this property will be if the [[HowTo/WagonX - Technical Reference#kind]] tag is set to particle-effect. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[HowTo/WagonX - Technical Reference#values]] for instructions on how to implement these properties. Currently, only pfx-message is supported.&lt;br /&gt;
:Example:    kind  &amp;quot;particle-effect&amp;quot;&lt;br /&gt;
:            particle-effect-type &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
::*[[pfx_Message|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;pfx-message&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Send a message to enable/disable a particle effect.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start mesh-attachment--&amp;gt;&lt;br /&gt;
====mesh-attachment-type====&lt;br /&gt;
:Type:       String - (kind mesh-attachment only)&lt;br /&gt;
:Example:    kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
::           mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of mesh property this property will be if the kind tag is set to mesh-attachment. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See values for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshVisible|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-toggle&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Toggle between the mesh(s) being visible or hidden.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshOrientation|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-translation-orientation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the translation and orientation of the mesh(es)&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationFrame|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-frame&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the frame(s) the meshes animation will move between. Useful for door opening and closing animations, or animations that require more than 2 states.&lt;br /&gt;
::*[[Class_MeshObject#StartMeshAnimationLoop|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-loop&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Start or stop an animation-loop on the mesh.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-state&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the state of the mesh(s) animation.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationSpeed|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-speed&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Changes the speed of the meshes animation.&lt;br /&gt;
&amp;lt;!--end mesh-attachment--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start fx-replacement-type--&amp;gt;&lt;br /&gt;
====fx-replacement-type====&lt;br /&gt;
:Type:       String)(kind fx-replacement only)&lt;br /&gt;
:Example:    kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
:::fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of fx replacement effect this property will be if the [[HowTo/WagonX - Technical Reference#kind]] tag is set to fx-replacement. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[HowTo/WagonX - Technical Reference#values]] for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacement|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one within a texture-group asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacementTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement-texture&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one located within this asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXCoronaTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;corona&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a corona effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXNameText|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a name effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAttachment|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;attachment&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces an attachment effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;animation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Plays/Stops an animation effect in the asset.&lt;br /&gt;
&amp;lt;!--end fx-replacement-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start duration--&amp;gt;&lt;br /&gt;
====duration====&lt;br /&gt;
:Type:       Float&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind mesh-animation and mesh-toggle. This tag determines the time to transition to the next state for the value. If it is 0, the transition will occur instantaneously. &amp;lt;b&amp;gt;(There may be issues with using this tag with mesh-toggle.)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Example:    duration 3.2&lt;br /&gt;
&amp;lt;!--end duration--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start meshes--&amp;gt;&lt;br /&gt;
====meshes====&lt;br /&gt;
:Type:       String - (a list of mesh names from the mesh-table separated by commas)&lt;br /&gt;
:Example:    meshes &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated mesh-table asset(s) to be modified by the property. Use this for [[HowTo/WagonX - Technical Reference#kind]] mesh-toggle or kind mesh-animation. Use this tag, the effect tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end meshes--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start of effects (textures)--&amp;gt;&lt;br /&gt;
====effects====&lt;br /&gt;
:Type:       String - (a list of texture names (i.e. texture.txt names without the .txt) each separated by a comma)&lt;br /&gt;
:Example:    effects &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated effect(s) to be modified by the property. Only use this tag if you are using [[HowTo/WagonX - Technical Reference#kind]] fx-replacement. Use this tag, the mesh tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end of effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start of particle-effects--&amp;gt;&lt;br /&gt;
====particle-effects====&lt;br /&gt;
:Type:       String - (a list of integer numbers as a string)&lt;br /&gt;
:Example:    particle-effects &amp;quot;0,1&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind particle-effect. The comma-separated list of PFX effects to be modified by the property. See kind for help on implementation. &amp;lt;b&amp;gt;There is currently no use for this tag as of yet. pfx-message doesn&#039;t need this because everything is already specified in the values tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--end particle-effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start target-asset tag--&amp;gt;&lt;br /&gt;
====target-asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    target-asset &amp;quot;bogey-0&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       This determines which assets config this property will manipulate. This tag is currently only used for manipulating a vehicles bogey (e.g. texture replacement). The name must be “bogey-” + the index of the bogey to edit. This gives you full access to the bogeys mesh-table, allowing you to set texture replacements, mesh toggles, and other properties within the bogey. This tag can be omitted if you are not doing bogey texture replacements. &amp;lt;b&amp;gt;Only properties of kind “mesh-attachment” or “fx-replacement” can be used for properties that use this tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--end target-asset tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start asset tag--&amp;gt;&lt;br /&gt;
====asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    asset &amp;quot;texturelib&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The kuid-table asset to be used by the property. Use this for cases where you need to reference another asset outside of this, such as a texture-replacement library. Use this tag, the [[HowTo/WagonX - Technical Reference#effects]] tag, the [[HowTo/WagonX - Technical Reference#meshes]] tag, or the [[HowTo/WagonX - Technical Reference#particle-effects]] tag,  but not more than one.&lt;br /&gt;
&amp;lt;!--end asset tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start files-path tag--&amp;gt;&lt;br /&gt;
====files-path====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    files-path &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       An optional tag that shortens the number of characters that need to be written to the “values“ tag, assuming they all share the same path or asset library and extension. The path and extension can be specified here (e.g. &amp;lt;b&amp;gt;files-path “images/left/.texture”&amp;lt;/b&amp;gt;), where images/left is the path, and .texture is the extension for all the files.&lt;br /&gt;
&amp;lt;!--end files-path tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;!--THIS DOESN&#039;T LOOK RIGHT - CHECK--&amp;gt;&lt;br /&gt;
====paths====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    paths                      &amp;quot;marker-lights/night-only&amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind config-edit. A comma-separated list of paths that point to the tag in the wagon-x config to edit.&lt;br /&gt;
&amp;lt;!--end paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start values tag--&amp;gt;&lt;br /&gt;
====values====&lt;br /&gt;
:Type:       String - (a string list separated by special characters)&lt;br /&gt;
:Example1    values                     &amp;quot;0,15,30&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       A comma-separated (and optionally semicolon-separated) list of all the files/values to be switched between. If the files-path tag is used, only include each file’s name (exclude the path and extension). This tag is required for all properties. If it is not wanted, leave the value at “1”, but keep the tag still. For booleans, use 1 for true, and 0 for false. For animations, specify the animation frames you want to toggle through. For details on using the semicolon separator to shorten properties, see [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials#Using Semicolons to set multiple values in one property]].&lt;br /&gt;
:&amp;lt;b&amp;gt;Each kind has its own rules for what to put here, explained below. See the [[HowTo/WagonX - Technical Reference#kind]] property for more info on these.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--mesh-attachment--&amp;gt;&lt;br /&gt;
:::*For kind mesh-attachment:&lt;br /&gt;
::::*For mesh-attachment-type mesh-toggle, the value must be either 0 or 1 (visible/hidden) ???&lt;br /&gt;
::::*For mesh-attachment-type mesh-translation-orientation, the value must be a 3-dimensional vector with values separated by backticks, enclosed with round brackets for the translation, followed by a colon, then another round bracket-enclosed 3d vector for the orientation, as shown below. 0`2`4 is the translation, and 1.2`2`2 is the orientation (we have to use backticks because the comma is already used here for separating each index value).&lt;br /&gt;
::::Example: values  &amp;quot;(0`2`4):(1.2`2`2),(0`0`0):(0`0`0)&amp;quot;&lt;br /&gt;
&amp;lt;!--mesh-attachment-type--&amp;gt;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-speed, the value is the speed of the animation for that index&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value will be an integer bool (0 or 1) to indicate whether to start the loop, or stop it. You can create a separate property that controls the mesh-animation-speed, and link it via a [[HowTo/WagonX - Technical Reference#child-properties]] property to control the speed of the loop.&lt;br /&gt;
:::*For mesh-attachment type mesh-animation-frame, the value is the frame of the animation to jump to. Setting it to -1 will put that index at the last animation frame in the mesh (see [[Class_MeshObject#GetMeshAnimationFrameCount|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetMeshAnimationFrameCount&amp;lt;/span&amp;gt;]]).&lt;br /&gt;
::::Example:  values  &amp;quot;0,30&amp;quot;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value can be 0 or 1, to start/stop the loop&lt;br /&gt;
&amp;lt;!--sound-script--&amp;gt;&lt;br /&gt;
:::*For kind sound-script, the value can be 0 or 1, to start/stop the soundscript event&lt;br /&gt;
&amp;lt;!--config-edit--&amp;gt;&lt;br /&gt;
:::*For kind config-edit, the value is a string indicating the string value to assign to the config tag.&lt;br /&gt;
&amp;lt;!--particle-effect--&amp;gt;&lt;br /&gt;
:::*For kind particle-effect:&lt;br /&gt;
:::*For particle-effect-type pfx-message, the value follows the same rules for [[pfx message|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;pfx messages&amp;lt;/span&amp;gt;]].&lt;br /&gt;
::::*particle-effect-type       &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
::::Example:  values  &amp;quot;+0+1,-1-0&amp;quot;&lt;br /&gt;
&amp;lt;!--fx-replacement--&amp;gt;&lt;br /&gt;
:::*For kind fx-replacement:&lt;br /&gt;
::::*For fx-replacement-type texture-replacement, the comma and/or. semicolon-separated values represent the index in the texture-group asset to find the texture. Setting the first value to 1 will reference the texture index 1, shown in the partial config for a textures asset below:&lt;br /&gt;
::::Values “0,2,1” will reference the textures in the texture container at indexes 0, 2, and 1, in that order when cycled through.&lt;br /&gt;
::::Example: values  “0,2,1”&lt;br /&gt;
&lt;br /&gt;
 kuid          &amp;lt;kuid:1234:123456&amp;gt;&lt;br /&gt;
 username      &amp;quot;test texture group asset&amp;quot;&lt;br /&gt;
 trainz-build  4.6&lt;br /&gt;
 description   &amp;quot;test texture group&amp;quot;&lt;br /&gt;
 textures&lt;br /&gt;
 {&lt;br /&gt;
   0           &amp;quot;textures\0albedo.texture&amp;quot;&lt;br /&gt;
   1           &amp;quot;textures\1albedo.texture&amp;quot;&lt;br /&gt;
   2           &amp;quot;textures\2albedo.texture&amp;quot;&lt;br /&gt;
   3           &amp;quot;textures\0parameter.texture&amp;quot;&lt;br /&gt;
   4           &amp;quot;textures\1parameter.texture&amp;quot;&lt;br /&gt;
   5           &amp;quot;textures\2parameter.texture&amp;quot; &lt;br /&gt;
   6           &amp;quot;textures\0normal.texture&amp;quot;&lt;br /&gt;
   7           &amp;quot;textures\1normal.texture&amp;quot;&lt;br /&gt;
   8           &amp;quot;textures\2normal.texture&amp;quot;         &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type texture-replacement-texture, the comma and/or semicolon-separated values are the names of the files (ideally without the path or extension) to be referenced at that index. &lt;br /&gt;
::::Example: values  &amp;quot;images/congleton.texture,images/burntisland.texture,images/buxton.texture,images/none.texture&amp;quot;&lt;br /&gt;
::::If you have the same path (and same extension) for all your files, you can greatly reduce the clutter by just specifying the path and extension once using the files-path tag.  So, in this case the values entry would be:&lt;br /&gt;
::::Example: values &amp;quot;congleton,burntisland,buxton,none&amp;quot; &lt;br /&gt;
&lt;br /&gt;
      0&lt;br /&gt;
      {&lt;br /&gt;
        enabled                    1&lt;br /&gt;
        property-visibility        1&lt;br /&gt;
        name                       &amp;quot;Workflow Text: &amp;quot;&lt;br /&gt;
        property-id                &amp;quot;p_workflow&amp;quot;&lt;br /&gt;
        description                &amp;quot;Sets the Workflow&amp;quot;&lt;br /&gt;
        kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
        fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
        consist-property-sync      1&lt;br /&gt;
        meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
        effects                    &amp;quot;texture-extra&amp;quot;&lt;br /&gt;
        asset                      &amp;quot;null&amp;quot;&lt;br /&gt;
        files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
        values                     &amp;quot;congleton,burntisland,buxton,none&amp;quot;&lt;br /&gt;
        default-index              0&lt;br /&gt;
        trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
        display-type               &amp;quot;list&amp;quot;&lt;br /&gt;
        display-values             &amp;quot;Congleton,Burntisland,Buxton,None&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type attachment, the values are the names of the attachment effects to be replaced by the specified [[HowTo/WagonX - Technical Reference#asset]].&lt;br /&gt;
::::*For fx-replacement-type corona, the values are the names of the corona effects to be replaced by the specified [[HowTo/WagonX - Technical Reference#asset]].&lt;br /&gt;
::::*For fx-replacement-type animation, the values are the names of the animation effects to be replaced by the specified [[HowTo/WagonX - Technical Reference#asset]].&lt;br /&gt;
::::*For fx-replacement-type name, the values are the names that will replace the current name of the specified name effect.	&lt;br /&gt;
&amp;lt;!--end values tag--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start default-index--&amp;gt;&lt;br /&gt;
====default-index====&lt;br /&gt;
:Type:       Integer (-1 = random)&lt;br /&gt;
:Example:    default-index  0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0&lt;br /&gt;
:Desc:       The default index for the property to start at. This will be 0 if the tag is left out. If it is -1, it will choose a random index to start at.&amp;lt;br&amp;gt;&lt;br /&gt;
Warning:  If you have a list of values such as &amp;quot;1,2,3,4&amp;quot; and you want to set a default, then you should subtract 1 from the preferred value.  For example if you want the first in the list then set the default to 0.  This is because the browser counts the list entries from 0 and not 1.&lt;br /&gt;
&amp;lt;!--end default-index--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start sound-triggers--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====sound-triggers====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    sound-triggers             &amp;quot;bell_1,bell_2&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind sound-script only. This specifies the soundscript trigger(s) (comma separated) that this property will start/stop when the property is activated.&lt;br /&gt;
&amp;lt;!--end sound-triggers--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start trigger--&amp;gt;&lt;br /&gt;
====trigger====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    Null (ignored)&lt;br /&gt;
:Desc:       The event that will trigger/activate this property. Can be either an external event, such as a coal-loading animation, or a user-controlled event, or both. Setting it to none is useful if this is a [[HowTo/WagonX - Technical Reference#child-properties]] property of another property. Possible values are:&lt;br /&gt;
:::*user&lt;br /&gt;
:::*event&lt;br /&gt;
:::*both&lt;br /&gt;
:::*none	&lt;br /&gt;
&amp;lt;!--end trigger--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start events--&amp;gt;&lt;br /&gt;
====events====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    events  &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “event” only. An array of the event(s) that must take place for the property value at the index to activate. Can be one of the following (separated by forward slashes and commas to save space). &lt;br /&gt;
:::*begin-load/end-load/begin-unload/end-unload&lt;br /&gt;
:::*handbrake-apply/handbrake-release&lt;br /&gt;
:::*trainbrake-apply/trainbrake-release&lt;br /&gt;
:::*headlight-on, headlight-off&lt;br /&gt;
:::*horn&lt;br /&gt;
:::*bell&lt;br /&gt;
:::*sanding&lt;br /&gt;
:::*pantograph-state-0/1/2/3 (see [[Class_Train#GetPantographState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetPantographState&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*weather-0/1/2/3/4/5/6/7 (see [[Class_World#GetWeatherType|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetWeatherType&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*world-day/world-night&lt;br /&gt;
:::*queue-(0 - ?)- loaded/empty (e.g. &amp;lt;b&amp;gt;queue-0-loaded, queue-1-empty&amp;lt;/b&amp;gt;)&lt;br /&gt;
&amp;lt;!--end events--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-type--&amp;gt;&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only. The type of button this will be. It can be any of the trainz property browser value types, plus “manual”, but not map-object or asset-list. &amp;lt;b&amp;gt;For trainzbuild 5.1 and 5.0, only link is supported for the View Details page.&amp;lt;/b&amp;gt; Omitting this tag in combination with property-visibility set to 0 is useful for non-user triggers, such as world or train events.&lt;br /&gt;
:::*string&lt;br /&gt;
:::*int&lt;br /&gt;
:::*float&lt;br /&gt;
:::*list&lt;br /&gt;
:::*link	&lt;br /&gt;
&amp;lt;!--end display-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-values--&amp;gt;&lt;br /&gt;
====display-values====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only, and required for trigger type “user” properties to work, but optional for trigger type “event”. A list of comma-separated values which will be displayed in the view details page for the respective property. The number of values here must match the number of values in the “values” tag.&lt;br /&gt;
&amp;lt;!--end display-values--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
=Copyright Notice=&lt;br /&gt;
Much of the content on this page and child pages was derived from Dundun92&#039;s original Google Docs document.  Permission was granted to use that information here.&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40087</id>
		<title>HowTo/WagonX - Technical Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Technical_Reference&amp;diff=40087"/>
		<updated>2024-02-21T05:01:57Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Corrected some broken links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Document Structure =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;The WagonX Tutorial set is written over several pages.  This page is a base reference for using WagonX config containers, their properties and the values for those properties.  Other pages in the series are listed below:&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
# [[HowTo/Use the WagonX Library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Traincar Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= The WagonX Reference =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;This page contains details of the WagonX extension container and sub-containers.  Practical examples of usage can be found in the tutorials listed above.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Restricted Characters =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The characters in the list below cannot be used for some property tag values as they are used by the script to parse or identify values such as list items and other information. They can be used in name and description tags. Use of these characters in tag values is identified in the properties descriptions that follow. 	Tutorial sections give examples of use.  See also [[HowTo/WagonX - Technical Reference#display-values|display-values]].&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
*Comma ( , )&lt;br /&gt;
*Semicolon ( ; )&lt;br /&gt;
*Backtick ( ` )&lt;br /&gt;
*Colon ( : )	&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= General Layout =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WagonX config tags are defined in the extensions container along with other extensions such as ACS Lib. The general layout of the extensions container that also includes ACS Lib might look like this:&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 extensions&lt;br /&gt;
 {&lt;br /&gt;
   max_permitted_speed-60850     &amp;quot;50mph&amp;quot;&lt;br /&gt;
   active-coupling-standard-60850&lt;br /&gt;
   {&lt;br /&gt;
     ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     ...&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= WagonX Properties =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;There are currently three standard or &amp;quot;top level&amp;quot; WagonX containers that define properties for Marker Lights, a variation of ACSLib and Misc (miscellaneous).  In addition to the standard containers, you can define zero or more additonal property containers that are identified by integer value names starting from 0.  Each of these containers are defined below.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
== ACS ==&lt;br /&gt;
&amp;lt;!--start of ACS table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
For help on creating the acs extensions and setting up the acs mesh-table objects, see [[HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials#Naming_ACS_mesh-table_attachments|Naming ACS mesh-table attachments]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Each tag is shown here with sample values. There are no default values.&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 acs&lt;br /&gt;
 {&lt;br /&gt;
   animated                            1&lt;br /&gt;
   use-jbv-animation                   1&lt;br /&gt;
   duration                            1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;animated (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:This determines whether to use animations to move between the coupled and uncoupled state, or use individual static assets for each state.&lt;br /&gt;
*&amp;lt;b&amp;gt;use-jbv-animation (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:An animation system the author (DunDun92) made for compressing buffers and dynamic couplings and hoses, which is now being phased out due to performance problems. leave it at 0, unless you are using the JBV BR Mesh Library or BR class 101 mesh library, or any of his other libraries.&lt;br /&gt;
*&amp;lt;b&amp;gt;duration (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time, in seconds, that the mesh animation will take to move between the two states. If animated is set to 0, this will determine the fade duration when switching between meshes (fade duration on mesh objects in trainzbuild 5.0 + can get buggy)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &amp;lt;!--end of ACS table--&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&amp;lt;!--start of Misc table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;!--Note for page author - is this for proper industries such as cargo or is it used for passengers at stations as well?--&amp;gt;&lt;br /&gt;
The misc container currently contains times, in seconds, for industry loading and unloading.  Usually, these times are used to enable animations to run before or after loading/unloading.&lt;br /&gt;
&lt;br /&gt;
Each available tag is shown here with sample values.  There are no defaults.&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 misc&lt;br /&gt;
 {&lt;br /&gt;
   begin-load-time                   5.0&lt;br /&gt;
   begin-unload-time                 5.0&lt;br /&gt;
   end-load-time                     1.0&lt;br /&gt;
   end-unload-time                   1.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to load at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;begin-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to unloading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-load-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon end loading at an industry&lt;br /&gt;
*&amp;lt;b&amp;gt;end-unload-time (a floating point value)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The time it takes for the wagon to end unloading at an industry&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of misc table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marker-Lights ==&lt;br /&gt;
&amp;lt;!--start of Marker-Lights table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
The Marker-Lights container is used to show or hide light meshes that are identied by entries in the config mesh-table.&lt;br /&gt;
&lt;br /&gt;
Each tag is shown here with sample values.  There are no defaults. &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 marker-lights&lt;br /&gt;
 {&lt;br /&gt;
   enabled                             1&lt;br /&gt;
   car-minimum-count                   1&lt;br /&gt;
   require-locomotive                  1&lt;br /&gt;
   night-only                          0&lt;br /&gt;
   front&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;null&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   back&lt;br /&gt;
   {&lt;br /&gt;
     head&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     tail&lt;br /&gt;
     {&lt;br /&gt;
       mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;enabled (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Whether or not the marker lights are active on this asset.&lt;br /&gt;
*&amp;lt;b&amp;gt;car-minimum-count (an integer number)&amp;lt;/b&amp;gt;&lt;br /&gt;
:The minimum number of cars that must be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;require-locomotive (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, a traincar of Class locomotive will need to be present in the consist for the marker-lights to activate.&lt;br /&gt;
*&amp;lt;b&amp;gt;night-only (1 = true, 0=false)&amp;lt;/b&amp;gt;&lt;br /&gt;
:If set to 1, the lamps will only be visible at night, otherwise they will be displayed 24/7.&lt;br /&gt;
*&amp;lt;b&amp;gt;Front/back head/tail containers&amp;lt;/b&amp;gt;&lt;br /&gt;
:These containers identify the mesh to use for the front, back, head, and tail lamps.  These meshes must be in the config mesh-table.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--end of Marker-Lights table--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser-Properties ==&lt;br /&gt;
&amp;lt;!--start of Browser-Properties container table--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
*The browser-properties container is a set of zero or more property containers that hold settings for a property such as a smoke effect, an attachment or even texture replacement. They are quite flexible and suitable most any traincar/loco property.&lt;br /&gt;
*A property can have sub properties that are activated with their parent.&lt;br /&gt;
*A property container has a number of tags with values.  Many are common to different property types but some are unique to a property.&lt;br /&gt;
*A container need not contain all available tags.&lt;br /&gt;
*We start with a sample of two properties: one for a texture replacement (skin) and the second for a handbrake activation. These are representative only and may not be suitable for your asset,&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
   0&lt;br /&gt;
   {&lt;br /&gt;
     enabled                    1&lt;br /&gt;
     property-visibility        1&lt;br /&gt;
     name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
     property-id                &amp;quot;p_skin&amp;quot;&lt;br /&gt;
     consist-property-sync      1&lt;br /&gt;
     description                &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
     kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
     fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
     meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
     effects                    &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
     asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
     files-path                 &amp;quot;null&amp;quot;&lt;br /&gt;
     values                     &amp;quot;0;3,1;4,2;5&amp;quot;&lt;br /&gt;
     default-index              -1&lt;br /&gt;
     trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
     display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
     display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   1&lt;br /&gt;
   {&lt;br /&gt;
     enabled                    1&lt;br /&gt;
     property-visibility        0&lt;br /&gt;
     name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
     property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
     description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
     kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
     mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
     meshes                     &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
     values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
     events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
     duration                   3.2&lt;br /&gt;
     default-index              0&lt;br /&gt;
     trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
     display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
     display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
===Supported Tags===&lt;br /&gt;
Tag explanations.  Some examples are included in the definition and, for others, see above for sample of usage.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====enabled====&lt;br /&gt;
:Type:       Boolean (1 = true, 0=false)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    No default.&lt;br /&gt;
:Desc:       Whether or not this property is active. This is useful for debugging, or if you want to disable it without removing everything.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====property-visibility====&lt;br /&gt;
:Type:       Integer - (0 = Hidden, 1 = Visible, 2 = Surveyor Only, 3 = Driver Only) &lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0 (hidden)&lt;br /&gt;
:Desc:       Indicates whether the property will be visible in the Properties Browser and in what mode.	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====name====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The display name of this property, as will appear on the properties page.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;	&lt;br /&gt;
====child-properties====&lt;br /&gt;
:Type:       A string of numbers separated by commas.&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The list of properties that will activate when this property is activated. They will activate at the same index as the parent, similar to consist-property-sync. The property-visibility tag for the child properties should be set to 0. The child properties cannot have their own child-properties tag, and the property-visibility of the child-property must be 0, else it will not activate. You cannot set the child-property to yourself either.&lt;br /&gt;
:Example:    child-properties  &amp;quot;2,4,5&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The formal name (ID) of this property, used to identify and change this property. For example, If the name is &amp;lt;b&amp;gt;Workflow&amp;lt;/b&amp;gt;, it might be a good idea to call this &amp;lt;b&amp;gt;p_workflow&amp;lt;/b&amp;gt;. &amp;lt;div style=&amp;quot;color: #ff0080&amp;quot;&amp;gt;This must be unique for each browser-property&amp;lt;/div&amp;gt;.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====consist-property-sync====&lt;br /&gt;
:Type:       Integer - (0 off, 1 on (button), 2 on (automatic)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       Whether or not to sync the property within the consist, if a tag with the same [[HowTo/WagonX - Technical Reference#property-sync-id]] exists in the other assets. Omitting or setting the tag to 0 disables this. Setting it to 1 will create a button to the right of the property that can be clicked on to sync the property. Setting it to 2 will automatically sync the property across the consist whenever a change in the property is detected.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====property-sync-id====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The ID that determines which assets will be affected when consist-property-sync is activated. Only assets that share this ID will be synced in the consist, so be sure to make it particular and unique.&lt;br /&gt;
:Example:    property-sync-id  &amp;quot;soundBell&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====description====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The description of this attachment as it will appear in the Properties Browser.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
====kind====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of property this will be. Can be one of the options below. Most of these are derived from [[Class MeshObject|Class_MeshObject]]. For more info on implementing these, see [[HowTo/WagonX - Technical Reference#values]].&lt;br /&gt;
::*mesh-attachment&lt;br /&gt;
:::Manipulate the mesh’s animation, position, visibility, etc. See mesh-attachment-type.&lt;br /&gt;
::*fx-replacement&lt;br /&gt;
:::Change an effect in the mesh. See [[HowTo/WagonX - Technical Reference#fx-replacement-type]].&lt;br /&gt;
::*particle-effect&lt;br /&gt;
:::Activate/Deactivate/Edit a particle effect (smoke0, smoke1, etc). See [[HowTo/WagonX - Technical Reference#particle-effects]] and [[HowTo/WagonX - Technical Reference#particle-effect-type]].&lt;br /&gt;
::*sound-script&lt;br /&gt;
:::Used to play a sound-script sound within this asset. See [[HowTo/WagonX - Technical Reference#sound-triggers]].&lt;br /&gt;
::*config-edit&lt;br /&gt;
:::Used to edit a tag in the wagon-x config soup. See paths.&lt;br /&gt;
&amp;lt;!--need to come back and check this as I don&#039;t understand how this works--&amp;gt;&lt;br /&gt;
====particle-effect-type====&lt;br /&gt;
:Type:       String (kind mesh-attachment only)&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of PFX function this property will be if the [[HowTo/WagonX - Technical Reference#kind]] tag is set to particle-effect. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[HowTo/WagonX - Technical Reference#values]] for instructions on how to implement these properties. Currently, only pfx-message is supported.&lt;br /&gt;
:Example:    kind  &amp;quot;particle-effect&amp;quot;&lt;br /&gt;
:            particle-effect-type &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
::*[[pfx_Message|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;pfx-message&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Send a message to enable/disable a particle effect.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start mesh-attachment--&amp;gt;&lt;br /&gt;
====mesh-attachment-type====&lt;br /&gt;
:Type:       String - (kind mesh-attachment only)&lt;br /&gt;
:Example:    kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
::           mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of mesh property this property will be if the kind tag is set to mesh-attachment. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See values for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshVisible|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-toggle&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Toggle between the mesh(s) being visible or hidden.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshOrientation|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-translation-orientation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the translation and orientation of the mesh(es)&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationFrame|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-frame&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the frame(s) the meshes animation will move between. Useful for door opening and closing animations, or animations that require more than 2 states.&lt;br /&gt;
::*[[Class_MeshObject#StartMeshAnimationLoop|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-loop&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Start or stop an animation-loop on the mesh.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-state&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Sets the state of the mesh(s) animation.&lt;br /&gt;
::*[[Class_MeshObject#SetMeshAnimationSpeed|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;mesh-animation-speed&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Changes the speed of the meshes animation.&lt;br /&gt;
&amp;lt;!--end mesh-attachment--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start fx-replacement-type--&amp;gt;&lt;br /&gt;
====fx-replacement-type====&lt;br /&gt;
:Type:       String)(kind fx-replacement only)&lt;br /&gt;
:Example:    kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
:::fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The type of fx replacement effect this property will be if the [[HowTo/WagonX - Technical Reference#kind]] tag is set to fx-replacement. Each one is hyperlinked to the corresponding trainzscript function, though it is not necessary to know them. See [[HowTo/WagonX - Technical Reference#values]] for instructions on how to implement these properties.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacement|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one within a texture-group asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXTextureReplacementTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;texture-replacement-texture&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a texture effect in this asset to one located within this asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXCoronaTexture|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;corona&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a corona effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXNameText|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces a name effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAttachment|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;attachment&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Replaces an attachment effect in the asset.&lt;br /&gt;
::*[[Class_MeshObject#SetFXAnimationState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;animation&amp;lt;/span&amp;gt;]]&lt;br /&gt;
:::Plays/Stops an animation effect in the asset.&lt;br /&gt;
&amp;lt;!--end fx-replacement-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start duration--&amp;gt;&lt;br /&gt;
====duration====&lt;br /&gt;
:Type:       Float&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind mesh-animation and mesh-toggle. This tag determines the time to transition to the next state for the value. If it is 0, the transition will occur instantaneously. &amp;lt;b&amp;gt;(There may be issues with using this tag with mesh-toggle.)&amp;lt;/b&amp;gt;&lt;br /&gt;
:Example:    duration 3.2&lt;br /&gt;
&amp;lt;!--end duration--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start meshes--&amp;gt;&lt;br /&gt;
====meshes====&lt;br /&gt;
:Type:       String - (a list of mesh names from the mesh-table separated by commas)&lt;br /&gt;
:Example:    meshes &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated mesh-table asset(s) to be modified by the property. Use this for [[HowTo/WagonX - Technical Reference#kind]] mesh-toggle or kind mesh-animation. Use this tag, the effect tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end meshes--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start of effects (textures)--&amp;gt;&lt;br /&gt;
====effects====&lt;br /&gt;
:Type:       String - (a list of texture names (i.e. texture.txt names without the .txt) each separated by a comma)&lt;br /&gt;
:Example:    effects &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The comma-separated effect(s) to be modified by the property. Only use this tag if you are using [[HowTo/WagonX - Technical Reference#kind]] fx-replacement. Use this tag, the mesh tag, or the asset tag, but not more than one.&lt;br /&gt;
&amp;lt;!--end of effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start of particle-effects--&amp;gt;&lt;br /&gt;
====particle-effects====&lt;br /&gt;
:Type:       String - (a list of integer numbers as a string)&lt;br /&gt;
:Example:    particle-effects &amp;quot;0,1&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind particle-effect. The comma-separated list of PFX effects to be modified by the property. See kind for help on implementation. &amp;lt;b&amp;gt;There is currently no use for this tag as of yet. pfx-message doesn&#039;t need this because everything is already specified in the values tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--end particle-effects--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start target-asset tag--&amp;gt;&lt;br /&gt;
====target-asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    target-asset &amp;quot;bogey-0&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       This determines which assets config this property will manipulate. This tag is currently only used for manipulating a vehicles bogey (e.g. texture replacement). The name must be “bogey-” + the index of the bogey to edit. This gives you full access to the bogeys mesh-table, allowing you to set texture replacements, mesh toggles, and other properties within the bogey. This tag can be omitted if you are not doing bogey texture replacements. &amp;lt;b&amp;gt;Only properties of kind “mesh-attachment” or “fx-replacement” can be used for properties that use this tag.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--end target-asset tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start asset tag--&amp;gt;&lt;br /&gt;
====asset====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    asset &amp;quot;texturelib&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       The kuid-table asset to be used by the property. Use this for cases where you need to reference another asset outside of this, such as a texture-replacement library. Use this tag, the [[HowTo/WagonX - Technical Reference#effects]] tag, the [[HowTo/WagonX - Technical Reference#meshes]] tag, or the [[HowTo/WagonX - Technical Reference#particle-effects]] tag,  but not more than one.&lt;br /&gt;
&amp;lt;!--end asset tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start files-path tag--&amp;gt;&lt;br /&gt;
====files-path====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    files-path &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       An optional tag that shortens the number of characters that need to be written to the “values“ tag, assuming they all share the same path or asset library and extension. The path and extension can be specified here (e.g. &amp;lt;b&amp;gt;files-path “images/left/.texture”&amp;lt;/b&amp;gt;), where images/left is the path, and .texture is the extension for all the files.&lt;br /&gt;
&amp;lt;!--end files-path tag--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;!--THIS DOESN&#039;T LOOK RIGHT - CHECK--&amp;gt;&lt;br /&gt;
====paths====&lt;br /&gt;
:Type:       String - (a list of two strings)&lt;br /&gt;
:Example:    paths                      &amp;quot;marker-lights/night-only&amp;quot;&amp;quot;&lt;br /&gt;
:Compulsory: Yes&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind config-edit. A comma-separated list of paths that point to the tag in the wagon-x config to edit.&lt;br /&gt;
&amp;lt;!--end paths tag--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start values tag--&amp;gt;&lt;br /&gt;
====values====&lt;br /&gt;
:Type:       String - (a string list separated by special characters)&lt;br /&gt;
:Example1    values                     &amp;quot;0,15,30&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       A comma-separated (and optionally semicolon-separated) list of all the files/values to be switched between. If the files-path tag is used, only include each file’s name (exclude the path and extension). This tag is required for all properties. If it is not wanted, leave the value at “1”, but keep the tag still. For booleans, use 1 for true, and 0 for false. For animations, specify the animation frames you want to toggle through. For details on using the semicolon separator to shorten properties, see [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials#Using Semicolons to set multiple values in one property]].&lt;br /&gt;
:&amp;lt;b&amp;gt;Each kind has its own rules for what to put here, explained below. See the [[HowTo/WagonX - Technical Reference#kind]] property for more info on these.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;!--mesh-attachment--&amp;gt;&lt;br /&gt;
:::*For kind mesh-attachment:&lt;br /&gt;
::::*For mesh-attachment-type mesh-toggle, the value must be either 0 or 1 (visible/hidden) ???&lt;br /&gt;
::::*For mesh-attachment-type mesh-translation-orientation, the value must be a 3-dimensional vector with values separated by backticks, enclosed with round brackets for the translation, followed by a colon, then another round bracket-enclosed 3d vector for the orientation, as shown below. 0`2`4 is the translation, and 1.2`2`2 is the orientation (we have to use backticks because the comma is already used here for separating each index value).&lt;br /&gt;
::::Example: values  &amp;quot;(0`2`4):(1.2`2`2),(0`0`0):(0`0`0)&amp;quot;&lt;br /&gt;
&amp;lt;!--mesh-attachment-type--&amp;gt;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-speed, the value is the speed of the animation for that index&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value will be an integer bool (0 or 1) to indicate whether to start the loop, or stop it. You can create a separate property that controls the mesh-animation-speed, and link it via a [[HowTo/WagonX - Technical Reference#child-properties]] property to control the speed of the loop.&lt;br /&gt;
:::*For mesh-attachment type mesh-animation-frame, the value is the frame of the animation to jump to. Setting it to -1 will put that index at the last animation frame in the mesh (see [[Class_MeshObject#GetMeshAnimationFrameCount|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetMeshAnimationFrameCount&amp;lt;/span&amp;gt;]]).&lt;br /&gt;
::::Example:  values  &amp;quot;0,30&amp;quot;&lt;br /&gt;
:::*For mesh-attachment-type mesh-animation-loop, the value can be 0 or 1, to start/stop the loop&lt;br /&gt;
&amp;lt;!--sound-script--&amp;gt;&lt;br /&gt;
:::*For kind sound-script, the value can be 0 or 1, to start/stop the soundscript event&lt;br /&gt;
&amp;lt;!--config-edit--&amp;gt;&lt;br /&gt;
:::*For kind config-edit, the value is a string indicating the string value to assign to the config tag.&lt;br /&gt;
&amp;lt;!--particle-effect--&amp;gt;&lt;br /&gt;
:::*For kind particle-effect:&lt;br /&gt;
:::*For particle-effect-type pfx-message, the value follows the same rules for [[pfx message|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;pfx messages&amp;lt;/span&amp;gt;]].&lt;br /&gt;
::::*particle-effect-type       &amp;quot;pfx-message&amp;quot;&lt;br /&gt;
::::Example:  values  &amp;quot;+0+1,-1-0&amp;quot;&lt;br /&gt;
&amp;lt;!--fx-replacement--&amp;gt;&lt;br /&gt;
:::*For kind fx-replacement:&lt;br /&gt;
::::*For fx-replacement-type texture-replacement, the comma and/or. semicolon-separated values represent the index in the texture-group asset to find the texture. Setting the first value to 1 will reference the texture index 1, shown in the partial config for a textures asset below:&lt;br /&gt;
::::Values “0,2,1” will reference the textures in the texture container at indexes 0, 2, and 1, in that order when cycled through.&lt;br /&gt;
::::Example: values  “0,2,1”&lt;br /&gt;
&lt;br /&gt;
 kuid          &amp;lt;kuid:1234:123456&amp;gt;&lt;br /&gt;
 username      &amp;quot;test texture group asset&amp;quot;&lt;br /&gt;
 trainz-build  4.6&lt;br /&gt;
 description   &amp;quot;test texture group&amp;quot;&lt;br /&gt;
 textures&lt;br /&gt;
 {&lt;br /&gt;
   0           &amp;quot;textures\0albedo.texture&amp;quot;&lt;br /&gt;
   1           &amp;quot;textures\1albedo.texture&amp;quot;&lt;br /&gt;
   2           &amp;quot;textures\2albedo.texture&amp;quot;&lt;br /&gt;
   3           &amp;quot;textures\0parameter.texture&amp;quot;&lt;br /&gt;
   4           &amp;quot;textures\1parameter.texture&amp;quot;&lt;br /&gt;
   5           &amp;quot;textures\2parameter.texture&amp;quot; &lt;br /&gt;
   6           &amp;quot;textures\0normal.texture&amp;quot;&lt;br /&gt;
   7           &amp;quot;textures\1normal.texture&amp;quot;&lt;br /&gt;
   8           &amp;quot;textures\2normal.texture&amp;quot;         &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type texture-replacement-texture, the comma and/or semicolon-separated values are the names of the files (ideally without the path or extension) to be referenced at that index. &lt;br /&gt;
::::Example: values  &amp;quot;images/congleton.texture,images/burntisland.texture,images/buxton.texture,images/none.texture&amp;quot;&lt;br /&gt;
::::If you have the same path (and same extension) for all your files, you can greatly reduce the clutter by just specifying the path and extension once using the files-path tag.  So, in this case the values entry would be:&lt;br /&gt;
::::Example: values &amp;quot;congleton,burntisland,buxton,none&amp;quot; &lt;br /&gt;
&lt;br /&gt;
      0&lt;br /&gt;
      {&lt;br /&gt;
        enabled                    1&lt;br /&gt;
        property-visibility        1&lt;br /&gt;
        name                       &amp;quot;Workflow Text: &amp;quot;&lt;br /&gt;
        property-id                &amp;quot;p_workflow&amp;quot;&lt;br /&gt;
        description                &amp;quot;Sets the Workflow&amp;quot;&lt;br /&gt;
        kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
        fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
        consist-property-sync      1&lt;br /&gt;
        meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
        effects                    &amp;quot;texture-extra&amp;quot;&lt;br /&gt;
        asset                      &amp;quot;null&amp;quot;&lt;br /&gt;
        files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
        values                     &amp;quot;congleton,burntisland,buxton,none&amp;quot;&lt;br /&gt;
        default-index              0&lt;br /&gt;
        trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
        display-type               &amp;quot;list&amp;quot;&lt;br /&gt;
        display-values             &amp;quot;Congleton,Burntisland,Buxton,None&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
::::*For fx-replacement-type attachment, the values are the names of the attachment effects to be replaced by the specified [[HowTo/WagonX - Technical Reference#asset]].&lt;br /&gt;
::::*For fx-replacement-type corona, the values are the names of the corona effects to be replaced by the specified [[HowTo/WagonX - Technical Reference#asset]].&lt;br /&gt;
::::*For fx-replacement-type animation, the values are the names of the animation effects to be replaced by the specified [[HowTo/WagonX - Technical Reference#asset]].&lt;br /&gt;
::::*For fx-replacement-type name, the values are the names that will replace the current name of the specified name effect.	&lt;br /&gt;
&amp;lt;!--end values tag--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start default-index--&amp;gt;&lt;br /&gt;
====default-index====&lt;br /&gt;
:Type:       Integer (-1 = random)&lt;br /&gt;
:Example:    default-index  0&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    0&lt;br /&gt;
:Desc:       The default index for the property to start at. This will be 0 if the tag is left out. If it is -1, it will choose a random index to start at.&lt;br /&gt;
&amp;lt;!--end default-index--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start sound-triggers--&amp;gt;&lt;br /&gt;
====sound-triggers====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    sound-triggers             &amp;quot;bell_1,bell_2&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For kind sound-script only. This specifies the soundscript trigger(s) (comma separated) that this property will start/stop when the property is activated.&lt;br /&gt;
&amp;lt;!--end sound-triggers--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start trigger--&amp;gt;&lt;br /&gt;
====trigger====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    Null (ignored)&lt;br /&gt;
:Desc:       The event that will trigger/activate this property. Can be either an external event, such as a coal-loading animation, or a user-controlled event, or both. Setting it to none is useful if this is a [[HowTo/WagonX - Technical Reference#child-properties]] property of another property. Possible values are:&lt;br /&gt;
:::*user&lt;br /&gt;
:::*event&lt;br /&gt;
:::*both&lt;br /&gt;
:::*none	&lt;br /&gt;
&amp;lt;!--end trigger--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start events--&amp;gt;&lt;br /&gt;
====events====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    events  &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger kind “event” only. An array of the event(s) that must take place for the property value at the index to activate. Can be one of the following (separated by forward slashes and commas to save space). &lt;br /&gt;
:::*begin-load/end-load/begin-unload/end-unload&lt;br /&gt;
:::*handbrake-apply/handbrake-release&lt;br /&gt;
:::*trainbrake-apply/trainbrake-release&lt;br /&gt;
:::*headlight-on, headlight-off&lt;br /&gt;
:::*horn&lt;br /&gt;
:::*bell&lt;br /&gt;
:::*sanding&lt;br /&gt;
:::*pantograph-state-0/1/2/3 (see [[Class_Train#GetPantographState|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetPantographState&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*weather-0/1/2/3/4/5/6/7 (see [[Class_World#GetWeatherType|&amp;lt;span style=&amp;quot;color: #0080ff&amp;quot;&amp;gt;GetWeatherType&amp;lt;/span&amp;gt;]])&lt;br /&gt;
:::*world-day/world-night&lt;br /&gt;
:::*queue-(0 - ?)- loaded/empty (e.g. &amp;lt;b&amp;gt;queue-0-loaded, queue-1-empty&amp;lt;/b&amp;gt;)&lt;br /&gt;
&amp;lt;!--end events--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-type--&amp;gt;&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Example:    display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only. The type of button this will be. It can be any of the trainz property browser value types, plus “manual”, but not map-object or asset-list. &amp;lt;b&amp;gt;For trainzbuild 5.1 and 5.0, only link is supported for the View Details page.&amp;lt;/b&amp;gt; Omitting this tag in combination with property-visibility set to 0 is useful for non-user triggers, such as world or train events.&lt;br /&gt;
:::*string&lt;br /&gt;
:::*int&lt;br /&gt;
:::*float&lt;br /&gt;
:::*list&lt;br /&gt;
:::*link	&lt;br /&gt;
&amp;lt;!--end display-type--&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;!--start display-values--&amp;gt;&lt;br /&gt;
====display-values====&lt;br /&gt;
:Type:       String - (a list of strings)&lt;br /&gt;
:Example:    display-values             &amp;quot;Clean,Weathered,Dirty&amp;quot;&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Default:    None&lt;br /&gt;
:Desc:       For trigger type “user” and “event” only, and required for trigger type “user” properties to work, but optional for trigger type “event”. A list of comma-separated values which will be displayed in the view details page for the respective property. The number of values here must match the number of values in the “values” tag.&lt;br /&gt;
&amp;lt;!--end display-values--&amp;gt;	&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
=Copyright Notice=&lt;br /&gt;
Much of the content on this page and child pages was derived from Dundun92&#039;s original Google Docs document.  Permission was granted to use that information here.&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Traincar_Tutorial&amp;diff=40068</id>
		<title>HowTo/WagonX - Traincar Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Traincar_Tutorial&amp;diff=40068"/>
		<updated>2024-02-20T06:33:10Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Minor format error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Document Structure =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
The WagonX Tutorial set is written over several pages.  This page is a tutorial for adding WagonX capability to a passenger traincar and a goods carrying wagon.  Other pages in the series are listed below:&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
# [[HowTo/Use the WagonX Library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Technical Reference]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
= Adding WagonX to a Traincar =&lt;br /&gt;
== Setting the scene ==&lt;br /&gt;
A traincar can have different purposes such as a passenger vehicle such as a car or carriage, or as a wagon carrying, loading and unloading goods. WagonX can assist with both of those so two examples are included here.  The first example is of a GWR carriage made by Andi Smith and repaired by the CRG.  The second example will likely be a coal vehicle by Ben Dorsey.  That example will follow later.&lt;br /&gt;
For the GWR carriage we will add the Automated Coupling System (ACS), texture swapping, and attachments that can be shown or hidden.&lt;br /&gt;
All of this is defined in the config.&lt;br /&gt;
Some of the config tag set up is rather complicated so rather than describe here the tutorial frequently refers to the [[HowTo/WagonX - Technical Reference|Technical Reference]].  It would be useful to keep a brower tab open on that page.&lt;br /&gt;
Mesh libraries used in these examples are available on the DLS however they may not be suitable for your application so please use whatever is appropriate for your situation.&lt;br /&gt;
&lt;br /&gt;
== Setting up the config for the script, class and script-include-table ==&lt;br /&gt;
=== The script ===&lt;br /&gt;
You need a simple script called ref.gs that is in the WagonX asset. Alternatively you can easily create it yourself in any plain text editor.  The contents are:&lt;br /&gt;
&lt;br /&gt;
 include &amp;quot;locowagonx.gs&amp;quot;&lt;br /&gt;
 class eRef isclass WagonX {};&lt;br /&gt;
&lt;br /&gt;
=== The class and script-include table ===&lt;br /&gt;
Include these tags in the config, where &amp;lt;kuid:661805:500008&amp;gt; is the WagonX library.&lt;br /&gt;
&lt;br /&gt;
 class &amp;quot;eRef&amp;quot;&lt;br /&gt;
 script-include-table {&lt;br /&gt;
   0           &amp;lt;kuid:661805:500008&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting up the extensions container ==&lt;br /&gt;
&lt;br /&gt;
The extensions container contains sub containers for ACS, if used, and WagonX.  So, the general format, with no tags yet, is:&lt;br /&gt;
&lt;br /&gt;
 extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
   wagon-x {&lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== The ACS container  ==&lt;br /&gt;
The ACS container is fully described at [[ACS_Coupling_System]], but for our purposes we will use the following as an example.  Add/change/remove as required for your vehicle.&lt;br /&gt;
&lt;br /&gt;
  active-coupling-standard-60850 {&lt;br /&gt;
    version-major                         &amp;quot;2&amp;quot;&lt;br /&gt;
    version-minor                         &amp;quot;0&amp;quot;&lt;br /&gt;
    brakes                                &amp;quot;vac&amp;quot;&lt;br /&gt;
    front {&lt;br /&gt;
      coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
      vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
      heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
      gangway                             &amp;quot;gangway&amp;quot;    &lt;br /&gt;
    }&lt;br /&gt;
    back {&lt;br /&gt;
      coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
      vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
      heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
      gangway                             &amp;quot;gangway&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
== The Wagon-X Container ==&lt;br /&gt;
==== The WagonX ACS sub-container ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#ACS\|WagonX ACS Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt;&lt;br /&gt;
WagonX needs information about ACS that isn&#039;t defined in the ACS container so, within the wagon-x sub container include an acs sub container that has three tags: animate, use-jbv-animation, and duration.&lt;br /&gt;
Animated and use-jbv-animation are self explanatory and duration is the fade time.&lt;br /&gt;
 extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     acs&lt;br /&gt;
     {&lt;br /&gt;
       animated                            1     &lt;br /&gt;
       use-jbv-animation                   0 &lt;br /&gt;
       duration                          1.0 &lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== The Misc sub-container ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#Misc\|WagonX Misc Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt; &lt;br /&gt;
The Misc sub-container includes times, in seconds, for loads and unloads at industries. This can be useful for effects such as smoke or dust. Since this is a passenger vehicle we will just set all values to zero. &lt;br /&gt;
&lt;br /&gt;
 extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     acs&lt;br /&gt;
     {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
     misc {&lt;br /&gt;
       begin-load-time                   0&lt;br /&gt;
       begin-unload-time                 0&lt;br /&gt;
       end-load-time                     0&lt;br /&gt;
       end-unload-time                   0&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Marker Lights ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#Marker-Lights|WagonX Marker Lights Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt;&lt;br /&gt;
The marker-lights sub container is required even if you are not using them. If you don&#039;t need it then just set enabled to 0 and the mesh values to null.&amp;lt;br&amp;gt;&lt;br /&gt;
The name &amp;quot;front&amp;quot; indicates the physical front of the vehicle.  i.e. where a.limfront is located.  &amp;quot;Back&amp;quot; is the physical back of the vehicle.&lt;br /&gt;
&amp;quot;Head&amp;quot; is the direction of train travel, and &amp;quot;tail&amp;quot; is the direction from which the train has come.  In other words the tail of the train.  Note that Trainz always has a nominal train direction of travel even if it is stopped.&amp;lt;br&amp;gt;&lt;br /&gt;
If you don&#039;t need a lamp at a position then just use &amp;quot;null&amp;quot;.  There are some conditions on when lights are shown.&amp;lt;br&amp;gt;&lt;br /&gt;
The head and tail meshes are lamp meshes in the mesh-table.&amp;lt;br&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     acs&lt;br /&gt;
     {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
     misc {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
     marker-lights {&lt;br /&gt;
       enabled                             1&lt;br /&gt;
       car-minimum-count                   2&lt;br /&gt;
       require-locomotive                  1&lt;br /&gt;
       night-only                          0&lt;br /&gt;
       front {&lt;br /&gt;
         head {&lt;br /&gt;
           mesh                            &amp;quot;lamp-front-white&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         tail {&lt;br /&gt;
           mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       back {&lt;br /&gt;
         head {&lt;br /&gt;
           mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         tail {&lt;br /&gt;
           mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Browser-Properties ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#Browser-Properties|Browser Properties Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt;&lt;br /&gt;
The example that follows is a relatively simple browser setup to control:&lt;br /&gt;
*Texture swapping&lt;br /&gt;
*Control of the marker lights&lt;br /&gt;
*Control of an interior night mesh&lt;br /&gt;
*Control of a &amp;quot;front&amp;quot; indicator&lt;br /&gt;
&lt;br /&gt;
Each property has a number of control tags that are located in a property container and each container has a simple number id.  The number of tags in a container depends on the property type.  Not all properties are subject to user control and can be triggered by other events, such as changing from day to night.  Each property can be disabled, however this can only be done in the config.&lt;br /&gt;
===== Texture Swapping =====&lt;br /&gt;
Texture swapping is controlled in the Properties Browser and can be configured by the user.  There are six possible textures including a blank which like an underpaint coat.  The default livery is number 1 which is not the first in the list as the list starts with 0 (zero).&lt;br /&gt;
Since the number of texture effects is 4, and the number of different textures is 6, then the values tag must contain 24 values that are indices to the actual textures in the relevant texture library.&lt;br /&gt;
&lt;br /&gt;
===== Marker Lights =====&lt;br /&gt;
The marker lights is quite simple and just controls whether they are used only at night or also during the day as well.&lt;br /&gt;
&lt;br /&gt;
===== Front Indicator =====&lt;br /&gt;
The front indicator is a simple tool provided by the original creator, Andi Smith, to show which end of the car is the physical front.  The property is visible in the Properties Browser as a simple show or hide option.&lt;br /&gt;
&lt;br /&gt;
===== Interior Lighting =====&lt;br /&gt;
This is an example of a property triggered by an external event.  In this case changing from day to night, and night to day.  WagonX intercepts the message posted on these events and that triggers a mesh swap using the event type and the values to show the correct mesh.&lt;br /&gt;
&lt;br /&gt;
   extensions {&lt;br /&gt;
     active-coupling-standard-60850 {&lt;br /&gt;
     ...&lt;br /&gt;
     }&lt;br /&gt;
     wagon-x&lt;br /&gt;
     {&lt;br /&gt;
       acs&lt;br /&gt;
       {&lt;br /&gt;
         ...&lt;br /&gt;
       }&lt;br /&gt;
       misc {&lt;br /&gt;
         ...&lt;br /&gt;
       }&lt;br /&gt;
       marker-lights {&lt;br /&gt;
         ...&lt;br /&gt;
       }&lt;br /&gt;
       browser-properties {&lt;br /&gt;
         0 {&lt;br /&gt;
           consist-property-sync             1&lt;br /&gt;
           property-sync-id                  &amp;quot;GWRsynctexture&amp;quot;&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               1&lt;br /&gt;
           name                              &amp;quot;Current traincar livery: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_livery&amp;quot;&lt;br /&gt;
           description                       &amp;quot;Sets the livery for the carriage&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
           fx-replacement-type               &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
           effects                           &amp;quot;livery-main,livery-leftdoor,livery-rightdoor,livery-crest&amp;quot;&lt;br /&gt;
           asset                             &amp;quot;liveries&amp;quot;&lt;br /&gt;
           values                            &amp;quot;0;0;0;0,1;1;1;5,2;2;2;6,2;2;2;7,3;3;3;8,4;4;4;8&amp;quot;&lt;br /&gt;
           default-index                     1&lt;br /&gt;
           trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
           display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
           display-values                    &amp;quot;Blank,GWR 1922,GWR 1930,GWR 1934,Crimson Cream,Maroon&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         1 {&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               1&lt;br /&gt;
           name                              &amp;quot;Night Only: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_cfg&amp;quot;&lt;br /&gt;
           description                       &amp;quot;Sets the Day Night&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;config-edit&amp;quot;&lt;br /&gt;
           paths                             &amp;quot;marker-lights/night-only&amp;quot;&lt;br /&gt;
           values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
           default-index                     0&lt;br /&gt;
           trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
           display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
           display-values                    &amp;quot;False,True&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         2 {&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               1&lt;br /&gt;
           name                              &amp;quot;Front Indicator: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_front&amp;quot;&lt;br /&gt;
           description                       &amp;quot;Large F character showing front of carriage&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
           mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
           meshes                            &amp;quot;front&amp;quot;&lt;br /&gt;
           values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
           default-index                     0&lt;br /&gt;
           duration                          2&lt;br /&gt;
           trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
           display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
           display-values                    &amp;quot;Hidden, Visible&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         3 {&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               0&lt;br /&gt;
           name                              &amp;quot;Interior lighting: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_interior_lighting&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
           mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
           meshes                            &amp;quot;day-interior,night-interior&amp;quot;&lt;br /&gt;
           values                            &amp;quot;1;0,0;1&amp;quot;&lt;br /&gt;
           default-index                     0&lt;br /&gt;
           duration                          2&lt;br /&gt;
           trigger                           &amp;quot;event&amp;quot;&lt;br /&gt;
           events                            &amp;quot;world-day,world-night&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Adding other effects =&lt;br /&gt;
You can easily add other mesh effects using the front indicator in the example above as a template.  For example, some versions of a traincar may have a real life structure for different versions of the same basic car.  For that just copy the front indicator container and change the tag contents as necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The final config.txt (relevant parts) =&lt;br /&gt;
Here is the completed config.txt for those parts covered by the example including the mesh-table:&lt;br /&gt;
&lt;br /&gt;
  script-include-table {&lt;br /&gt;
    0                                       &amp;lt;kuid:661805:500008&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
  script                                    &amp;quot;ref&amp;quot;&lt;br /&gt;
  class                                     &amp;quot;eRef&amp;quot;&lt;br /&gt;
  extensions {&lt;br /&gt;
    active-coupling-standard-60850 {&lt;br /&gt;
      version-major                         &amp;quot;2&amp;quot;&lt;br /&gt;
      version-minor                         &amp;quot;0&amp;quot;&lt;br /&gt;
      brakes                                &amp;quot;vac&amp;quot;&lt;br /&gt;
      front {&lt;br /&gt;
        coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
        vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
        heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
        gangway                             &amp;quot;gangway&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
      back {&lt;br /&gt;
        coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
        vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
        heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
        gangway                             &amp;quot;gangway&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    wagon-x {&lt;br /&gt;
      acs {&lt;br /&gt;
        animated                            1&lt;br /&gt;
        use-jbv-animation                   0&lt;br /&gt;
        duration                            5&lt;br /&gt;
      }&lt;br /&gt;
      marker-lights {&lt;br /&gt;
        enabled                             1&lt;br /&gt;
        car-minimum-count                   2&lt;br /&gt;
        require-locomotive                  1&lt;br /&gt;
        night-only                          0&lt;br /&gt;
        front {&lt;br /&gt;
          head {&lt;br /&gt;
            mesh                            &amp;quot;lamp-front-white&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          tail {&lt;br /&gt;
            mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        back {&lt;br /&gt;
          head {&lt;br /&gt;
            mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          tail {&lt;br /&gt;
            mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      misc {&lt;br /&gt;
        begin-load-time                     0&lt;br /&gt;
        begin-unload-time                   0&lt;br /&gt;
        end-load-time                       0&lt;br /&gt;
        end-unload-time                     0&lt;br /&gt;
      }&lt;br /&gt;
      browser-properties {&lt;br /&gt;
        0 {&lt;br /&gt;
          consist-property-sync             1&lt;br /&gt;
          property-sync-id                  &amp;quot;GWRsynctexture&amp;quot;&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               1&lt;br /&gt;
          name                              &amp;quot;Current traincar livery: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_livery&amp;quot;&lt;br /&gt;
          description                       &amp;quot;Sets the livery for the carriage&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
          fx-replacement-type               &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
          effects                           &amp;quot;livery-main,livery-leftdoor,livery-rightdoor,livery-crest&amp;quot;&lt;br /&gt;
          asset                             &amp;quot;liveries&amp;quot;&lt;br /&gt;
          values                            &amp;quot;0;0;0;0,1;1;1;5,2;2;2;6,2;2;2;7,3;3;3;8,4;4;4;8&amp;quot;&lt;br /&gt;
          default-index                     1&lt;br /&gt;
          trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
          display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
          display-values                    &amp;quot;Blank,GWR 1922,GWR 1930,GWR 1934,Crimson Cream,Maroon&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        1 {&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               1&lt;br /&gt;
          name                              &amp;quot;Night Only: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_cfg&amp;quot;&lt;br /&gt;
          description                       &amp;quot;Sets the Day Night&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;config-edit&amp;quot;&lt;br /&gt;
          paths                             &amp;quot;marker-lights/night-only&amp;quot;&lt;br /&gt;
          values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
          default-index                     0&lt;br /&gt;
          trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
          display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
          display-values                    &amp;quot;False,True&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        2 {&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               1&lt;br /&gt;
          name                              &amp;quot;Front Indicator: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_front&amp;quot;&lt;br /&gt;
          description                       &amp;quot;Large F character showing front of carriage&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
          mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
          meshes                            &amp;quot;front&amp;quot;&lt;br /&gt;
          values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
          default-index                     0&lt;br /&gt;
          duration                          2&lt;br /&gt;
          trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
          display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
          display-values                    &amp;quot;Hidden, Visible&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        3 {&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               0&lt;br /&gt;
          name                              &amp;quot;Interior lightingr: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_interior_lighting&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
          mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
          meshes                            &amp;quot;day-interior,night-interior&amp;quot;&lt;br /&gt;
          values                            &amp;quot;1;0,0;1&amp;quot;&lt;br /&gt;
          default-index                     0&lt;br /&gt;
          duration                          2&lt;br /&gt;
          trigger                           &amp;quot;event&amp;quot;&lt;br /&gt;
          events                            &amp;quot;world-day,world-night&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  fonts                                     0&lt;br /&gt;
  mesh-table {&lt;br /&gt;
    default {&lt;br /&gt;
      mesh                                  &amp;quot;default.lm&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      effects {&lt;br /&gt;
        livery-main {&lt;br /&gt;
          kind                              &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
          texture                           &amp;quot;livery.texture&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        livery-crest {&lt;br /&gt;
          kind                              &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
          texture                           &amp;quot;crest-crest.texture&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    day-interior {&lt;br /&gt;
      mesh                                  &amp;quot;interior.lm&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      does-cast-shadows                     0&lt;br /&gt;
      lod-level                             0&lt;br /&gt;
    }&lt;br /&gt;
    night-interior {&lt;br /&gt;
      mesh                                  &amp;quot;interior-night.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      does-cast-shadows                     0&lt;br /&gt;
      lod-level                             0&lt;br /&gt;
    }&lt;br /&gt;
    coupler-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;screwlink.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;screwlink.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    coupler-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;screwlink.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;screwlink.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    vacbrake-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;vac_low_low.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;vac_low_low.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    vacbrake-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;vac_low_low.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;vac_low_low.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    heating-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;steamheat.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;steamheat.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    heating-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;steamheat.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;steamheat.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    gangway-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;gangway.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;gangway.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    gangway-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;gangway.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;gangway.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-front-red {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_red.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      att                                   &amp;quot;a.taillamp0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-front-white {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_white.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      att                                   &amp;quot;a.taillamp0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-back-red {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_red.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      att                                   &amp;quot;a.taillamp1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-back-white {&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_white.lm&amp;quot;&lt;br /&gt;
      att                                   &amp;quot;a.taillamp1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    front {&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
      att                                   &amp;quot;a.limfront&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      mesh                                  &amp;quot;extra_meshes\front.lm&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:How-to guides]]&lt;br /&gt;
[[Category:Modeling]]&lt;br /&gt;
[[Category:Content creation]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Traincar_Tutorial&amp;diff=40067</id>
		<title>HowTo/WagonX - Traincar Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Traincar_Tutorial&amp;diff=40067"/>
		<updated>2024-02-20T06:31:38Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: First proper version.  Second example, of a goods wagon, still to come.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--the next line is the page title--&amp;gt;&lt;br /&gt;
&amp;lt;!--HowTo/WagonX - Traincar Tutorial--&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;span style=&amp;quot;color: red; font-weight: 700; font-size: 30px;&amp;quot;&amp;gt;Draft Only&amp;lt;/span&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Document Structure =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
The WagonX Tutorial set is written over several pages.  This page is a tutorial for adding WagonX capability to a passenger traincar and a goods carrying wagon.  Other pages in the series are listed below:&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
# [[HowTo/Use the WagonX Library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Technical Reference]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Browser Properties Examples and Basic Tutorials]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
= Adding WagonX to a Traincar =&lt;br /&gt;
== Setting the scene ==&lt;br /&gt;
A traincar can have different purposes such as a passenger vehicle such as a car or carriage, or as a wagon carrying, loading and unloading goods. WagonX can assist with both of those so two examples are included here.  The first example is of a GWR carriage made by Andi Smith and repaired by the CRG.  The second example will likely be a coal vehicle by Ben Dorsey.  That example will follow later.&lt;br /&gt;
For the GWR carriage we will add the Automated Coupling System (ACS), texture swapping, and attachments that can be shown or hidden.&lt;br /&gt;
All of this is defined in the config.&lt;br /&gt;
Some of the config tag set up is rather complicated so rather than describe here the tutorial frequently refers to the [[HowTo/WagonX - Technical Reference|Technical Reference]].  It would be useful to keep a brower tab open on that page.&lt;br /&gt;
Mesh libraries used in these examples are available on the DLS however they may not be suitable for your application so please use whatever is appropriate for your situation.&lt;br /&gt;
&lt;br /&gt;
== Setting up the config for the script, class and script-include-table ==&lt;br /&gt;
=== The script ===&lt;br /&gt;
You need a simple script called ref.gs that is in the WagonX asset. Alternatively you can easily create it yourself in any plain text editor.  The contents are:&lt;br /&gt;
&lt;br /&gt;
 include &amp;quot;locowagonx.gs&amp;quot;&lt;br /&gt;
 class eRef isclass WagonX {};&lt;br /&gt;
&lt;br /&gt;
=== The class and script-include table ===&lt;br /&gt;
Include these tags in the config, where &amp;lt;kuid:661805:500008&amp;gt; is the WagonX library.&lt;br /&gt;
&lt;br /&gt;
 class &amp;quot;eRef&amp;quot;&lt;br /&gt;
 script-include-table {&lt;br /&gt;
   0           &amp;lt;kuid:661805:500008&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting up the extensions container ==&lt;br /&gt;
&lt;br /&gt;
The extensions container contains sub containers for ACS, if used, and WagonX.  So, the general format, with no tags yet, is:&lt;br /&gt;
&lt;br /&gt;
 extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
   wagon-x {&lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== The ACS container  ==&lt;br /&gt;
The ACS container is fully described at [[ACS_Coupling_System]], but for our purposes we will use the following as an example.  Add/change/remove as required for your vehicle.&lt;br /&gt;
&lt;br /&gt;
  active-coupling-standard-60850 {&lt;br /&gt;
    version-major                         &amp;quot;2&amp;quot;&lt;br /&gt;
    version-minor                         &amp;quot;0&amp;quot;&lt;br /&gt;
    brakes                                &amp;quot;vac&amp;quot;&lt;br /&gt;
    front {&lt;br /&gt;
      coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
      vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
      heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
      gangway                             &amp;quot;gangway&amp;quot;    &lt;br /&gt;
    }&lt;br /&gt;
    back {&lt;br /&gt;
      coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
      vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
      heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
      gangway                             &amp;quot;gangway&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
== The Wagon-X Container ==&lt;br /&gt;
==== The WagonX ACS sub-container ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#ACS\|WagonX ACS Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt;&lt;br /&gt;
WagonX needs information about ACS that isn&#039;t defined in the ACS container so, within the wagon-x sub container include an acs sub container that has three tags: animate, use-jbv-animation, and duration.&lt;br /&gt;
Animated and use-jbv-animation are self explanatory and duration is the fade time.&lt;br /&gt;
 extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     acs&lt;br /&gt;
     {&lt;br /&gt;
       animated                            1     &lt;br /&gt;
       use-jbv-animation                   0 &lt;br /&gt;
       duration                          1.0 &lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== The Misc sub-container ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#Misc\|WagonX Misc Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt; &lt;br /&gt;
The Misc sub-container includes times, in seconds, for loads and unloads at industries. This can be useful for effects such as smoke or dust. Since this is a passenger vehicle we will just set all values to zero. &lt;br /&gt;
&lt;br /&gt;
 extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     acs&lt;br /&gt;
     {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
     misc {&lt;br /&gt;
       begin-load-time                   0&lt;br /&gt;
       begin-unload-time                 0&lt;br /&gt;
       end-load-time                     0&lt;br /&gt;
       end-unload-time                   0&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Marker Lights ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#Marker-Lights|WagonX Marker Lights Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt;&lt;br /&gt;
The marker-lights sub container is required even if you are not using them. If you don&#039;t need it then just set enabled to 0 and the mesh values to null.&amp;lt;br&amp;gt;&lt;br /&gt;
The name &amp;quot;front&amp;quot; indicates the physical front of the vehicle.  i.e. where a.limfront is located.  &amp;quot;Back&amp;quot; is the physical back of the vehicle.&lt;br /&gt;
&amp;quot;Head&amp;quot; is the direction of train travel, and &amp;quot;tail&amp;quot; is the direction from which the train has come.  In other words the tail of the train.  Note that Trainz always has a nominal train direction of travel even if it is stopped.&amp;lt;br&amp;gt;&lt;br /&gt;
If you don&#039;t need a lamp at a position then just use &amp;quot;null&amp;quot;.  There are some conditions on when lights are shown.&amp;lt;br&amp;gt;&lt;br /&gt;
The head and tail meshes are lamp meshes in the mesh-table.&amp;lt;br&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   extensions {&lt;br /&gt;
   active-coupling-standard-60850 {&lt;br /&gt;
   ...&lt;br /&gt;
   }&lt;br /&gt;
   wagon-x&lt;br /&gt;
   {&lt;br /&gt;
     acs&lt;br /&gt;
     {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
     misc {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
     marker-lights {&lt;br /&gt;
       enabled                             1&lt;br /&gt;
       car-minimum-count                   2&lt;br /&gt;
       require-locomotive                  1&lt;br /&gt;
       night-only                          0&lt;br /&gt;
       front {&lt;br /&gt;
         head {&lt;br /&gt;
           mesh                            &amp;quot;lamp-front-white&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         tail {&lt;br /&gt;
           mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       back {&lt;br /&gt;
         head {&lt;br /&gt;
           mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         tail {&lt;br /&gt;
           mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Browser-Properties ====&lt;br /&gt;
See the [[HowTo/WagonX_-_Technical_Reference#Browser-Properties|Browser Properties Technical Reference]] for details of tag usage.&amp;lt;br&amp;gt;&lt;br /&gt;
The example that follows is a relatively simple browser setup to control:&lt;br /&gt;
*Texture swapping&lt;br /&gt;
*Control of the marker lights&lt;br /&gt;
*Control of an interior night mesh&lt;br /&gt;
*Control of a &amp;quot;front&amp;quot; indicator&lt;br /&gt;
&lt;br /&gt;
Each property has a number of control tags that are located in a property container and each container has a simple number id.  The number of tags in a container depends on the property type.  Not all properties are subject to user control and can be triggered by other events, such as changing from day to night.  Each property can be disabled, however this can only be done in the config.&lt;br /&gt;
===== Texture Swapping =====&lt;br /&gt;
Texture swapping is controlled in the Properties Browser and can be configured by the user.  There are six possible textures including a blank which like an underpaint coat.  The default livery is number 1 which is not the first in the list as the list starts with 0 (zero).&lt;br /&gt;
Since the number of texture effects is 4, and the number of different textures is 6, then the values tag must contain 24 values that are indices to the actual textures in the relevant texture library.&lt;br /&gt;
&lt;br /&gt;
===== Marker Lights =====&lt;br /&gt;
The marker lights is quite simple and just controls whether they are used only at night or also during the day as well.&lt;br /&gt;
&lt;br /&gt;
===== Front Indicator =====&lt;br /&gt;
The front indicator is a simple tool provided by the original creator, Andi Smith, to show which end of the car is the physical front.  The property is visible in the Properties Browser as a simple show or hide option.&lt;br /&gt;
&lt;br /&gt;
===== Interior Lighting =====&lt;br /&gt;
This is an example of a property triggered by an external event.  In this case changing from day to night, and night to day.  WagonX intercepts the message posted on these events and that triggers a mesh swap using the event type and the values to show the correct mesh.&lt;br /&gt;
&lt;br /&gt;
   extensions {&lt;br /&gt;
     active-coupling-standard-60850 {&lt;br /&gt;
     ...&lt;br /&gt;
     }&lt;br /&gt;
     wagon-x&lt;br /&gt;
     {&lt;br /&gt;
       acs&lt;br /&gt;
       {&lt;br /&gt;
         ...&lt;br /&gt;
       }&lt;br /&gt;
       misc {&lt;br /&gt;
         ...&lt;br /&gt;
       }&lt;br /&gt;
       marker-lights {&lt;br /&gt;
         ...&lt;br /&gt;
       }&lt;br /&gt;
       browser-properties {&lt;br /&gt;
         0 {&lt;br /&gt;
           consist-property-sync             1&lt;br /&gt;
           property-sync-id                  &amp;quot;GWRsynctexture&amp;quot;&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               1&lt;br /&gt;
           name                              &amp;quot;Current traincar livery: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_livery&amp;quot;&lt;br /&gt;
           description                       &amp;quot;Sets the livery for the carriage&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
           fx-replacement-type               &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
           effects                           &amp;quot;livery-main,livery-leftdoor,livery-rightdoor,livery-crest&amp;quot;&lt;br /&gt;
           asset                             &amp;quot;liveries&amp;quot;&lt;br /&gt;
           values                            &amp;quot;0;0;0;0,1;1;1;5,2;2;2;6,2;2;2;7,3;3;3;8,4;4;4;8&amp;quot;&lt;br /&gt;
           default-index                     1&lt;br /&gt;
           trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
           display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
           display-values                    &amp;quot;Blank,GWR 1922,GWR 1930,GWR 1934,Crimson Cream,Maroon&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         1 {&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               1&lt;br /&gt;
           name                              &amp;quot;Night Only: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_cfg&amp;quot;&lt;br /&gt;
           description                       &amp;quot;Sets the Day Night&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;config-edit&amp;quot;&lt;br /&gt;
           paths                             &amp;quot;marker-lights/night-only&amp;quot;&lt;br /&gt;
           values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
           default-index                     0&lt;br /&gt;
           trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
           display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
           display-values                    &amp;quot;False,True&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         2 {&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               1&lt;br /&gt;
           name                              &amp;quot;Front Indicator: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_front&amp;quot;&lt;br /&gt;
           description                       &amp;quot;Large F character showing front of carriage&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
           mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
           meshes                            &amp;quot;front&amp;quot;&lt;br /&gt;
           values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
           default-index                     0&lt;br /&gt;
           duration                          2&lt;br /&gt;
           trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
           display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
           display-values                    &amp;quot;Hidden, Visible&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
         3 {&lt;br /&gt;
           enabled                           1&lt;br /&gt;
           property-visibility               0&lt;br /&gt;
           name                              &amp;quot;Interior lighting: &amp;quot;&lt;br /&gt;
           property-id                       &amp;quot;p_interior_lighting&amp;quot;&lt;br /&gt;
           kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
           mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
           meshes                            &amp;quot;day-interior,night-interior&amp;quot;&lt;br /&gt;
           values                            &amp;quot;1;0,0;1&amp;quot;&lt;br /&gt;
           default-index                     0&lt;br /&gt;
           duration                          2&lt;br /&gt;
           trigger                           &amp;quot;event&amp;quot;&lt;br /&gt;
           events                            &amp;quot;world-day,world-night&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Adding other effects =&lt;br /&gt;
You can easily add other mesh effects using the front indicator in the example above as a template.  For example, some versions of a traincar may have a real life structure for different versions of the same basic car.  For that just copy the front indicator container and change the tag contents as necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The final config.txt (relevant parts) =&lt;br /&gt;
Here is the completed config.txt for those parts covered by the example including the mesh-table:&lt;br /&gt;
&lt;br /&gt;
  script-include-table {&lt;br /&gt;
    0                                       &amp;lt;kuid:661805:500008&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
  script                                    &amp;quot;ref&amp;quot;&lt;br /&gt;
  class                                     &amp;quot;eRef&amp;quot;&lt;br /&gt;
  extensions {&lt;br /&gt;
    active-coupling-standard-60850 {&lt;br /&gt;
      version-major                         &amp;quot;2&amp;quot;&lt;br /&gt;
      version-minor                         &amp;quot;0&amp;quot;&lt;br /&gt;
      brakes                                &amp;quot;vac&amp;quot;&lt;br /&gt;
      front {&lt;br /&gt;
        coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
        vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
        heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
        gangway                             &amp;quot;gangway&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
      back {&lt;br /&gt;
        coupler                             &amp;quot;screwlink|hook&amp;quot;&lt;br /&gt;
        vacbrake                            &amp;quot;single&amp;quot;&lt;br /&gt;
        heating-type                        &amp;quot;steam&amp;quot;&lt;br /&gt;
        gangway                             &amp;quot;gangway&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    wagon-x {&lt;br /&gt;
      acs {&lt;br /&gt;
        animated                            1&lt;br /&gt;
        use-jbv-animation                   0&lt;br /&gt;
        duration                            5&lt;br /&gt;
      }&lt;br /&gt;
      marker-lights {&lt;br /&gt;
        enabled                             1&lt;br /&gt;
        car-minimum-count                   2&lt;br /&gt;
        require-locomotive                  1&lt;br /&gt;
        night-only                          0&lt;br /&gt;
        front {&lt;br /&gt;
          head {&lt;br /&gt;
            mesh                            &amp;quot;lamp-front-white&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          tail {&lt;br /&gt;
            mesh                            &amp;quot;lamp-front-red&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        back {&lt;br /&gt;
          head {&lt;br /&gt;
            mesh                            &amp;quot;lamp-back-white&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          tail {&lt;br /&gt;
            mesh                            &amp;quot;lamp-back-red&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      misc {&lt;br /&gt;
        begin-load-time                     0&lt;br /&gt;
        begin-unload-time                   0&lt;br /&gt;
        end-load-time                       0&lt;br /&gt;
        end-unload-time                     0&lt;br /&gt;
      }&lt;br /&gt;
      browser-properties {&lt;br /&gt;
        0 {&lt;br /&gt;
          consist-property-sync             1&lt;br /&gt;
          property-sync-id                  &amp;quot;GWRsynctexture&amp;quot;&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               1&lt;br /&gt;
          name                              &amp;quot;Current traincar livery: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_livery&amp;quot;&lt;br /&gt;
          description                       &amp;quot;Sets the livery for the carriage&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
          fx-replacement-type               &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
          effects                           &amp;quot;livery-main,livery-leftdoor,livery-rightdoor,livery-crest&amp;quot;&lt;br /&gt;
          asset                             &amp;quot;liveries&amp;quot;&lt;br /&gt;
          values                            &amp;quot;0;0;0;0,1;1;1;5,2;2;2;6,2;2;2;7,3;3;3;8,4;4;4;8&amp;quot;&lt;br /&gt;
          default-index                     1&lt;br /&gt;
          trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
          display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
          display-values                    &amp;quot;Blank,GWR 1922,GWR 1930,GWR 1934,Crimson Cream,Maroon&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        1 {&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               1&lt;br /&gt;
          name                              &amp;quot;Night Only: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_cfg&amp;quot;&lt;br /&gt;
          description                       &amp;quot;Sets the Day Night&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;config-edit&amp;quot;&lt;br /&gt;
          paths                             &amp;quot;marker-lights/night-only&amp;quot;&lt;br /&gt;
          values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
          default-index                     0&lt;br /&gt;
          trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
          display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
          display-values                    &amp;quot;False,True&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        2 {&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               1&lt;br /&gt;
          name                              &amp;quot;Front Indicator: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_front&amp;quot;&lt;br /&gt;
          description                       &amp;quot;Large F character showing front of carriage&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
          mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
          meshes                            &amp;quot;front&amp;quot;&lt;br /&gt;
          values                            &amp;quot;0,1&amp;quot;&lt;br /&gt;
          default-index                     0&lt;br /&gt;
          duration                          2&lt;br /&gt;
          trigger                           &amp;quot;user&amp;quot;&lt;br /&gt;
          display-type                      &amp;quot;link&amp;quot;&lt;br /&gt;
          display-values                    &amp;quot;Hidden, Visible&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        3 {&lt;br /&gt;
          enabled                           1&lt;br /&gt;
          property-visibility               0&lt;br /&gt;
          name                              &amp;quot;Interior lightingr: &amp;quot;&lt;br /&gt;
          property-id                       &amp;quot;p_interior_lighting&amp;quot;&lt;br /&gt;
          kind                              &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
          mesh-attachment-type              &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
          meshes                            &amp;quot;day-interior,night-interior&amp;quot;&lt;br /&gt;
          values                            &amp;quot;1;0,0;1&amp;quot;&lt;br /&gt;
          default-index                     0&lt;br /&gt;
          duration                          2&lt;br /&gt;
          trigger                           &amp;quot;event&amp;quot;&lt;br /&gt;
          events                            &amp;quot;world-day,world-night&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  fonts                                     0&lt;br /&gt;
  mesh-table {&lt;br /&gt;
    default {&lt;br /&gt;
      mesh                                  &amp;quot;default.lm&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      effects {&lt;br /&gt;
        livery-main {&lt;br /&gt;
          kind                              &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
          texture                           &amp;quot;livery.texture&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        livery-crest {&lt;br /&gt;
          kind                              &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
          texture                           &amp;quot;crest-crest.texture&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    day-interior {&lt;br /&gt;
      mesh                                  &amp;quot;interior.lm&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      does-cast-shadows                     0&lt;br /&gt;
      lod-level                             0&lt;br /&gt;
    }&lt;br /&gt;
    night-interior {&lt;br /&gt;
      mesh                                  &amp;quot;interior-night.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      does-cast-shadows                     0&lt;br /&gt;
      lod-level                             0&lt;br /&gt;
    }&lt;br /&gt;
    coupler-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;screwlink.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;screwlink.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    coupler-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;screwlink.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;screwlink.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    vacbrake-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;vac_low_low.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;vac_low_low.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    vacbrake-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;vac_low_low.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;vac_low_low.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    heating-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;steamheat.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;steamheat.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    heating-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;steamheat.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;steamheat.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    gangway-front {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;gangway.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;gangway.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    gangway-back {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:186372:900007&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;gangway.lm&amp;quot;&lt;br /&gt;
      anim                                  &amp;quot;gangway.kin&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      att                                   &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-front-red {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_red.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      att                                   &amp;quot;a.taillamp0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-front-white {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_white.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      att                                   &amp;quot;a.taillamp0&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-back-red {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_red.lm&amp;quot;&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      att                                   &amp;quot;a.taillamp1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    lamp-back-white {&lt;br /&gt;
      auto-create                           0&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:661805:500003&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;oil_lamp_white.lm&amp;quot;&lt;br /&gt;
      att                                   &amp;quot;a.taillamp1&amp;quot;&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    front {&lt;br /&gt;
      att-parent                            &amp;quot;default&amp;quot;&lt;br /&gt;
      att                                   &amp;quot;a.limfront&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      mesh                                  &amp;quot;extra_meshes\front.lm&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:How-to guides]]&lt;br /&gt;
[[Category:Modeling]]&lt;br /&gt;
[[Category:Content creation]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Help:VE258&amp;diff=39756</id>
		<title>Help:VE258</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Help:VE258&amp;diff=39756"/>
		<updated>2024-01-30T05:33:33Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Added link to FBX file format page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Unable to determine vertex format&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Can be caused by multiple UV maps.  Try removing additional maps.  See [[FBX file format]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/Export_Blender_FBX_Animation&amp;diff=39622</id>
		<title>HowTo/Export Blender FBX Animation</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/Export_Blender_FBX_Animation&amp;diff=39622"/>
		<updated>2024-01-10T05:09:19Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Updated to Blender 4.  Example 2 still needs updating.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
This page describes a process for exporting simple animated meshes from Blender to the [[FBX file format]].  It is intended for new content creators or those more experienced who need to migrate from older versions of Blender and Trainz animation.&lt;br /&gt;
You should be familiar with Blender FBX export as described here [[HowTo/Export from Blender using FBX]]&amp;lt;br&amp;gt;&lt;br /&gt;
This tutorial is for Trainz Build 5.3 and Blender 4.n.  However, it should work for Trainz Build 4.6 and up.&lt;br /&gt;
==Trainz Animation==&lt;br /&gt;
In Blender you can animate meshes but that animation is not recognised by Trainz.  Trainz only recognises animation helper objects that it calls bones.  A bone, for Trainz purposes, is an animated helper object using a &amp;quot;b.r.&amp;quot; prefix.&lt;br /&gt;
Meshes are attached to bones in a parent-child relationship where the child is the mesh.  When the parent bone moves in 3D space, the child mesh moves with it.  In Trainz you cannot see the animated bones but you can see the mesh.&lt;br /&gt;
Animation helpers in Blender can be armatures or empties.  Lattices cannot be used since the standard FBX exporter doesn&#039;t recognise them. &lt;br /&gt;
=Examples=&lt;br /&gt;
Here are a number of example animations.  Each example is provided with source files but only the first example is fully explained.&lt;br /&gt;
==Example 1 - A Revolving Sphere==&lt;br /&gt;
This example is a very basic animation of a sphere using an empty as the animation helper.  The Blender file consists of a sphere located at grid centre and at elevation 2 (metres). The sphere has a PBR material and a simple UV map.&lt;br /&gt;
Your task is add the animation helper, add the rotation animation, export to FBX and import into Trainz.&lt;br /&gt;
===Load Example 1===&lt;br /&gt;
:* On your computer, create a project folder called &amp;quot;anim_example_1&amp;quot; or whatever name suits you.&lt;br /&gt;
:* Download the source files from here: [[File:B4 Anim Ex1 Source.zip]]&lt;br /&gt;
:* The source file is in zip format so extract it into the project folder.  The source includes:&lt;br /&gt;
   example1_B4_start.blend;&lt;br /&gt;
   example1_B4_completed.blend;&lt;br /&gt;
   ex1_albedo.png&lt;br /&gt;
   ex1_albedo.texture.txt&lt;br /&gt;
   ex1_normal.png&lt;br /&gt;
   ex1_normal.texture.txt&lt;br /&gt;
   ex1_parameter.png&lt;br /&gt;
   ex1_parameter.texture.txt&lt;br /&gt;
   thumbnail_0.jpg&lt;br /&gt;
   config.txt&lt;br /&gt;
:* The config.txt is complete except for the KUID where you add one of your own.  The Trainz Build is set to 5.3.  You can use 4.6 if required.&lt;br /&gt;
:* Open the ex1_B4_example.blend Blender source file in Blender 4.  It should look similar to the following.  If the sphere is a pink/purple colour then that means Blender can&#039;t find the material textures.  You should be able to correct that adding them to your Blender file location and reloading the textures withing Blender.&lt;br /&gt;
:* Save the file as &amp;quot;ex1B4_working.blend&amp;quot;.&lt;br /&gt;
[[File:Ex1B4 start.jpg|1200px|thumb|left|The Start Layout]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table bgcolor=#000000 width=1200 cellpadding=2&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table bgcolor=#ffffb0 cellpadding=2&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[image:NotePad.PNG|link=]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The model is a simple UV ball with a painted metal material the author created in Substance Painter.  It looks like a planet, but not Earth, with a lot of shiny water and snow covered land.  In game it will look like a metal ball with chipped paint.  In the top right pane you can see the scene collection which has two Level of Detail (LOD) collections and an Animation collection.  The mesh names with the LOD#n complies with the requirements for building a config.txt using the N3V utilities.  In this instance the LOD1 meshes are hidden.&lt;br /&gt;
At the bottom right you can see the material setup.  You can also observe the material (PBRMetal) in the Shading Editor as a node setup.&lt;br /&gt;
The image shows reflections of trees due to a background image.  &lt;br /&gt;
Blender has almost infinite permutations of layouts, colours, size, etc.  Don&#039;t be concerned if yours isn&#039;t the same as the image.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Add the Trainz Animation Helper===&lt;br /&gt;
:* Position the Blender cursor at World Origin (0,0,0). Press Shift S to bring up the Snap menu and select Cursor to World Origin.&lt;br /&gt;
:* Add an empty at the cursor location. Use menu Add-&amp;gt;Empty-&amp;gt;Arrows.  Shift A should also work.&lt;br /&gt;
:* Double click on the new Empty in the Properties Editor and rename it to &amp;quot;b.r.main&amp;quot;. The name used is not important but the prefix &amp;quot;b.r.&amp;quot; is important.  The convention is to use b.r.main or b.r.base.  &lt;br /&gt;
:* Move the b.r.main helper into the Animation collection.  You can either drag and drop it in the Properties Window or the menu Object-&amp;gt;Collection-&amp;gt;Move to Collection.  Having a collection name Animation makes it easier to export different LOD meshes.&lt;br /&gt;
===Animate the Trainz Helper===&lt;br /&gt;
:* Change to the Animation Workspace and ensure the b.r.main object is selected. &lt;br /&gt;
:* Open the SideBar (N key) in the 3D Editor, if not already open, and select the Item tab.  This shows the location, rotation, and scale of the current object.  In this case it should be the b.r.main empty.&lt;br /&gt;
:* For this project the location and rotation values should be zero and the scale values should be 1.0.  If the values are wrong then press Ctrl A and reset whatever needs changing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table bgcolor=#000000 width=1200 cellpadding=2&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table bgcolor=#ffffb0 cellpadding=2&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[image:NotePad.PNG|link=]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;As you develop more advanced animation models the location values will be different.  Generally, at the start of an animation the Rotation values will also be zero but this isn&#039;t mandatory.&lt;br /&gt;
The Scale values can cause all sorts of issues in animation and need to be checked at the start of the project.  Scaling can be part of the animation although for most models in Trainz the scaling is mostly fixed.  But you can animate scaling if that is a solution.  Note scaling does affect material/texture mapping as the textures applied to a model will be stretched or shrunk with the scaling.&lt;br /&gt;
If you run into problems with animation check that the scaling is correct at the start of the animation cycle.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* For animation we use keyframes (aka frames) to manage our animation.  Trainz operates animations at 30 frames per second (fps) and, as we want to run this animation for two seconds, the End Frame in Timeline should be 60.  Make sure the Start Frame is 1 and the Current Keyframe is 1.  See the following image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:Blender402 anim example1 view1.jpg|1200px|thumb|left|B.R.Main]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* Select the b.r.main helper if not already selected.&lt;br /&gt;
:* For the start of our animation we need to set the rotation of our helper to be at 0 (zero) degrees.  For this example we can just leave the helper as Blender placed it..&lt;br /&gt;
:* Press the I key and select Rotation.  This creates a frame with just rotation data which, in this case, is 0.  In the Animation Editor a number of changes will become visible.&lt;br /&gt;
::: The Rotation fields in the Transform will change colour.  In the image below they are yellow but the colour depends on the Blender theme in use.&lt;br /&gt;
::: A keyframe indicator appears in the Timeline Window at the bottom of the Blender screen.&lt;br /&gt;
::: Entries also appear in the Dope Sheet and Graph Editors.  In simple animations you are unlikely to use those editors but be aware they exist.&lt;br /&gt;
:* Change the Current frame in Timeline to the last keyframe (60).  You can click on frame 60 in Timeline, manually change the current frame number or use the &amp;quot;Jump to end&amp;quot; icon in Timeline.&lt;br /&gt;
:* At the end of our animation we want the helper to have completed one full rotation of 360 degrees so select the helper and, in the Properties Window-&amp;gt;Context, change the Z Rotation value to 360, and press the I key and select Rotation againi.  The result should look like the following:&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:Setting the rotation to 360.jpg|600px|thumb|left|Setting the rotation]][[File:Rotation set to 360.jpg|600px|thumb|right|Rotation set to 360]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
:* Test out the animation by clicking on the Forward and Reverse icons in Timeline.  When finished reset the animation by stopping it first and then selecting the Start Endpoint icon.  Note that the sphere is not moving yet.&lt;br /&gt;
===Review===&lt;br /&gt;
So far we have created the helper with a name that Trainz will recognise for animation.  We have set the animation to compete one full circle in the Z axis in 60 keyframes and, since we are using 30fps, the animation will run for 2 seconds.&lt;br /&gt;
The use of the value 360 is somewhat of a trick to make sure that Blender animates the helper through 360 degrees.  Although 360 is essentially the same as 0, if you left it at 0 then no animation would take place even though keyframes exist.  Try a zero value and see what happens or rather what doesn&#039;t happen.&lt;br /&gt;
Using the value of 360 means that the helper will rotate 360 degrees in the anti-clockwise direction.  If you want clockwise motion then change the value to -360.&lt;br /&gt;
===Smoothing the Animation===&lt;br /&gt;
While watching the animation you may have noticed that the animation pauses briefly between the end and restart of the animation.  There is no time gap but this indicates that the animation is not following a linear path but one using an &amp;quot;F curve&amp;quot;.  These pauses may be noticeable in game except for bogie animations where the animation is dynamically managed by the game engine.&lt;br /&gt;
Within Blender this characteristic is known as the extrapolation mode of the animation channel.  By default Blender uses an F curve that resembles a Bezier curve.  For many Trainz animations you may want a continuous animation and that means the Linear Extrapolation.  Note that there is a Constant Animation but that may not give the same result as it essentially freezes the animation between keyframes.  &lt;br /&gt;
:* Change the workspace to Animation if not there already.&lt;br /&gt;
:* In the Graph Editor or the Dope Sheet Editor, select menu Channel&amp;gt;Extrapolation Mode&amp;gt;Linear Extrapolation.&lt;br /&gt;
:* Run the animation again and there should be no pauses.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:Linear extrapolation.jpg|800px]]&amp;lt;br&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
For more information on Blender animation channel extrapolation see [https://docs.blender.org/manual/en/latest/editors/graph_editor/fcurves/introduction.html Introduction to FCurves]&lt;br /&gt;
===Parenting the mesh objects===&lt;br /&gt;
:* As stated earlier you cannot animate the meshes directly but you can make them follow the animation helper.  We do this by making the mesh a child of the helper.&lt;br /&gt;
:* There are two meshes to be animated: the LOD0 and LOD1 meshes.&lt;br /&gt;
:* Enable viewing of both the LOD0 and LOD1 mesh by ticking the two collections.&lt;br /&gt;
:* Select the objects sphere_lod0, sphere_lod1 and finally b.r.main.  The helper bone (empty) must be selected last.&lt;br /&gt;
:* In the 3D window, press Ctrl P&amp;gt;Object (Keep Transform).&lt;br /&gt;
:* Test the animation by starting the animation and showing or hiding the two mesh objects.&lt;br /&gt;
:* Save your work.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:Parenting the mesh.jpg|1200px|thumb|left|Parenting the mesh]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;table bgcolor=#000000 width=1000 cellpadding=2&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table bgcolor=#ffffb0 cellpadding=2&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[image:NotePad.PNG|link=]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The picture above shows the action of parenting the two mesh objects (sphere_lod0n and sphere_lod1n) to the bone (b.r.main).  The following image shows the result.&lt;br /&gt;
The two meshes are still in their LOD collections but are also shown as children of b.r.main in the Animation collection but in a light grey.  They are not actually part of the animation collection.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:After parenting.jpg|1000px|thumb|left|After parenting]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
===Exporting the Animation===&lt;br /&gt;
The animation data for the helper(s) as well as the parent/child relationships are exported within the FBX file.  The Trainz FBX importer will extract the animation data and store some of it in the Trainzmesh file but the actual animation data in a KIN file.  Since we have two LOD meshes this means that the importer will create two KIN files but with slightly different names.  As the animation is the same for both meshes you can just use one of the KIN files and delete the other.&amp;lt;br&amp;gt;&lt;br /&gt;
Blender&#039;s FBX exporter will export each animation channel it finds and this can result in multiple KIN files for each mesh.  This doesn&#039;t work in Trainz.  The solution is to use what is called a baked animation where all the channels and keyframes are &amp;quot;baked&amp;quot; together.  Baking also causes every frame to be exported even though the source may only specify two keyframes, as in our example.&lt;br /&gt;
&lt;br /&gt;
====Exporting the LOD0 Animation====&lt;br /&gt;
:* Disable viewing of the LOD1 meshes by unclicking the LOD1 collection.&lt;br /&gt;
:* Enable both the LOD0 and Animation collections.&lt;br /&gt;
:* In the 3D Editor select all objects using the A key.  You may need to press it twice.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:Exporting lod0.jpg|800px|thumb|Exporting LOD0]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
:* Go to the File menu and select Export&amp;gt;FBX.&lt;br /&gt;
:* The list of options for export is quite long so they are displayed here in two images.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:FBX export settings1.jpg|500px|thumb|left|Export settings 1]][[File:FBX export settings2.jpg|500px|thumb|right|Export settings 2]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;  &lt;br /&gt;
:* The options shown in these images should work for most exports. Some comments:&lt;br /&gt;
:* You can make presets of those settings you use most. The author has one for animation, one for mesh only, and one for mesh and empties.  The last is used for meshes with attachments.  Presets are very useful.&lt;br /&gt;
:* The Path Mode and Batch Mode can be left with default values.  They may be useful for exporting models with multiple LODs but the author hasn&#039;t tried that.&lt;br /&gt;
:* Include: The Limit to section may be something you could consider changing depending on preferences.  The author prefers Selected Objects but the other values may suit you better.&lt;br /&gt;
:* Include: The Object Types is important.  The author works with both empties and armatures for animation so the values are set as shown.  You could disable armatures if not being used.&lt;br /&gt;
:* Transform:  The Scale value and the Apply Scalings are related.  Some authors like to use different values to get the same result but the values shown will work.&lt;br /&gt;
:* Transform: The Forward and Up are also related so if you change one then the other may change as well.  Y Forward and Z up are correct for Trainz.&lt;br /&gt;
:* Geometry:  These values will work.  Applying modifiers and Triangulating faces is something you may wish to change.  This is the author&#039;s preferred set.&lt;br /&gt;
:* Armature:  The effect of changing these values has not been tested so just use the default values.&lt;br /&gt;
:* Bake Animation:  This must be ticked and the other values left unchecked.  Leave the Sampling Rate and Simplify as 1.0.&lt;br /&gt;
:* In the output filename space enter ex1_lod0.fbx and click on the Export FBX icon.&lt;br /&gt;
&lt;br /&gt;
====Exporting the LOD1 Animation====&lt;br /&gt;
:* Uncheck the LOD0 collection.&lt;br /&gt;
:* Check the LOD1 collection.&lt;br /&gt;
:* Leave the Animation collection checked.&lt;br /&gt;
:* Repeat the LOD0 process only changing the output name to ex1_lod1.fbx.  You shouldn&#039;t need to change any of the export settings unless you restarted Blender.&lt;br /&gt;
&lt;br /&gt;
===Setting up the Asset in Trainz===&lt;br /&gt;
:* The FBX file contains both the mesh and the b.r.main empty plus the animation data.  When the FBX file is imported into Trainz, an animation file (KIN) is created in addition to the Trainzmesh file.&lt;br /&gt;
:* The name of the kin file depends on the options chosen within the Export FBX-&amp;gt;Animation panel.  If you choose the Baked Animation option, then the kin filename will be the mesh name plus “_scene.kin”.  In this instance, the kin filenames will be “ex1_lod0_scene.kin” and “ex1_lod1_scene.kin”.  &lt;br /&gt;
====Config.txt====&lt;br /&gt;
:* Create your config.txt.  You can either use the config.txt provided with this tutorial remembering to change the KUID to suit one of yours, or create a config.txt from scratch or maybe use the N3V utility program at [[https://contentcreation.trainzsimulator.com/trainz-content-utilities-1-0-2/|N3V Content Utilities]].&lt;br /&gt;
:* For this asset the mesh table will look like this.  Note that the kin file for LOD1 uses the LOD0 kin file.&lt;br /&gt;
&lt;br /&gt;
  mesh-table {&lt;br /&gt;
    lod_0 {&lt;br /&gt;
      mesh                                  &amp;quot;ex1_lod0.trainzmesh&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      lod-level                             0&lt;br /&gt;
      anim                                  &amp;quot;ex1_lod0_scene.kin&amp;quot;&lt;br /&gt;
      animation-loop-speed                  1.00&lt;br /&gt;
    }&lt;br /&gt;
    lod_1 {&lt;br /&gt;
      mesh                                  &amp;quot;ex1_lod0.trainzmesh&amp;quot;&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
      lod-level                             1&lt;br /&gt;
      anim                                  &amp;quot;ex1_lod0_scene.kin&amp;quot;&lt;br /&gt;
      animation-loop-speed                  1.00&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Committing and updating the asset====&lt;br /&gt;
:* Getting the asset to work in game is often a two part process.  The first commit will create the Trainzmesh and KIN files and a second pass may be needed to correct filenames in the config.txt.&lt;br /&gt;
:* Commit the asset to Trainz.&lt;br /&gt;
:* Open the asset for editing.  If it failed the commit it will already be open.&lt;br /&gt;
:* Check the names of the Trainzmesh and KIN files produced.  If necessary, change the config.txt mesh-table to suit the correct names.&lt;br /&gt;
:* If you intend to use the LOD0 KIN file then you can delete the LOD1 version.&lt;br /&gt;
:* Commit the asset again.  Hopefully, there should be no errors.&lt;br /&gt;
&lt;br /&gt;
====Warnings on commit====&lt;br /&gt;
:* You may get these warnings on the first export/import into Trainz.  They can be ignored.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:B4 anim ex1 export warnings.jpg|600px]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
===Asset in game===&lt;br /&gt;
This is the asset in game.  Remember that animation will only work in Driver mode.&amp;lt;br&amp;gt;&lt;br /&gt;
The ball revolves at a constant rate.  You can change the rotation speed in the config.txt using the animation-loop-speed tag.&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[File:Ex1 in game.jpg|600px]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Adding the animation as an animation effect===&lt;br /&gt;
&lt;br /&gt;
====Original author&#039;s comments====&lt;br /&gt;
This tutorial was altered by another user to use an animated effect in an effects container.  While this is useful, it is a bit more advanced than the intent of this tutorial so the orignal author has moved the changes here and the original tutorial structure restored.&lt;br /&gt;
&lt;br /&gt;
====Animated Effects====&lt;br /&gt;
An animated effect can be useful if using script to control the animation as there are more options for animation control.  Instead of being located in the main mesh-table, the animated object is located in an Effects container as described here: [[Animation_Effect]].&lt;br /&gt;
You can find the animation effect version of this tutorial at [[File:Tutorial_Rebuild_Blender_Rotatating_Earth.zip|Example 1: Tutorial Rebuild Blender Rotatating Earth]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example 2 - Four revolving cogs==&lt;br /&gt;
(This example needs to be updated and validated)&lt;br /&gt;
This example shows four meshed cogs rotating together.  The rotation of the cogs is controlled by four armatures and an empty is used as a parent bone.&lt;br /&gt;
Each cog has its own armature and two rotate clockwise and the other two rotate anticlockwise.&amp;lt;br /&amp;gt;&lt;br /&gt;
There are two Blender files provided: one incomplete and one complete. &amp;lt;br /&amp;gt;&lt;br /&gt;
The starting file has the four cogs UV mapped and linked to a Trainz PBR material.  An armature is positioned at the centre of each cog.  The four cogs are grouped into a LOD0 collection and the four armatures are grouped into an Animation collection.  There is also a LOD1 collection but it is empty.&amp;lt;br /&amp;gt;&lt;br /&gt;
Your task is to add the animation, duplicate the meshes into LOD1 and export to Trainz.  Not everything is explained in detail but if you have completed Example 1 then that will help.&lt;br /&gt;
[[File:4 cogs in Blender.jpg|800px]]&lt;br /&gt;
===Source Files===&lt;br /&gt;
The source files can be downloaded here [[File:ex2_export.zip]]. The source includes:&lt;br /&gt;
   ex2_start.blend;&lt;br /&gt;
   ex2_complete.blend;&lt;br /&gt;
   cogs_albedo.png&lt;br /&gt;
   cogs_albedo.texture.txt&lt;br /&gt;
   cogs_normal.png&lt;br /&gt;
   cogs_normal.texture.txt&lt;br /&gt;
   cogs_parameter.png&lt;br /&gt;
   cogs_parameter.texture.txt&lt;br /&gt;
   $screenshot$.jpg&lt;br /&gt;
   config.txt&lt;br /&gt;
&lt;br /&gt;
  Updated and rebuilded tutorial files: [[File:Tutorial_Rebuild_Blender_Four_Cogs.zip|Example 2: Tutorial Rebuild Blender Four Cogs]]&lt;br /&gt;
  Beside some adjustments the main update was to move, add and amend animation tags to a effects sub container.&lt;br /&gt;
  Informations about Blender 3.x fbx export settings as picture one will find in [[Prequel Blender to Trainz|Prequel for this tutorial series: Blender to Trainz (with the full script)]]&lt;br /&gt;
&lt;br /&gt;
===Things you need to do===&lt;br /&gt;
====Saving====&lt;br /&gt;
:* Save often.  Animation can be tricky so always save when you have reached a critical point.&lt;br /&gt;
====Animate the cogs====&lt;br /&gt;
:* Set the animation range to 120 frames, start frame 1, and the current frame 1.&lt;br /&gt;
:* Make the four cog armatures children of the root animation helper b.r.base.&lt;br /&gt;
:* For each cog:&lt;br /&gt;
:**  Make the cog mesh a child of its armature. Blender 2.8 seems to be a bit unreliable for this action so make sure the correct parent is applied.  You can see this in the Properties Editor, Context Panel-&amp;gt;Relations.  The parent type should be object.[[File:Checking the cog parent.jpg|800px]]&lt;br /&gt;
:**  Create five keyframes for each armature as detailed in the table below:&lt;br /&gt;
::::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=15% | Armature&lt;br /&gt;
! width=15% | Keyframe&amp;lt;br /&amp;gt;1&lt;br /&gt;
! width=15% | Keyframe&amp;lt;br /&amp;gt;30&lt;br /&gt;
! width=15% | Keyframe&amp;lt;br /&amp;gt;60&lt;br /&gt;
! width=15% | Keyframe&amp;lt;br /&amp;gt;90&lt;br /&gt;
! width=15% | Keyframe&amp;lt;br /&amp;gt;90&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;center&amp;gt;1&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;0&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-90&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-180&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-270&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-360&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;center&amp;gt;2&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;0&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;90&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;180&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;270&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;360&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;center&amp;gt;3&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;0&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-90&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-180&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-270&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;-360&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;center&amp;gt;4&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;0&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;90&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;180&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;270&amp;lt;/center&amp;gt;&lt;br /&gt;
| &amp;lt;center&amp;gt;360&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:* Run the animation and check that the cogs rotate in the correct direction and mesh with each other.  If this doesn&#039;t look right then you may have to fall back to a saved version or even the starting version.&lt;br /&gt;
:* For each cog:&lt;br /&gt;
:**Make a copy. (Shift D)&lt;br /&gt;
:**Move the copy to the LOD1 collection. (M key)&lt;br /&gt;
:**Rename the copy to &amp;quot;gearx-lod1&amp;quot; where &amp;quot;x&amp;quot; is the gear number.&lt;br /&gt;
:**Add a Decimate modifier. The Planar option with an angle of 10 will reduce the number of polys to a usable number.  There is no need to apply the modifier since the exporter will do that on export.&lt;br /&gt;
:*Hide the LOD1 collection and run the animation again.  This will show the LOD1 meshes animating.&lt;br /&gt;
&lt;br /&gt;
====Export====&lt;br /&gt;
:*Select each LOD collection in turn and, together with the Animation collection, export to files called &amp;quot;cogs_lod0.fbx&amp;quot; and &amp;quot;cogs_lod1.fbx&amp;quot;.  For this export you must select Empty, Armature, and Mesh.&lt;br /&gt;
===Asset in Game===&lt;br /&gt;
[[file:cogs_in_game.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example 3 - coming soon(ish)==&lt;br /&gt;
&lt;br /&gt;
=Animation warnings and errors=&lt;br /&gt;
&lt;br /&gt;
{|  style=&amp;quot;border:1px solid gray;border-collapse:collapse;background:white;font-weight:bold; &amp;quot; cellpadding=5px align=left width=70% &lt;br /&gt;
|- style=&amp;quot;font-weight:bold; text-align:center;&amp;quot;&lt;br /&gt;
  ! width=40% style=&amp;quot; border:1px solid gray;&amp;quot;|Warning/Error&lt;br /&gt;
  ! width=60% style=&amp;quot; border:1px solid gray;&amp;quot;|Help/Explanation&lt;br /&gt;
|-&lt;br /&gt;
  | style=&amp;quot;border:1px solid gray;font-weight:normal;&amp;quot;|! ...  T14120: Simplified dummy tracks with just one key.&lt;br /&gt;
  | style=&amp;quot;border:1px solid gray;font-weight:normal;&amp;quot;| Not sure what this warning is about but the animation is OK.&lt;br /&gt;
|-&lt;br /&gt;
  | style=&amp;quot;border:1px solid gray;font-weight:normal;&amp;quot;|! ... Skipping one or more lines with the same contents&lt;br /&gt;
  | style=&amp;quot;border:1px solid gray;font-weight:normal;&amp;quot;|This is an ASSIMP message and can be ignored.&lt;br /&gt;
|-&lt;br /&gt;
  | style=&amp;quot;border:1px solid gray;font-weight:normal;&amp;quot;|! ...  T2776: FBX: animation is applied to multiple targets&lt;br /&gt;
  | style=&amp;quot;border:1px solid gray;font-weight:normal;&amp;quot;| Might be caused by armatures, where the bones does not have names starting with &amp;quot;b.r.&amp;quot;. The armature object itself does not need to have a &amp;quot;b.r.&amp;quot; prefix in its name, however.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Return to Index=&lt;br /&gt;
 &lt;br /&gt;
[[HowToGuides|&amp;lt;&amp;lt; How To Guides]]&lt;br /&gt;
[[Category:How-to guides]]&lt;br /&gt;
[[Category:Modeling]]&lt;br /&gt;
[[Category:Content creation]]&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39621</id>
		<title>File:Linear extrapolation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39621"/>
		<updated>2024-01-10T05:07:51Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Linear extrapolation.jpg&amp;amp;quot;: Reverted to version as of 05:05, 10 January 2024&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39620</id>
		<title>File:Linear extrapolation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39620"/>
		<updated>2024-01-10T05:05:57Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Linear extrapolation.jpg&amp;amp;quot;: Reverted to version as of 05:04, 10 January 2024&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39619</id>
		<title>File:Linear extrapolation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39619"/>
		<updated>2024-01-10T05:05:36Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Linear extrapolation.jpg&amp;amp;quot;: Reverted to version as of 05:21, 9 January 2024&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39618</id>
		<title>File:Linear extrapolation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39618"/>
		<updated>2024-01-10T05:04:20Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Linear extrapolation.jpg&amp;amp;quot;: Update to Blender 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation_to_360.jpg&amp;diff=39617</id>
		<title>File:Setting the rotation to 360.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation_to_360.jpg&amp;diff=39617"/>
		<updated>2024-01-10T04:29:36Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Setting the rotation of a bone in Blender&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Setting the rotation of a bone in Blender&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39616</id>
		<title>File:Setting the rotation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39616"/>
		<updated>2024-01-10T04:24:58Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Setting the rotation.jpg&amp;amp;quot;: Reverted to version as of 04:09, 10 January 2024&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39615</id>
		<title>File:Setting the rotation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39615"/>
		<updated>2024-01-10T04:24:18Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Setting the rotation.jpg&amp;amp;quot;: Reverted to version as of 05:19, 9 January 2024&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39614</id>
		<title>File:Setting the rotation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39614"/>
		<updated>2024-01-10T04:09:21Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Setting the rotation.jpg&amp;amp;quot;: Updated to Blender 4.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Rotation_set_to_360.jpg&amp;diff=39613</id>
		<title>File:Rotation set to 360.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Rotation_set_to_360.jpg&amp;diff=39613"/>
		<updated>2024-01-10T04:05:13Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Shows result of setting a rotation keyframe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows result of setting a rotation keyframe&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39612</id>
		<title>File:B4 Anim Ex1 Source.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39612"/>
		<updated>2024-01-10T03:50:55Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:B4 Anim Ex1 Source.zip&amp;amp;quot;: Reverted to version as of 03:50, 10 January 2024&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source files for Blender 4 animation exercise 1.&lt;br /&gt;
File includes two Blender files, config.txt, thumbnail, material textures, and texture.txt files.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39611</id>
		<title>File:B4 Anim Ex1 Source.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39611"/>
		<updated>2024-01-10T03:50:54Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:B4 Anim Ex1 Source.zip&amp;amp;quot;: Reverted to version as of 03:50, 10 January 2024&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source files for Blender 4 animation exercise 1.&lt;br /&gt;
File includes two Blender files, config.txt, thumbnail, material textures, and texture.txt files.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39610</id>
		<title>File:B4 Anim Ex1 Source.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39610"/>
		<updated>2024-01-10T03:50:33Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:B4 Anim Ex1 Source.zip&amp;amp;quot;: Source files for Blender 4 animation exercise 1.
File includes two Blender files, config.txt, thumbnail, material textures, and texture.txt files.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source files for Blender 4 animation exercise 1.&lt;br /&gt;
File includes two Blender files, config.txt, thumbnail, material textures, and texture.txt files.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39609</id>
		<title>File:B4 Anim Ex1 Source.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:B4_Anim_Ex1_Source.zip&amp;diff=39609"/>
		<updated>2024-01-10T03:50:12Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Source files for Blender 4 animation exercise 1.
File includes two Blender files, config.txt, thumbnail, material textures, and texture.txt files.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source files for Blender 4 animation exercise 1.&lt;br /&gt;
File includes two Blender files, config.txt, thumbnail, material textures, and texture.txt files.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Ex1_in_game.jpg&amp;diff=39608</id>
		<title>File:Ex1 in game.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Ex1_in_game.jpg&amp;diff=39608"/>
		<updated>2024-01-10T03:37:29Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Ex1 in game.jpg&amp;amp;quot;: Blender 4 animated asset ex1 in game - updated.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:B4_anim_ex1_export_warnings.jpg&amp;diff=39607</id>
		<title>File:B4 anim ex1 export warnings.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:B4_anim_ex1_export_warnings.jpg&amp;diff=39607"/>
		<updated>2024-01-10T03:31:07Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Shows Blender 4 animation ex1 Trainz import warnings.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows Blender 4 animation ex1 Trainz import warnings.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:FBX_export_settings2.jpg&amp;diff=39606</id>
		<title>File:FBX export settings2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:FBX_export_settings2.jpg&amp;diff=39606"/>
		<updated>2024-01-10T02:48:42Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Shows second part of Blender FBX animation export settings.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows second part of Blender FBX animation export settings.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:FBX_export_settings1.jpg&amp;diff=39605</id>
		<title>File:FBX export settings1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:FBX_export_settings1.jpg&amp;diff=39605"/>
		<updated>2024-01-10T02:46:49Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Shows first part of Blender FBX animation export settings.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows first part of Blender FBX animation export settings.&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Exporting_lod0.jpg&amp;diff=39604</id>
		<title>File:Exporting lod0.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Exporting_lod0.jpg&amp;diff=39604"/>
		<updated>2024-01-10T02:26:48Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Shows exporting a bone and mesh in Blender&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows exporting a bone and mesh in Blender&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:After_parenting.jpg&amp;diff=39603</id>
		<title>File:After parenting.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:After_parenting.jpg&amp;diff=39603"/>
		<updated>2024-01-10T02:04:45Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Show the result of parenting two LOD mesh objects to an animated empty (bone).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Show the result of parenting two LOD mesh objects to an animated empty (bone).&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Parenting_the_mesh.jpg&amp;diff=39598</id>
		<title>File:Parenting the mesh.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Parenting_the_mesh.jpg&amp;diff=39598"/>
		<updated>2024-01-09T07:09:00Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Shows parenting meshes to a bone in Blender&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows parenting meshes to a bone in Blender&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39596</id>
		<title>File:Linear extrapolation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Linear_extrapolation.jpg&amp;diff=39596"/>
		<updated>2024-01-09T05:21:51Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Linear extrapolation.jpg&amp;amp;quot;: Updated for Blender 4.02&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39595</id>
		<title>File:Setting the rotation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Setting_the_rotation.jpg&amp;diff=39595"/>
		<updated>2024-01-09T05:19:55Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Pcas1986 uploaded a new version of &amp;amp;quot;File:Setting the rotation.jpg&amp;amp;quot;: Used in the Blender FBX animation page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender 2.80 FBX animation tutorial&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Blender402_anim_example1_view1.jpg&amp;diff=39594</id>
		<title>File:Blender402 anim example1 view1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Blender402_anim_example1_view1.jpg&amp;diff=39594"/>
		<updated>2024-01-09T05:16:31Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Used in Blender FBX animation page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender FBX animation page&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Ex1B4_start.jpg&amp;diff=39593</id>
		<title>File:Ex1B4 start.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Ex1B4_start.jpg&amp;diff=39593"/>
		<updated>2024-01-09T05:15:10Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Used in Blender FBX animation page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in Blender FBX animation page&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials&amp;diff=38955</id>
		<title>HowTo/WagonX - Browser Properties Examples and Basic Tutorials</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/WagonX_-_Browser_Properties_Examples_and_Basic_Tutorials&amp;diff=38955"/>
		<updated>2023-10-01T06:25:46Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: First major release.  Probably still has some bugs, typos and formatting links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--the next line is the page title--&amp;gt;&lt;br /&gt;
&amp;lt;!--HowTo/WagonX - Browser Properties Examples and Basic Tutorials--&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red; font-weight: 700; font-size: 15px;&amp;quot;&amp;gt;Please note:  Much of this page still needs some validation.  If you find issues then please contact PCAS1986 in the Trainz Forums or in the Trainz Discord Server.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Document Structure =&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
The WagonX Tutorial set is written over several pages.  This page contains some example WagonX config containers and basic guidance for setting up those containers.  Other pages in the series are listed below:&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
# [[HowTo/Use the WagonX Library]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Technical Reference]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Locomotive Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [[HowTo/WagonX - Traincar Tutorial]]&amp;lt;br&amp;gt;&lt;br /&gt;
# [https://docs.google.com/document/d/1jd5nZNQJI_gKQp-X2GjNCBij9fZGAwgJy_BgBiXf3_8/edit#bookmark=id.kupvwsc34hnk| The asset author&#039;s documentation]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Browser property tutorials=&lt;br /&gt;
&amp;lt;!--start of Browser property example--&amp;gt;&lt;br /&gt;
This tutorial takes you each step of creating a simple mesh toggle example. It is for a handbrake mesh, including animation, that the user may want to show (make visible) or hide (make invisible).  We will add each property tag and explain its purpose.&lt;br /&gt;
It may be useful to have the [[HowTo/WagonX - Technical Reference|WagonX Technical Reference]] page open in a browser to examine details of the various tags.&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
==Creating a basic mesh toggle==&lt;br /&gt;
*Start with an empty browse-properties container like this:&lt;br /&gt;
    &lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add an empty property container and name it &amp;quot;0&amp;quot;.  The names are not used but should be unique.  When we add more properties, you should name them “1”, “2”, “3”, etc.&lt;br /&gt;
   &lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*There is no order required for each property, but using a standard order makes it easier to follow. Each tag is hyperlinked to the browser-property, so you can see more information about it.&lt;br /&gt;
The first tag to add is [[HowTo/WagonX - Technical Reference#enabled|enabled]]. This determines whether or not the property is activated. Set it to 1, since we want our property to work in-game.&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the visibility of the property using [[HowTo/WagonX - Technical Reference#property-visibility|property-visibility]] and make that 1.  Note this value is an integer and doesn&#039;t require quotes around it. A value of 1 makes the property visible in both Surveyor and Driver. See the reference for other available values.&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#name|name]] of our property. The name will appear before the [[HowTo/WagonX - Technical Reference#display-values|display-values]], which we will get to in a moment. You also will want to add a space at the end; otherwise, the property name and display-value will appear as one word.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#property-id|property-id]], which can be anything as long as it is unique and doesn&#039;t contain [[HowTo/WagonX - Technical Reference#Restricted_Characters|restricted characters]]. Trainz will use this to identify this property.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the [[HowTo/WagonX - Technical Reference#description|description]]. This will appear as the tool-tip when you hover over a browser-property.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the mesh&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Set the property [[HowTo/WagonX - Technical Reference#kind|kind]]. Since we want a mesh-attachment kind, we must also specify the [[HowTo/WagonX - Technical Reference#mesh-attachment-type|mesh-attachment-type]] which for this application is mesh-toggle.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_meshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Now add a [[HowTo/WagonX - Technical Reference#meshes|meshes]] tag to specify what mesh we want to toggle. The mesh name must exist in the config mesh-table. We will use the script author&#039;s prestwins handbrake lever for this demo.&lt;br /&gt;
&lt;br /&gt;
Here is part of the config mesh-table:&lt;br /&gt;
 handbrake-lever&lt;br /&gt;
 {&lt;br /&gt;
  mesh                                &amp;quot;mesh/handbrake.lm&amp;quot;&lt;br /&gt;
  anim                                &amp;quot;mesh/handbrake_scene.kin&amp;quot;&lt;br /&gt;
  auto-create                         1&lt;br /&gt;
  att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#values|values]] tag. This determines what the state of the object will be at each index. The values tag varies depending on the kind, but looking at the values tag page, we see that for kind mesh-toggle, we set it at 0 to hide the mesh, and 1 to show the mesh. Each index is comma separated, so we will set the first one at 1, and the seccond one at 0.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#default-index|default-index]]. This is an integer value starting from 0 and which indicates the position in a list.  0 is the first in the list, 1 is the second, and so on.  &amp;lt;i&amp;gt;(The reasons for this are somewhat historical but also based on how computers find things in memory.)&amp;lt;/i&amp;gt;  If we set it to 1, it will start at the second comma-separated values tag which is &amp;quot;0&amp;quot;.  If we set it at -1, it will pick a random index within the size of the values tag.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Add the [[HowTo/WagonX - Technical Reference#trigger|trigger]] tag. We want our property to activate when a user presses a button on the properties page, so we will set it to &amp;lt;b&amp;gt;user&amp;lt;/b&amp;gt;. If we set it to &amp;lt;b&amp;gt;event&amp;lt;/b&amp;gt;, however, we could make it activate based on an event within the train or in the world, such as handbrake apply, or enabling it when it gets dark, and disabling it when its daytime again, but for now, we will leave it at user.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Specify the [[HowTo/WagonX - Technical Reference#display-type|display-type]]. Looking at the options, we see that &amp;lt;b&amp;gt;link&amp;lt;/b&amp;gt; is what we want.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*Finally, the last tag we need is the display-values tag, which we talked about earlier. Since we have two states for our property (specified in the values tag), we will create two comma-separated values for each state. We will call the first “Enabled”, and the second “Hidden”, which corresponds with the numbers we set in the values tag.&lt;br /&gt;
 browser-properties&lt;br /&gt;
 {&lt;br /&gt;
  0&lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Toggle Mesh: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrakeMeshToggle&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggles the handbrake mesh&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,0&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Enabled,Hidden&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And that&#039;s it! Run the asset into trainz, and when you view the properties, you should see your property appear:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--Insert pic of View Details with suitable property shown--&amp;gt;&lt;br /&gt;
[[File:Toggle_handbrake_mesh_in_View_Details.jpg]]&lt;br /&gt;
 &lt;br /&gt;
And when you click on the underlined part of your property, the property should change to “Hidden”, as we specified, and the handbrake on the underframe should disappear.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Handbrake_mesh_show_%26_hide.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
= Browser-Property Examples =&lt;br /&gt;
== User-Triggered Properties ==&lt;br /&gt;
Here are a number of examples for user triggering - i.e. in the View Details property browser. Detailed information on the property browser tags can be found on the [[HowTo/WagonX - Reference|WagonX Reference]] page.&lt;br /&gt;
&amp;lt;!--start of mesh toggle property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===Mesh-toggle property===&lt;br /&gt;
This property allows you to show or hide a mesh that is in the config mesh-table.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   enabled               1 &lt;br /&gt;
   property-visibility   1&lt;br /&gt;
   name                  &amp;quot;Toggle: &amp;quot;&lt;br /&gt;
   property-id           &amp;quot;p_toggle&amp;quot;&lt;br /&gt;
   description           &amp;quot;Hide or display the roof mesh&amp;quot;&lt;br /&gt;
   kind                  &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type  &amp;quot;mesh-toggle&amp;quot;&lt;br /&gt;
   meshes                &amp;quot;roof&amp;quot;&lt;br /&gt;
   values                &amp;quot;0,1&amp;quot;&lt;br /&gt;
   duration              3 &lt;br /&gt;
   default-index         0&lt;br /&gt;
   trigger               &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type          &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values        &amp;quot;Hidden,Visible&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture-replacement property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===texture-replacement property===&lt;br /&gt;
This allows the choice of a texture from either local texture files (i.e. contained within the asset), or from a texture group asset, to retexture or reskin a mesh. You could use it for swapping between clean, dirty or weathered textures, logos and also entire liveries. &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture replacement using local texture files example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
====Texture replacement using local texture files====&lt;br /&gt;
&lt;br /&gt;
For fx-replacement-type texture-replacement-texture, the comma and/or semicolon-separated values are the names of the files (ideally without the path or extension) to be referenced at that index. The values tag will contain a list of texture(.txt) files including a folder name if used.  This is an example of three textures.&lt;br /&gt;
&lt;br /&gt;
 values     &amp;quot;images/congleton.texture,images/burntisland.texture,images/buxton.texture,images/none.texture&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
If you have the same path (and same extension) for all your files, you can greatly reduce the clutter by just specifying the path and extension once using the files-path tag.  See the files-path and values usage below.  Note that the display-values tag contains similar information but that is for the user to see.&lt;br /&gt;
&lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Workflow Text: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_workflow&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets the Workflow&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
   consist-property-sync      1&lt;br /&gt;
   meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-extra&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;null&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
   values                     &amp;quot;congleton,burntisland,buxton,none&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;list&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Congleton,Burntisland,Buxton,None&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of texture replacement using a texture-group example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
====Texture replacement using a texture-group library asset====&lt;br /&gt;
You will need to specify the texture group asset in the kuid-table and give it a name such as &amp;quot;texturelib&amp;quot; or &amp;quot;gwrtexturelib&amp;quot;,  The name should not have any spaces or other special characters.&lt;br /&gt;
This property container is set up to allow for three different variations of the the material used for the asset.  They are named in the &amp;quot;display-values&amp;quot; tag as Skin 1, Skin 2, and Skin 3. &lt;br /&gt;
Since it is a PBR material there are three textures used in the materail: the albedo, parameters, and normal.  The normal texture is common to all three versions so it need not be changed.&lt;br /&gt;
The &amp;quot;values&amp;quot; tag contains six numbers which are the numbers of the textures in the texture-group asset.  For Skin 1 the &amp;quot;12&amp;quot; refers to the albedo texture, and the &amp;quot;15&amp;quot; refers to the parameter texture. &amp;quot;13&amp;quot; and &amp;quot;16&amp;quot; are the pair for Skin2, and &amp;quot;14&amp;quot; and &amp;quot;17&amp;quot; are the pair for Skin 3.&lt;br /&gt;
The &amp;quot;effects&amp;quot; tag contains the texture effect names for meshes in the mesh-table.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   enabled             1&lt;br /&gt;
   property-visibility 1&lt;br /&gt;
   name                &amp;quot;Weathering: &amp;quot;&lt;br /&gt;
   property-id         &amp;quot;p_skin&amp;quot;&lt;br /&gt;
   description         &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
   kind                &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   meshes              &amp;quot;null&amp;quot;&lt;br /&gt;
   effects             &amp;quot;texture-albedo,texture-parameter&amp;quot;&lt;br /&gt;
   asset               &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   files-path          &amp;quot;null&amp;quot;&lt;br /&gt;
   values              &amp;quot;12;15,13;16,14;17&amp;quot;&lt;br /&gt;
   default-index       -1&lt;br /&gt;
   trigger             &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type        &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values      &amp;quot;Skin 1,Skin 2,Skin 3&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Event-Triggered Properties ==&lt;br /&gt;
&amp;lt;!--start of loading-doors property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
===loading-doorsProperty ===&lt;br /&gt;
The ‘meshes’ tag references a mesh-table asset named ‘loading-doors’, and sets the frame to 30 when begin-load is called (to open the doors), and 0 when end-load is called (to close the door). The default index is 0 (the animation frame will be at 0), and the animation duration is 1.5 seconds.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    0&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_doors&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;loading-doors&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0,30&amp;quot;&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;end-load,begin-load&amp;quot;&lt;br /&gt;
   duration                   1.5&lt;br /&gt;
   default-index              0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
An alternate way to do it is use mesh-attachment-type &amp;quot;mesh-animation-state&amp;quot;, and set a bool int (0 or 1) for the values tag.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    0&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_doors&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-state&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;loading-doors&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0,1&amp;quot;&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;end-load,begin-load&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you want two doors to open at the same time, instead of creating another property, you can use a semicolon split in the values tag to change two in a single property:&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;door-1,door-2&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
   events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
   duration                   3.0&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of Weather-Based property example--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
===Weather-Based Texture Replacement===&lt;br /&gt;
The texture effect will change based on the weather. It will display a snowy texture when the weather type is 6 (medium snow), a wet, rainy texture when the weather type is 3 (rain), and a dry texture when the weather type is 0.&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   property-id                &amp;quot;p_weather_skin&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement-texture&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-weather&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;images/,.texture&amp;quot;&lt;br /&gt;
   values                     &amp;quot;texture-snow,texture-rain,texture-dry&amp;quot;&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;event&amp;quot;&lt;br /&gt;
   events                     &amp;quot;weather-6,weather-3,weather-0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of discussion about use of semicolons--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
== Using semicolons to set multiple values in one property ==&lt;br /&gt;
When assigning values for a certain property, you will specify the mesh/effect/sound, etc that needs to be edited, and specify how you want to manipulate it (fx-replacement-type, mesh-attachment-type, etc), and set the value for a certain index. For example, In a texture replacement where a texture is being replaced by an external texture-group asset, the property would look something like this.&lt;br /&gt;
&lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_parameter&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-albedo&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,2,3,4&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
As you can see, the comma-separated numbers in the “values” tag indicate the index in the texture-group asset to find the texture; here are the first few lines for that. Texture indexes 0, 1, 2, and 3 are referenced for the albedo texture types, since we have 4 weathering types.&lt;br /&gt;
&lt;br /&gt;
 kuid                                    &amp;lt;kuid2:661805:500009:0&amp;gt;&lt;br /&gt;
 username                                &amp;quot;BR GrainHop Texture Group&amp;quot;&lt;br /&gt;
 kind                                    &amp;quot;texture-group&amp;quot;&lt;br /&gt;
 trainz-build                            5.0&lt;br /&gt;
 category-class                          &amp;quot;JO&amp;quot;&lt;br /&gt;
 author                                  &amp;quot;dundun92&amp;quot;&lt;br /&gt;
 contact-email                           &amp;quot;jbvector93@outlook.com&amp;quot;&lt;br /&gt;
 description                             &amp;quot;A texture group for my GrainHop wagons&amp;quot;&lt;br /&gt;
 textures&lt;br /&gt;
 {&lt;br /&gt;
   0                                   &amp;quot;270cgo/0albedo.texture&amp;quot;&lt;br /&gt;
   1                                   &amp;quot;270cgo/1albedo.texture&amp;quot;&lt;br /&gt;
   2                                   &amp;quot;270cgo/2albedo.texture&amp;quot;&lt;br /&gt;
   3                                   &amp;quot;270cgo/2albedo.texture&amp;quot;&lt;br /&gt;
   4                                   &amp;quot;270cgo/0parameter.texture&amp;quot;&lt;br /&gt;
   5                                   &amp;quot;270cgo/1parameter.texture&amp;quot;&lt;br /&gt;
   6                                   &amp;quot;270cgo/2parameter.texture&amp;quot;&lt;br /&gt;
   .........&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
We specified the texture-group library in the kuid table, and referenced it in the “asset” tag.&lt;br /&gt;
 kuid-table&lt;br /&gt;
 {&lt;br /&gt;
   acslib                                &amp;lt;kuid2:60850:89100&amp;gt;&lt;br /&gt;
   meshlib                               &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   texturelib                            &amp;lt;kuid2:661805:500009&amp;gt;&lt;br /&gt;
   lamp                                  &amp;lt;kuid2:661805:500003&amp;gt;&lt;br /&gt;
   enginespec                            &amp;lt;kuid2:368699:50064&amp;gt;&lt;br /&gt;
   bogie                                 &amp;lt;kuid2:661805:400003&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And then we specified the effect we wanted to change, (currently just the texture-albedo), inside the “effects” tag (this is not the effects tag below in this mesh table asset, but rather the one in the browser-properties at the top of this section!).&lt;br /&gt;
 body&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;mesh/body.lm&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
     effects&lt;br /&gt;
     {&lt;br /&gt;
       texture-albedo&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_albedo.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
       texture-normal&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_normal.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
       texture-parameter&lt;br /&gt;
       {&lt;br /&gt;
         kind                                &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
         texture                             &amp;quot;covhopp-1_parameter.texture&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
But say you want to replace the normal map as well. You would probably just create another browser property and specify the proper index for the normals.&lt;br /&gt;
      &lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_parameter&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Paramenter Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-albedo&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;1,2,3,4&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 1&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin_normal&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets The Normal Texture&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   effects                    &amp;quot;texture-normal&amp;quot;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   values                     &amp;quot;7,8,9,10&amp;quot;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;Skin1,Skin2,Skin3,Skin4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
But we can&#039;t forget the parameter map… that will require a third property. What&#039;s worse, we will now have three different properties in the view details page that will each have to be clicked on to change each map! Assigning properties this way can get tedious and create extra clutter in the config. Thankfully, for properties that share the same kind and type, it can all be done in a single property using semicolons:&lt;br /&gt;
      &lt;br /&gt;
 0&lt;br /&gt;
 {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        1&lt;br /&gt;
   name                       &amp;quot;Skin: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_skin&amp;quot;&lt;br /&gt;
   description                &amp;quot;Sets the weathering type&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;fx-replacement&amp;quot;&lt;br /&gt;
   fx-replacement-type        &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;null&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;effects                    &amp;quot;texture-albedo,texture-parameter,texture-normal&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
   asset                      &amp;quot;texturelib&amp;quot;&lt;br /&gt;
   files-path                 &amp;quot;null&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;values                     &amp;quot;0;4;8,1;5;9,2;6;10,3;7;11&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
   default-index              -1&lt;br /&gt;
   trigger                    &amp;quot;user&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   &amp;lt;b&amp;gt;display-values             &amp;quot;Clean,Weathered,Dirty,Rusty&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Take note of the three tag entries above: the &amp;lt;b&amp;gt;effects&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;values&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;display-values&amp;lt;/b&amp;gt; tags. The &amp;lt;b&amp;gt;display-values&amp;lt;/b&amp;gt; tag is what the user sees and can choose from. Our interest is in the remaining two tags as shown below:&lt;br /&gt;
&lt;br /&gt;
 effects                    &amp;quot;texture-albedo,texture-parameter,texture-normal&amp;quot;&lt;br /&gt;
 values                     &amp;quot;0;4;8,1;5;9,2;6;9,3;7;11&amp;quot; &lt;br /&gt;
&lt;br /&gt;
There are four user options and, since each option requires three textures, the total number of textures is 12. The &amp;lt;b&amp;gt;values&amp;lt;/b&amp;gt; tag contains a string of four groups of texture numbers separated by a comma.  Within each texture group the texture numbers are delimited by a semi colon.&lt;br /&gt;
&lt;br /&gt;
To clarify, we can list the three textures associated with each user choice:&lt;br /&gt;
&lt;br /&gt;
 0;4;8 -&amp;gt; Clean&lt;br /&gt;
 1;5;9 -&amp;gt; Weathered&lt;br /&gt;
 2;6;10 -&amp;gt; Dirty&lt;br /&gt;
 3;7;11 -&amp;gt; Rusty&lt;br /&gt;
 &lt;br /&gt;
The first column of 0,1,2,3 identify the albedo textures. The second column of 4,5,6,7 identify the parameters textures, The third column of 8,9,10,11 identify the normal textures.  Note that the numbers do not need to be in sequence or even consecutive.  All those numbers do is to identify the correct texture in the texture-group asset.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
This system works for other kinds of properties, too. In this case, we are setting the animation frame of both the handbrake-lever, and braking system at the same time using the same property (triggered by the same event).&lt;br /&gt;
        		  &lt;br /&gt;
  1      &lt;br /&gt;
  {&lt;br /&gt;
   enabled                    1&lt;br /&gt;
   property-visibility        0&lt;br /&gt;
   name                       &amp;quot;Handbrake State: &amp;quot;&lt;br /&gt;
   property-id                &amp;quot;p_handbrake&amp;quot;&lt;br /&gt;
   description                &amp;quot;Toggle the handbrake&amp;quot;&lt;br /&gt;
   kind                       &amp;quot;mesh-attachment&amp;quot;&lt;br /&gt;
   mesh-attachment-type       &amp;quot;mesh-animation-frame&amp;quot;&lt;br /&gt;
   meshes                     &amp;quot;handbrake-lever,braking-system&amp;quot;&lt;br /&gt;
   values                     &amp;quot;0;0,30;30&amp;quot;&lt;br /&gt;
   events                     &amp;quot;handbrake-release,handbrake-apply&amp;quot;&lt;br /&gt;
   duration                   3.2&lt;br /&gt;
   default-index              0&lt;br /&gt;
   trigger                    &amp;quot;both&amp;quot;&lt;br /&gt;
   display-type               &amp;quot;link&amp;quot;&lt;br /&gt;
   display-values             &amp;quot;release,apply&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--start of discussion about Naming ACS mesh-table attachments--&amp;gt;&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
== Naming ACS mesh-table attachments ==&lt;br /&gt;
Please refer to this page on the ACS coupling system for setting up the “active-coupling-standard-60850” extensions container (which will be required for the ACS coupling to work): [[ACS_Coupling_System|ACS Coupling System]]&lt;br /&gt;
&lt;br /&gt;
These are the mesh-table naming conventions you must use for the beginning of the name of each ACS attachment mesh. The others will vary depending on the “animated” property above. &amp;lt;b&amp;gt;You must spell them exactly as shown below&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*coupler&lt;br /&gt;
*gangway&lt;br /&gt;
*airbrake&lt;br /&gt;
*vacbrake&lt;br /&gt;
*multiworking&lt;br /&gt;
*heating&lt;br /&gt;
*rch&lt;br /&gt;
&lt;br /&gt;
If the “animated” tag in the acs container (see [[HowTo/WagonX_-_Technical_Reference#ACS|acs]]) is set to 1, then the naming is quite simple. It&#039;s one of the 7 callbacks above + a dash + “&amp;lt;i&amp;gt;front&amp;lt;/i&amp;gt;” or “&amp;lt;i&amp;gt;back&amp;lt;/i&amp;gt;”. The anim tag must be present to specify the animation for it. Frame 0 is the uncoupled state, and the last frame is the coupled state. This setup is shown below:&lt;br /&gt;
&lt;br /&gt;
 coupler-front&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;coupler-screwlink-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 coupler-back&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;coupler-screwlink-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;vacbrake-single-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-back&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-animated.lm&amp;quot;&lt;br /&gt;
   anim                                &amp;quot;vacbrake-single-animated_scene.kin&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple1&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If, however, you do not want to use animations, but want to use separate meshes for each state (coupled and uncoupled), it gets a bit more complicated. The naming will follow the same as above at first, but you must add a third piece to it to specify the exact type of ACS attachment this is. The information on what to put there is originally from the [[ACS_Coupling_SystemACS Coupling System|ACS page]], but the 7 callbacks have been added plus the sub-callback here to make it easier (the third callback options are the ones with a delta symbol &amp;amp;Delta; ). And for the uncoupled state, the third callback is “non” (e.g. coupler-front-screwlink, and coupler-front-none).&lt;br /&gt;
&lt;br /&gt;
*coupler&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;hook&amp;lt;/b&amp;gt;&amp;quot; -- connects to screwlink/instanter/3link/hst-emergency-bar.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;3link&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;instanter&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;screwlink&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;hst-emergency-bar&amp;lt;/b&amp;gt;&amp;quot; -- connects to hook.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar-full&amp;lt;/b&amp;gt;&amp;quot; -- connects to &amp;quot;bar-none&amp;quot;. Half of a handed pair for when one vehicle has the entire bar coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar-none&amp;lt;/b&amp;gt;&amp;quot; -- connected to by &amp;quot;bar-full&amp;quot;. The other half of the handed pair.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bar&amp;lt;/b&amp;gt;&amp;quot; -- connects to self only. Used when both vehicles have half the bar coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;knuckle&amp;lt;/b&amp;gt;&amp;quot; - standard knuckle coupler.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;tightlock&amp;lt;/b&amp;gt;&amp;quot; -- different from a standard knuckle, refers to a knuckle style coupler often fitted to multiple unit trains that also include electrical connections.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;wedgelock&amp;lt;/b&amp;gt;&amp;quot; -- London Underground coupler.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;bsi&amp;lt;/b&amp;gt;&amp;quot; -- Found on Sprinter DMUs and derived designs.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;dellner&amp;lt;/b&amp;gt;&amp;quot; -- Also compatible with Scharfenberg coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;scharfenberg&amp;lt;/b&amp;gt;&amp;quot; -- Also compatible with dellner coupling.&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(&amp;lt;b&amp;gt;other string identifier&amp;lt;/b&amp;gt;)&amp;quot; -- Any string that is not recognized from the above list is assumed to be a symmetrical meet-in-the-middle type of coupler.&lt;br /&gt;
::&amp;amp;Delta; “&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;”&lt;br /&gt;
::Examples: &amp;lt;b&amp;gt;coupler-front-instanter&amp;lt;/b&amp;gt;, coupler-back-none&lt;br /&gt;
&lt;br /&gt;
*gangway&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;rubbing-plate&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;gangway&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;gangway-front-gangway&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*airbrake&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;twin&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;single&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;airbrake-back-none&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*vacbrake&lt;br /&gt;
:*front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;twin&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;single&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;high&amp;lt;/b&amp;gt;&lt;br /&gt;
::&amp;amp;Delta; &amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;vacbrake-back-twin&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*multiworking&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(color)-(shape)&amp;quot; -- e.g. &amp;quot;&amp;lt;b&amp;gt;blue-star&amp;lt;/b&amp;gt;&amp;quot; or &amp;quot;&amp;lt;b&amp;gt;red-diamond&amp;lt;/b&amp;gt;&amp;quot;, etc&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;AAR&amp;lt;/b&amp;gt;&amp;quot; -- as used on GM locos&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;SR27&amp;lt;/b&amp;gt;&amp;quot; -- bagpipes&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;(other identifier string e.g. classname)&amp;quot;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;multiworking-front-blue-square&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*heating&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;steam&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;electric&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;dual&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;southern-electric&amp;lt;/b&amp;gt;&amp;quot; &lt;br /&gt;
::Example: &amp;lt;b&amp;gt;heating-back-steam&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*rch&lt;br /&gt;
::front/back&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;high&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;low&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::&amp;amp;Delta; &amp;quot;&amp;lt;b&amp;gt;none&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
::Example: &amp;lt;b&amp;gt;rch-back-high&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And an example how it would look inside a config.txt. The back attachments have been omitted for brevity. &lt;br /&gt;
  &lt;br /&gt;
 coupler-front-screwlink&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-coupled.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 coupler-front-none&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;coupler-screwlink-retracted.lm&amp;quot;&lt;br /&gt;
       auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front-single&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-coupled.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 vacbrake-front-none&lt;br /&gt;
 {&lt;br /&gt;
   mesh-asset                          &amp;lt;kuid2:661805:500002&amp;gt;&lt;br /&gt;
   mesh                                &amp;quot;vacbrake-single-retracted.lm&amp;quot;&lt;br /&gt;
   auto-create                         1&lt;br /&gt;
   att                                 &amp;quot;a.couple0&amp;quot;&lt;br /&gt;
   att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=1200&amp;gt;&lt;br /&gt;
=Copyright Notice=&lt;br /&gt;
Much of the content on this page and child pages was derived from Dundun92&#039;s original Google Docs document.  Permission was granted to use that information here.&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Toggle_handbrake_mesh_in_View_Details.jpg&amp;diff=38954</id>
		<title>File:Toggle handbrake mesh in View Details.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Toggle_handbrake_mesh_in_View_Details.jpg&amp;diff=38954"/>
		<updated>2023-10-01T05:35:07Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Used in WagonX tutorials&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in WagonX tutorials&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=File:Handbrake_mesh_show_%26_hide.jpg&amp;diff=38953</id>
		<title>File:Handbrake mesh show &amp; hide.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=File:Handbrake_mesh_show_%26_hide.jpg&amp;diff=38953"/>
		<updated>2023-10-01T05:32:02Z</updated>

		<summary type="html">&lt;p&gt;Pcas1986: Used in WagonX tutorials&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used in WagonX tutorials&lt;/div&gt;</summary>
		<author><name>Pcas1986</name></author>
	</entry>
</feed>