<?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=Sailordan</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=Sailordan"/>
	<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/wiki/Special:Contributions/Sailordan"/>
	<updated>2026-11-05T09:44:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=KIND_Interior&amp;diff=8936</id>
		<title>KIND Interior</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=KIND_Interior&amp;diff=8936"/>
		<updated>2016-06-10T23:42:44Z</updated>

		<summary type="html">&lt;p&gt;Sailordan: Add interior-controls-type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[KIND Interior]] provides the basis for a building or vehicle interior, with or without control levers and dials.&lt;br /&gt;
&lt;br /&gt;
This asset type inherits all mesh display characteristics, and adds interior-specific functionality such as control levers. Please read [[HowTo/Build a cab interior]] for a step-by-step guide to creating an Interior asset.&lt;br /&gt;
&lt;br /&gt;
==KIND Hierarchy==&lt;br /&gt;
===Parent Classes===&lt;br /&gt;
* [[KIND Mesh]]&lt;br /&gt;
===Child Classes===&lt;br /&gt;
* &#039;&#039;none.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Supported Tags==&lt;br /&gt;
Each interior asset supports the following tags. Each tag is shown here with its default value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 kind &amp;quot;interior&amp;quot;&lt;br /&gt;
 [[%22cameralist%22_Container|cameralist]]&lt;br /&gt;
 {&lt;br /&gt;
   camera0                               0,0,0,0,0&lt;br /&gt;
 }&lt;br /&gt;
 [[%22soundscript%22_Container|soundscript]]&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
 cameradefault                           0&lt;br /&gt;
 cabin-visible-from-outside              0&lt;br /&gt;
 outside-visible-from-cabin              0&lt;br /&gt;
 controlset                              &amp;quot;&amp;quot;&lt;br /&gt;
 [[%22mesh-table%22_container_(interior_version)|mesh-table]]&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====cameralist====&lt;br /&gt;
