<?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=Trainlover16</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=Trainlover16"/>
	<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/wiki/Special:Contributions/Trainlover16"/>
	<updated>2026-11-05T08:59:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=HowTo&amp;diff=37036</id>
		<title>HowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=HowTo&amp;diff=37036"/>
		<updated>2023-04-22T09:51:06Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Documentation Suggestions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists available &amp;quot;How To&amp;quot; Guides which describe how to achieve certain tasks in Trainz.  &amp;lt;b&amp;gt;HowTo&amp;lt;/b&amp;gt; pages provide much detail on specific actions, whereas &amp;lt;b&amp;gt;Help&amp;lt;/b&amp;gt; pages are intended to respond to in-game needs for help or as quick guides to specific actions. Help pages specifically for &#039;&#039;&#039;Trainz Railroad Simulator 2019&#039;&#039;&#039; or &#039;&#039;&#039;TRS19&#039;&#039;&#039; can be found at &#039;&#039;&#039;[http://online.ts2009.com/mediaWiki/index.php/Category:TRS19 Help:TRS19]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users are encouraged to add their own guides to this page in a similar fashion, or expand on existing guides. Please keep in mind that this site is dedicated to the current version of Trainz and that techniques used should relate to this version. Editors note: all pages here should fit the pattern &amp;quot;How to X&amp;quot;, as in &amp;quot;How to place signals&amp;quot;. Pages and topics which cannot be phrased in this manner do not belong on this page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Trainz Channel==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:twitch.png|128px|link=https://www.twitch.tv/trainz_simulator|TheTrainzChannel on Twitch]]&lt;br /&gt;