:Type: [[%22cameralist%22_Container|CameraList Container]]&lt;br /&gt;
:Desc: Lists the different camera view positions and orientations this interior has.&lt;br /&gt;
====soundscript====&lt;br /&gt;
:Type: [[%22soundscript%22_Container|SoundScript Container]]&lt;br /&gt;
:Desc: Details sounds that a cab interior can produce. Sounds may be triggered by the asset script, or by object animations. &lt;br /&gt;
====cameradefault====&lt;br /&gt;
:Type: Integer&lt;br /&gt;
:Desc: Defines which of the cameras in &#039;cameralist&#039; is the default camera (the one selected when the user first goes into cab view mode). e.g. &amp;quot;cameradefault 3&amp;quot; will make &amp;quot;camera3&amp;quot; the default camera view.&lt;br /&gt;
====cabin-visible-from-outside====&lt;br /&gt;
:Type: Boolean&lt;br /&gt;
:Desc: If true, makes the cab mesh visible from the outside view.&lt;br /&gt;
This is intended for objects with simple but obviously visible cab controls that are not enclosed - e.g. the controls to operate a transfer table. It would be far too much of a performance impact to use this on locomotive models, as locomotive cabs are very performance intensive.&lt;br /&gt;
====outside-visible-from-cabin====&lt;br /&gt;
:Type: Boolean&lt;br /&gt;
:Desc: If true, makes the loco body mesh visible while in the cab interior view.&lt;br /&gt;
This is intended to be used with an interior where the cab controls that are not in an enclosed space - e.g. a transfer table.&lt;br /&gt;
While using this on a traincar is not considered problematic from a performance perspective, please note this will require a very carefully designed cab and loco asset - both the inside of the loco mesh and the cab interior will be visible at the same time, and unless done very carefully, this is likely to cause graphical problems with overlapping polygons and unexpectedly visible or opaque surfaces.&lt;br /&gt;
====controlset====&lt;br /&gt;
:Type: [[KUID]]&lt;br /&gt;
:Desc: Specifies a [[KIND_Controlset|controlset]] asset used to send script messages to this interiors custom script. Optional.&lt;br /&gt;
&lt;br /&gt;
====interior-controls-type====&lt;br /&gt;
:Type: Text String &lt;br /&gt;
:Desc: Specifies the type of the control.   Types are &lt;br /&gt;
:* none (non-powered car)&lt;br /&gt;
:* hostler (driveable B unit or cab car)&lt;br /&gt;
:* full (loco)&lt;br /&gt;
:Compulsory from 3.8.&lt;br /&gt;
&lt;br /&gt;
====mesh-table====&lt;br /&gt;
:Type: [[%22mesh-table%22_container_(interior_version)|MeshTable Container (Interior version)]]&lt;br /&gt;
:Desc: All the meshes for the cab interior (the shell itself, along with all the controls and gauges) are listed here. A mesh table for an interior has a number of additional options that a normal mesh table does not.&lt;br /&gt;
&lt;br /&gt;
==Example Config.txt==&lt;br /&gt;
Sample [[config.txt file]] for a interior asset, with the Standard Tags excluded for brevity:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 kind                                    &amp;quot;interior&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cameralist&lt;br /&gt;
 {&lt;br /&gt;
   camera0                               -1.236,0.173,0.392,0.511,-0.155&lt;br /&gt;
   camera1                               -1.278,-0.176,0.392,0.511,-0.155&lt;br /&gt;
   camera2                               -1.247,0.344,0.52,6.708,-0.403&lt;br /&gt;
   camera3                               -0.113,0.965,0.52,6.312,-0.377&lt;br /&gt;
   camera4                               1.35,0.15,0.52,5.71,-0.265&lt;br /&gt;
   camera5                               1.374,0.208,0.205,6.048,-0.06&lt;br /&gt;
   camera6                               -0.754,0.926,1.011,6.636,-0.516&lt;br /&gt;
   camera7                               -1.293,0.449,0.459,6.757,-0.342&lt;br /&gt;
 }&lt;br /&gt;
 cameradefault                           0&lt;br /&gt;
 &lt;br /&gt;
 mesh-table&lt;br /&gt;
 {&lt;br /&gt;
   default&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;c_interior.im&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   wheelslip_light&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;light&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;wheelslip_light.im&amp;quot;&lt;br /&gt;
     auto-create                         0&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   bptrainbrakepipe_needle2&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;digital-dial-prs&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;brakeneedle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.brakepipe2&amp;quot;&lt;br /&gt;
     limits                              0,55&lt;br /&gt;
     font                                &amp;quot;arial&amp;quot;&lt;br /&gt;
     fontsize                            0.007&lt;br /&gt;
     fontcolor                           80,240,120&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   speedo_needle2&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;digital-dial-spd&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;brakeneedle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.digispeedo&amp;quot;&lt;br /&gt;
     limits                              0,55&lt;br /&gt;
     font                                &amp;quot;arial&amp;quot;&lt;br /&gt;
     fontsize                            0.01&lt;br /&gt;
     fontcolor                           0,0,0&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   throttle_lever&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;throttle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.throttle&amp;quot;&lt;br /&gt;
     limits                              0,8&lt;br /&gt;
     angles                              0,1.69&lt;br /&gt;
     notches                             0,0.125,0.25,0.375,0.5,0.625,0.75,0.875,1&lt;br /&gt;
     notchheight                         1,2,2,2,2,2,2,2,1&lt;br /&gt;
     radius                              0.35&lt;br /&gt;
     mousespeed                          -1&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   dynamicbrake_lever&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;dynamic_handle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.dynamic&amp;quot;&lt;br /&gt;
     limits                              0,2&lt;br /&gt;
     angles                              0,-1.69&lt;br /&gt;
     notches                             0,1&lt;br /&gt;
     notchheight                         0.1,1&lt;br /&gt;
     mousespeed                          -1&lt;br /&gt;
     radius                              0.35&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   trainbrakelap_lever&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     mesh                                &amp;quot;trainbrake_handle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.trainbrake_handle&amp;quot;&lt;br /&gt;
     limits                              0,4&lt;br /&gt;
     angles                              0,-2&lt;br /&gt;
     notches                             0,0.25,0.5,0.75,1&lt;br /&gt;
     notchheight                         2,2,2,2,2&lt;br /&gt;
     mousespeed                          1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   independantbrake_lever&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;indy_handle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.ind&amp;quot;&lt;br /&gt;
     limits                              0,32&lt;br /&gt;
     angles                              0.94,0&lt;br /&gt;
     notches                             0,0.5,1&lt;br /&gt;
     notchheight                         1,1,1&lt;br /&gt;
     radius                              0.35&lt;br /&gt;
     mousespeed                          1&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   flow_needle&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;needle&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;flowneedle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.bpflow&amp;quot;&lt;br /&gt;
     limits                              0,1050&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   bplocomain_needle&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;needle&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;brakeneedlered.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.mainres&amp;quot;&lt;br /&gt;
     limits                              0,1240&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   bploco_equaliser&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;needle&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;brakeneedle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.eqres&amp;quot;&lt;br /&gt;
     limits                              0,1240&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   bptrainbrakecylinder_needle&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;needle&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;brakeneedlered.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.brakecyl&amp;quot;&lt;br /&gt;
     limits                              -50,1390&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   bptrainbrakepipe_needle&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;needle&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;brakeneedle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.brakepipe&amp;quot;&lt;br /&gt;
     limits                              0,1240&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   speedo_needle&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;needle&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;speedo_pointer.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.speedo&amp;quot;&lt;br /&gt;
     limits                              0,43&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   ampmeter_needle&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;needle&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;needleamps.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.ampmeter&amp;quot;&lt;br /&gt;
     limits                              0,1700&lt;br /&gt;
     angles                              0,3.02058&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   reverser_lever&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;reverser_handle.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.throttle01&amp;quot;&lt;br /&gt;
     limits                              0,2&lt;br /&gt;
     angles                              -0.55,0.55&lt;br /&gt;
     notches                             0,0.5,1&lt;br /&gt;
     notchheight                         1,1,1&lt;br /&gt;
     mousespeed                          -1&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   right_sliding_window&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;window1.im&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     att                                 &amp;quot;a.window1&amp;quot;&lt;br /&gt;
     att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
     limits                              0,1&lt;br /&gt;
     angles                              0,-0.009&lt;br /&gt;
     notches                             0,1&lt;br /&gt;
     notchheight                         1,1&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   right_sliding_window2&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;window2.im&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     att                                 &amp;quot;a.window2&amp;quot;&lt;br /&gt;
     att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
     limits                              0,1&lt;br /&gt;
     angles                              0,0.009&lt;br /&gt;
     notches                             0,1&lt;br /&gt;
     notchheight                         1,1&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     mousespeed                          -1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   left_sliding_window&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;window3.im&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     att                                 &amp;quot;a.window3&amp;quot;&lt;br /&gt;
     att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
     limits                              0,1&lt;br /&gt;
     angles                              0,-0.009&lt;br /&gt;
     notches                             0,1&lt;br /&gt;
     notchheight                         1,1&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     mousespeed                          -1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   left_sliding_window2&lt;br /&gt;
   {&lt;br /&gt;
     mesh                                &amp;quot;window4.im&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     att                                 &amp;quot;a.window4&amp;quot;&lt;br /&gt;
     att-parent                          &amp;quot;default&amp;quot;&lt;br /&gt;
     limits                              0,1&lt;br /&gt;
     angles                              0,0.009&lt;br /&gt;
     notches                             0,1&lt;br /&gt;
     notchheight                         1,1&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     mousespeed                          1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   light_switch&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;lever&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.hdlt&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;hdltswtch.im&amp;quot;&lt;br /&gt;
     limits                              0,1&lt;br /&gt;
     angles                              0,2&lt;br /&gt;
     notches                             0,1&lt;br /&gt;
     notchheight                         0.1,0.1&lt;br /&gt;
     mousespeed                          -1&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   horn&lt;br /&gt;
   {&lt;br /&gt;
     kind                                &amp;quot;pulllever&amp;quot;&lt;br /&gt;
     mesh                                &amp;quot;horn.im&amp;quot;&lt;br /&gt;
     att                                 &amp;quot;a.horn&amp;quot;&lt;br /&gt;
     auto-create                         1&lt;br /&gt;
     angles                              0,-0.55&lt;br /&gt;
     limits                              0,1&lt;br /&gt;
     mousespeed                          -1&lt;br /&gt;
     radius                              -0.02&lt;br /&gt;
     notches                             0,1&lt;br /&gt;
     notchheight                         0,0&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Mesh table entry speedo_needle is required to update speed information on a RailDriver console.&lt;br /&gt;
&lt;br /&gt;
==Custom Sounds==&lt;br /&gt;
===Overview===&lt;br /&gt;
It is possible to assign custom sounds to cabin controls without using a custom script. This can be performed via the addition of a &#039;cabin.txt&#039; configuration file to an interior asset. The cabin.txt and custom sounds files must be placed in the an asset sub-directory named &#039;sounds&#039;.&lt;br /&gt;
&lt;br /&gt;
===Cabin.txt File Format===&lt;br /&gt;
The cabin.txt file lists 1 sound even per row, with each sound event defined by three space separated values. Empty rows are permitted and will be safely ignored. Each sound event requires the following three values:&lt;br /&gt;
&lt;br /&gt;
====Target====&lt;br /&gt;
The name of the mesh-table entry for the mesh of the cabin control.&lt;br /&gt;
====Event====&lt;br /&gt;
The name of a cabin control event which will trigger the sound. The full list of supported events is as follows:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;mouseenter&#039;&#039;&#039; :- Triggered when the players mouse hovers over the control&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;mouseleave&#039;&#039;&#039; :- Triggered when the players mouse was over the control but no longer is&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;mousedown&#039;&#039;&#039; :- Triggered when the player presses a mouse button while over the control&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;beginselect&#039;&#039;&#039; :- Triggered when the player actives a control, i.e. selects it&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;mouseup&#039;&#039;&#039; :- Triggered when the player releases a mouse button while over the control&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;endselect&#039;&#039;&#039; :- Triggered when the player deselects a control&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;change-notch&#039;&#039;&#039; :- Triggered on notched controls only, whenever the player moves the control one notch&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;lever-low&#039;&#039;&#039; :- Triggered on lever type controls, when the lever is moved to the lowest position&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;lever-high&#039;&#039;&#039; :- Triggered on lever type controls, when the lever is moved to the highest position&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;looping&#039;&#039;&#039; :- Triggered when a control is moved to notch 1, this sound will play in a loop until the control is changed. A typical use for this would be a fire sound while the firedoor of a steam train is open.&amp;lt;br&amp;gt;&lt;br /&gt;
====Sound File====&lt;br /&gt;
The file-name of the sound to play (relative to the &#039;sound&#039; sub-directory)&lt;br /&gt;
&lt;br /&gt;
Below is an example of a cabin.txt file which will assign custom sounds to the reverser and windows of the example config.txt file above.&lt;br /&gt;
&lt;br /&gt;
  reverser_lever lever-low reverser_notch.wav&lt;br /&gt;
  reverser_lever lever-high reverser_throw.wav&lt;br /&gt;
  &lt;br /&gt;
  right_sliding_window change-notch window_open.wav&lt;br /&gt;
  right_sliding_window2 change-notch window_open.wav&lt;br /&gt;
  left_sliding_window change-notch window_open.wav&lt;br /&gt;
  left_sliding_window2 change-notch window_open.wav&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&#039;&#039;Attach sample files here?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Categories==&lt;br /&gt;
[[Category:Asset KIND|I]]&lt;/div&gt;</summary>
		<author><name>Sailordan</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=LM.txt_file&amp;diff=8888</id>
		<title>LM.txt file</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=LM.txt_file&amp;diff=8888"/>
		<updated>2016-05-24T00:34:55Z</updated>

		<summary type="html">&lt;p&gt;Sailordan: Add note re alternative to :cull&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;LM.txt files&#039;&#039;&#039; are ASCII text format files describing a single model with multiple levels of detail. LM.txt files have a &amp;quot;.LM.txt&amp;quot; name extension, however when a LM.txt file is specified within a [[config.txt file]] or similar, the &amp;quot;.txt&amp;quot; must be omitted, leaving the &amp;quot;.LM&amp;quot; extension.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
[[Level of Detail]] (or &#039;LOD&#039;) is a technique used for asset mesh reduction. Trainz uses a different mesh dependant on the viewing distance. For objects further away a simpler, less detailed mesh is used. [[LM.txt file]]s provide one LOD technique, which is commonly used for [[KIND Traincar]] and [[KIND Bogey]] assets. For other asset types, other [[Level of Detail|LOD techniques]] are generally more suitable.&lt;br /&gt;
&lt;br /&gt;
In the example of the PB15 loco below there are four meshes, the closest being a highly detailed [[normal map]]ped model of the loco body, and the farthest being a simple mesh of the shape with the texture and, in this case, with very simple low poly representations of the bogeys. &#039;&#039;(more on this below)&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
Do not use separate textures for each LOD mesh; the same texture can be used for all because textures have their own built-in LOD reduction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Assets with LOD reduction must be made with &#039;indexed meshes&#039; or [[IM files]] only (exported from 3DSMax, Blender, etc.)&lt;br /&gt;
&lt;br /&gt;
Trainz locates these .im files through paths specified in the .lm.txt (LOD mesh file) which is in turn referenced via the asset&#039;s config.txt file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following images show the four meshes used for the PB15 loco.&lt;br /&gt;
&lt;br /&gt;
Note: Only Figure 4, the hi-res version, is normal-mapped.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figure 1&#039;&#039;&#039;&lt;br /&gt;
[[Image:Lod1_PB15.jpg]]&lt;br /&gt;
PB_15_body_lowest.im (600 polys) &lt;br /&gt;
bogey attachments flagged &#039;:Cull&#039;,&lt;br /&gt;
bogeys represented in mesh &#039;&#039;(see below)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figure 2&#039;&#039;&#039;&lt;br /&gt;
[[Image:Lod2_PB15.jpg]]&lt;br /&gt;
PB_15_body_low.im (1947 polys)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figure 3&#039;&#039;&#039;&lt;br /&gt;
[[Image:Lod3_PB15.jpg]]				&lt;br /&gt;
PB_15_body_med.im (5066 polys)	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Figure 4&#039;&#039;&#039;&lt;br /&gt;
[[Image:Lod4_PB15.jpg]]&lt;br /&gt;
PB_15_body.im&lt;br /&gt;
(10578 polys, and normal-mapped)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Format==&lt;br /&gt;
The user-editable *.lm.txt files are ASCII text formatted . Please note that this format is not the same (despite some similarities) as other text-based formats used by Trainz. Please be aware of the [[filename character restrictions]] when naming [[LM.txt file]]s and [[IM files]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use only non-formated text to create the .lm.txt file i.e. Use a simple text editor such as notepad.&lt;br /&gt;
&lt;br /&gt;
The use of upper and lower case letters, and semi colons in the file data is important, please follow the example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==An LM.TXT Example==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LOD Mesh File (PB_15_body.lm.txt) Auran&#039;s steam loco:&#039;&#039;&#039;&lt;br /&gt;
 version 1.0&amp;lt;br&amp;gt;&lt;br /&gt;
 offset = 0.01;&lt;br /&gt;
 calcpoint = center;&lt;br /&gt;
 multiplier = 1.0;                &lt;br /&gt;
 animationCutOff = 0.00;&lt;br /&gt;
 renderCutOff = 0.00;&lt;br /&gt;
 attachmentCutOff = 0.06;&lt;br /&gt;
 mesh(&amp;quot;0.07&amp;quot;)                      &lt;br /&gt;
 {&lt;br /&gt;
   name=&amp;quot;PB_15_body_lowest.im&amp;quot;;    &lt;br /&gt;
 }&lt;br /&gt;
 mesh(&amp;quot;0.30&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
   name=&amp;quot;PB_15_body_low.im&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 mesh(&amp;quot;0.52&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
   name=&amp;quot;PB_15_body_med.im&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 mesh(&amp;quot;1.0&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
   name=&amp;quot;PB_15_body.im&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Breakdown of LOD Mesh File==&lt;br /&gt;
&lt;br /&gt;
 version 1.0              &#039;&#039;must be included but for internal use only;leave value as 1.0&#039;&#039;&lt;br /&gt;
                              &lt;br /&gt;
 offset = 0.01;           &#039;&#039;The offset that prevents &amp;quot;popping&amp;quot; between two levels of of detail repeatedly&#039;&#039;&lt;br /&gt;
          &lt;br /&gt;
 calcPoint = center;      &#039;&#039;The position where the level of detail is calculated from (center,near,far)&#039;&#039;&lt;br /&gt;
           &lt;br /&gt;
 multiplier = 1.0;        &#039;&#039;A level of detail multiplier (leave as 1.0)&#039;&#039;&lt;br /&gt;
              &lt;br /&gt;
 animationCutOff = 0.0;   &#039;&#039;The level of detail where animation stops&#039;&#039;&lt;br /&gt;
 &#039;&#039;                         (to screen width) 1.00 = full width,&#039;&#039;&lt;br /&gt;
 &#039;&#039;                         0.5 = half screen, 0.00 = never stop animation&#039;&#039;&lt;br /&gt;
        &lt;br /&gt;
 renderCutOff = 0.0;      &#039;&#039;The level (to screen width) where rendering stops (no longer visible)&#039;&#039;&lt;br /&gt;
        &lt;br /&gt;
 attachmentCutOff = 0.06; &#039;&#039;The level where Cull flagged attachments are dropped (to screen width) *See note below&#039;&#039;&lt;br /&gt;
           &lt;br /&gt;
 &#039;&#039;                         &#039;&#039;&#039; Note:&#039;&#039;&#039; Meshes referenced within a LOD file must be in ascending width order.&#039;&#039;&lt;br /&gt;
         &lt;br /&gt;
 mesh(&amp;quot;0.07&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
 name=&amp;quot;PB_15_body_lowest.im&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &#039;&#039;                         When the mesh is displayed at 0.07 of the screen, the mesh &amp;quot;PB_15_body_lowest.im&amp;quot; is displayed.&#039;&#039; &lt;br /&gt;
 &#039;&#039;                         Note the figure is just bigger than the attachment cut off figure above.  This ensures the &#039;&#039;&lt;br /&gt;
 &#039;&#039;                         modeled bogeys in this LOD mesh are rendered before the actual bogeys are culled.&#039;&#039;&lt;br /&gt;
      &lt;br /&gt;
 mesh(&amp;quot;0.30&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
 name =&amp;quot;PB_15_body_low.im&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &#039;&#039;                         mesh &amp;quot;PB_15_body_low.im&amp;quot; is displayed when the mesh is at 0.3 of screen width.&#039;&#039;&lt;br /&gt;
   &lt;br /&gt;
 mesh(&amp;quot;0.52&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
 name = &amp;quot;PB_15_body_med.im&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
    &lt;br /&gt;
 mesh(&amp;quot;1.0&amp;quot;)&lt;br /&gt;
 {&lt;br /&gt;
 name = &amp;quot;PB_15_body.im&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
       &lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;attachmentCutOff = 0.1;&#039;&#039;&#039;  Attachment cutoff specifies the level where attachments with the flag &amp;quot;:Cull&amp;quot; are dropped. ie To stop drawing the bogeys of the trains at a specific level of detail, append &amp;quot;&#039;&#039;&#039;:Cull&#039;&#039;&#039;&amp;quot; to the bogey attachment point name in 3DSMax,  or Blender. (ie &amp;quot;a.bog0:Cull&amp;quot; ).  This can apply to any attachment eg passenger or driver attachments.&lt;br /&gt;
&lt;br /&gt;
Where the above applies (bogeys culled) the body mesh will need a low poly representation of the bogeys, as in &#039;&#039;&#039;Figure 1&#039;&#039;&#039; above&lt;br /&gt;
&lt;br /&gt;
Attachment culling cannot be made to work by modifying the config.txt file; you must modify the model&#039;s attachment names. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
As of build 4.1 an alternative to the use of the &amp;quot;:Cull&amp;quot; appendage to the attachment point name is to simply omit the attachment point from the lower-detail mesh. If the attachment point does not exist in the mesh then no attempt is made to render an attachment when the mesh is rendered. It is possible to use the cull method and the missing attachment point method in the same asset, which might be relevant when creating a new low-detail mesh for an existing asset.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The [[LM.txt file]]s, .im meshes, and textures must be located within the same directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The LOD Mesh file is referenced from the config.txt file as follows.&lt;br /&gt;
&lt;br /&gt;
;Config.txt file extract&lt;br /&gt;
&lt;br /&gt;
 kuid &amp;lt;KUID:-3:10024&amp;gt;&lt;br /&gt;
 kuid-table&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
 obsolete-table&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
 mesh-table&lt;br /&gt;
 {&lt;br /&gt;
 default&lt;br /&gt;
 {&lt;br /&gt;
   mesh &amp;quot;PB_15_body/PB_15_body.lm&amp;quot;          &amp;lt;---- &#039;&#039;Note the &amp;quot;lm&amp;quot; file extension here (lowercase of &amp;quot;LM&amp;quot;)&#039;&#039;&lt;br /&gt;
   auto-create 1&lt;br /&gt;
 }&lt;br /&gt;
 shadow&lt;br /&gt;
 {&lt;br /&gt;
   mesh &amp;quot;PB_15_shadow/PB_15_shadow.im&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 reverser&lt;br /&gt;
 {&lt;br /&gt;
   mesh &amp;quot;PB_15_body/reverser/reverser.im&amp;quot;&lt;br /&gt;
   anim &amp;quot;PB_15_body/reverser/reverser.kin&amp;quot;&lt;br /&gt;
   auto-create 1&lt;br /&gt;
   att a.bog2&lt;br /&gt;
   att-parent default&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==.txt file extension==&lt;br /&gt;
[[LM.txt file]]s have a &amp;quot;.LM.txt&amp;quot; name extension, however when a model file is specified within a [[config.txt file]] or similar, the &amp;quot;.txt&amp;quot; must be omitted, leaving the &amp;quot;.LM&amp;quot; extension. For example, a model file named &#039;&#039;box.LM.txt&#039;&#039; is specified in a [[KIND Traincar]] config file using the syntax &#039;&#039;mesh &amp;quot;box.lm&amp;quot;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
[[Category:File formats]]&lt;br /&gt;
[[Category:Modeling]]&lt;/div&gt;</summary>
		<author><name>Sailordan</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo/Reskin_an_Asset_using_an_alias&amp;diff=8826</id>
		<title>HowTo/Reskin an Asset using an alias</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo/Reskin_an_Asset_using_an_alias&amp;diff=8826"/>
		<updated>2016-05-07T23:09:15Z</updated>

		<summary type="html">&lt;p&gt;Sailordan: /* How To Reskin an Asset using an alias - A step-by-step guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The usual method of reskinning an asset is to copy the whole asset and change the images.  This process is relatively simple, but creates issues of copyright, so that if the reskinned asset is to be distributed to the community the permission of the creator of the original asset is required. In some cases it is not possible to obtain permission, or perhaps it is not clear that the original content creator has the right to approve distribution.   In these cases it is possible to reskin an asset without copying it first by creating a new asset but referring to the mesh in the original asset using the alias facility.&lt;br /&gt;
&lt;br /&gt;
Note that this method has some drawbacks:&lt;br /&gt;
&lt;br /&gt;
1. The procedure for using the asset in game is not as efficient - it requires changing the mesh textures after the mesh is loaded and processed.&lt;br /&gt;
&lt;br /&gt;
2. The original asset becomes a dependency of the reskin - anyone using the reskin must have both the reskin and the original asset installed on their system.&lt;br /&gt;
&lt;br /&gt;
3. Udates to the original asset might affect the reskin.&lt;br /&gt;
&lt;br /&gt;
Despite these issues, reskinning using an alias has been used for a large number of assets.&lt;br /&gt;
&lt;br /&gt;
This Howto describes the procedure for reskinning an asset using the aliasing feature as of build 3.5.&lt;br /&gt;
&lt;br /&gt;
== How To Reskin an Asset using an alias - A step-by-step guide ==&lt;br /&gt;
&lt;br /&gt;
From build 3.5 the procedure for reskinning an asset using an alias has changed.   &#039;Alias&#039; is no longer available as a top-level tag in config.sys. Instead, the aliasing is accomplished through a process that involves nominating an aliased mesh (not just the asset) and then specifying texture replacement rules for each aliased mesh.  Scripting is then used to do the texture replacement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Select the asset to use as the source for the reskinning.   This example is the simplest possible case - one texture, no attachments and no existing scripting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Config.txt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  kuid                                    &amp;lt;kuid:12345:1000&amp;gt;&lt;br /&gt;
  username                                &amp;quot;Alias Sample - Original&amp;quot;&lt;br /&gt;
  kind                                    &amp;quot;scenery&amp;quot;&lt;br /&gt;
  trainz-build                            3.5&lt;br /&gt;
  mesh-table {&lt;br /&gt;
    default {&lt;br /&gt;
      mesh                                &amp;quot;alias_sample.im&amp;quot;&lt;br /&gt;
      auto-create                         1&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  category-class                          &amp;quot;BS&amp;quot;&lt;br /&gt;
  category-era                            &amp;quot;2000s&amp;quot;&lt;br /&gt;
  category-region                         &amp;quot;00&amp;quot;&lt;br /&gt;
  thumbnails {&lt;br /&gt;
    0 { &lt;br /&gt;
      image                               &amp;quot;$screenshot$.jpg&amp;quot;&lt;br /&gt;
      width                               240&lt;br /&gt;
      height                              180&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  kuid-table { }&lt;br /&gt;
&#039;&#039;&#039;Files:&#039;&#039;&#039;&lt;br /&gt;
  $screenshot$.jpg&lt;br /&gt;
  alias_sample.im&lt;br /&gt;
  config.txt&lt;br /&gt;
  top.texture.txt&lt;br /&gt;
  top.tga&lt;br /&gt;
&lt;br /&gt;
Note that nothing in particular is required in the original asset to support the rekinning - all the reskin information is in the reskin asset. The important items to note from the original are the kuid, the mesh-table container name (&amp;quot;default&amp;quot;), the mesh name (&amp;quot;alias_sample&amp;quot;) and the image name (&amp;quot;top.texture&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Create the reskin version &lt;br /&gt;
&#039;&#039;&#039;config.txt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  kuid                                      &amp;lt;kuid:12345:1001&amp;gt;&lt;br /&gt;
  username                                  &amp;quot;Alias Sample - Reskinned&amp;quot;&lt;br /&gt;
  kind                                      &amp;quot;scenery&amp;quot;&lt;br /&gt;
  trainz-build                              3.5&lt;br /&gt;
  script                                    &amp;quot;reskin&amp;quot;&lt;br /&gt;
  class                                     &amp;quot;reskin&amp;quot;&lt;br /&gt;
  mesh-table {&lt;br /&gt;
    default {&lt;br /&gt;
      mesh-asset                            &amp;lt;kuid:12345:1000&amp;gt;&lt;br /&gt;
      mesh                                  &amp;quot;alias_sample.im&amp;quot;&lt;br /&gt;
      effects {&lt;br /&gt;
        main {&lt;br /&gt;
          kind                              &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
          texture                           &amp;quot;top.texture&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      auto-create                           1&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  category-class                            &amp;quot;BS&amp;quot;&lt;br /&gt;
  category-era                              &amp;quot;2000s&amp;quot;&lt;br /&gt;
  category-region                           &amp;quot;00&amp;quot;&lt;br /&gt;
  thumbnails {&lt;br /&gt;
    0 {&lt;br /&gt;
      image                                 &amp;quot;$screenshot$.jpg&amp;quot;&lt;br /&gt;
      width                                 240&lt;br /&gt;
      height                                180&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  kuid-table {&lt;br /&gt;
    0                                       &amp;lt;kuid:12345:1000&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Files:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  $screenshot$.jpg&lt;br /&gt;
  config.txt&lt;br /&gt;
  new.texture.txt&lt;br /&gt;
  new.tga&lt;br /&gt;
&lt;br /&gt;
&#039;new.texture.txt&#039; references &#039;new.tga&#039;, as for a typical texture file.  There is no &#039;.im&#039; file for the reskin asset.&lt;br /&gt;
The mesh-table container in the config file is where the texturing is defined.&lt;br /&gt;
  1	mesh-table {&lt;br /&gt;
  2	  default {&lt;br /&gt;
  3	    mesh-asset                            &amp;lt;kuid:12345:1000&amp;gt;&lt;br /&gt;
  4	    mesh                                  &amp;quot;alias_sample.im&amp;quot;&lt;br /&gt;
  5	    effects {&lt;br /&gt;
  6	      main {&lt;br /&gt;
  7	        kind                              &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
  8	        texture                           &amp;quot;top.texture&amp;quot;&lt;br /&gt;
  9	      }&lt;br /&gt;
  10	    }&lt;br /&gt;
  11	    auto-create                           1&lt;br /&gt;
  12	  }&lt;br /&gt;
2. The subcontainer name(s) should match the names used in the original.&lt;br /&gt;
&lt;br /&gt;
3. The mesh-asset is the KUID of the asset where the mesh to be reskinned is located.&lt;br /&gt;
&lt;br /&gt;
4. The mesh is the &#039;.im&#039; file from the original asset.&lt;br /&gt;
&lt;br /&gt;
5. The effects subcontainer is used to control the reskinning.&lt;br /&gt;
&lt;br /&gt;
6. The effect subcontainer name is an arbitrary name used by the script to identify the texture.&lt;br /&gt;
&lt;br /&gt;
7. The kind for the effect is always &amp;quot;texture-replacement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
8. The texture to be replaced is the texture used in the original asset.&lt;br /&gt;
&lt;br /&gt;
This arrangment sets out the details for the reskinning, but it does not actually do anything.  That happens in the script that needs to be attached to the reskin asset - in this case &amp;quot;reskin&amp;quot;.  From config:&lt;br /&gt;
  1	script                                    &amp;quot;reskin&amp;quot;&lt;br /&gt;
  2	class                                     &amp;quot;reskin&amp;quot;&lt;br /&gt;
1. This is the name of the script as it exists in the reskin asset. The name is arbitrary, but the script tag value must match the file name exactly. The file must have a .gs extension.&lt;br /&gt;
 &lt;br /&gt;
2. This is the script class, as defined within the script.  This name is arbitrary, but the tag must match the name used in the script &#039;class&#039; statement.  See script details below.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;reskin.gs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;include &amp;quot;MapObject.gs&amp;quot;&lt;br /&gt;
  // Script:	reskin&lt;br /&gt;
  // Function:	reskin aliased asset&lt;br /&gt;
  // Author:	&lt;br /&gt;
  // Revision:	0.1	July 2015&lt;br /&gt;
  //&lt;br /&gt;
  // Comments&lt;br /&gt;
  //  For assets at build 3.5 and higher, &#039;alias&#039; is no longer available as a tag.&lt;br /&gt;
  //  It is replaced by the &#039;mesh-asset&#039; tag in the mesh table.  However, for&lt;br /&gt;
  //  reskining using an alias, the mesh-asset tag must be supported by a texture replacement &lt;br /&gt;
  //  script so that the replacement texture is applied to the aliased mesh.&lt;br /&gt;
  class reskin isclass MapObject  {&lt;br /&gt;
	public void Init(void)&lt;br /&gt;
	//The Init function is called when the object is created&lt;br /&gt;
	{&lt;br /&gt;
	// call the parent&lt;br /&gt;
               inherited();&lt;br /&gt;
	//  ! This will change the texture name that have to be replaced on the effects mesh.&lt;br /&gt;
	//  WARNING: This will typically cause Trainz to freeze for a short period when called&lt;br /&gt;
	//  and/or when the mesh in question first becomes visible.&lt;br /&gt;
	//&lt;br /&gt;
	// Param:  effectName	the name of the effect that we want to apply the texture to&lt;br /&gt;
	// Param:  textureName	the name of the texture that we want to apply&lt;br /&gt;
	//                       &lt;br /&gt;
	//   Sets the specified texture onto the named effect.&lt;br /&gt;
              SetFXTextureReplacementTexture(&amp;quot;main&amp;quot;, &amp;quot;new.texture&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
  };&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MapObject.gs must be included to enable access to the mesh object that is to be reskinned.&lt;br /&gt;
&lt;br /&gt;
Any line starting with // is a comment and can be changed or deleted as required.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;class reskin isclass MapObject&amp;quot; defines the class for the script (this must match the class tag in config) and defines the object to be skinned as a MapObject.&lt;br /&gt;
&lt;br /&gt;
The init procedure and the inherited method create the object to be reskinned.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;SetFXTextureReplacementTexture&amp;quot; function does the replacing.  The texture-replacement container name (&amp;quot;main&amp;quot; in this example) must match the effect name from the config, and the texture name (&amp;quot;new.texture&amp;quot;) must match the texture file name (without the .txt extension).&lt;br /&gt;
&lt;br /&gt;
If there are multiple textures to be reskinned for this mesh, repeat the effects subcontainer using appropriate names, and repeat the SetFXTextureReplacementTexture statements with the required effects subcontainer name and the matching replacement texture.&lt;br /&gt;
&lt;br /&gt;
If there are multiple meshes to be reskinned for the asset, repeat the mesh-table subcontainer using the correct name, insert the required effects containers with unique subcontainer names, and repeat the SetFXTextureReplacementTexture statements with those additional names.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
1. If the mesh and texture in the original asset are located in a subfolder, the full path must be specified for the mesh, but the textures will be located relative to that mesh. For instance, for a locomotive it is common to put the main mesh and textures in a &#039;body&#039; folder - the mesh requires the folder name in the path, but the textures do not.  Also, there might be more than one texture.&lt;br /&gt;
      mesh-asset                        &amp;lt;kuid:12345:1000&amp;gt;&lt;br /&gt;
      mesh                              &amp;quot;body/alias_sample.im&amp;quot;&lt;br /&gt;
      effects {&lt;br /&gt;
      reskin1      {&lt;br /&gt;
        kind                            &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
        texture                         &amp;quot;map1.texture&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
      reskin2      {&lt;br /&gt;
        kind                            &amp;quot;texture-replacement&amp;quot;&lt;br /&gt;
        texture                         &amp;quot;map2.texture&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
The texture replacement line in the script will be repeated accordingly.&lt;br /&gt;
&lt;br /&gt;
2. The example above is a simple scenery object.  For other types of assets it might be necessary to use the script class specific to that asset.  In that case, the MeshObject script must be included in order to provide access to the replacement function.  For instance, an engine is type Locomotive, so the script file include statements are &lt;br /&gt;
  include &amp;quot;Locomotive.gs&amp;quot;&lt;br /&gt;
  include &amp;quot;MeshObject.gs&amp;quot;&lt;br /&gt;
and the class definition is&lt;br /&gt;
  alias_reskin isclass Locomotive&lt;br /&gt;
Similar considerations may apply to other kinds of assets.&lt;br /&gt;
&lt;br /&gt;
3. Numbering of locomotives.  If the original asset supports running numbers then the skin asset can also be set up to support it.  The skin asset does not require the digit_xx texture files that were previously required (when the &#039;alias&#039; tag was used) in order to suppress error message about missing textures. The number images that are used are from the skin asset, not the original, but obviously they must match for size.  Note that if the reskinning has overridden the running number feature with the running numbers embedded in the texture, then the running number for the loco should be left blank.&lt;br /&gt;
&lt;br /&gt;
4. If upgrading an asset that previously used the &#039;alias&#039; tag, those textures and their image file that are not changed from the original should be removed from the skin asset and should not be included in the texture replacement.&lt;br /&gt;
&lt;br /&gt;
== TBD ==&lt;br /&gt;
&lt;br /&gt;
Reskinning using an alias and scripted assets.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
&lt;br /&gt;
* [[HowToGuides]]&lt;br /&gt;
&lt;br /&gt;
[[Category:How-to guides]]&lt;/div&gt;</summary>
		<author><name>Sailordan</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=TrainzUtil&amp;diff=6907</id>
		<title>TrainzUtil</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=TrainzUtil&amp;diff=6907"/>
		<updated>2014-03-29T22:12:12Z</updated>

		<summary type="html">&lt;p&gt;Sailordan: Status report errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TrainzUtil]] is a command line [[Content Management]] tool.&lt;br /&gt;
&lt;br /&gt;
=Functionality=&lt;br /&gt;
&lt;br /&gt;
[[TrainzUtil]] is capable of performing some content management tasks including:&lt;br /&gt;
* Installation, removal and editing of custom content.&lt;br /&gt;
* Limited searching of local content.&lt;br /&gt;
* Packaging local content for distribution.&lt;br /&gt;
[[TrainzUtil]] provides a small subset of the available content management functions, for most operations [[Content Manager]] should be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
[[TrainzUtil]] is a command line utility and cannot be started from the [[Trainz Launcher]]. To start [[TrainzUtil]] open a command prompt and navigate to your Trainz &amp;quot;bin&amp;quot; directory (e.g. C:\Program Files\Auran\TS2010\Bin). You can then launch [[TrainzUtil]] with command arguments as below.&lt;br /&gt;
&lt;br /&gt;
* TrainzUtil help&lt;br /&gt;
:&#039;&#039;Display TrainzUtil help text.&#039;&#039;&lt;br /&gt;
* TrainzUtil version&lt;br /&gt;
:&#039;&#039;Display the TrainzUtil build version.&#039;&#039;&lt;br /&gt;
* TrainzUtil echo &amp;lt;TEXT&amp;gt;&lt;br /&gt;
:&#039;&#039;Echo the supplied text.&#039;&#039;&lt;br /&gt;
* TrainzUtil setlanguage &amp;lt;langCode&amp;gt;&lt;br /&gt;
:&#039;&#039;Set the Trainz language to the language code supplied (eg. US, FR, RU, etc).&#039;&#039;&lt;br /&gt;
* TrainzUtil installCDP &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Install an asset from a CDP file.&#039;&#039;&lt;br /&gt;
* TrainzUtil installfrompath &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Install an asset from a directory.&#039;&#039;&lt;br /&gt;
* TrainzUtil installfromdls &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Install an asset from the Auran Download Station.&#039;&#039;&lt;br /&gt;
* TrainzUtil edit &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Open an asset for editing.&#039;&#039;&lt;br /&gt;
* TrainzUtil printconfig &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Print the contents of an assets config file to the console.&#039;&#039;&lt;br /&gt;
* TrainzUtil backupkeywords&lt;br /&gt;
:&#039;&#039;Backup all the keywords of your assets.&#039;&#039;&lt;br /&gt;
* TrainzUtil importkeywords&lt;br /&gt;
:&#039;&#039;Import keywords into the Trainz Asset Database.&#039;&#039;&lt;br /&gt;
* TrainzUtil commit &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Commit any edits that have been made to the specified asset.&#039;&#039;&lt;br /&gt;
* TrainzUtil revert &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Discard any edits that have been made to the specified asset.&#039;&#039;&lt;br /&gt;
* TrainzUtil delete &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Delete the specified asset from disk.&#039;&#039;&lt;br /&gt;
* TrainzUtil generateKUID&lt;br /&gt;
:&#039;&#039;Generate a new KUID number in the local user&#039;s KUID range.&#039;&#039;&lt;br /&gt;
* TrainzUtil createCDP &amp;lt;OUTPUT PATH&amp;gt; &amp;lt;KUID1&amp;gt; &amp;lt;KUID2&amp;gt; ... &amp;lt;KUIDX&amp;gt;&lt;br /&gt;
:&#039;&#039;Export assets to a CDP file.&#039;&#039;&lt;br /&gt;
* TrainzUtil repairdatabase&lt;br /&gt;
:&#039;&#039;Repairs the Trainz Asset Database.&#039;&#039;&lt;br /&gt;
* TrainzUtil authors&lt;br /&gt;
:&#039;&#039;List of all the authorIDs that have content in the game.&#039;&#039;&lt;br /&gt;
* TrainzUtil searchbycategory [-a] &amp;lt;CatgoryList&amp;gt;&lt;br /&gt;
:&#039;&#039;List all the local assets with a category set in this format, &amp;quot;CMP;MESH|BD;-ACTV|VE|SCEN&amp;quot;. Use the -a parameter if you want to search the [[Download Station]] as well.&#039;&#039;&lt;br /&gt;
* TrainzUtil importconsists &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Import an old style Surveyor consist list, creating consist assets for any unknown entries.&#039;&#039;&lt;br /&gt;
* TrainzUtil status &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Print the status of the specified asset.&#039;&#039;&lt;br /&gt;
:&#039;&#039;This will output + &amp;lt;KUID&amp;gt; : &amp;lt;Flags&amp;gt; : &amp;lt;category&amp;gt; : &amp;lt;username&amp;gt; where flags are a series of letters with case indicating boolean state. (capital letters are flagged true and lowercase are flagged false.)&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ee - The asset is open for edit.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ii - The asset is installed locally.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Aa - The asset is archived.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Dd - The asset is on the download station.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ll - The asset is locally modified.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Mm - The asset has missing dependencies.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ff - The asset is faulty.&#039;&#039;&lt;br /&gt;
* TrainzUtil validate &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Perform validation and display any errors or warnings relating to this asset.&#039;&#039;&lt;br /&gt;
* TrainzUtil compile &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Compile a script file.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-d&amp;gt; Display gamescript documentation.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-s&amp;gt; Silent mode.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-bPATH&amp;gt; Specify a file path for the compile log.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-pPATH&amp;gt; Specify the output directory.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-oPATH&amp;gt; Specify the output library filename.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;PATH&amp;gt; Input source file.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-iPATH&amp;gt; Additional include path.&#039;&#039;&lt;br /&gt;
* TrainzUtil encrypt &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Encrypt a script file (gs --&amp;gt; gse).&#039;&#039;&lt;br /&gt;
* TrainzUtil listbuilds &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Print the list of installed build numbers to a file.&#039;&#039;&lt;br /&gt;
* TrainzUtil @&amp;lt;file.txt&amp;gt;&lt;br /&gt;
:&#039;&#039;Batch-execute a series of commands from the specified text file (every argument must be between double quotes). Every line of that text file will be processed like a separate call to TrainzUtil&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
Due to the Windows command prompt treating the &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; characters as pipe operators, be sure to include quotes around any KUID parameters, or omit the &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; characters.  For example:&lt;br /&gt;
&lt;br /&gt;
    trainzutil delete kuid:87854:982511580&lt;br /&gt;
&lt;br /&gt;
    trainzutil delete &amp;quot;&amp;lt;kuid:87854:982511580&amp;gt;&amp;quot;&lt;/div&gt;</summary>
		<author><name>Sailordan</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=TrainzUtil&amp;diff=6906</id>
		<title>TrainzUtil</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=TrainzUtil&amp;diff=6906"/>
		<updated>2014-03-29T22:06:07Z</updated>

		<summary type="html">&lt;p&gt;Sailordan: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TrainzUtil]] is a command line [[Content Management]] tool.&lt;br /&gt;
&lt;br /&gt;
=Functionality=&lt;br /&gt;
&lt;br /&gt;
[[TrainzUtil]] is capable of performing some content management tasks including:&lt;br /&gt;
* Installation, removal and editing of custom content.&lt;br /&gt;
* Limited searching of local content.&lt;br /&gt;
* Packaging local content for distribution.&lt;br /&gt;
[[TrainzUtil]] provides a small subset of the available content management functions, for most operations [[Content Manager]] should be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
[[TrainzUtil]] is a command line utility and cannot be started from the [[Trainz Launcher]]. To start [[TrainzUtil]] open a command prompt and navigate to your Trainz &amp;quot;bin&amp;quot; directory (e.g. C:\Program Files\Auran\TS2010\Bin). You can then launch [[TrainzUtil]] with command arguments as below.&lt;br /&gt;
&lt;br /&gt;
* TrainzUtil help&lt;br /&gt;
:&#039;&#039;Display TrainzUtil help text.&#039;&#039;&lt;br /&gt;
* TrainzUtil version&lt;br /&gt;
:&#039;&#039;Display the TrainzUtil build version.&#039;&#039;&lt;br /&gt;
* TrainzUtil echo &amp;lt;TEXT&amp;gt;&lt;br /&gt;
:&#039;&#039;Echo the supplied text.&#039;&#039;&lt;br /&gt;
* TrainzUtil setlanguage &amp;lt;langCode&amp;gt;&lt;br /&gt;
:&#039;&#039;Set the Trainz language to the language code supplied (eg. US, FR, RU, etc).&#039;&#039;&lt;br /&gt;
* TrainzUtil installCDP &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Install an asset from a CDP file.&#039;&#039;&lt;br /&gt;
* TrainzUtil installfrompath &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Install an asset from a directory.&#039;&#039;&lt;br /&gt;
* TrainzUtil installfromdls &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Install an asset from the Auran Download Station.&#039;&#039;&lt;br /&gt;
* TrainzUtil edit &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Open an asset for editing.&#039;&#039;&lt;br /&gt;
* TrainzUtil printconfig &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Print the contents of an assets config file to the console.&#039;&#039;&lt;br /&gt;
* TrainzUtil backupkeywords&lt;br /&gt;
:&#039;&#039;Backup all the keywords of your assets.&#039;&#039;&lt;br /&gt;
* TrainzUtil importkeywords&lt;br /&gt;
:&#039;&#039;Import keywords into the Trainz Asset Database.&#039;&#039;&lt;br /&gt;
* TrainzUtil commit &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Commit any edits that have been made to the specified asset.&#039;&#039;&lt;br /&gt;
* TrainzUtil revert &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Discard any edits that have been made to the specified asset.&#039;&#039;&lt;br /&gt;
* TrainzUtil delete &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Delete the specified asset from disk.&#039;&#039;&lt;br /&gt;
* TrainzUtil generateKUID&lt;br /&gt;
:&#039;&#039;Generate a new KUID number in the local user&#039;s KUID range.&#039;&#039;&lt;br /&gt;
* TrainzUtil createCDP &amp;lt;OUTPUT PATH&amp;gt; &amp;lt;KUID1&amp;gt; &amp;lt;KUID2&amp;gt; ... &amp;lt;KUIDX&amp;gt;&lt;br /&gt;
:&#039;&#039;Export assets to a CDP file.&#039;&#039;&lt;br /&gt;
* TrainzUtil repairdatabase&lt;br /&gt;
:&#039;&#039;Repairs the Trainz Asset Database.&#039;&#039;&lt;br /&gt;
* TrainzUtil authors&lt;br /&gt;
:&#039;&#039;List of all the authorIDs that have content in the game.&#039;&#039;&lt;br /&gt;
* TrainzUtil searchbycategory [-a] &amp;lt;CatgoryList&amp;gt;&lt;br /&gt;
:&#039;&#039;List all the local assets with a category set in this format, &amp;quot;CMP;MESH|BD;-ACTV|VE|SCEN&amp;quot;. Use the -a parameter if you want to search the [[Download Station]] as well.&#039;&#039;&lt;br /&gt;
* TrainzUtil importconsists &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Import an old style Surveyor consist list, creating consist assets for any unknown entries.&#039;&#039;&lt;br /&gt;
* TrainzUtil status &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Print the status of the specified asset.&#039;&#039;&lt;br /&gt;
:&#039;&#039;This will output &amp;lt;KUID&amp;gt; : &amp;lt;Flags&amp;gt; : &amp;lt;category&amp;gt; : &amp;lt;username&amp;gt; where flags are a series of letters with case indicating boolean state. (capital letters are flagged true and lowercase are flagged false.)&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ee - The asset is open for edit.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ii - The asset is installed locally.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Aa - The asset is archived.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Dd - The asset is on the download station.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ll - The asset is locally modified.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Mm - The asset has missing dependencies.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;Ee - The asset has errors.&#039;&#039;&lt;br /&gt;
* TrainzUtil validate &amp;lt;KUID&amp;gt;&lt;br /&gt;
:&#039;&#039;Perform validation and display any errors or warnings relating to this asset.&#039;&#039;&lt;br /&gt;
* TrainzUtil compile &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Compile a script file.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-d&amp;gt; Display gamescript documentation.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-s&amp;gt; Silent mode.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-bPATH&amp;gt; Specify a file path for the compile log.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-pPATH&amp;gt; Specify the output directory.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-oPATH&amp;gt; Specify the output library filename.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;PATH&amp;gt; Input source file.&#039;&#039;&lt;br /&gt;
:*&#039;&#039;&amp;lt;-iPATH&amp;gt; Additional include path.&#039;&#039;&lt;br /&gt;
* TrainzUtil encrypt &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Encrypt a script file (gs --&amp;gt; gse).&#039;&#039;&lt;br /&gt;
* TrainzUtil listbuilds &amp;lt;PATH&amp;gt;&lt;br /&gt;
:&#039;&#039;Print the list of installed build numbers to a file.&#039;&#039;&lt;br /&gt;
* TrainzUtil @&amp;lt;file.txt&amp;gt;&lt;br /&gt;
:&#039;&#039;Batch-execute a series of commands from the specified text file (every argument must be between double quotes). Every line of that text file will be processed like a separate call to TrainzUtil&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
Due to the Windows command prompt treating the &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; characters as pipe operators, be sure to include quotes around any KUID parameters, or omit the &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; characters.  For example:&lt;br /&gt;
&lt;br /&gt;
    trainzutil delete kuid:87854:982511580&lt;br /&gt;
&lt;br /&gt;
    trainzutil delete &amp;quot;&amp;lt;kuid:87854:982511580&amp;gt;&amp;quot;&lt;/div&gt;</summary>
		<author><name>Sailordan</name></author>
	</entry>
</feed>