|Many [[Tutorial Videos]] have been recorded for Trainz users to watch and learn from.&lt;br /&gt;
&lt;br /&gt;
To keep up to date with all streams and videos visit [https://www.twitch.tv/trainz_simulator TheTrainzChannel] on Twitch.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Content Creation: Routes==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[/Add Bumpy Track/]]&lt;br /&gt;
* [[/Add thumbnail and preview images to your route/|Add Thumbnail and Preview images to your route]]&lt;br /&gt;
* [[/Configure an iPortal/]]&lt;br /&gt;
* [[/Configure An Interlocking Tower/]]&lt;br /&gt;
* [[How to Create a Picklist|Create a PickList]]&lt;br /&gt;
* [[How to Create a Region Asset|Create a Region Asset]]&lt;br /&gt;
* [[/Create_your_first_Route/]]&lt;br /&gt;
* [[/Create a Route in 10 Minutes/]]&lt;br /&gt;
* [[/Make a Track Cutting/]] (Undercut)&lt;br /&gt;
* [[How to Make a Screen Shot|Make a Screen Shot]]&lt;br /&gt;
* [[How_To_Make_Scenery|Make Better Scenery]]&lt;br /&gt;
* [[How to Merge Routes|Merge Routes]]&lt;br /&gt;
* [[How to Place and Use a Camera|Place Cameras along a Route]]&lt;br /&gt;
* [[/Place Signals/]]&lt;br /&gt;
* [[/Build a Bridge|Place a Bridge in your Route]]&lt;br /&gt;
* [[/Build a Tunnel|Place a Tunnel in your Route]]&lt;br /&gt;
* [[/Build a Crossing|Place a Crossing in your Route]]&lt;br /&gt;
* [[/Build Catenary|Place Catenary in your Route]]&lt;br /&gt;
* [[Route and Session Basics]]&lt;br /&gt;
* [[How to Use Bulk Asset Update/Replace Tool|Use Bulk Asset Update/Replace Tool]]&lt;br /&gt;
* [[How to Use Layers|Use Layers]]&lt;br /&gt;
* [[Use Multiplayer Surveyor]]&lt;br /&gt;
* [[How to Use Portals|Use Portals]]&lt;br /&gt;
* [[How to Use Procedural Track|Use Procedural Track]]&lt;br /&gt;
* [[How_to_Use_the_UDS_Interface|Use the UDS (Unified Driver Surveyor) Interface]]&lt;br /&gt;
* [[How_to_Use_S20_Palettes|Use the Surveyor 2.0 Palettes]]&lt;br /&gt;
* [[How_to_Use_S20_Tools|Use the Surveyor 2.0 Tools]]&lt;br /&gt;
* [[/Use Superelevation/]]&lt;br /&gt;
* [[/Use Trig Stations/]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Content Creation: Sessions==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[How to Use Message Popup Rule|Adding Message Popups]]&lt;br /&gt;
* [[How to Use Message Popup Rule (Applications)|Adding Message Popups - Sample Applications]]&lt;br /&gt;
* [[How to Use Navigation Point Rules|Adding Navigation Points]]&lt;br /&gt;
* [[How to Use Navigation Point Rules (Applications)|Adding Navigation Points - Sample Applications]]&lt;br /&gt;
* [[How to Create a HTML Asset|Adding a Session Introduction Page and In Game Messages]]&lt;br /&gt;
* [[How to Use Driver Setup Rule|Configuring the Driver Setup Rule]]&lt;br /&gt;
* [[How to Use Environment Tools|Configuring the Environment Tools]]&lt;br /&gt;
* [[How to Control Junctions in Sessions|Controlling Junctions in Sessions]]&lt;br /&gt;
* [[How to Control Signals in Sessions|Controlling Signals in Sessions]]&lt;br /&gt;
* [[How to Create a Driver Character|Create a Driver Character]]&lt;br /&gt;
* [[How to Create a Message Popup Icon|Creating a Message Popup Icon]]&lt;br /&gt;
* [[Parent Rule List|List of Parent Rules]]&lt;br /&gt;
* [[How to Use Parent and Child Rules|Parent and Child Rules (Session Editor)]]&lt;br /&gt;
* [[Route and Session Basics]]&lt;br /&gt;
* [[How to Use Portals|Using Portals]]&lt;br /&gt;
* [[How to Use Session Editor|Using the Session Editor]]&lt;br /&gt;
* [[How_to_Use_the_UDS_Interface|Using the UDS (Unified Driver Surveyor) Interface]]&lt;br /&gt;
* [[How to Use Track Markers|Using Track Markers]]&lt;br /&gt;
* [[How to Use Track Direction Markers|Using Track Direction Markers]]&lt;br /&gt;
* [[How to Use Track Priority Markers|Using Track Priority Markers]]&lt;br /&gt;
* [[How to Use Track Triggers|Using Track Triggers]]&lt;br /&gt;
* [[How to Use Variables in Sessions (Examples)|Using Variables in Sessions - Sample Applications]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using &amp;quot;Manage Content&amp;quot; in TANE or newer==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[/Download an Asset from the Download Station/]]&lt;br /&gt;
* [[/View by thumbnail images/]]&lt;br /&gt;
* [[/Fix Errors and Warnings/]]&lt;br /&gt;
* [[/Finding Missing Dependencies/]]&lt;br /&gt;
* [[How to Backup a Picklist]]&lt;br /&gt;
* [[How to Create a Picklist]]&lt;br /&gt;
* [[How to Manage Backups]]&lt;br /&gt;
* [[How to Move a Picklist]]&lt;br /&gt;
* [[How to Rename a Picklist]]&lt;br /&gt;
* [[How to Perform Database Repairs]]&lt;br /&gt;
* [[Understand Content Manager Status Labels|How to Understand Content Manager Status Labels]]&lt;br /&gt;
* [[Using Content Manager to Update Assets]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also [[Help:Content_Manager]]&lt;br /&gt;
&lt;br /&gt;
==Content Creation: Assets==&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;General&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[/Make your first Trainz Asset/]]&lt;br /&gt;
* [[/Build a Car for Traffic (stand-alone version)/]]&lt;br /&gt;
* [[/Build a Car for Traffic (mesh library version)/]]&lt;br /&gt;
* [[/Build a cab interior/]]&lt;br /&gt;
* [[/Build a drivable car/]]&lt;br /&gt;
* [[/Build Passenger Enabled Assets/]]&lt;br /&gt;
* [[/Create a High Voltage Power Line Spline/]]&lt;br /&gt;
* [[/Create a Fence Spline Featuring LOD and Random Meshes/]]&lt;br /&gt;
* [[How to Create a Driver Character|Create a Driver Character]]&lt;br /&gt;
* [[How to Create a Message Popup Icon|Create a Message Popup Icon]]&lt;br /&gt;
* [[How to Create a Region Asset|Create a Region Asset]]&lt;br /&gt;
* [[/Create a Neon Font Effect with PhotoShop C4/]]&lt;br /&gt;
* [[/Build Procedural Track for T:ANE/]]&lt;br /&gt;
* [[/Update your auto-generated next KUID/]]&lt;br /&gt;
* [[How to Create a HTML Asset|Create a HTML Asset (Session Introduction Page and In Game Messages)]]&lt;br /&gt;
* [[Updating_Steam_Locos_to_TC3_Standards]]&lt;br /&gt;
* [[How_to_add_collision_to_an_asset]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Scripting and Config.txt&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[/Localize an Asset/]]&lt;br /&gt;
* [[/Build a scripted asset/]]&lt;br /&gt;
* [[/Example_Vehicle_Config.txt/]]&lt;br /&gt;
* [[/Example_Station_Script/]]&lt;br /&gt;
* [[/Configure a spline for collisions/]]&lt;br /&gt;
* [[Adding the Native Automatic Running Numbers system to a traincar]]&lt;br /&gt;
* [[/Add a config.txt syntax highlighter to Notepad++/]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;3D Modelling&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[/Export from 3DS Max using FBX/]]&lt;br /&gt;
* [[/Export from Blender using FBX/]]&lt;br /&gt;
* [[/Export Blender FBX Animation/]]&lt;br /&gt;
* [[/Solve Blender Modelling Problems/]]&lt;br /&gt;
* [[/Scaling setup in Blender/]] &lt;br /&gt;
* [[/Build normal maps in Max/]]&lt;br /&gt;
* [[/Render to Texture/]]&lt;br /&gt;
* [[/Build a simple animated scenery asset in Blender/]]&lt;br /&gt;
* [[/Create transparent windows in Blender/]]&lt;br /&gt;
* [[/Build an animated Neon Sign/]]&lt;br /&gt;
* [[HowTo/Create_a_3D_Avatar|Create a 3D Avatar (Driver Character)]]&lt;br /&gt;
* [[How_To/Use_GIMP_to_create_a_PBRMetal_parameters_image|Create a PBRMetal parameters image in GIMP]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Reskining&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[/Reskin an Asset/]]&lt;br /&gt;
* [[/Reskin an Asset using an alias/]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Content Manager&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[/Create a displacement map/]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Level Of Detail&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
[https://online.ts2009.com/mediaWiki/index.php/Level_of_Detail Level of Detail]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Configurations Files&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:4;-moz-column-count:4;-webkit-column-count:4&amp;quot;&amp;gt;&lt;br /&gt;
* [[/General information for Configuration Files/]]&lt;br /&gt;
&lt;br /&gt;
* [https://online.ts2009.com/mediaWiki/index.php/Index_of_Tags_%26_Containers  List of Tags and Containers]&lt;br /&gt;
* [[https://online.ts2009.com/mediaWiki/index.php/Content_Types#Content_Types Content Types and Config Files]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Content Creation&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [https://online.ts2009.com/mediaWiki/index.php/HowTo/Build_Procedural_Track_for_T:ANE  How to build procedural Track]&lt;br /&gt;
* [[How to Create a Driver Character]]&lt;br /&gt;
* [[How to Create a HTML Asset|How to Create a HTML Asset]]&lt;br /&gt;
* [[How to Create a Message Popup Icon|How to Create a Message Popup Icon]]&lt;br /&gt;
* [[How to Create a Region Asset|How to Create a Region Asset]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Content Creation: Scripting==&lt;br /&gt;
* [[/Your first Trainz Script/|Create your first Trainz script]]&lt;br /&gt;
* [[/Hide- &amp;amp; Unhide Meshes/]]&lt;br /&gt;
* [[/Search for objects in the world/]]&lt;br /&gt;
* [[/Upgrade obsolete script functions/]]&lt;br /&gt;
* [[/Search for installed assets/]]&lt;br /&gt;
* [[/Debug Scripts/]]&lt;br /&gt;
&lt;br /&gt;
== List of Driver Commands==&lt;br /&gt;
*[[Driver_Commands_List|Driver Commands List]]&lt;br /&gt;
&lt;br /&gt;
== List of Session Rules==&lt;br /&gt;
*[[Session Rule List with Parameters|Session Rules (Alphabetical Order)]]&lt;br /&gt;
*[[Session Rules By Categories With Properties|Session Rules (Category Order)]]&lt;br /&gt;
&lt;br /&gt;
==Creating and Configuring Content In-game==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[/Create an Interactive Session/]]&lt;br /&gt;
* [[/Add Carz Traffic to a Route/]]&lt;br /&gt;
* [[/Use Digholes to Create Tunnel entries/]]&lt;br /&gt;
* [[/Tune a Steam Locomotive Enginespec/]]&lt;br /&gt;
* [[/Tune a DCC EngineSpec/]]&lt;br /&gt;
* [[/Tune a Diesel EngineSpec/]]&lt;br /&gt;
* [[/Configure an Interactive Industry/]]&lt;br /&gt;
* [[/Implement a Destination Sign System/]]&lt;br /&gt;
* [[/Upload a new asset to the DownloadStation/]]&lt;br /&gt;
* [[/Update an existing asset on the DownloadStation/]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation Suggestions==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[/Build normal maps in Blender/]]&lt;br /&gt;
* [[/Build a house/]] - See discussion page&lt;br /&gt;
* [[/Build a tree/]]&lt;br /&gt;
* [[/Build a track/]]&lt;br /&gt;
* [[/Build a tunnel/]]&lt;br /&gt;
* [[/Build a hedge/]]&lt;br /&gt;
* [[/Build a fence/]]&lt;br /&gt;
* [[/Build a road/]]&lt;br /&gt;
* [[/Build a road intersection asset/]]&lt;br /&gt;
* [[/Build a road crossing/]]&lt;br /&gt;
* [[/Build a train car/]]&lt;br /&gt;
* [[/Build a bogey/]]&lt;br /&gt;
* [[/Build a ground texture/]]&lt;br /&gt;
* [[/Build an interactive industry/]]&lt;br /&gt;
* [[/Add attached track/]]&lt;br /&gt;
* [[/Register with Planet Auran/]]&lt;br /&gt;
* [[/Create an Achievement/]]&lt;br /&gt;
* [[/Use a map to create a baseboard/]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trainz Wiki==&lt;br /&gt;
*[[HowTo/Create_a_Help_Page|How to Create a Trainz Wiki page]]&lt;br /&gt;
&lt;br /&gt;
== See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Content Configuration]] - &#039;&#039;A reference manual covering all content types.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:How-to guides| ]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=LM.txt_file&amp;diff=32261</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=32261"/>
		<updated>2022-03-19T01:20:45Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Breakdown of LOD Mesh File */&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 [[IM files]] or [[trainzmesh file]]s only (exported from [[Autodesk 3DS Max]], Blender, etc.)&lt;br /&gt;
&lt;br /&gt;
Trainz locates these mesh 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;
**** in trying this method on trainz2019 all attachments present in the first lod remain &amp;quot;active&amp;quot; in all other lod levels regardless of rather or not they are present in later levels. i.e. If you have a mesh attached to attachment &amp;quot;a.door&amp;quot; in Lod0 and you omit attachment &amp;quot;a.door&amp;quot; from the lower level lods the attached mesh will still appear at that attachment in those levels as if the attachment is still there... may be a bug********&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;
==.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>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=30450</id>
		<title>Script Feature Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=30450"/>
		<updated>2021-10-14T02:50:37Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is where the [[scripting]] community gets to post all their API feature requests. Request any additions that you think will enhance the game. Things to keep in mind:&lt;br /&gt;
* We are unlikely to add a feature which breaks any existing content.&lt;br /&gt;
* Script is for control purposes, and is not intended to enable significant modifications to the underlying game engine. We are very unlikely to introduce a feature where the obvious uses are going to result in significant performance penalties.&lt;br /&gt;
* We are far more likely to add features which are directly blocking something that the community is working on. If you have something cool, and need just a few minor additions then please detail what you&#039;re working on (ideally, on another wiki page linked from both here and your [[Content Creation Groups]] page) and why you need the additions.&lt;br /&gt;
* [[MiniBrowser]] requests should go on the separate [[MiniBrowser Feature Requests]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requests==&lt;br /&gt;
Requests are placed in this section by the community, for discussion and possible inclusion.&lt;br /&gt;
&lt;br /&gt;
* Str.Tokens(&amp;quot;Foo&amp;quot;, &amp;quot;&amp;quot;) should return [&amp;quot;F&amp;quot;, &amp;quot;o&amp;quot;, &amp;quot;o&amp;quot;] when called without separator in 2nd argument analogous to other languages (String.split()).  --[[User:Sachsenbahner|Sachsenbahner]] 19:53, 10 December 2018 (AEST)&lt;br /&gt;
&lt;br /&gt;
* Add a method that will let you identify the industry at which a vehicle is located. If an industry track section can also carry the industry identifier, it would be most helpful.&lt;br /&gt;
&lt;br /&gt;
* Add a handle to allow a custom bell animation to be played when the bell is played on a locomotive (Vehicle.StartBell() and Vehicle.StopBell(), perhaps?).  Justification: Script can currently listen for the bell message, but since the message is a toggle, it is easy to get out of synch with the true state of the bell. For example, when coupling a locomotive whose bell is ringing to a locomotive whose bell is not ringing, the end result depends on which locomotive is currently in focus. - Curtis&lt;br /&gt;
&lt;br /&gt;
* Scale the visible bulk load animation on a traincar such that it takes Vehicle.GetLoadTime() to complete.  For example, if Vehicle.GetLoadTime() returns 5 seconds, the bulk animation would take 5 seconds to transition from the full state to the empty state.  This would be useful for industries that take more than one second to load / unload a car, as the visible load animation could be synced more closely with the industry animation. -Curtis&lt;br /&gt;
&lt;br /&gt;
* Extension to the function World.GetAssetList(string kind, bool OnlyIfUsedInCurrentMap) -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to play an avi and wait for it to finsh (no user interaction allowed) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* The ability to modify scenery trigger radii on the fly in script. This is really aimed at crossings so that train detection can be varied in line with track speed limits.  -Andi06&lt;br /&gt;
&lt;br /&gt;
* A method of refreshing the Property Browser to take account of any change in the target object&#039;s name during a property editing session. (Objects which have &#039;autoname 1&#039; in config will often be renamed by the user.  In some circumstances I am using the object name to set other properties. Typically an object might be created as &#039;Double Slip 1&#039; and might refer to its constituent nodes as &#039;Double Slip 1,Track 1&#039;.  This is to enable other objects to refer to it in a user friendly way.  On a name change the Property Browser continues to use the old name until the browser has been closed and reopened.  This is counter intuitive) -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability for a script to be able to read/change loco/rolling stock parameters (ie to simulate one loco losing air etc etc etc) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* SetFXCoronaTexture() A means of resetting to config.txt defaults.&lt;br /&gt;
&lt;br /&gt;
* Be able to play mp3 as well as wav. ~Jenolan&lt;br /&gt;
: &#039;&#039;I&#039;ve been able to do this where the asset doing the playing is a script library, I had Acker Bilk coming over a station tannoy at one point.  Not sure why it doesn&#039;t seem to work elsewhere. -Andi&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interface.MessageBox(Caption,Text), calling up a small browser with a close button would be helpful, especially for novices. Interface.Print() is a monumental PITA because it prints out upside down, doesn&#039;t hold enough lines, and only works in Driver. For sure its possible to write your own version of this but browsers aren&#039;t all that easy to get your head around and its a very basic facility that should be built in. -Andi&lt;br /&gt;
&lt;br /&gt;
* A standard config.txt tag &#039;junction-type normal/singleslip/doubleslip&#039; etc together with a spec for construction and behaviour might be helpful. I already have a complete schema for this. -Andi&lt;br /&gt;
: &#039;&#039;Uncertain what you&#039;re expecting to achieve here? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Is it possible to make a mesh available which matches the existing graphic direction indicators, it appears to be some sort of directional corona or variant. If not could a new marker mesh be developed that could be used with both types? The existing one has nasty alpha effects in any case. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to dynamically change the length of a piece of rolling stock as part of the load / unload process; to support logging disconnects (see http://www.trainzone.co.nz/logging.htm for examples)- Curtis&lt;br /&gt;
: &#039;&#039;This is an interesting concept, but sounds difficult to implement. I can&#039;t think of any way of adjusting the length unless it was the end item of a consist, since adjustment at any other time would require displacing the remainder of the consist. Could you expand on your ideas please.&#039;&#039; -chris&lt;br /&gt;
: &#039;&#039;The entire car, including lmfront &amp;amp; lmback, would be part of the loading / unloading animation. When loading, it would probably be necessary to displace the consist by moving one of the ends - perhaps the end with the locomotive? Potential issue: if when loading, the increase in consist length causes the end of the consist to run off the end of the track or collide with another train.  When unloading, you could break the consist at either or both lmfront / lmback - whichever move as part of the unloading animation.&#039;&#039; - Curtis&lt;br /&gt;
: &#039;&#039;May be simpler to just break the consist at both lmfront and lmback; centering the car in-between the two halves. -Curtis&lt;br /&gt;
&lt;br /&gt;
*Allow SetFXNameText(effect,text) to accept an empty string in the second parameter - Reason: It&#039;s really irritating having to write workarounds for this. ~Andi&lt;br /&gt;
&lt;br /&gt;
*SetMeshScale(X,Y,Z) and corresponding config tags. Positive or negative values would implement mesh mirroring at the same time. As an example of potential a placement option for trees might allow random scale factors (within reasonable limits) and random rotation.  Each tree placed would then vary in size, shape and rotation getting much more variation from the same mesh asset. ~Andi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to product loading / unloading functionality to allow incremental loads and unloads.&lt;br /&gt;
:Potential usages:  &lt;br /&gt;
:- Animation that plays once per item being loaded; such as a forklift carrying a crate to a boxcar, or a crane lifting a log to a flatcar.&lt;br /&gt;
:- Allow dynamic load times of bulk loads (small cars load faster than large cars), with the animated load rising / lowering synchronously.&lt;br /&gt;
&lt;br /&gt;
:Potential implementation:&lt;br /&gt;
:Extend vehicle.LoadProduct(report,units) where units = integer number of queue to be loaded each increment.  0 would be everything, defaulting to current LoadProduct() behavior, and add additional calls BeginIncrementalLoad(), EndIncrementalLoad(), BeginIncrementalUnload(), and EndIncrementalUnload().&lt;br /&gt;
&lt;br /&gt;
:During a load operation that loads 3 increments (units=1, target queue on the car = 3), the flow would look like:&lt;br /&gt;
 BeginLoad() // open car doors; station doors&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad() //  start loading animation, start sounds; pfx; add any delays&lt;br /&gt;
 TransferProductFrom() // maximumToTransfer = units&lt;br /&gt;
 EndIncrementalLoad() // animate forklift returning to station / end sounds / pfx / other cleanup&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 EndLoad() // close car &amp;amp; station doors&lt;br /&gt;
&lt;br /&gt;
* Ability to add a vehicle to an existing consist like Vehicle.Reposition( Train, MyCouple, OtherCouple ) this would save needing a work track mark to add vehicles which would be very helpful ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Extension to AddHandler to allow this syntax: AddHandler(target,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;MessageHandler&amp;quot;), passing all messages to the specified handler, for justification see discussion page. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to store any information along with the layout and not the session (i.e. &#039;&#039;PropertyObject.SetLayoutProperties&#039;&#039; and &#039;&#039;PropertyObject.GetLayoutProperties&#039;&#039;, taking/returning &#039;&#039;Soup&#039;&#039; objects respectively). Rationale: the non-existence is a major drawback with configurable signals - [[User:Klausm|Klausm]]&lt;br /&gt;
&lt;br /&gt;
*return/monitor curve radius for current car. Useful for scripting wheel screeching sounds arround curves without using triggers. - trainlover16 &lt;br /&gt;
&lt;br /&gt;
* Access to asset location, height, rotation in script.  This came up twice - once when I wanted to keep traffic lights upright when the containing asset is rolled, and once when I wanted to add simple real time ground shadows to assets. -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to arbitrarily add an attachment point to an item. To allow things like FRED/BOG sundry animations and so on ~Jenolan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Not really script. A generic clickable mesh object, its an easy hack using a fixedtrack junction but it would nice to have an official version - click on the engine shed to open the doors, click on the signal box to open a track browser etc etc. Mappable click regions too if its not too much to ask :-) -Andi&lt;br /&gt;
&lt;br /&gt;
* Extension/Alternative to World.GetJunctionList to return fixed track junction objects or nodes, I can script this easily for objects using my library but this would not be the case for all junctions. -Andi&lt;br /&gt;
&lt;br /&gt;
* World.Play2DSound(Asset,filename) allows sound files to be saved in a &#039;sound library&#039; asset and avoids duplication.  Can we have a similar facility for images to be used in html assets.  A lot of the dependencies that I use are images and icons.  I&#039;m consciously trying to avoid this now - its the source of much pain - but to do this for the Junction Kit for instance I would have to have copies of all necessary images in all of the placeable assets (there are more than 50) If I could simply keep one copy in the script library it would save much bandwidth, diskspace and support. -Andi06&lt;br /&gt;
&lt;br /&gt;
* genesteal : cab features.&lt;br /&gt;
- methods for light controls in cabin : Control.SetFlash (float frequency).Make the control visible/invisible on the intervall frequency. may be Meshobjects.gs for more general purpose. The same for texture swapping in texture replacement.&lt;br /&gt;
- New conrol cab &amp;quot;button&amp;quot; with vertical translation limit : method set and get value as usual, method for &amp;quot;while depressed&amp;quot; behavior: Setdepressed ( method to run).&lt;br /&gt;
&lt;br /&gt;
- Speedlimiter method : Set a speedlimit replacing the max speed possible on cab mode.(engine)&lt;br /&gt;
&lt;br /&gt;
- Set engine methods : &lt;br /&gt;
Locomotive.SwapEngine(kuid); replace engine by another for a locomotive. feature existing on actual loco to set a traction service if the loco have to drive freight or passengers consists. This method can replace speedlimit above and may be more accurate : speedlimit and power will be set together as prototypical setting before a journey. &lt;br /&gt;
- Locomotive.EngineStop(): stops the enginesound  and play a stop.wav, located in enginesound folder.&lt;br /&gt;
- Locomotive.EngineStart() : starts enginesound like this : play  a start.wav located in enginesound folder, then idle 0.wav.&lt;br /&gt;
&lt;br /&gt;
* Allow function Vehicle.SetTractionMultiplier(float) to set multiplier to 0. ~Mike&lt;br /&gt;
: UPD: sorry, misunderstood functionality of this function. But could there be a method to disable traction on locos?&lt;br /&gt;
&lt;br /&gt;
* Ability to change (or only to reduce) the presure in auxilary reservoir of a vehicle. This provides a way to create different types of tripte valves for long-length trains (~70  vehicles), where using Train.SetVelocity() is unrealistic&lt;br /&gt;
&lt;br /&gt;
* Make in addition to Vehice.GetTrackGradient() also float Vehice.GetTrackCurveRadius() which return 0 for straight sections of track (instead of infinity). ~tram&lt;br /&gt;
* Make a function for smooth control of &amp;quot;soundscript&amp;quot;&#039;s sound volume. For example like void MapObject.SetSoundScriptVolume(string soundTrigger, float NewVolume, float Duration).  ~tram&lt;br /&gt;
&lt;br /&gt;
* Ability to set the camera view within an interior by a script to one of the defined cameras in the cameralist container.  It would also be handy if the camera orientation be configurable via a method call. --[[User:Pcas1986|pcas1986]] ([[User talk:Pcas1986|talk]]) 18:14, 20 February 2014 (EST)&lt;br /&gt;
&lt;br /&gt;
* Ability to place a bogey in an interior via the interiors config file.  This would allow for me to make a realistic gangways for my Amlfeets i.e. i have set created gangways for my exteiors using bogeys which allow them to rotate and remain aligned realistically. The issue arrizes when in the interior. I cannot aninate the interior gangway to aligne itself according to the curvature of track. If i could get the named bogey visible from the interior (similar to how one could make the exterior visble from interior) that would help.~ Ashton&lt;br /&gt;
&lt;br /&gt;
* Locomotive.SetEngineSetting(string setting, float value) - Ability to mute/activate engine sound for a locomotive adding setting &amp;quot;enginesound&amp;quot; to the list of settings, value 0 to mute, 1 to activate engine sound ~manweb&lt;br /&gt;
 - setting = The name of the setting to save (enginesound).&lt;br /&gt;
 - value = The value of the named setting. (0 - 1)&lt;br /&gt;
&lt;br /&gt;
* Math.sin,cos,tan,arcsin,arccos,arctan - Trigonometric functions to get the sine, cosine, and tangent of a float, and inverses of these&lt;br /&gt;
&lt;br /&gt;
==Complete==&lt;br /&gt;
* Simple destructor routine, or some other method of receiving notification of the deletion of scripted objects during a Surveyor session. (In the absence of World.GetJunctionBaseList() my new junction objects are maintaining a list of fixedtrack junctions via library calls in the Init() method of each object.  Apart from using the list myself, it is intended to be returned on demand to any script making the appropriate LibraryCall.  Since I have no way of telling that an object has been deleted, I need to rescan the entire list before returning it to ensure that each object still exists, this seems a touch inefficient when it could be easily kept up to date without a complete parse) -Andi&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* The ability for [[TrackSearch]] to return the trigger or track reference found for SceneryWithTrack descendants, including turntables and the ability to initiate a search from a specified trigger or track in SceneryWithTrack descendants.  A million reasons for this including trains being able to detect which track of an industry they can see in a proposed &#039;Call-At All Stations&#039; rule. -Andi06&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Compatibility of the [[TrackSearch]] with the animated fixed junctions. When I first got TRS2006 in my hands, I tried out my TrackView rule, but quickly discovered that it was impossible to find out the track topology (forgot the exact details, though) - [[User:Klausm|Klausm]]&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Extensions to TrackSearch()/GSTrackSearch() covered elsewhere to be sufficient to allow the topography of multi node junctions to be fully discovered. -Andi&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
*If we are going to use radians now (SetMeshOrientation()) could we please have PI?&lt;br /&gt;
:&#039;&#039;Math.PI&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Ability to configure permit structure to allow multi node junctions to coexist with the AI, whilst denying conflicting paths, as discussed above. -Andi&lt;br /&gt;
:&#039;&#039;Added named mutex support for attached junctions. See [[KIND SceneryWithTrack]].&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Fix World.GetAssetList(&amp;quot;texture-group&amp;quot;), this has been broken since TRS2004. -Andi06&lt;br /&gt;
:&#039;&#039;Now returns all assets with category-class &#039;JO&#039;. This seems to contain all &#039;texture-group&#039; type assets - though there maybe some unexpected extras.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to detect the use of &#039;Pause&#039; easily (a message would do) to stop cheating in shunting puzzles ~Jenolan&lt;br /&gt;
:&#039;&#039;New messages &amp;quot;World&amp;quot;, &amp;quot;Paused&amp;quot; and &amp;quot;World&amp;quot;, &amp;quot;Unpaused&amp;quot; now exist and should be broadcast at the appropriate times.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* World.GetCurrentTrain() Not essential obviously but it would save a lot of work. -Andi06&lt;br /&gt;
:&#039;&#039;Now exists.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to optionally detect mouseclick/ Keys [J] &amp;amp; [^J] without switching the junction. This can be hacked by making node 0 an invisible junction, but this will result in other objects querying the junction structure not getting the answer they expect (or not one they can understand). This is needed to allow objects with more than one junction node to cycle through their options in response to the user. -Andi&lt;br /&gt;
:&#039;&#039;I believe this is now possible via script overrides on the map object in question.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* A method of subclassing or outright using a script from another asset (ie. a script which is written once and reused heavily, allowing any fixes to be released as a single asset update.) - chris&lt;br /&gt;
:&#039;&#039;TS2009 now has the ability to cross-include scripts from another asset.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Dreamland, a new message: &#039;&#039;Junction,AboutToToggle&#039;&#039; -Andi&lt;br /&gt;
: &#039;&#039;How do you expect to act on this? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
::&#039;I believe this concept has been fulfilled via the UserRequestToggle overrides.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* On a similar note is there any chance you might amend the Exception dialogue to specify the object, (or even the Asset) which is causing the exception :-) -Andi&lt;br /&gt;
:: I think we did this one a while back. ~chris&lt;br /&gt;
&lt;br /&gt;
* SetMeshPosition(&amp;quot;meshname&amp;quot;, x,y,z) absolute positioning of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;This exists ~Andi&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Not necessarily - we support relative positioning, not absolute. This may or may not achieve what he wants.&#039;&#039; ~chris&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* GetMeshPosition(&amp;quot;meshname&amp;quot;, &amp;quot;x&amp;quot;)[&amp;quot;Y&amp;quot;][&amp;quot;Z&amp;quot;] receive the absolute position of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;Since you have used SetMeshPosition() to move the mesh, this is unneccessary&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Absolute position can be set in Surveyor. Relative position can be set in the [[config.txt file]]. I wouldn&#039;t say that this is completely unnecessary.&#039;&#039; ~chris&lt;br /&gt;
::: Thanks a lot for MapObject.GetMapObjectPosition() and MapObject.GetMapObjectOrientation() ~tram&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to load a menu asset directly from the command line ~Jenolan&lt;br /&gt;
:: This exists with &amp;quot;-scriptedmenu=&amp;lt;KUID&amp;gt;&amp;quot; ~chris&lt;br /&gt;
&lt;br /&gt;
==Rejected==&lt;br /&gt;
If there&#039;s a request that we&#039;re clearly not going to entertain at the current time, we&#039;ll move it to here. This includes both flat rejections and also requests which sound good but won&#039;t be done for the next version of Trainz.&lt;br /&gt;
&lt;br /&gt;
[[Rejected Script Feature Requests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Request]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Talk:Hello_World,_Setting_Up_An_Asset_Script.&amp;diff=24049</id>
		<title>Talk:Hello World, Setting Up An Asset Script.</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Talk:Hello_World,_Setting_Up_An_Asset_Script.&amp;diff=24049"/>
		<updated>2020-09-10T03:23:15Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: Created page with &amp;quot;I am attempting this tutorial in trainz 2019 and this is what comes up on screen in the game  https://photos.app.goo.gl/zNgX3WyRyfEup73t7&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am attempting this tutorial in trainz 2019 and this is what comes up on screen in the game&lt;br /&gt;
&lt;br /&gt;
https://photos.app.goo.gl/zNgX3WyRyfEup73t7&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=KIND_Bogey&amp;diff=23696</id>
		<title>KIND Bogey</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=KIND_Bogey&amp;diff=23696"/>
		<updated>2020-06-10T04:04:05Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==KIND Hierarchy==&lt;br /&gt;
&#039;&#039;&#039;KIND Bogey&#039;&#039;&#039; is a subsidiary {{wp|data type}} to [[KIND Mesh]] provides a bogey mesh and the animation data definitions for a [[KIND Traincar]].&lt;br /&gt;
&lt;br /&gt;
* This asset type inherits all mesh display characteristics, and adds Bogey-specific functionality such as physics and control mechanisms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Parent Classes==&lt;br /&gt;
* [[KIND Mesh]]&lt;br /&gt;
&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 bogey asset supports the following tags. Each tag is shown here with its default value.&lt;br /&gt;
&lt;br /&gt;
  kind          &amp;quot;bogey&amp;quot;&lt;br /&gt;
  animdist      2.39&lt;br /&gt;
  axle-offsets  -2.5,2.5&lt;br /&gt;
  direct-drive  0  &lt;br /&gt;
  track-sound   {}&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
====kind====&lt;br /&gt;
:Type:       String&lt;br /&gt;
:Compulsory: Yes from 3.4&lt;br /&gt;
:Desc:       Identifies the asset as Kind bogey.&lt;br /&gt;
&lt;br /&gt;
====animdist====&lt;br /&gt;
:Type:       Float&lt;br /&gt;
:Compulsory: Yes from 3.4&lt;br /&gt;
:Desc:       Distance traveled in metres by the bogies in 1 second (30 frames) of animation. In other words, multiply the wheel diameter by PI which is 3.1415. Leave this tag out if the bogey is not animated.&lt;br /&gt;
:::Bogie animation files exported from the 3D Editor must be called &amp;quot;anim.kin&amp;quot; and included in the asset folder.&lt;br /&gt;
:::Do not include anim.kin in the config.txt.&lt;br /&gt;
:::If, for instance, there are large driving wheels and smaller wheels used on the pilot, of a steam locomotive, you will need to work out the correct value for each bogey using the angular rotation for 30 frames.&lt;br /&gt;
::::This Tag is required for trainz version 4.6.&lt;br /&gt;
&lt;br /&gt;
====axle-offsets====&lt;br /&gt;
:Type:       Floatlist&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc:       This tag identifies the distance in metres of each axle location from the &#039;origin&#039; of the bogie.  The origin is the attachment point location. This is currently used to calculate where, and how many, axles the traincar has to play the &#039;turnout&#039; sound effect.&lt;br /&gt;
&lt;br /&gt;
:::So, for example, a 3 axle bogie with an axle spacing of 1.5m (centre axle is in line with the attachment point) would have the following:&lt;br /&gt;
:::: axle-offsets -1.5,0.0,1.5&lt;br /&gt;
:::A one axle bogey would be 0.0 and a two axle bogey would be -2.0, 2.0 providing each axle is 2.0 metres from the attachment point.&lt;br /&gt;
&lt;br /&gt;
====direct-drive====&lt;br /&gt;
:Type:       Boolean&lt;br /&gt;
:Compulsory: No&lt;br /&gt;
:Desc:       If 1, the bogey animation is linked to the steam piston and physics system.  This tag is for steam locomotive animated driving bogies only. If this tag is not included the piston and steam sounds will not work.&lt;br /&gt;
:::The direct-drive tag may also be used on an invisible locomotive bogey to achieve correct sound timing for the asset.&lt;br /&gt;
&lt;br /&gt;
====track-sound====&lt;br /&gt;
:Type:       [[&amp;quot;track-sound&amp;quot;_container|Track-Sound Container]]&lt;br /&gt;
:Compulsory  No&lt;br /&gt;
:Desc:       Sound to play for a given train and track combination. See [[&amp;quot;track-sound&amp;quot;_container|Track-Sound Container]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example Config.txt==&lt;br /&gt;
Sample [[config.txt file]] for a bogey asset, with the Standard Tags excluded for brevity:&lt;br /&gt;
&lt;br /&gt;
 username                                &amp;quot;Sample Bogey&amp;quot;&lt;br /&gt;
 kuid                                    &amp;lt;kuid2:xxxxx:xxxxx:x&amp;gt;&lt;br /&gt;
 kind                                    &amp;quot;bogey&amp;quot;&lt;br /&gt;
 animdist                                3.75&lt;br /&gt;
 category-class                          &amp;quot;ZB&amp;quot;&lt;br /&gt;
 category-region                         &amp;quot;RO&amp;quot;&lt;br /&gt;
 category-era                            &amp;quot;2000s&amp;quot;&lt;br /&gt;
 trainz-build                            3.6&lt;br /&gt;
 &lt;br /&gt;
 mesh-table&lt;br /&gt;
 {&lt;br /&gt;
  default&lt;br /&gt;
  {&lt;br /&gt;
    mesh                                &amp;quot;bogey.im&amp;quot;&lt;br /&gt;
    auto-create                         1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 thumbnails&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Trainz - Content Creation - #31 - Part 1 - Bogey Creation==&lt;br /&gt;
[https://youtu.be/nQa1zJtZfTg Video]&lt;br /&gt;
&lt;br /&gt;
In this tutorial we cover how to animate your bogey using a parent child structure for dummies and meshes (part 2 covers “skin” modifiers for animation). We then continue to create the Trainz asset and import this asset into TrainzContent.&lt;br /&gt;
&lt;br /&gt;
==Trainz - Content Creation - #31 - Part 2 - Bogey Creation==&lt;br /&gt;
[https://youtu.be/d-bhFnuSx1g Video]&lt;br /&gt;
&lt;br /&gt;
In this tutorial we cover how to animate your bogey using a parent child structure for just the dummy objects then applying a skin modifier to the mesh (part 1 covers animation through a parent child structure of dummies and meshes). We suggest watching part 1 first to get more of an overview on this tutorial before watching it.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:SD40-2-bogies.zip]] - The MAX source for the [[Auran]] [[TS2009]] SD40-2 bogies. Distributed from the TrainzDev site for education purposes only. No license for the reproduction or redistribution of the included model or textures is granted.&lt;br /&gt;
&lt;br /&gt;
==Categories==&lt;br /&gt;
[[Category:Asset KIND|B]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modeling]]&lt;br /&gt;
[[Category:Content creation]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=23072</id>
		<title>Script Feature Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=23072"/>
		<updated>2020-04-06T05:05:48Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is where the [[scripting]] community gets to post all their API feature requests. Request any additions that you think will enhance the game. Things to keep in mind:&lt;br /&gt;
* We are unlikely to add a feature which breaks any existing content.&lt;br /&gt;
* Script is for control purposes, and is not intended to enable significant modifications to the underlying game engine. We are very unlikely to introduce a feature where the obvious uses are going to result in significant performance penalties.&lt;br /&gt;
* We are far more likely to add features which are directly blocking something that the community is working on. If you have something cool, and need just a few minor additions then please detail what you&#039;re working on (ideally, on another wiki page linked from both here and your [[Content Creation Groups]] page) and why you need the additions.&lt;br /&gt;
* [[MiniBrowser]] requests should go on the separate [[MiniBrowser Feature Requests]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requests==&lt;br /&gt;
Requests are placed in this section by the community, for discussion and possible inclusion.&lt;br /&gt;
&lt;br /&gt;
* Str.Tokens(&amp;quot;Foo&amp;quot;, &amp;quot;&amp;quot;) should return [&amp;quot;F&amp;quot;, &amp;quot;o&amp;quot;, &amp;quot;o&amp;quot;] when called without separator in 2nd argument analogous to other languages (String.split()).  --[[User:Sachsenbahner|Sachsenbahner]] 19:53, 10 December 2018 (AEST)&lt;br /&gt;
&lt;br /&gt;
* Add a method that will let you identify the industry at which a vehicle is located. If an industry track section can also carry the industry identifier, it would be most helpful.&lt;br /&gt;
&lt;br /&gt;
* Add a handle to allow a custom bell animation to be played when the bell is played on a locomotive (Vehicle.StartBell() and Vehicle.StopBell(), perhaps?).  Justification: Script can currently listen for the bell message, but since the message is a toggle, it is easy to get out of synch with the true state of the bell. For example, when coupling a locomotive whose bell is ringing to a locomotive whose bell is not ringing, the end result depends on which locomotive is currently in focus. - Curtis&lt;br /&gt;
&lt;br /&gt;
* Scale the visible bulk load animation on a traincar such that it takes Vehicle.GetLoadTime() to complete.  For example, if Vehicle.GetLoadTime() returns 5 seconds, the bulk animation would take 5 seconds to transition from the full state to the empty state.  This would be useful for industries that take more than one second to load / unload a car, as the visible load animation could be synced more closely with the industry animation. -Curtis&lt;br /&gt;
&lt;br /&gt;
* Extension to the function World.GetAssetList(string kind, bool OnlyIfUsedInCurrentMap) -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to play an avi and wait for it to finsh (no user interaction allowed) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* The ability to modify scenery trigger radii on the fly in script. This is really aimed at crossings so that train detection can be varied in line with track speed limits.  -Andi06&lt;br /&gt;
&lt;br /&gt;
* A method of refreshing the Property Browser to take account of any change in the target object&#039;s name during a property editing session. (Objects which have &#039;autoname 1&#039; in config will often be renamed by the user.  In some circumstances I am using the object name to set other properties. Typically an object might be created as &#039;Double Slip 1&#039; and might refer to its constituent nodes as &#039;Double Slip 1,Track 1&#039;.  This is to enable other objects to refer to it in a user friendly way.  On a name change the Property Browser continues to use the old name until the browser has been closed and reopened.  This is counter intuitive) -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability for a script to be able to read/change loco/rolling stock parameters (ie to simulate one loco losing air etc etc etc) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* SetFXCoronaTexture() A means of resetting to config.txt defaults.&lt;br /&gt;
&lt;br /&gt;
* Be able to play mp3 as well as wav. ~Jenolan&lt;br /&gt;
: &#039;&#039;I&#039;ve been able to do this where the asset doing the playing is a script library, I had Acker Bilk coming over a station tannoy at one point.  Not sure why it doesn&#039;t seem to work elsewhere. -Andi&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interface.MessageBox(Caption,Text), calling up a small browser with a close button would be helpful, especially for novices. Interface.Print() is a monumental PITA because it prints out upside down, doesn&#039;t hold enough lines, and only works in Driver. For sure its possible to write your own version of this but browsers aren&#039;t all that easy to get your head around and its a very basic facility that should be built in. -Andi&lt;br /&gt;
&lt;br /&gt;
* A standard config.txt tag &#039;junction-type normal/singleslip/doubleslip&#039; etc together with a spec for construction and behaviour might be helpful. I already have a complete schema for this. -Andi&lt;br /&gt;
: &#039;&#039;Uncertain what you&#039;re expecting to achieve here? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Is it possible to make a mesh available which matches the existing graphic direction indicators, it appears to be some sort of directional corona or variant. If not could a new marker mesh be developed that could be used with both types? The existing one has nasty alpha effects in any case. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to dynamically change the length of a piece of rolling stock as part of the load / unload process; to support logging disconnects (see http://www.trainzone.co.nz/logging.htm for examples)- Curtis&lt;br /&gt;
: &#039;&#039;This is an interesting concept, but sounds difficult to implement. I can&#039;t think of any way of adjusting the length unless it was the end item of a consist, since adjustment at any other time would require displacing the remainder of the consist. Could you expand on your ideas please.&#039;&#039; -chris&lt;br /&gt;
: &#039;&#039;The entire car, including lmfront &amp;amp; lmback, would be part of the loading / unloading animation. When loading, it would probably be necessary to displace the consist by moving one of the ends - perhaps the end with the locomotive? Potential issue: if when loading, the increase in consist length causes the end of the consist to run off the end of the track or collide with another train.  When unloading, you could break the consist at either or both lmfront / lmback - whichever move as part of the unloading animation.&#039;&#039; - Curtis&lt;br /&gt;
: &#039;&#039;May be simpler to just break the consist at both lmfront and lmback; centering the car in-between the two halves. -Curtis&lt;br /&gt;
&lt;br /&gt;
*Allow SetFXNameText(effect,text) to accept an empty string in the second parameter - Reason: It&#039;s really irritating having to write workarounds for this. ~Andi&lt;br /&gt;
&lt;br /&gt;
*SetMeshScale(X,Y,Z) and corresponding config tags. Positive or negative values would implement mesh mirroring at the same time. As an example of potential a placement option for trees might allow random scale factors (within reasonable limits) and random rotation.  Each tree placed would then vary in size, shape and rotation getting much more variation from the same mesh asset. ~Andi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to product loading / unloading functionality to allow incremental loads and unloads.&lt;br /&gt;
:Potential usages:  &lt;br /&gt;
:- Animation that plays once per item being loaded; such as a forklift carrying a crate to a boxcar, or a crane lifting a log to a flatcar.&lt;br /&gt;
:- Allow dynamic load times of bulk loads (small cars load faster than large cars), with the animated load rising / lowering synchronously.&lt;br /&gt;
&lt;br /&gt;
:Potential implementation:&lt;br /&gt;
:Extend vehicle.LoadProduct(report,units) where units = integer number of queue to be loaded each increment.  0 would be everything, defaulting to current LoadProduct() behavior, and add additional calls BeginIncrementalLoad(), EndIncrementalLoad(), BeginIncrementalUnload(), and EndIncrementalUnload().&lt;br /&gt;
&lt;br /&gt;
:During a load operation that loads 3 increments (units=1, target queue on the car = 3), the flow would look like:&lt;br /&gt;
 BeginLoad() // open car doors; station doors&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad() //  start loading animation, start sounds; pfx; add any delays&lt;br /&gt;
 TransferProductFrom() // maximumToTransfer = units&lt;br /&gt;
 EndIncrementalLoad() // animate forklift returning to station / end sounds / pfx / other cleanup&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 EndLoad() // close car &amp;amp; station doors&lt;br /&gt;
&lt;br /&gt;
* Ability to add a vehicle to an existing consist like Vehicle.Reposition( Train, MyCouple, OtherCouple ) this would save needing a work track mark to add vehicles which would be very helpful ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Extension to AddHandler to allow this syntax: AddHandler(target,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;MessageHandler&amp;quot;), passing all messages to the specified handler, for justification see discussion page. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to store any information along with the layout and not the session (i.e. &#039;&#039;PropertyObject.SetLayoutProperties&#039;&#039; and &#039;&#039;PropertyObject.GetLayoutProperties&#039;&#039;, taking/returning &#039;&#039;Soup&#039;&#039; objects respectively). Rationale: the non-existence is a major drawback with configurable signals - [[User:Klausm|Klausm]]&lt;br /&gt;
&lt;br /&gt;
* Access to asset location, height, rotation in script.  This came up twice - once when I wanted to keep traffic lights upright when the containing asset is rolled, and once when I wanted to add simple real time ground shadows to assets. -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to arbitrarily add an attachment point to an item. To allow things like FRED/BOG sundry animations and so on ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Not really script. A generic clickable mesh object, its an easy hack using a fixedtrack junction but it would nice to have an official version - click on the engine shed to open the doors, click on the signal box to open a track browser etc etc. Mappable click regions too if its not too much to ask :-) -Andi&lt;br /&gt;
&lt;br /&gt;
* Extension/Alternative to World.GetJunctionList to return fixed track junction objects or nodes, I can script this easily for objects using my library but this would not be the case for all junctions. -Andi&lt;br /&gt;
&lt;br /&gt;
* World.Play2DSound(Asset,filename) allows sound files to be saved in a &#039;sound library&#039; asset and avoids duplication.  Can we have a similar facility for images to be used in html assets.  A lot of the dependencies that I use are images and icons.  I&#039;m consciously trying to avoid this now - its the source of much pain - but to do this for the Junction Kit for instance I would have to have copies of all necessary images in all of the placeable assets (there are more than 50) If I could simply keep one copy in the script library it would save much bandwidth, diskspace and support. -Andi06&lt;br /&gt;
&lt;br /&gt;
* genesteal : cab features.&lt;br /&gt;
- methods for light controls in cabin : Control.SetFlash (float frequency).Make the control visible/invisible on the intervall frequency. may be Meshobjects.gs for more general purpose. The same for texture swapping in texture replacement.&lt;br /&gt;
- New conrol cab &amp;quot;button&amp;quot; with vertical translation limit : method set and get value as usual, method for &amp;quot;while depressed&amp;quot; behavior: Setdepressed ( method to run).&lt;br /&gt;
&lt;br /&gt;
- Speedlimiter method : Set a speedlimit replacing the max speed possible on cab mode.(engine)&lt;br /&gt;
&lt;br /&gt;
- Set engine methods : &lt;br /&gt;
Locomotive.SwapEngine(kuid); replace engine by another for a locomotive. feature existing on actual loco to set a traction service if the loco have to drive freight or passengers consists. This method can replace speedlimit above and may be more accurate : speedlimit and power will be set together as prototypical setting before a journey. &lt;br /&gt;
- Locomotive.EngineStop(): stops the enginesound  and play a stop.wav, located in enginesound folder.&lt;br /&gt;
- Locomotive.EngineStart() : starts enginesound like this : play  a start.wav located in enginesound folder, then idle 0.wav.&lt;br /&gt;
&lt;br /&gt;
* Allow function Vehicle.SetTractionMultiplier(float) to set multiplier to 0. ~Mike&lt;br /&gt;
: UPD: sorry, misunderstood functionality of this function. But could there be a method to disable traction on locos?&lt;br /&gt;
&lt;br /&gt;
* Ability to change (or only to reduce) the presure in auxilary reservoir of a vehicle. This provides a way to create different types of tripte valves for long-length trains (~70  vehicles), where using Train.SetVelocity() is unrealistic&lt;br /&gt;
&lt;br /&gt;
* Make in addition to Vehice.GetTrackGradient() also float Vehice.GetTrackCurveRadius() which return 0 for straight sections of track (instead of infinity). ~tram&lt;br /&gt;
* Make a function for smooth control of &amp;quot;soundscript&amp;quot;&#039;s sound volume. For example like void MapObject.SetSoundScriptVolume(string soundTrigger, float NewVolume, float Duration).  ~tram&lt;br /&gt;
&lt;br /&gt;
* Ability to set the camera view within an interior by a script to one of the defined cameras in the cameralist container.  It would also be handy if the camera orientation be configurable via a method call. --[[User:Pcas1986|pcas1986]] ([[User talk:Pcas1986|talk]]) 18:14, 20 February 2014 (EST)&lt;br /&gt;
&lt;br /&gt;
* Ability to place a bogey in an interior via the interiors config file.  This would allow for me to make a realistic gangways for my Amlfeets i.e. i have set created gangways for my exteiors using bogeys which allow them to rotate and remain aligned realistically. The issue arrizes when in the interior. I cannot aninate the interior gangway to aligne itself according to the curvature of track. If i could get the named bogey visible from the interior (similar to how one could make the exterior visble from interior) that would help.~ Ashton&lt;br /&gt;
&lt;br /&gt;
* Locomotive.SetEngineSetting(string setting, float value) - Ability to mute/activate engine sound for a locomotive adding setting &amp;quot;enginesound&amp;quot; to the list of settings, value 0 to mute, 1 to activate engine sound ~manweb&lt;br /&gt;
 - setting = The name of the setting to save (enginesound).&lt;br /&gt;
 - value = The value of the named setting. (0 - 1)&lt;br /&gt;
&lt;br /&gt;
* Math.sin,cos,tan,arcsin,arccos,arctan - Trigonometric functions to get the sine, cosine, and tangent of a float, and inverses of these&lt;br /&gt;
&lt;br /&gt;
==Complete==&lt;br /&gt;
* Simple destructor routine, or some other method of receiving notification of the deletion of scripted objects during a Surveyor session. (In the absence of World.GetJunctionBaseList() my new junction objects are maintaining a list of fixedtrack junctions via library calls in the Init() method of each object.  Apart from using the list myself, it is intended to be returned on demand to any script making the appropriate LibraryCall.  Since I have no way of telling that an object has been deleted, I need to rescan the entire list before returning it to ensure that each object still exists, this seems a touch inefficient when it could be easily kept up to date without a complete parse) -Andi&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* The ability for [[TrackSearch]] to return the trigger or track reference found for SceneryWithTrack descendants, including turntables and the ability to initiate a search from a specified trigger or track in SceneryWithTrack descendants.  A million reasons for this including trains being able to detect which track of an industry they can see in a proposed &#039;Call-At All Stations&#039; rule. -Andi06&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Compatibility of the [[TrackSearch]] with the animated fixed junctions. When I first got TRS2006 in my hands, I tried out my TrackView rule, but quickly discovered that it was impossible to find out the track topology (forgot the exact details, though) - [[User:Klausm|Klausm]]&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Extensions to TrackSearch()/GSTrackSearch() covered elsewhere to be sufficient to allow the topography of multi node junctions to be fully discovered. -Andi&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
*If we are going to use radians now (SetMeshOrientation()) could we please have PI?&lt;br /&gt;
:&#039;&#039;Math.PI&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Ability to configure permit structure to allow multi node junctions to coexist with the AI, whilst denying conflicting paths, as discussed above. -Andi&lt;br /&gt;
:&#039;&#039;Added named mutex support for attached junctions. See [[KIND SceneryWithTrack]].&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Fix World.GetAssetList(&amp;quot;texture-group&amp;quot;), this has been broken since TRS2004. -Andi06&lt;br /&gt;
:&#039;&#039;Now returns all assets with category-class &#039;JO&#039;. This seems to contain all &#039;texture-group&#039; type assets - though there maybe some unexpected extras.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to detect the use of &#039;Pause&#039; easily (a message would do) to stop cheating in shunting puzzles ~Jenolan&lt;br /&gt;
:&#039;&#039;New messages &amp;quot;World&amp;quot;, &amp;quot;Paused&amp;quot; and &amp;quot;World&amp;quot;, &amp;quot;Unpaused&amp;quot; now exist and should be broadcast at the appropriate times.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* World.GetCurrentTrain() Not essential obviously but it would save a lot of work. -Andi06&lt;br /&gt;
:&#039;&#039;Now exists.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to optionally detect mouseclick/ Keys [J] &amp;amp; [^J] without switching the junction. This can be hacked by making node 0 an invisible junction, but this will result in other objects querying the junction structure not getting the answer they expect (or not one they can understand). This is needed to allow objects with more than one junction node to cycle through their options in response to the user. -Andi&lt;br /&gt;
:&#039;&#039;I believe this is now possible via script overrides on the map object in question.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* A method of subclassing or outright using a script from another asset (ie. a script which is written once and reused heavily, allowing any fixes to be released as a single asset update.) - chris&lt;br /&gt;
:&#039;&#039;TS2009 now has the ability to cross-include scripts from another asset.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Dreamland, a new message: &#039;&#039;Junction,AboutToToggle&#039;&#039; -Andi&lt;br /&gt;
: &#039;&#039;How do you expect to act on this? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
::&#039;I believe this concept has been fulfilled via the UserRequestToggle overrides.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* On a similar note is there any chance you might amend the Exception dialogue to specify the object, (or even the Asset) which is causing the exception :-) -Andi&lt;br /&gt;
:: I think we did this one a while back. ~chris&lt;br /&gt;
&lt;br /&gt;
* SetMeshPosition(&amp;quot;meshname&amp;quot;, x,y,z) absolute positioning of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;This exists ~Andi&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Not necessarily - we support relative positioning, not absolute. This may or may not achieve what he wants.&#039;&#039; ~chris&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* GetMeshPosition(&amp;quot;meshname&amp;quot;, &amp;quot;x&amp;quot;)[&amp;quot;Y&amp;quot;][&amp;quot;Z&amp;quot;] receive the absolute position of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;Since you have used SetMeshPosition() to move the mesh, this is unneccessary&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Absolute position can be set in Surveyor. Relative position can be set in the [[config.txt file]]. I wouldn&#039;t say that this is completely unnecessary.&#039;&#039; ~chris&lt;br /&gt;
::: Thanks a lot for MapObject.GetMapObjectPosition() and MapObject.GetMapObjectOrientation() ~tram&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to load a menu asset directly from the command line ~Jenolan&lt;br /&gt;
:: This exists with &amp;quot;-scriptedmenu=&amp;lt;KUID&amp;gt;&amp;quot; ~chris&lt;br /&gt;
&lt;br /&gt;
==Rejected==&lt;br /&gt;
If there&#039;s a request that we&#039;re clearly not going to entertain at the current time, we&#039;ll move it to here. This includes both flat rejections and also requests which sound good but won&#039;t be done for the next version of Trainz.&lt;br /&gt;
&lt;br /&gt;
[[Rejected Script Feature Requests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Request]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7244</id>
		<title>Script Feature Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7244"/>
		<updated>2014-05-22T03:33:02Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is where the [[scripting]] community gets to post all their API feature requests. Request any additions that you think will enhance the game. Things to keep in mind:&lt;br /&gt;
* We are unlikely to add a feature which breaks any existing content.&lt;br /&gt;
* Script is for control purposes, and is not intended to enable significant modifications to the underlying game engine. We are very unlikely to introduce a feature where the obvious uses are going to result in significant performance penalties.&lt;br /&gt;
* We are far more likely to add features which are directly blocking something that the community is working on. If you have something cool, and need just a few minor additions then please detail what you&#039;re working on (ideally, on another wiki page linked from both here and your [[Content Creation Groups]] page) and why you need the additions.&lt;br /&gt;
* [[MiniBrowser]] requests should go on the separate [[MiniBrowser Feature Requests]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requests==&lt;br /&gt;
Requests are placed in this section by the community, for discussion and possible inclusion.&lt;br /&gt;
&lt;br /&gt;
* Add a method that will let you identify the industry at which a vehicle is located. If an industry track section can also carry the industry identifier, it would be most helpful.&lt;br /&gt;
&lt;br /&gt;
* Add a handle to allow a custom bell animation to be played when the bell is played on a locomotive (Vehicle.StartBell() and Vehicle.StopBell(), perhaps?).  Justification: Script can currently listen for the bell message, but since the message is a toggle, it is easy to get out of synch with the true state of the bell. For example, when coupling a locomotive whose bell is ringing to a locomotive whose bell is not ringing, the end result depends on which locomotive is currently in focus. - Curtis&lt;br /&gt;
&lt;br /&gt;
* Scale the visible bulk load animation on a traincar such that it takes Vehicle.GetLoadTime() to complete.  For example, if Vehicle.GetLoadTime() returns 5 seconds, the bulk animation would take 5 seconds to transition from the full state to the empty state.  This would be useful for industries that take more than one second to load / unload a car, as the visible load animation could be synced more closely with the industry animation. -Curtis&lt;br /&gt;
&lt;br /&gt;
* Extension to the function World.GetAssetList(string kind, bool OnlyIfUsedInCurrentMap) -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to play an avi and wait for it to finsh (no user interaction allowed) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* The ability to modify scenery trigger radii on the fly in script. This is really aimed at crossings so that train detection can be varied in line with track speed limits.  -Andi06&lt;br /&gt;
&lt;br /&gt;
* A method of refreshing the Property Browser to take account of any change in the target object&#039;s name during a property editing session. (Objects which have &#039;autoname 1&#039; in config will often be renamed by the user.  In some circumstances I am using the object name to set other properties. Typically an object might be created as &#039;Double Slip 1&#039; and might refer to its constituent nodes as &#039;Double Slip 1,Track 1&#039;.  This is to enable other objects to refer to it in a user friendly way.  On a name change the Property Browser continues to use the old name until the browser has been closed and reopened.  This is counter intuitive) -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability for a script to be able to read/change loco/rolling stock parameters (ie to simulate one loco losing air etc etc etc) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* SetFXCoronaTexture() A means of resetting to config.txt defaults.&lt;br /&gt;
&lt;br /&gt;
* Be able to play mp3 as well as wav. ~Jenolan&lt;br /&gt;
: &#039;&#039;I&#039;ve been able to do this where the asset doing the playing is a script library, I had Acker Bilk coming over a station tannoy at one point.  Not sure why it doesn&#039;t seem to work elsewhere. -Andi&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interface.MessageBox(Caption,Text), calling up a small browser with a close button would be helpful, especially for novices. Interface.Print() is a monumental PITA because it prints out upside down, doesn&#039;t hold enough lines, and only works in Driver. For sure its possible to write your own version of this but browsers aren&#039;t all that easy to get your head around and its a very basic facility that should be built in. -Andi&lt;br /&gt;
&lt;br /&gt;
* A standard config.txt tag &#039;junction-type normal/singleslip/doubleslip&#039; etc together with a spec for construction and behaviour might be helpful. I already have a complete schema for this. -Andi&lt;br /&gt;
: &#039;&#039;Uncertain what you&#039;re expecting to achieve here? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Is it possible to make a mesh available which matches the existing graphic direction indicators, it appears to be some sort of directional corona or variant. If not could a new marker mesh be developed that could be used with both types? The existing one has nasty alpha effects in any case. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to dynamically change the length of a piece of rolling stock as part of the load / unload process; to support logging disconnects (see http://www.trainzone.co.nz/logging.htm for examples)- Curtis&lt;br /&gt;
: &#039;&#039;This is an interesting concept, but sounds difficult to implement. I can&#039;t think of any way of adjusting the length unless it was the end item of a consist, since adjustment at any other time would require displacing the remainder of the consist. Could you expand on your ideas please.&#039;&#039; -chris&lt;br /&gt;
: &#039;&#039;The entire car, including lmfront &amp;amp; lmback, would be part of the loading / unloading animation. When loading, it would probably be necessary to displace the consist by moving one of the ends - perhaps the end with the locomotive? Potential issue: if when loading, the increase in consist length causes the end of the consist to run off the end of the track or collide with another train.  When unloading, you could break the consist at either or both lmfront / lmback - whichever move as part of the unloading animation.&#039;&#039; - Curtis&lt;br /&gt;
: &#039;&#039;May be simpler to just break the consist at both lmfront and lmback; centering the car in-between the two halves. -Curtis&lt;br /&gt;
&lt;br /&gt;
*Allow SetFXNameText(effect,text) to accept an empty string in the second parameter - Reason: It&#039;s really irritating having to write workarounds for this. ~Andi&lt;br /&gt;
&lt;br /&gt;
*SetMeshScale(X,Y,Z) and corresponding config tags. Positive or negative values would implement mesh mirroring at the same time. As an example of potential a placement option for trees might allow random scale factors (within reasonable limits) and random rotation.  Each tree placed would then vary in size, shape and rotation getting much more variation from the same mesh asset. ~Andi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to product loading / unloading functionality to allow incremental loads and unloads.&lt;br /&gt;
:Potential usages:  &lt;br /&gt;
:- Animation that plays once per item being loaded; such as a forklift carrying a crate to a boxcar, or a crane lifting a log to a flatcar.&lt;br /&gt;
:- Allow dynamic load times of bulk loads (small cars load faster than large cars), with the animated load rising / lowering synchronously.&lt;br /&gt;
&lt;br /&gt;
:Potential implementation:&lt;br /&gt;
:Extend vehicle.LoadProduct(report,units) where units = integer number of queue to be loaded each increment.  0 would be everything, defaulting to current LoadProduct() behavior, and add additional calls BeginIncrementalLoad(), EndIncrementalLoad(), BeginIncrementalUnload(), and EndIncrementalUnload().&lt;br /&gt;
&lt;br /&gt;
:During a load operation that loads 3 increments (units=1, target queue on the car = 3), the flow would look like:&lt;br /&gt;
 BeginLoad() // open car doors; station doors&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad() //  start loading animation, start sounds; pfx; add any delays&lt;br /&gt;
 TransferProductFrom() // maximumToTransfer = units&lt;br /&gt;
 EndIncrementalLoad() // animate forklift returning to station / end sounds / pfx / other cleanup&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 EndLoad() // close car &amp;amp; station doors&lt;br /&gt;
&lt;br /&gt;
* Ability to add a vehicle to an existing consist like Vehicle.Reposition( Train, MyCouple, OtherCouple ) this would save needing a work track mark to add vehicles which would be very helpful ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Extension to AddHandler to allow this syntax: AddHandler(target,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;MessageHandler&amp;quot;), passing all messages to the specified handler, for justification see discussion page. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to store any information along with the layout and not the session (i.e. &#039;&#039;PropertyObject.SetLayoutProperties&#039;&#039; and &#039;&#039;PropertyObject.GetLayoutProperties&#039;&#039;, taking/returning &#039;&#039;Soup&#039;&#039; objects respectively). Rationale: the non-existence is a major drawback with configurable signals - [[User:Klausm|Klausm]]&lt;br /&gt;
&lt;br /&gt;
* Access to asset location, height, rotation in script.  This came up twice - once when I wanted to keep traffic lights upright when the containing asset is rolled, and once when I wanted to add simple real time ground shadows to assets. -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to arbitrarily add an attachment point to an item. To allow things like FRED/BOG sundry animations and so on ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Not really script. A generic clickable mesh object, its an easy hack using a fixedtrack junction but it would nice to have an official version - click on the engine shed to open the doors, click on the signal box to open a track browser etc etc. Mappable click regions too if its not too much to ask :-) -Andi&lt;br /&gt;
&lt;br /&gt;
* Extension/Alternative to World.GetJunctionList to return fixed track junction objects or nodes, I can script this easily for objects using my library but this would not be the case for all junctions. -Andi&lt;br /&gt;
&lt;br /&gt;
* World.Play2DSound(Asset,filename) allows sound files to be saved in a &#039;sound library&#039; asset and avoids duplication.  Can we have a similar facility for images to be used in html assets.  A lot of the dependencies that I use are images and icons.  I&#039;m consciously trying to avoid this now - its the source of much pain - but to do this for the Junction Kit for instance I would have to have copies of all necessary images in all of the placeable assets (there are more than 50) If I could simply keep one copy in the script library it would save much bandwidth, diskspace and support. -Andi06&lt;br /&gt;
&lt;br /&gt;
* genesteal : cab features.&lt;br /&gt;
- methods for light controls in cabin : Control.SetFlash (float frequency).Make the control visible/invisible on the intervall frequency. may be Meshobjects.gs for more general purpose. The same for texture swapping in texture replacement.&lt;br /&gt;
- New conrol cab &amp;quot;button&amp;quot; with vertical translation limit : method set and get value as usual, method for &amp;quot;while depressed&amp;quot; behavior: Setdepressed ( method to run).&lt;br /&gt;
&lt;br /&gt;
- Speedlimiter method : Set a speedlimit replacing the max speed possible on cab mode.(engine)&lt;br /&gt;
&lt;br /&gt;
- Set engine methods : &lt;br /&gt;
Locomotive.SwapEngine(kuid); replace engine by another for a locomotive. feature existing on actual loco to set a traction service if the loco have to drive freight or passengers consists. This method can replace speedlimit above and may be more accurate : speedlimit and power will be set together as prototypical setting before a journey. &lt;br /&gt;
- Locomotive.EngineStop(): stops the enginesound  and play a stop.wav, located in enginesound folder.&lt;br /&gt;
- Locomotive.EngineStart() : starts enginesound like this : play  a start.wav located in enginesound folder, then idle 0.wav.&lt;br /&gt;
&lt;br /&gt;
* Allow function Vehicle.SetTractionMultiplier(float) to set multiplier to 0. ~Mike&lt;br /&gt;
: UPD: sorry, misunderstood functionality of this function. But could there be a method to disable traction on locos?&lt;br /&gt;
&lt;br /&gt;
* Ability to change (or only to reduce) the presure in auxilary reservoir of a vehicle. This provides a way to create different types of tripte valves for long-length trains (~70  vehicles), where using Train.SetVelocity() is unrealistic&lt;br /&gt;
&lt;br /&gt;
* Make in addition to Vehice.GetTrackGradient() also float Vehice.GetTrackCurveRadius() which return 0 for straight sections of track (instead of infinity). ~tram&lt;br /&gt;
* Make a function for smooth control of &amp;quot;soundscript&amp;quot;&#039;s sound volume. For example like void MapObject.SetSoundScriptVolume(string soundTrigger, float NewVolume, float Duration).  ~tram&lt;br /&gt;
&lt;br /&gt;
* Ability to set the camera view within an interior by a script to one of the defined cameras in the cameralist container.  It would also be handy if the camera orientation be configurable via a method call. --[[User:Pcas1986|pcas1986]] ([[User talk:Pcas1986|talk]]) 18:14, 20 February 2014 (EST)&lt;br /&gt;
&lt;br /&gt;
* Ability to place a bogey in an interior via the interiors config file.  This would allow for me to make a realistic gangway for my Amlfeets ~ Ashton&lt;br /&gt;
&lt;br /&gt;
==Complete==&lt;br /&gt;
* Simple destructor routine, or some other method of receiving notification of the deletion of scripted objects during a Surveyor session. (In the absence of World.GetJunctionBaseList() my new junction objects are maintaining a list of fixedtrack junctions via library calls in the Init() method of each object.  Apart from using the list myself, it is intended to be returned on demand to any script making the appropriate LibraryCall.  Since I have no way of telling that an object has been deleted, I need to rescan the entire list before returning it to ensure that each object still exists, this seems a touch inefficient when it could be easily kept up to date without a complete parse) -Andi&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* The ability for [[TrackSearch]] to return the trigger or track reference found for SceneryWithTrack descendants, including turntables and the ability to initiate a search from a specified trigger or track in SceneryWithTrack descendants.  A million reasons for this including trains being able to detect which track of an industry they can see in a proposed &#039;Call-At All Stations&#039; rule. -Andi06&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Compatibility of the [[TrackSearch]] with the animated fixed junctions. When I first got TRS2006 in my hands, I tried out my TrackView rule, but quickly discovered that it was impossible to find out the track topology (forgot the exact details, though) - [[User:Klausm|Klausm]]&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Extensions to TrackSearch()/GSTrackSearch() covered elsewhere to be sufficient to allow the topography of multi node junctions to be fully discovered. -Andi&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
*If we are going to use radians now (SetMeshOrientation()) could we please have PI?&lt;br /&gt;
:&#039;&#039;Math.PI&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Ability to configure permit structure to allow multi node junctions to coexist with the AI, whilst denying conflicting paths, as discussed above. -Andi&lt;br /&gt;
:&#039;&#039;Added named mutex support for attached junctions. See [[KIND SceneryWithTrack]].&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Fix World.GetAssetList(&amp;quot;texture-group&amp;quot;), this has been broken since TRS2004. -Andi06&lt;br /&gt;
:&#039;&#039;Now returns all assets with category-class &#039;JO&#039;. This seems to contain all &#039;texture-group&#039; type assets - though there maybe some unexpected extras.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to detect the use of &#039;Pause&#039; easily (a message would do) to stop cheating in shunting puzzles ~Jenolan&lt;br /&gt;
:&#039;&#039;New messages &amp;quot;World&amp;quot;, &amp;quot;Paused&amp;quot; and &amp;quot;World&amp;quot;, &amp;quot;Unpaused&amp;quot; now exist and should be broadcast at the appropriate times.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* World.GetCurrentTrain() Not essential obviously but it would save a lot of work. -Andi06&lt;br /&gt;
:&#039;&#039;Now exists.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to optionally detect mouseclick/ Keys [J] &amp;amp; [^J] without switching the junction. This can be hacked by making node 0 an invisible junction, but this will result in other objects querying the junction structure not getting the answer they expect (or not one they can understand). This is needed to allow objects with more than one junction node to cycle through their options in response to the user. -Andi&lt;br /&gt;
:&#039;&#039;I believe this is now possible via script overrides on the map object in question.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* A method of subclassing or outright using a script from another asset (ie. a script which is written once and reused heavily, allowing any fixes to be released as a single asset update.) - chris&lt;br /&gt;
:&#039;&#039;TS2009 now has the ability to cross-include scripts from another asset.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Dreamland, a new message: &#039;&#039;Junction,AboutToToggle&#039;&#039; -Andi&lt;br /&gt;
: &#039;&#039;How do you expect to act on this? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
::&#039;I believe this concept has been fulfilled via the UserRequestToggle overrides.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* On a similar note is there any chance you might amend the Exception dialogue to specify the object, (or even the Asset) which is causing the exception :-) -Andi&lt;br /&gt;
:: I think we did this one a while back. ~chris&lt;br /&gt;
&lt;br /&gt;
* SetMeshPosition(&amp;quot;meshname&amp;quot;, x,y,z) absolute positioning of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;This exists ~Andi&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Not necessarily - we support relative positioning, not absolute. This may or may not achieve what he wants.&#039;&#039; ~chris&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* GetMeshPosition(&amp;quot;meshname&amp;quot;, &amp;quot;x&amp;quot;)[&amp;quot;Y&amp;quot;][&amp;quot;Z&amp;quot;] receive the absolute position of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;Since you have used SetMeshPosition() to move the mesh, this is unneccessary&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Absolute position can be set in Surveyor. Relative position can be set in the [[config.txt file]]. I wouldn&#039;t say that this is completely unnecessary.&#039;&#039; ~chris&lt;br /&gt;
::: Thanks a lot for MapObject.GetMapObjectPosition() and MapObject.GetMapObjectOrientation() ~tram&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to load a menu asset directly from the command line ~Jenolan&lt;br /&gt;
:: This exists with &amp;quot;-scriptedmenu=&amp;lt;KUID&amp;gt;&amp;quot; ~chris&lt;br /&gt;
&lt;br /&gt;
==Rejected==&lt;br /&gt;
If there&#039;s a request that we&#039;re clearly not going to entertain at the current time, we&#039;ll move it to here. This includes both flat rejections and also requests which sound good but won&#039;t be done for the next version of Trainz.&lt;br /&gt;
&lt;br /&gt;
[[Rejected Script Feature Requests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Request]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7140</id>
		<title>Script Feature Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7140"/>
		<updated>2014-05-13T02:29:15Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Complete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is where the [[scripting]] community gets to post all their API feature requests. Request any additions that you think will enhance the game. Things to keep in mind:&lt;br /&gt;
* We are unlikely to add a feature which breaks any existing content.&lt;br /&gt;
* Script is for control purposes, and is not intended to enable significant modifications to the underlying game engine. We are very unlikely to introduce a feature where the obvious uses are going to result in significant performance penalties.&lt;br /&gt;
* We are far more likely to add features which are directly blocking something that the community is working on. If you have something cool, and need just a few minor additions then please detail what you&#039;re working on (ideally, on another wiki page linked from both here and your [[Content Creation Groups]] page) and why you need the additions.&lt;br /&gt;
* [[MiniBrowser]] requests should go on the separate [[MiniBrowser Feature Requests]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requests==&lt;br /&gt;
Requests are placed in this section by the community, for discussion and possible inclusion.&lt;br /&gt;
&lt;br /&gt;
* Add a method that will let you identify the industry at which a vehicle is located. If an industry track section can also carry the industry identifier, it would be most helpful.&lt;br /&gt;
&lt;br /&gt;
* Add a handle to allow a custom bell animation to be played when the bell is played on a locomotive (Vehicle.StartBell() and Vehicle.StopBell(), perhaps?).  Justification: Script can currently listen for the bell message, but since the message is a toggle, it is easy to get out of synch with the true state of the bell. For example, when coupling a locomotive whose bell is ringing to a locomotive whose bell is not ringing, the end result depends on which locomotive is currently in focus. - Curtis&lt;br /&gt;
&lt;br /&gt;
* Scale the visible bulk load animation on a traincar such that it takes Vehicle.GetLoadTime() to complete.  For example, if Vehicle.GetLoadTime() returns 5 seconds, the bulk animation would take 5 seconds to transition from the full state to the empty state.  This would be useful for industries that take more than one second to load / unload a car, as the visible load animation could be synced more closely with the industry animation. -Curtis&lt;br /&gt;
&lt;br /&gt;
* Extension to the function World.GetAssetList(string kind, bool OnlyIfUsedInCurrentMap) -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to play an avi and wait for it to finsh (no user interaction allowed) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* The ability to modify scenery trigger radii on the fly in script. This is really aimed at crossings so that train detection can be varied in line with track speed limits.  -Andi06&lt;br /&gt;
&lt;br /&gt;
* A method of refreshing the Property Browser to take account of any change in the target object&#039;s name during a property editing session. (Objects which have &#039;autoname 1&#039; in config will often be renamed by the user.  In some circumstances I am using the object name to set other properties. Typically an object might be created as &#039;Double Slip 1&#039; and might refer to its constituent nodes as &#039;Double Slip 1,Track 1&#039;.  This is to enable other objects to refer to it in a user friendly way.  On a name change the Property Browser continues to use the old name until the browser has been closed and reopened.  This is counter intuitive) -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability for a script to be able to read/change loco/rolling stock parameters (ie to simulate one loco losing air etc etc etc) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* SetFXCoronaTexture() A means of resetting to config.txt defaults.&lt;br /&gt;
&lt;br /&gt;
* Be able to play mp3 as well as wav. ~Jenolan&lt;br /&gt;
: &#039;&#039;I&#039;ve been able to do this where the asset doing the playing is a script library, I had Acker Bilk coming over a station tannoy at one point.  Not sure why it doesn&#039;t seem to work elsewhere. -Andi&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interface.MessageBox(Caption,Text), calling up a small browser with a close button would be helpful, especially for novices. Interface.Print() is a monumental PITA because it prints out upside down, doesn&#039;t hold enough lines, and only works in Driver. For sure its possible to write your own version of this but browsers aren&#039;t all that easy to get your head around and its a very basic facility that should be built in. -Andi&lt;br /&gt;
&lt;br /&gt;
* A standard config.txt tag &#039;junction-type normal/singleslip/doubleslip&#039; etc together with a spec for construction and behaviour might be helpful. I already have a complete schema for this. -Andi&lt;br /&gt;
: &#039;&#039;Uncertain what you&#039;re expecting to achieve here? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Is it possible to make a mesh available which matches the existing graphic direction indicators, it appears to be some sort of directional corona or variant. If not could a new marker mesh be developed that could be used with both types? The existing one has nasty alpha effects in any case. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to dynamically change the length of a piece of rolling stock as part of the load / unload process; to support logging disconnects (see http://www.trainzone.co.nz/logging.htm for examples)- Curtis&lt;br /&gt;
: &#039;&#039;This is an interesting concept, but sounds difficult to implement. I can&#039;t think of any way of adjusting the length unless it was the end item of a consist, since adjustment at any other time would require displacing the remainder of the consist. Could you expand on your ideas please.&#039;&#039; -chris&lt;br /&gt;
: &#039;&#039;The entire car, including lmfront &amp;amp; lmback, would be part of the loading / unloading animation. When loading, it would probably be necessary to displace the consist by moving one of the ends - perhaps the end with the locomotive? Potential issue: if when loading, the increase in consist length causes the end of the consist to run off the end of the track or collide with another train.  When unloading, you could break the consist at either or both lmfront / lmback - whichever move as part of the unloading animation.&#039;&#039; - Curtis&lt;br /&gt;
: &#039;&#039;May be simpler to just break the consist at both lmfront and lmback; centering the car in-between the two halves. -Curtis&lt;br /&gt;
&lt;br /&gt;
*Allow SetFXNameText(effect,text) to accept an empty string in the second parameter - Reason: It&#039;s really irritating having to write workarounds for this. ~Andi&lt;br /&gt;
&lt;br /&gt;
*SetMeshScale(X,Y,Z) and corresponding config tags. Positive or negative values would implement mesh mirroring at the same time. As an example of potential a placement option for trees might allow random scale factors (within reasonable limits) and random rotation.  Each tree placed would then vary in size, shape and rotation getting much more variation from the same mesh asset. ~Andi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to product loading / unloading functionality to allow incremental loads and unloads.&lt;br /&gt;
:Potential usages:  &lt;br /&gt;
:- Animation that plays once per item being loaded; such as a forklift carrying a crate to a boxcar, or a crane lifting a log to a flatcar.&lt;br /&gt;
:- Allow dynamic load times of bulk loads (small cars load faster than large cars), with the animated load rising / lowering synchronously.&lt;br /&gt;
&lt;br /&gt;
:Potential implementation:&lt;br /&gt;
:Extend vehicle.LoadProduct(report,units) where units = integer number of queue to be loaded each increment.  0 would be everything, defaulting to current LoadProduct() behavior, and add additional calls BeginIncrementalLoad(), EndIncrementalLoad(), BeginIncrementalUnload(), and EndIncrementalUnload().&lt;br /&gt;
&lt;br /&gt;
:During a load operation that loads 3 increments (units=1, target queue on the car = 3), the flow would look like:&lt;br /&gt;
 BeginLoad() // open car doors; station doors&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad() //  start loading animation, start sounds; pfx; add any delays&lt;br /&gt;
 TransferProductFrom() // maximumToTransfer = units&lt;br /&gt;
 EndIncrementalLoad() // animate forklift returning to station / end sounds / pfx / other cleanup&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 EndLoad() // close car &amp;amp; station doors&lt;br /&gt;
&lt;br /&gt;
* Ability to add a vehicle to an existing consist like Vehicle.Reposition( Train, MyCouple, OtherCouple ) this would save needing a work track mark to add vehicles which would be very helpful ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Extension to AddHandler to allow this syntax: AddHandler(target,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;MessageHandler&amp;quot;), passing all messages to the specified handler, for justification see discussion page. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to store any information along with the layout and not the session (i.e. &#039;&#039;PropertyObject.SetLayoutProperties&#039;&#039; and &#039;&#039;PropertyObject.GetLayoutProperties&#039;&#039;, taking/returning &#039;&#039;Soup&#039;&#039; objects respectively). Rationale: the non-existence is a major drawback with configurable signals - [[User:Klausm|Klausm]]&lt;br /&gt;
&lt;br /&gt;
* Access to asset location, height, rotation in script.  This came up twice - once when I wanted to keep traffic lights upright when the containing asset is rolled, and once when I wanted to add simple real time ground shadows to assets. -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to arbitrarily add an attachment point to an item. To allow things like FRED/BOG sundry animations and so on ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Not really script. A generic clickable mesh object, its an easy hack using a fixedtrack junction but it would nice to have an official version - click on the engine shed to open the doors, click on the signal box to open a track browser etc etc. Mappable click regions too if its not too much to ask :-) -Andi&lt;br /&gt;
&lt;br /&gt;
* Extension/Alternative to World.GetJunctionList to return fixed track junction objects or nodes, I can script this easily for objects using my library but this would not be the case for all junctions. -Andi&lt;br /&gt;
&lt;br /&gt;
* World.Play2DSound(Asset,filename) allows sound files to be saved in a &#039;sound library&#039; asset and avoids duplication.  Can we have a similar facility for images to be used in html assets.  A lot of the dependencies that I use are images and icons.  I&#039;m consciously trying to avoid this now - its the source of much pain - but to do this for the Junction Kit for instance I would have to have copies of all necessary images in all of the placeable assets (there are more than 50) If I could simply keep one copy in the script library it would save much bandwidth, diskspace and support. -Andi06&lt;br /&gt;
&lt;br /&gt;
* genesteal : cab features.&lt;br /&gt;
- methods for light controls in cabin : Control.SetFlash (float frequency).Make the control visible/invisible on the intervall frequency. may be Meshobjects.gs for more general purpose. The same for texture swapping in texture replacement.&lt;br /&gt;
- New conrol cab &amp;quot;button&amp;quot; with vertical translation limit : method set and get value as usual, method for &amp;quot;while depressed&amp;quot; behavior: Setdepressed ( method to run).&lt;br /&gt;
&lt;br /&gt;
- Speedlimiter method : Set a speedlimit replacing the max speed possible on cab mode.(engine)&lt;br /&gt;
&lt;br /&gt;
- Set engine methods : &lt;br /&gt;
Locomotive.SwapEngine(kuid); replace engine by another for a locomotive. feature existing on actual loco to set a traction service if the loco have to drive freight or passengers consists. This method can replace speedlimit above and may be more accurate : speedlimit and power will be set together as prototypical setting before a journey. &lt;br /&gt;
- Locomotive.EngineStop(): stops the enginesound  and play a stop.wav, located in enginesound folder.&lt;br /&gt;
- Locomotive.EngineStart() : starts enginesound like this : play  a start.wav located in enginesound folder, then idle 0.wav.&lt;br /&gt;
&lt;br /&gt;
* Allow function Vehicle.SetTractionMultiplier(float) to set multiplier to 0. ~Mike&lt;br /&gt;
: UPD: sorry, misunderstood functionality of this function. But could there be a method to disable traction on locos?&lt;br /&gt;
&lt;br /&gt;
* Ability to change (or only to reduce) the presure in auxilary reservoir of a vehicle. This provides a way to create different types of tripte valves for long-length trains (~70  vehicles), where using Train.SetVelocity() is unrealistic&lt;br /&gt;
&lt;br /&gt;
* Make in addition to Vehice.GetTrackGradient() also float Vehice.GetTrackCurveRadius() which return 0 for straight sections of track (instead of infinity). ~tram&lt;br /&gt;
* Make a function for smooth control of &amp;quot;soundscript&amp;quot;&#039;s sound volume. For example like void MapObject.SetSoundScriptVolume(string soundTrigger, float NewVolume, float Duration).  ~tram&lt;br /&gt;
&lt;br /&gt;
* Ability to set the camera view within an interior by a script to one of the defined cameras in the cameralist container.  It would also be handy if the camera orientation be configurable via a method call. --[[User:Pcas1986|pcas1986]] ([[User talk:Pcas1986|talk]]) 18:14, 20 February 2014 (EST)&lt;br /&gt;
&lt;br /&gt;
* Ability to make a bogey and it&#039;s constantly changing orientation visible from an interior via the interiors config file ~ Ashton&lt;br /&gt;
&lt;br /&gt;
==Complete==&lt;br /&gt;
* Simple destructor routine, or some other method of receiving notification of the deletion of scripted objects during a Surveyor session. (In the absence of World.GetJunctionBaseList() my new junction objects are maintaining a list of fixedtrack junctions via library calls in the Init() method of each object.  Apart from using the list myself, it is intended to be returned on demand to any script making the appropriate LibraryCall.  Since I have no way of telling that an object has been deleted, I need to rescan the entire list before returning it to ensure that each object still exists, this seems a touch inefficient when it could be easily kept up to date without a complete parse) -Andi&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* The ability for [[TrackSearch]] to return the trigger or track reference found for SceneryWithTrack descendants, including turntables and the ability to initiate a search from a specified trigger or track in SceneryWithTrack descendants.  A million reasons for this including trains being able to detect which track of an industry they can see in a proposed &#039;Call-At All Stations&#039; rule. -Andi06&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Compatibility of the [[TrackSearch]] with the animated fixed junctions. When I first got TRS2006 in my hands, I tried out my TrackView rule, but quickly discovered that it was impossible to find out the track topology (forgot the exact details, though) - [[User:Klausm|Klausm]]&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Extensions to TrackSearch()/GSTrackSearch() covered elsewhere to be sufficient to allow the topography of multi node junctions to be fully discovered. -Andi&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
*If we are going to use radians now (SetMeshOrientation()) could we please have PI?&lt;br /&gt;
:&#039;&#039;Math.PI&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Ability to configure permit structure to allow multi node junctions to coexist with the AI, whilst denying conflicting paths, as discussed above. -Andi&lt;br /&gt;
:&#039;&#039;Added named mutex support for attached junctions. See [[KIND SceneryWithTrack]].&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Fix World.GetAssetList(&amp;quot;texture-group&amp;quot;), this has been broken since TRS2004. -Andi06&lt;br /&gt;
:&#039;&#039;Now returns all assets with category-class &#039;JO&#039;. This seems to contain all &#039;texture-group&#039; type assets - though there maybe some unexpected extras.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to detect the use of &#039;Pause&#039; easily (a message would do) to stop cheating in shunting puzzles ~Jenolan&lt;br /&gt;
:&#039;&#039;New messages &amp;quot;World&amp;quot;, &amp;quot;Paused&amp;quot; and &amp;quot;World&amp;quot;, &amp;quot;Unpaused&amp;quot; now exist and should be broadcast at the appropriate times.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* World.GetCurrentTrain() Not essential obviously but it would save a lot of work. -Andi06&lt;br /&gt;
:&#039;&#039;Now exists.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to optionally detect mouseclick/ Keys [J] &amp;amp; [^J] without switching the junction. This can be hacked by making node 0 an invisible junction, but this will result in other objects querying the junction structure not getting the answer they expect (or not one they can understand). This is needed to allow objects with more than one junction node to cycle through their options in response to the user. -Andi&lt;br /&gt;
:&#039;&#039;I believe this is now possible via script overrides on the map object in question.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* A method of subclassing or outright using a script from another asset (ie. a script which is written once and reused heavily, allowing any fixes to be released as a single asset update.) - chris&lt;br /&gt;
:&#039;&#039;TS2009 now has the ability to cross-include scripts from another asset.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Dreamland, a new message: &#039;&#039;Junction,AboutToToggle&#039;&#039; -Andi&lt;br /&gt;
: &#039;&#039;How do you expect to act on this? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
::&#039;I believe this concept has been fulfilled via the UserRequestToggle overrides.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* On a similar note is there any chance you might amend the Exception dialogue to specify the object, (or even the Asset) which is causing the exception :-) -Andi&lt;br /&gt;
:: I think we did this one a while back. ~chris&lt;br /&gt;
&lt;br /&gt;
* SetMeshPosition(&amp;quot;meshname&amp;quot;, x,y,z) absolute positioning of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;This exists ~Andi&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Not necessarily - we support relative positioning, not absolute. This may or may not achieve what he wants.&#039;&#039; ~chris&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* GetMeshPosition(&amp;quot;meshname&amp;quot;, &amp;quot;x&amp;quot;)[&amp;quot;Y&amp;quot;][&amp;quot;Z&amp;quot;] receive the absolute position of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;Since you have used SetMeshPosition() to move the mesh, this is unneccessary&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Absolute position can be set in Surveyor. Relative position can be set in the [[config.txt file]]. I wouldn&#039;t say that this is completely unnecessary.&#039;&#039; ~chris&lt;br /&gt;
::: Thanks a lot for MapObject.GetMapObjectPosition() and MapObject.GetMapObjectOrientation() ~tram&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to load a menu asset directly from the command line ~Jenolan&lt;br /&gt;
:: This exists with &amp;quot;-scriptedmenu=&amp;lt;KUID&amp;gt;&amp;quot; ~chris&lt;br /&gt;
&lt;br /&gt;
==Rejected==&lt;br /&gt;
If there&#039;s a request that we&#039;re clearly not going to entertain at the current time, we&#039;ll move it to here. This includes both flat rejections and also requests which sound good but won&#039;t be done for the next version of Trainz.&lt;br /&gt;
&lt;br /&gt;
[[Rejected Script Feature Requests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Request]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7139</id>
		<title>Script Feature Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7139"/>
		<updated>2014-05-13T02:28:58Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is where the [[scripting]] community gets to post all their API feature requests. Request any additions that you think will enhance the game. Things to keep in mind:&lt;br /&gt;
* We are unlikely to add a feature which breaks any existing content.&lt;br /&gt;
* Script is for control purposes, and is not intended to enable significant modifications to the underlying game engine. We are very unlikely to introduce a feature where the obvious uses are going to result in significant performance penalties.&lt;br /&gt;
* We are far more likely to add features which are directly blocking something that the community is working on. If you have something cool, and need just a few minor additions then please detail what you&#039;re working on (ideally, on another wiki page linked from both here and your [[Content Creation Groups]] page) and why you need the additions.&lt;br /&gt;
* [[MiniBrowser]] requests should go on the separate [[MiniBrowser Feature Requests]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requests==&lt;br /&gt;
Requests are placed in this section by the community, for discussion and possible inclusion.&lt;br /&gt;
&lt;br /&gt;
* Add a method that will let you identify the industry at which a vehicle is located. If an industry track section can also carry the industry identifier, it would be most helpful.&lt;br /&gt;
&lt;br /&gt;
* Add a handle to allow a custom bell animation to be played when the bell is played on a locomotive (Vehicle.StartBell() and Vehicle.StopBell(), perhaps?).  Justification: Script can currently listen for the bell message, but since the message is a toggle, it is easy to get out of synch with the true state of the bell. For example, when coupling a locomotive whose bell is ringing to a locomotive whose bell is not ringing, the end result depends on which locomotive is currently in focus. - Curtis&lt;br /&gt;
&lt;br /&gt;
* Scale the visible bulk load animation on a traincar such that it takes Vehicle.GetLoadTime() to complete.  For example, if Vehicle.GetLoadTime() returns 5 seconds, the bulk animation would take 5 seconds to transition from the full state to the empty state.  This would be useful for industries that take more than one second to load / unload a car, as the visible load animation could be synced more closely with the industry animation. -Curtis&lt;br /&gt;
&lt;br /&gt;
* Extension to the function World.GetAssetList(string kind, bool OnlyIfUsedInCurrentMap) -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to play an avi and wait for it to finsh (no user interaction allowed) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* The ability to modify scenery trigger radii on the fly in script. This is really aimed at crossings so that train detection can be varied in line with track speed limits.  -Andi06&lt;br /&gt;
&lt;br /&gt;
* A method of refreshing the Property Browser to take account of any change in the target object&#039;s name during a property editing session. (Objects which have &#039;autoname 1&#039; in config will often be renamed by the user.  In some circumstances I am using the object name to set other properties. Typically an object might be created as &#039;Double Slip 1&#039; and might refer to its constituent nodes as &#039;Double Slip 1,Track 1&#039;.  This is to enable other objects to refer to it in a user friendly way.  On a name change the Property Browser continues to use the old name until the browser has been closed and reopened.  This is counter intuitive) -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability for a script to be able to read/change loco/rolling stock parameters (ie to simulate one loco losing air etc etc etc) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* SetFXCoronaTexture() A means of resetting to config.txt defaults.&lt;br /&gt;
&lt;br /&gt;
* Be able to play mp3 as well as wav. ~Jenolan&lt;br /&gt;
: &#039;&#039;I&#039;ve been able to do this where the asset doing the playing is a script library, I had Acker Bilk coming over a station tannoy at one point.  Not sure why it doesn&#039;t seem to work elsewhere. -Andi&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interface.MessageBox(Caption,Text), calling up a small browser with a close button would be helpful, especially for novices. Interface.Print() is a monumental PITA because it prints out upside down, doesn&#039;t hold enough lines, and only works in Driver. For sure its possible to write your own version of this but browsers aren&#039;t all that easy to get your head around and its a very basic facility that should be built in. -Andi&lt;br /&gt;
&lt;br /&gt;
* A standard config.txt tag &#039;junction-type normal/singleslip/doubleslip&#039; etc together with a spec for construction and behaviour might be helpful. I already have a complete schema for this. -Andi&lt;br /&gt;
: &#039;&#039;Uncertain what you&#039;re expecting to achieve here? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Is it possible to make a mesh available which matches the existing graphic direction indicators, it appears to be some sort of directional corona or variant. If not could a new marker mesh be developed that could be used with both types? The existing one has nasty alpha effects in any case. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to dynamically change the length of a piece of rolling stock as part of the load / unload process; to support logging disconnects (see http://www.trainzone.co.nz/logging.htm for examples)- Curtis&lt;br /&gt;
: &#039;&#039;This is an interesting concept, but sounds difficult to implement. I can&#039;t think of any way of adjusting the length unless it was the end item of a consist, since adjustment at any other time would require displacing the remainder of the consist. Could you expand on your ideas please.&#039;&#039; -chris&lt;br /&gt;
: &#039;&#039;The entire car, including lmfront &amp;amp; lmback, would be part of the loading / unloading animation. When loading, it would probably be necessary to displace the consist by moving one of the ends - perhaps the end with the locomotive? Potential issue: if when loading, the increase in consist length causes the end of the consist to run off the end of the track or collide with another train.  When unloading, you could break the consist at either or both lmfront / lmback - whichever move as part of the unloading animation.&#039;&#039; - Curtis&lt;br /&gt;
: &#039;&#039;May be simpler to just break the consist at both lmfront and lmback; centering the car in-between the two halves. -Curtis&lt;br /&gt;
&lt;br /&gt;
*Allow SetFXNameText(effect,text) to accept an empty string in the second parameter - Reason: It&#039;s really irritating having to write workarounds for this. ~Andi&lt;br /&gt;
&lt;br /&gt;
*SetMeshScale(X,Y,Z) and corresponding config tags. Positive or negative values would implement mesh mirroring at the same time. As an example of potential a placement option for trees might allow random scale factors (within reasonable limits) and random rotation.  Each tree placed would then vary in size, shape and rotation getting much more variation from the same mesh asset. ~Andi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to product loading / unloading functionality to allow incremental loads and unloads.&lt;br /&gt;
:Potential usages:  &lt;br /&gt;
:- Animation that plays once per item being loaded; such as a forklift carrying a crate to a boxcar, or a crane lifting a log to a flatcar.&lt;br /&gt;
:- Allow dynamic load times of bulk loads (small cars load faster than large cars), with the animated load rising / lowering synchronously.&lt;br /&gt;
&lt;br /&gt;
:Potential implementation:&lt;br /&gt;
:Extend vehicle.LoadProduct(report,units) where units = integer number of queue to be loaded each increment.  0 would be everything, defaulting to current LoadProduct() behavior, and add additional calls BeginIncrementalLoad(), EndIncrementalLoad(), BeginIncrementalUnload(), and EndIncrementalUnload().&lt;br /&gt;
&lt;br /&gt;
:During a load operation that loads 3 increments (units=1, target queue on the car = 3), the flow would look like:&lt;br /&gt;
 BeginLoad() // open car doors; station doors&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad() //  start loading animation, start sounds; pfx; add any delays&lt;br /&gt;
 TransferProductFrom() // maximumToTransfer = units&lt;br /&gt;
 EndIncrementalLoad() // animate forklift returning to station / end sounds / pfx / other cleanup&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 EndLoad() // close car &amp;amp; station doors&lt;br /&gt;
&lt;br /&gt;
* Ability to add a vehicle to an existing consist like Vehicle.Reposition( Train, MyCouple, OtherCouple ) this would save needing a work track mark to add vehicles which would be very helpful ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Extension to AddHandler to allow this syntax: AddHandler(target,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;MessageHandler&amp;quot;), passing all messages to the specified handler, for justification see discussion page. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to store any information along with the layout and not the session (i.e. &#039;&#039;PropertyObject.SetLayoutProperties&#039;&#039; and &#039;&#039;PropertyObject.GetLayoutProperties&#039;&#039;, taking/returning &#039;&#039;Soup&#039;&#039; objects respectively). Rationale: the non-existence is a major drawback with configurable signals - [[User:Klausm|Klausm]]&lt;br /&gt;
&lt;br /&gt;
* Access to asset location, height, rotation in script.  This came up twice - once when I wanted to keep traffic lights upright when the containing asset is rolled, and once when I wanted to add simple real time ground shadows to assets. -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to arbitrarily add an attachment point to an item. To allow things like FRED/BOG sundry animations and so on ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Not really script. A generic clickable mesh object, its an easy hack using a fixedtrack junction but it would nice to have an official version - click on the engine shed to open the doors, click on the signal box to open a track browser etc etc. Mappable click regions too if its not too much to ask :-) -Andi&lt;br /&gt;
&lt;br /&gt;
* Extension/Alternative to World.GetJunctionList to return fixed track junction objects or nodes, I can script this easily for objects using my library but this would not be the case for all junctions. -Andi&lt;br /&gt;
&lt;br /&gt;
* World.Play2DSound(Asset,filename) allows sound files to be saved in a &#039;sound library&#039; asset and avoids duplication.  Can we have a similar facility for images to be used in html assets.  A lot of the dependencies that I use are images and icons.  I&#039;m consciously trying to avoid this now - its the source of much pain - but to do this for the Junction Kit for instance I would have to have copies of all necessary images in all of the placeable assets (there are more than 50) If I could simply keep one copy in the script library it would save much bandwidth, diskspace and support. -Andi06&lt;br /&gt;
&lt;br /&gt;
* genesteal : cab features.&lt;br /&gt;
- methods for light controls in cabin : Control.SetFlash (float frequency).Make the control visible/invisible on the intervall frequency. may be Meshobjects.gs for more general purpose. The same for texture swapping in texture replacement.&lt;br /&gt;
- New conrol cab &amp;quot;button&amp;quot; with vertical translation limit : method set and get value as usual, method for &amp;quot;while depressed&amp;quot; behavior: Setdepressed ( method to run).&lt;br /&gt;
&lt;br /&gt;
- Speedlimiter method : Set a speedlimit replacing the max speed possible on cab mode.(engine)&lt;br /&gt;
&lt;br /&gt;
- Set engine methods : &lt;br /&gt;
Locomotive.SwapEngine(kuid); replace engine by another for a locomotive. feature existing on actual loco to set a traction service if the loco have to drive freight or passengers consists. This method can replace speedlimit above and may be more accurate : speedlimit and power will be set together as prototypical setting before a journey. &lt;br /&gt;
- Locomotive.EngineStop(): stops the enginesound  and play a stop.wav, located in enginesound folder.&lt;br /&gt;
- Locomotive.EngineStart() : starts enginesound like this : play  a start.wav located in enginesound folder, then idle 0.wav.&lt;br /&gt;
&lt;br /&gt;
* Allow function Vehicle.SetTractionMultiplier(float) to set multiplier to 0. ~Mike&lt;br /&gt;
: UPD: sorry, misunderstood functionality of this function. But could there be a method to disable traction on locos?&lt;br /&gt;
&lt;br /&gt;
* Ability to change (or only to reduce) the presure in auxilary reservoir of a vehicle. This provides a way to create different types of tripte valves for long-length trains (~70  vehicles), where using Train.SetVelocity() is unrealistic&lt;br /&gt;
&lt;br /&gt;
* Make in addition to Vehice.GetTrackGradient() also float Vehice.GetTrackCurveRadius() which return 0 for straight sections of track (instead of infinity). ~tram&lt;br /&gt;
* Make a function for smooth control of &amp;quot;soundscript&amp;quot;&#039;s sound volume. For example like void MapObject.SetSoundScriptVolume(string soundTrigger, float NewVolume, float Duration).  ~tram&lt;br /&gt;
&lt;br /&gt;
* Ability to set the camera view within an interior by a script to one of the defined cameras in the cameralist container.  It would also be handy if the camera orientation be configurable via a method call. --[[User:Pcas1986|pcas1986]] ([[User talk:Pcas1986|talk]]) 18:14, 20 February 2014 (EST)&lt;br /&gt;
&lt;br /&gt;
* Ability to make a bogey and it&#039;s constantly changing orientation visible from an interior via the interiors config file ~ Ashton&lt;br /&gt;
&lt;br /&gt;
==Complete==&lt;br /&gt;
* Simple destructor routine, or some other method of receiving notification of the deletion of scripted objects during a Surveyor session. (In the absence of World.GetJunctionBaseList() my new junction objects are maintaining a list of fixedtrack junctions via library calls in the Init() method of each object.  Apart from using the list myself, it is intended to be returned on demand to any script making the appropriate LibraryCall.  Since I have no way of telling that an object has been deleted, I need to rescan the entire list before returning it to ensure that each object still exists, this seems a touch inefficient when it could be easily kept up to date without a complete parse) -Andi&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* The ability for [[TrackSearch]] to return the trigger or track reference found for SceneryWithTrack descendants, including turntables and the ability to initiate a search from a specified trigger or track in SceneryWithTrack descendants.  A million reasons for this including trains being able to detect which track of an industry they can see in a proposed &#039;Call-At All Stations&#039; rule. -Andi06&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Compatibility of the [[TrackSearch]] with the animated fixed junctions. When I first got TRS2006 in my hands, I tried out my TrackView rule, but quickly discovered that it was impossible to find out the track topology (forgot the exact details, though) - [[User:Klausm|Klausm]]&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Extensions to TrackSearch()/GSTrackSearch() covered elsewhere to be sufficient to allow the topography of multi node junctions to be fully discovered. -Andi&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
*If we are going to use radians now (SetMeshOrientation()) could we please have PI?&lt;br /&gt;
:&#039;&#039;Math.PI&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Ability to configure permit structure to allow multi node junctions to coexist with the AI, whilst denying conflicting paths, as discussed above. -Andi&lt;br /&gt;
:&#039;&#039;Added named mutex support for attached junctions. See [[KIND SceneryWithTrack]].&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Fix World.GetAssetList(&amp;quot;texture-group&amp;quot;), this has been broken since TRS2004. -Andi06&lt;br /&gt;
:&#039;&#039;Now returns all assets with category-class &#039;JO&#039;. This seems to contain all &#039;texture-group&#039; type assets - though there maybe some unexpected extras.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to detect the use of &#039;Pause&#039; easily (a message would do) to stop cheating in shunting puzzles ~Jenolan&lt;br /&gt;
:&#039;&#039;New messages &amp;quot;World&amp;quot;, &amp;quot;Paused&amp;quot; and &amp;quot;World&amp;quot;, &amp;quot;Unpaused&amp;quot; now exist and should be broadcast at the appropriate times.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* World.GetCurrentTrain() Not essential obviously but it would save a lot of work. -Andi06&lt;br /&gt;
:&#039;&#039;Now exists.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to optionally detect mouseclick/ Keys [J] &amp;amp; [^J] without switching the junction. This can be hacked by making node 0 an invisible junction, but this will result in other objects querying the junction structure not getting the answer they expect (or not one they can understand). This is needed to allow objects with more than one junction node to cycle through their options in response to the user. -Andi&lt;br /&gt;
:&#039;&#039;I believe this is now possible via script overrides on the map object in question.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* A method of subclassing or outright using a script from another asset (ie. a script which is written once and reused heavily, allowing any fixes to be released as a single asset update.) - chris&lt;br /&gt;
:&#039;&#039;TS2009 now has the ability to cross-include scripts from another asset.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Dreamland, a new message: &#039;&#039;Junction,AboutToToggle&#039;&#039; -Andi&lt;br /&gt;
: &#039;&#039;How do you expect to act on this? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
::&#039;I believe this concept has been fulfilled via the UserRequestToggle overrides.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* On a similar note is there any chance you might amend the Exception dialogue to specify the object, (or even the Asset) which is causing the exception :-) -Andi&lt;br /&gt;
:: I think we did this one a while back. ~chris&lt;br /&gt;
&lt;br /&gt;
* SetMeshPosition(&amp;quot;meshname&amp;quot;, x,y,z) absolute positioning of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;This exists ~Andi&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Not necessarily - we support relative positioning, not absolute. This may or may not achieve what he wants.&#039;&#039; ~chris&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* GetMeshPosition(&amp;quot;meshname&amp;quot;, &amp;quot;x&amp;quot;)[&amp;quot;Y&amp;quot;][&amp;quot;Z&amp;quot;] receive the absolute position of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;Since you have used SetMeshPosition() to move the mesh, this is unneccessary&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Absolute position can be set in Surveyor. Relative position can be set in the [[config.txt file]]. I wouldn&#039;t say that this is completely unnecessary.&#039;&#039; ~chris&lt;br /&gt;
::: Thanks a lot for MapObject.GetMapObjectPosition() and MapObject.GetMapObjectOrientation() ~tram&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to load a menu asset directly from the command line ~Jenolan&lt;br /&gt;
:: This exists with &amp;quot;-scriptedmenu=&amp;lt;KUID&amp;gt;&amp;quot; ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to make a bogey and it&#039;s rotation visible from the interior via the interiors config file ~ Ashton&lt;br /&gt;
&lt;br /&gt;
==Rejected==&lt;br /&gt;
If there&#039;s a request that we&#039;re clearly not going to entertain at the current time, we&#039;ll move it to here. This includes both flat rejections and also requests which sound good but won&#039;t be done for the next version of Trainz.&lt;br /&gt;
&lt;br /&gt;
[[Rejected Script Feature Requests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Request]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7114</id>
		<title>Script Feature Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7114"/>
		<updated>2014-05-12T04:26:48Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Complete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is where the [[scripting]] community gets to post all their API feature requests. Request any additions that you think will enhance the game. Things to keep in mind:&lt;br /&gt;
* We are unlikely to add a feature which breaks any existing content.&lt;br /&gt;
* Script is for control purposes, and is not intended to enable significant modifications to the underlying game engine. We are very unlikely to introduce a feature where the obvious uses are going to result in significant performance penalties.&lt;br /&gt;
* We are far more likely to add features which are directly blocking something that the community is working on. If you have something cool, and need just a few minor additions then please detail what you&#039;re working on (ideally, on another wiki page linked from both here and your [[Content Creation Groups]] page) and why you need the additions.&lt;br /&gt;
* [[MiniBrowser]] requests should go on the separate [[MiniBrowser Feature Requests]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requests==&lt;br /&gt;
Requests are placed in this section by the community, for discussion and possible inclusion.&lt;br /&gt;
&lt;br /&gt;
* Add a method that will let you identify the industry at which a vehicle is located. If an industry track section can also carry the industry identifier, it would be most helpful.&lt;br /&gt;
&lt;br /&gt;
* Add a handle to allow a custom bell animation to be played when the bell is played on a locomotive (Vehicle.StartBell() and Vehicle.StopBell(), perhaps?).  Justification: Script can currently listen for the bell message, but since the message is a toggle, it is easy to get out of synch with the true state of the bell. For example, when coupling a locomotive whose bell is ringing to a locomotive whose bell is not ringing, the end result depends on which locomotive is currently in focus. - Curtis&lt;br /&gt;
&lt;br /&gt;
* Scale the visible bulk load animation on a traincar such that it takes Vehicle.GetLoadTime() to complete.  For example, if Vehicle.GetLoadTime() returns 5 seconds, the bulk animation would take 5 seconds to transition from the full state to the empty state.  This would be useful for industries that take more than one second to load / unload a car, as the visible load animation could be synced more closely with the industry animation. -Curtis&lt;br /&gt;
&lt;br /&gt;
* Extension to the function World.GetAssetList(string kind, bool OnlyIfUsedInCurrentMap) -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to play an avi and wait for it to finsh (no user interaction allowed) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* The ability to modify scenery trigger radii on the fly in script. This is really aimed at crossings so that train detection can be varied in line with track speed limits.  -Andi06&lt;br /&gt;
&lt;br /&gt;
* A method of refreshing the Property Browser to take account of any change in the target object&#039;s name during a property editing session. (Objects which have &#039;autoname 1&#039; in config will often be renamed by the user.  In some circumstances I am using the object name to set other properties. Typically an object might be created as &#039;Double Slip 1&#039; and might refer to its constituent nodes as &#039;Double Slip 1,Track 1&#039;.  This is to enable other objects to refer to it in a user friendly way.  On a name change the Property Browser continues to use the old name until the browser has been closed and reopened.  This is counter intuitive) -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability for a script to be able to read/change loco/rolling stock parameters (ie to simulate one loco losing air etc etc etc) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* SetFXCoronaTexture() A means of resetting to config.txt defaults.&lt;br /&gt;
&lt;br /&gt;
* Be able to play mp3 as well as wav. ~Jenolan&lt;br /&gt;
: &#039;&#039;I&#039;ve been able to do this where the asset doing the playing is a script library, I had Acker Bilk coming over a station tannoy at one point.  Not sure why it doesn&#039;t seem to work elsewhere. -Andi&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interface.MessageBox(Caption,Text), calling up a small browser with a close button would be helpful, especially for novices. Interface.Print() is a monumental PITA because it prints out upside down, doesn&#039;t hold enough lines, and only works in Driver. For sure its possible to write your own version of this but browsers aren&#039;t all that easy to get your head around and its a very basic facility that should be built in. -Andi&lt;br /&gt;
&lt;br /&gt;
* A standard config.txt tag &#039;junction-type normal/singleslip/doubleslip&#039; etc together with a spec for construction and behaviour might be helpful. I already have a complete schema for this. -Andi&lt;br /&gt;
: &#039;&#039;Uncertain what you&#039;re expecting to achieve here? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Is it possible to make a mesh available which matches the existing graphic direction indicators, it appears to be some sort of directional corona or variant. If not could a new marker mesh be developed that could be used with both types? The existing one has nasty alpha effects in any case. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to dynamically change the length of a piece of rolling stock as part of the load / unload process; to support logging disconnects (see http://www.trainzone.co.nz/logging.htm for examples)- Curtis&lt;br /&gt;
: &#039;&#039;This is an interesting concept, but sounds difficult to implement. I can&#039;t think of any way of adjusting the length unless it was the end item of a consist, since adjustment at any other time would require displacing the remainder of the consist. Could you expand on your ideas please.&#039;&#039; -chris&lt;br /&gt;
: &#039;&#039;The entire car, including lmfront &amp;amp; lmback, would be part of the loading / unloading animation. When loading, it would probably be necessary to displace the consist by moving one of the ends - perhaps the end with the locomotive? Potential issue: if when loading, the increase in consist length causes the end of the consist to run off the end of the track or collide with another train.  When unloading, you could break the consist at either or both lmfront / lmback - whichever move as part of the unloading animation.&#039;&#039; - Curtis&lt;br /&gt;
: &#039;&#039;May be simpler to just break the consist at both lmfront and lmback; centering the car in-between the two halves. -Curtis&lt;br /&gt;
&lt;br /&gt;
*Allow SetFXNameText(effect,text) to accept an empty string in the second parameter - Reason: It&#039;s really irritating having to write workarounds for this. ~Andi&lt;br /&gt;
&lt;br /&gt;
*SetMeshScale(X,Y,Z) and corresponding config tags. Positive or negative values would implement mesh mirroring at the same time. As an example of potential a placement option for trees might allow random scale factors (within reasonable limits) and random rotation.  Each tree placed would then vary in size, shape and rotation getting much more variation from the same mesh asset. ~Andi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to product loading / unloading functionality to allow incremental loads and unloads.&lt;br /&gt;
:Potential usages:  &lt;br /&gt;
:- Animation that plays once per item being loaded; such as a forklift carrying a crate to a boxcar, or a crane lifting a log to a flatcar.&lt;br /&gt;
:- Allow dynamic load times of bulk loads (small cars load faster than large cars), with the animated load rising / lowering synchronously.&lt;br /&gt;
&lt;br /&gt;
:Potential implementation:&lt;br /&gt;
:Extend vehicle.LoadProduct(report,units) where units = integer number of queue to be loaded each increment.  0 would be everything, defaulting to current LoadProduct() behavior, and add additional calls BeginIncrementalLoad(), EndIncrementalLoad(), BeginIncrementalUnload(), and EndIncrementalUnload().&lt;br /&gt;
&lt;br /&gt;
:During a load operation that loads 3 increments (units=1, target queue on the car = 3), the flow would look like:&lt;br /&gt;
 BeginLoad() // open car doors; station doors&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad() //  start loading animation, start sounds; pfx; add any delays&lt;br /&gt;
 TransferProductFrom() // maximumToTransfer = units&lt;br /&gt;
 EndIncrementalLoad() // animate forklift returning to station / end sounds / pfx / other cleanup&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 EndLoad() // close car &amp;amp; station doors&lt;br /&gt;
&lt;br /&gt;
* Ability to add a vehicle to an existing consist like Vehicle.Reposition( Train, MyCouple, OtherCouple ) this would save needing a work track mark to add vehicles which would be very helpful ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Extension to AddHandler to allow this syntax: AddHandler(target,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;MessageHandler&amp;quot;), passing all messages to the specified handler, for justification see discussion page. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to store any information along with the layout and not the session (i.e. &#039;&#039;PropertyObject.SetLayoutProperties&#039;&#039; and &#039;&#039;PropertyObject.GetLayoutProperties&#039;&#039;, taking/returning &#039;&#039;Soup&#039;&#039; objects respectively). Rationale: the non-existence is a major drawback with configurable signals - [[User:Klausm|Klausm]]&lt;br /&gt;
&lt;br /&gt;
* Access to asset location, height, rotation in script.  This came up twice - once when I wanted to keep traffic lights upright when the containing asset is rolled, and once when I wanted to add simple real time ground shadows to assets. -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to arbitrarily add an attachment point to an item. To allow things like FRED/BOG sundry animations and so on ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Not really script. A generic clickable mesh object, its an easy hack using a fixedtrack junction but it would nice to have an official version - click on the engine shed to open the doors, click on the signal box to open a track browser etc etc. Mappable click regions too if its not too much to ask :-) -Andi&lt;br /&gt;
&lt;br /&gt;
* Extension/Alternative to World.GetJunctionList to return fixed track junction objects or nodes, I can script this easily for objects using my library but this would not be the case for all junctions. -Andi&lt;br /&gt;
&lt;br /&gt;
* World.Play2DSound(Asset,filename) allows sound files to be saved in a &#039;sound library&#039; asset and avoids duplication.  Can we have a similar facility for images to be used in html assets.  A lot of the dependencies that I use are images and icons.  I&#039;m consciously trying to avoid this now - its the source of much pain - but to do this for the Junction Kit for instance I would have to have copies of all necessary images in all of the placeable assets (there are more than 50) If I could simply keep one copy in the script library it would save much bandwidth, diskspace and support. -Andi06&lt;br /&gt;
&lt;br /&gt;
* genesteal : cab features.&lt;br /&gt;
- methods for light controls in cabin : Control.SetFlash (float frequency).Make the control visible/invisible on the intervall frequency. may be Meshobjects.gs for more general purpose. The same for texture swapping in texture replacement.&lt;br /&gt;
- New conrol cab &amp;quot;button&amp;quot; with vertical translation limit : method set and get value as usual, method for &amp;quot;while depressed&amp;quot; behavior: Setdepressed ( method to run).&lt;br /&gt;
&lt;br /&gt;
- Speedlimiter method : Set a speedlimit replacing the max speed possible on cab mode.(engine)&lt;br /&gt;
&lt;br /&gt;
- Set engine methods : &lt;br /&gt;
Locomotive.SwapEngine(kuid); replace engine by another for a locomotive. feature existing on actual loco to set a traction service if the loco have to drive freight or passengers consists. This method can replace speedlimit above and may be more accurate : speedlimit and power will be set together as prototypical setting before a journey. &lt;br /&gt;
- Locomotive.EngineStop(): stops the enginesound  and play a stop.wav, located in enginesound folder.&lt;br /&gt;
- Locomotive.EngineStart() : starts enginesound like this : play  a start.wav located in enginesound folder, then idle 0.wav.&lt;br /&gt;
&lt;br /&gt;
* Allow function Vehicle.SetTractionMultiplier(float) to set multiplier to 0. ~Mike&lt;br /&gt;
: UPD: sorry, misunderstood functionality of this function. But could there be a method to disable traction on locos?&lt;br /&gt;
&lt;br /&gt;
* Ability to change (or only to reduce) the presure in auxilary reservoir of a vehicle. This provides a way to create different types of tripte valves for long-length trains (~70  vehicles), where using Train.SetVelocity() is unrealistic&lt;br /&gt;
&lt;br /&gt;
* Make in addition to Vehice.GetTrackGradient() also float Vehice.GetTrackCurveRadius() which return 0 for straight sections of track (instead of infinity). ~tram&lt;br /&gt;
* Make a function for smooth control of &amp;quot;soundscript&amp;quot;&#039;s sound volume. For example like void MapObject.SetSoundScriptVolume(string soundTrigger, float NewVolume, float Duration).  ~tram&lt;br /&gt;
&lt;br /&gt;
* Ability to set the camera view within an interior by a script to one of the defined cameras in the cameralist container.  It would also be handy if the camera orientation be configurable via a method call. --[[User:Pcas1986|pcas1986]] ([[User talk:Pcas1986|talk]]) 18:14, 20 February 2014 (EST)&lt;br /&gt;
&lt;br /&gt;
==Complete==&lt;br /&gt;
* Simple destructor routine, or some other method of receiving notification of the deletion of scripted objects during a Surveyor session. (In the absence of World.GetJunctionBaseList() my new junction objects are maintaining a list of fixedtrack junctions via library calls in the Init() method of each object.  Apart from using the list myself, it is intended to be returned on demand to any script making the appropriate LibraryCall.  Since I have no way of telling that an object has been deleted, I need to rescan the entire list before returning it to ensure that each object still exists, this seems a touch inefficient when it could be easily kept up to date without a complete parse) -Andi&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* The ability for [[TrackSearch]] to return the trigger or track reference found for SceneryWithTrack descendants, including turntables and the ability to initiate a search from a specified trigger or track in SceneryWithTrack descendants.  A million reasons for this including trains being able to detect which track of an industry they can see in a proposed &#039;Call-At All Stations&#039; rule. -Andi06&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Compatibility of the [[TrackSearch]] with the animated fixed junctions. When I first got TRS2006 in my hands, I tried out my TrackView rule, but quickly discovered that it was impossible to find out the track topology (forgot the exact details, though) - [[User:Klausm|Klausm]]&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Extensions to TrackSearch()/GSTrackSearch() covered elsewhere to be sufficient to allow the topography of multi node junctions to be fully discovered. -Andi&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
*If we are going to use radians now (SetMeshOrientation()) could we please have PI?&lt;br /&gt;
:&#039;&#039;Math.PI&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Ability to configure permit structure to allow multi node junctions to coexist with the AI, whilst denying conflicting paths, as discussed above. -Andi&lt;br /&gt;
:&#039;&#039;Added named mutex support for attached junctions. See [[KIND SceneryWithTrack]].&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Fix World.GetAssetList(&amp;quot;texture-group&amp;quot;), this has been broken since TRS2004. -Andi06&lt;br /&gt;
:&#039;&#039;Now returns all assets with category-class &#039;JO&#039;. This seems to contain all &#039;texture-group&#039; type assets - though there maybe some unexpected extras.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to detect the use of &#039;Pause&#039; easily (a message would do) to stop cheating in shunting puzzles ~Jenolan&lt;br /&gt;
:&#039;&#039;New messages &amp;quot;World&amp;quot;, &amp;quot;Paused&amp;quot; and &amp;quot;World&amp;quot;, &amp;quot;Unpaused&amp;quot; now exist and should be broadcast at the appropriate times.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* World.GetCurrentTrain() Not essential obviously but it would save a lot of work. -Andi06&lt;br /&gt;
:&#039;&#039;Now exists.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to optionally detect mouseclick/ Keys [J] &amp;amp; [^J] without switching the junction. This can be hacked by making node 0 an invisible junction, but this will result in other objects querying the junction structure not getting the answer they expect (or not one they can understand). This is needed to allow objects with more than one junction node to cycle through their options in response to the user. -Andi&lt;br /&gt;
:&#039;&#039;I believe this is now possible via script overrides on the map object in question.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* A method of subclassing or outright using a script from another asset (ie. a script which is written once and reused heavily, allowing any fixes to be released as a single asset update.) - chris&lt;br /&gt;
:&#039;&#039;TS2009 now has the ability to cross-include scripts from another asset.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Dreamland, a new message: &#039;&#039;Junction,AboutToToggle&#039;&#039; -Andi&lt;br /&gt;
: &#039;&#039;How do you expect to act on this? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
::&#039;I believe this concept has been fulfilled via the UserRequestToggle overrides.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* On a similar note is there any chance you might amend the Exception dialogue to specify the object, (or even the Asset) which is causing the exception :-) -Andi&lt;br /&gt;
:: I think we did this one a while back. ~chris&lt;br /&gt;
&lt;br /&gt;
* SetMeshPosition(&amp;quot;meshname&amp;quot;, x,y,z) absolute positioning of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;This exists ~Andi&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Not necessarily - we support relative positioning, not absolute. This may or may not achieve what he wants.&#039;&#039; ~chris&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* GetMeshPosition(&amp;quot;meshname&amp;quot;, &amp;quot;x&amp;quot;)[&amp;quot;Y&amp;quot;][&amp;quot;Z&amp;quot;] receive the absolute position of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;Since you have used SetMeshPosition() to move the mesh, this is unneccessary&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Absolute position can be set in Surveyor. Relative position can be set in the [[config.txt file]]. I wouldn&#039;t say that this is completely unnecessary.&#039;&#039; ~chris&lt;br /&gt;
::: Thanks a lot for MapObject.GetMapObjectPosition() and MapObject.GetMapObjectOrientation() ~tram&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to load a menu asset directly from the command line ~Jenolan&lt;br /&gt;
:: This exists with &amp;quot;-scriptedmenu=&amp;lt;KUID&amp;gt;&amp;quot; ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to make a bogey and it&#039;s rotation visible from the interior via the interiors config file ~ Ashton&lt;br /&gt;
&lt;br /&gt;
==Rejected==&lt;br /&gt;
If there&#039;s a request that we&#039;re clearly not going to entertain at the current time, we&#039;ll move it to here. This includes both flat rejections and also requests which sound good but won&#039;t be done for the next version of Trainz.&lt;br /&gt;
&lt;br /&gt;
[[Rejected Script Feature Requests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Request]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
	<entry>
		<id>https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7113</id>
		<title>Script Feature Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.trainzsimulator.com/index.php?title=Script_Feature_Requests&amp;diff=7113"/>
		<updated>2014-05-12T04:25:52Z</updated>

		<summary type="html">&lt;p&gt;Trainlover16: /* Complete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is where the [[scripting]] community gets to post all their API feature requests. Request any additions that you think will enhance the game. Things to keep in mind:&lt;br /&gt;
* We are unlikely to add a feature which breaks any existing content.&lt;br /&gt;
* Script is for control purposes, and is not intended to enable significant modifications to the underlying game engine. We are very unlikely to introduce a feature where the obvious uses are going to result in significant performance penalties.&lt;br /&gt;
* We are far more likely to add features which are directly blocking something that the community is working on. If you have something cool, and need just a few minor additions then please detail what you&#039;re working on (ideally, on another wiki page linked from both here and your [[Content Creation Groups]] page) and why you need the additions.&lt;br /&gt;
* [[MiniBrowser]] requests should go on the separate [[MiniBrowser Feature Requests]] page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Requests==&lt;br /&gt;
Requests are placed in this section by the community, for discussion and possible inclusion.&lt;br /&gt;
&lt;br /&gt;
* Add a method that will let you identify the industry at which a vehicle is located. If an industry track section can also carry the industry identifier, it would be most helpful.&lt;br /&gt;
&lt;br /&gt;
* Add a handle to allow a custom bell animation to be played when the bell is played on a locomotive (Vehicle.StartBell() and Vehicle.StopBell(), perhaps?).  Justification: Script can currently listen for the bell message, but since the message is a toggle, it is easy to get out of synch with the true state of the bell. For example, when coupling a locomotive whose bell is ringing to a locomotive whose bell is not ringing, the end result depends on which locomotive is currently in focus. - Curtis&lt;br /&gt;
&lt;br /&gt;
* Scale the visible bulk load animation on a traincar such that it takes Vehicle.GetLoadTime() to complete.  For example, if Vehicle.GetLoadTime() returns 5 seconds, the bulk animation would take 5 seconds to transition from the full state to the empty state.  This would be useful for industries that take more than one second to load / unload a car, as the visible load animation could be synced more closely with the industry animation. -Curtis&lt;br /&gt;
&lt;br /&gt;
* Extension to the function World.GetAssetList(string kind, bool OnlyIfUsedInCurrentMap) -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to play an avi and wait for it to finsh (no user interaction allowed) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* The ability to modify scenery trigger radii on the fly in script. This is really aimed at crossings so that train detection can be varied in line with track speed limits.  -Andi06&lt;br /&gt;
&lt;br /&gt;
* A method of refreshing the Property Browser to take account of any change in the target object&#039;s name during a property editing session. (Objects which have &#039;autoname 1&#039; in config will often be renamed by the user.  In some circumstances I am using the object name to set other properties. Typically an object might be created as &#039;Double Slip 1&#039; and might refer to its constituent nodes as &#039;Double Slip 1,Track 1&#039;.  This is to enable other objects to refer to it in a user friendly way.  On a name change the Property Browser continues to use the old name until the browser has been closed and reopened.  This is counter intuitive) -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability for a script to be able to read/change loco/rolling stock parameters (ie to simulate one loco losing air etc etc etc) ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* SetFXCoronaTexture() A means of resetting to config.txt defaults.&lt;br /&gt;
&lt;br /&gt;
* Be able to play mp3 as well as wav. ~Jenolan&lt;br /&gt;
: &#039;&#039;I&#039;ve been able to do this where the asset doing the playing is a script library, I had Acker Bilk coming over a station tannoy at one point.  Not sure why it doesn&#039;t seem to work elsewhere. -Andi&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interface.MessageBox(Caption,Text), calling up a small browser with a close button would be helpful, especially for novices. Interface.Print() is a monumental PITA because it prints out upside down, doesn&#039;t hold enough lines, and only works in Driver. For sure its possible to write your own version of this but browsers aren&#039;t all that easy to get your head around and its a very basic facility that should be built in. -Andi&lt;br /&gt;
&lt;br /&gt;
* A standard config.txt tag &#039;junction-type normal/singleslip/doubleslip&#039; etc together with a spec for construction and behaviour might be helpful. I already have a complete schema for this. -Andi&lt;br /&gt;
: &#039;&#039;Uncertain what you&#039;re expecting to achieve here? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Is it possible to make a mesh available which matches the existing graphic direction indicators, it appears to be some sort of directional corona or variant. If not could a new marker mesh be developed that could be used with both types? The existing one has nasty alpha effects in any case. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to dynamically change the length of a piece of rolling stock as part of the load / unload process; to support logging disconnects (see http://www.trainzone.co.nz/logging.htm for examples)- Curtis&lt;br /&gt;
: &#039;&#039;This is an interesting concept, but sounds difficult to implement. I can&#039;t think of any way of adjusting the length unless it was the end item of a consist, since adjustment at any other time would require displacing the remainder of the consist. Could you expand on your ideas please.&#039;&#039; -chris&lt;br /&gt;
: &#039;&#039;The entire car, including lmfront &amp;amp; lmback, would be part of the loading / unloading animation. When loading, it would probably be necessary to displace the consist by moving one of the ends - perhaps the end with the locomotive? Potential issue: if when loading, the increase in consist length causes the end of the consist to run off the end of the track or collide with another train.  When unloading, you could break the consist at either or both lmfront / lmback - whichever move as part of the unloading animation.&#039;&#039; - Curtis&lt;br /&gt;
: &#039;&#039;May be simpler to just break the consist at both lmfront and lmback; centering the car in-between the two halves. -Curtis&lt;br /&gt;
&lt;br /&gt;
*Allow SetFXNameText(effect,text) to accept an empty string in the second parameter - Reason: It&#039;s really irritating having to write workarounds for this. ~Andi&lt;br /&gt;
&lt;br /&gt;
*SetMeshScale(X,Y,Z) and corresponding config tags. Positive or negative values would implement mesh mirroring at the same time. As an example of potential a placement option for trees might allow random scale factors (within reasonable limits) and random rotation.  Each tree placed would then vary in size, shape and rotation getting much more variation from the same mesh asset. ~Andi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to product loading / unloading functionality to allow incremental loads and unloads.&lt;br /&gt;
:Potential usages:  &lt;br /&gt;
:- Animation that plays once per item being loaded; such as a forklift carrying a crate to a boxcar, or a crane lifting a log to a flatcar.&lt;br /&gt;
:- Allow dynamic load times of bulk loads (small cars load faster than large cars), with the animated load rising / lowering synchronously.&lt;br /&gt;
&lt;br /&gt;
:Potential implementation:&lt;br /&gt;
:Extend vehicle.LoadProduct(report,units) where units = integer number of queue to be loaded each increment.  0 would be everything, defaulting to current LoadProduct() behavior, and add additional calls BeginIncrementalLoad(), EndIncrementalLoad(), BeginIncrementalUnload(), and EndIncrementalUnload().&lt;br /&gt;
&lt;br /&gt;
:During a load operation that loads 3 increments (units=1, target queue on the car = 3), the flow would look like:&lt;br /&gt;
 BeginLoad() // open car doors; station doors&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad() //  start loading animation, start sounds; pfx; add any delays&lt;br /&gt;
 TransferProductFrom() // maximumToTransfer = units&lt;br /&gt;
 EndIncrementalLoad() // animate forklift returning to station / end sounds / pfx / other cleanup&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 BeginIncrementalLoad()&lt;br /&gt;
 TransferProductFrom()&lt;br /&gt;
 EndIncrementalLoad()&lt;br /&gt;
 &lt;br /&gt;
 EndLoad() // close car &amp;amp; station doors&lt;br /&gt;
&lt;br /&gt;
* Ability to add a vehicle to an existing consist like Vehicle.Reposition( Train, MyCouple, OtherCouple ) this would save needing a work track mark to add vehicles which would be very helpful ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Extension to AddHandler to allow this syntax: AddHandler(target,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;MessageHandler&amp;quot;), passing all messages to the specified handler, for justification see discussion page. -Andi&lt;br /&gt;
&lt;br /&gt;
* Ability to store any information along with the layout and not the session (i.e. &#039;&#039;PropertyObject.SetLayoutProperties&#039;&#039; and &#039;&#039;PropertyObject.GetLayoutProperties&#039;&#039;, taking/returning &#039;&#039;Soup&#039;&#039; objects respectively). Rationale: the non-existence is a major drawback with configurable signals - [[User:Klausm|Klausm]]&lt;br /&gt;
&lt;br /&gt;
* Access to asset location, height, rotation in script.  This came up twice - once when I wanted to keep traffic lights upright when the containing asset is rolled, and once when I wanted to add simple real time ground shadows to assets. -Andi06&lt;br /&gt;
&lt;br /&gt;
* Ability to arbitrarily add an attachment point to an item. To allow things like FRED/BOG sundry animations and so on ~Jenolan&lt;br /&gt;
&lt;br /&gt;
* Not really script. A generic clickable mesh object, its an easy hack using a fixedtrack junction but it would nice to have an official version - click on the engine shed to open the doors, click on the signal box to open a track browser etc etc. Mappable click regions too if its not too much to ask :-) -Andi&lt;br /&gt;
&lt;br /&gt;
* Extension/Alternative to World.GetJunctionList to return fixed track junction objects or nodes, I can script this easily for objects using my library but this would not be the case for all junctions. -Andi&lt;br /&gt;
&lt;br /&gt;
* World.Play2DSound(Asset,filename) allows sound files to be saved in a &#039;sound library&#039; asset and avoids duplication.  Can we have a similar facility for images to be used in html assets.  A lot of the dependencies that I use are images and icons.  I&#039;m consciously trying to avoid this now - its the source of much pain - but to do this for the Junction Kit for instance I would have to have copies of all necessary images in all of the placeable assets (there are more than 50) If I could simply keep one copy in the script library it would save much bandwidth, diskspace and support. -Andi06&lt;br /&gt;
&lt;br /&gt;
* genesteal : cab features.&lt;br /&gt;
- methods for light controls in cabin : Control.SetFlash (float frequency).Make the control visible/invisible on the intervall frequency. may be Meshobjects.gs for more general purpose. The same for texture swapping in texture replacement.&lt;br /&gt;
- New conrol cab &amp;quot;button&amp;quot; with vertical translation limit : method set and get value as usual, method for &amp;quot;while depressed&amp;quot; behavior: Setdepressed ( method to run).&lt;br /&gt;
&lt;br /&gt;
- Speedlimiter method : Set a speedlimit replacing the max speed possible on cab mode.(engine)&lt;br /&gt;
&lt;br /&gt;
- Set engine methods : &lt;br /&gt;
Locomotive.SwapEngine(kuid); replace engine by another for a locomotive. feature existing on actual loco to set a traction service if the loco have to drive freight or passengers consists. This method can replace speedlimit above and may be more accurate : speedlimit and power will be set together as prototypical setting before a journey. &lt;br /&gt;
- Locomotive.EngineStop(): stops the enginesound  and play a stop.wav, located in enginesound folder.&lt;br /&gt;
- Locomotive.EngineStart() : starts enginesound like this : play  a start.wav located in enginesound folder, then idle 0.wav.&lt;br /&gt;
&lt;br /&gt;
* Allow function Vehicle.SetTractionMultiplier(float) to set multiplier to 0. ~Mike&lt;br /&gt;
: UPD: sorry, misunderstood functionality of this function. But could there be a method to disable traction on locos?&lt;br /&gt;
&lt;br /&gt;
* Ability to change (or only to reduce) the presure in auxilary reservoir of a vehicle. This provides a way to create different types of tripte valves for long-length trains (~70  vehicles), where using Train.SetVelocity() is unrealistic&lt;br /&gt;
&lt;br /&gt;
* Make in addition to Vehice.GetTrackGradient() also float Vehice.GetTrackCurveRadius() which return 0 for straight sections of track (instead of infinity). ~tram&lt;br /&gt;
* Make a function for smooth control of &amp;quot;soundscript&amp;quot;&#039;s sound volume. For example like void MapObject.SetSoundScriptVolume(string soundTrigger, float NewVolume, float Duration).  ~tram&lt;br /&gt;
&lt;br /&gt;
* Ability to set the camera view within an interior by a script to one of the defined cameras in the cameralist container.  It would also be handy if the camera orientation be configurable via a method call. --[[User:Pcas1986|pcas1986]] ([[User talk:Pcas1986|talk]]) 18:14, 20 February 2014 (EST)&lt;br /&gt;
&lt;br /&gt;
==Complete==&lt;br /&gt;
* Simple destructor routine, or some other method of receiving notification of the deletion of scripted objects during a Surveyor session. (In the absence of World.GetJunctionBaseList() my new junction objects are maintaining a list of fixedtrack junctions via library calls in the Init() method of each object.  Apart from using the list myself, it is intended to be returned on demand to any script making the appropriate LibraryCall.  Since I have no way of telling that an object has been deleted, I need to rescan the entire list before returning it to ensure that each object still exists, this seems a touch inefficient when it could be easily kept up to date without a complete parse) -Andi&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* The ability for [[TrackSearch]] to return the trigger or track reference found for SceneryWithTrack descendants, including turntables and the ability to initiate a search from a specified trigger or track in SceneryWithTrack descendants.  A million reasons for this including trains being able to detect which track of an industry they can see in a proposed &#039;Call-At All Stations&#039; rule. -Andi06&lt;br /&gt;
:&#039;&#039;Now a function of the [[TrackSearch]] system.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Compatibility of the [[TrackSearch]] with the animated fixed junctions. When I first got TRS2006 in my hands, I tried out my TrackView rule, but quickly discovered that it was impossible to find out the track topology (forgot the exact details, though) - [[User:Klausm|Klausm]]&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Extensions to TrackSearch()/GSTrackSearch() covered elsewhere to be sufficient to allow the topography of multi node junctions to be fully discovered. -Andi&lt;br /&gt;
:&#039;&#039;[[TrackSearch]] system is now considerably more robust.&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
*If we are going to use radians now (SetMeshOrientation()) could we please have PI?&lt;br /&gt;
:&#039;&#039;Math.PI&#039;&#039; -chris&lt;br /&gt;
&lt;br /&gt;
* Ability to configure permit structure to allow multi node junctions to coexist with the AI, whilst denying conflicting paths, as discussed above. -Andi&lt;br /&gt;
:&#039;&#039;Added named mutex support for attached junctions. See [[KIND SceneryWithTrack]].&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Fix World.GetAssetList(&amp;quot;texture-group&amp;quot;), this has been broken since TRS2004. -Andi06&lt;br /&gt;
:&#039;&#039;Now returns all assets with category-class &#039;JO&#039;. This seems to contain all &#039;texture-group&#039; type assets - though there maybe some unexpected extras.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to detect the use of &#039;Pause&#039; easily (a message would do) to stop cheating in shunting puzzles ~Jenolan&lt;br /&gt;
:&#039;&#039;New messages &amp;quot;World&amp;quot;, &amp;quot;Paused&amp;quot; and &amp;quot;World&amp;quot;, &amp;quot;Unpaused&amp;quot; now exist and should be broadcast at the appropriate times.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* World.GetCurrentTrain() Not essential obviously but it would save a lot of work. -Andi06&lt;br /&gt;
:&#039;&#039;Now exists.&#039;&#039; -James&lt;br /&gt;
&lt;br /&gt;
* Ability to optionally detect mouseclick/ Keys [J] &amp;amp; [^J] without switching the junction. This can be hacked by making node 0 an invisible junction, but this will result in other objects querying the junction structure not getting the answer they expect (or not one they can understand). This is needed to allow objects with more than one junction node to cycle through their options in response to the user. -Andi&lt;br /&gt;
:&#039;&#039;I believe this is now possible via script overrides on the map object in question.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* A method of subclassing or outright using a script from another asset (ie. a script which is written once and reused heavily, allowing any fixes to be released as a single asset update.) - chris&lt;br /&gt;
:&#039;&#039;TS2009 now has the ability to cross-include scripts from another asset.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* Dreamland, a new message: &#039;&#039;Junction,AboutToToggle&#039;&#039; -Andi&lt;br /&gt;
: &#039;&#039;How do you expect to act on this? -chris&#039;&#039;&lt;br /&gt;
: &#039;&#039;see Animated Fixed Junctions Thread&#039;&#039;&lt;br /&gt;
::&#039;I believe this concept has been fulfilled via the UserRequestToggle overrides.&#039;&#039; ~chris&lt;br /&gt;
&lt;br /&gt;
* On a similar note is there any chance you might amend the Exception dialogue to specify the object, (or even the Asset) which is causing the exception :-) -Andi&lt;br /&gt;
:: I think we did this one a while back. ~chris&lt;br /&gt;
&lt;br /&gt;
* SetMeshPosition(&amp;quot;meshname&amp;quot;, x,y,z) absolute positioning of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;This exists ~Andi&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Not necessarily - we support relative positioning, not absolute. This may or may not achieve what he wants.&#039;&#039; ~chris&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* GetMeshPosition(&amp;quot;meshname&amp;quot;, &amp;quot;x&amp;quot;)[&amp;quot;Y&amp;quot;][&amp;quot;Z&amp;quot;] receive the absolute position of a Mesh or Object. -Caby&lt;br /&gt;
: &amp;lt;font color=red&amp;gt;Since you have used SetMeshPosition() to move the mesh, this is unneccessary&amp;lt;/font&amp;gt;&lt;br /&gt;
:: &#039;&#039;Absolute position can be set in Surveyor. Relative position can be set in the [[config.txt file]]. I wouldn&#039;t say that this is completely unnecessary.&#039;&#039; ~chris&lt;br /&gt;
::: Thanks a lot for MapObject.GetMapObjectPosition() and MapObject.GetMapObjectOrientation() ~tram&lt;br /&gt;
:: This has been added. ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to load a menu asset directly from the command line ~Jenolan&lt;br /&gt;
:: This exists with &amp;quot;-scriptedmenu=&amp;lt;KUID&amp;gt;&amp;quot; ~chris&lt;br /&gt;
&lt;br /&gt;
* Ability to make a bogey visible from the interior via the interiors config file ~ Ashton&lt;br /&gt;
&lt;br /&gt;
==Rejected==&lt;br /&gt;
If there&#039;s a request that we&#039;re clearly not going to entertain at the current time, we&#039;ll move it to here. This includes both flat rejections and also requests which sound good but won&#039;t be done for the next version of Trainz.&lt;br /&gt;
&lt;br /&gt;
[[Rejected Script Feature Requests]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature Request]]&lt;/div&gt;</summary>
		<author><name>Trainlover16</name></author>
	</entry>
</feed>