This article's documentation is for anything that uses the Source engine. Click here for more information.

func_tracktrain

From Valve Developer Community
Jump to navigation Jump to search
Not to be confused with func_tanktrain.
Class hierarchy
CFuncTrackTrain
CBaseEntity
trains.cpp

func_tracktrain is a brush entity available in all Source Source games. It functions as a moving platform that the player can ride. It follows a path of path_track entities.

Note.pngNote:Unless the Fixed Orientation flag is set, build your train so that the front of the train is facing down the X axis. (This means that the front of the train is visible in the front view, etc.) When it spawns it will automatically rotate to face the next path_track on the path.
Note.pngNote:Tracktrains only update their movement direction 10 times per second. At higher speeds, this can result in them overshooting the track, especially with sharp turns. The older func_train entity is not affected by this issue, so it may be a suitable alternative for high-speed objects.
Icon-Bug.pngBug:Due to poor coding, the Reverse and StartBackward may not function correctly if the New Train Speed property in the involved path_track entities is set to 0. The train may fail to reverse, jamming in place or moving in the wrong direction. To solve this issue, some or all of the path_tracks must have their New Train Speed variable set to a non-zero value.  [todo tested in?]
Icon-Bug.pngBug:Trains stop short at a distance from their targets, regardless of speed. The higher the speed, the further away it will stop from the path_track. At low speeds, this is negligible.  [todo tested in?]

Keyvalues

Name (targetname) <string>
The name that other entities refer to this entity by, via Inputs/Outputs or other keyvalues (e.g. parentname or target).
Also displayed in Hammer's 2D views and Entity Report.
See also:  Generic Keyvalues, Inputs and Outputs available to all entities

First Stop Target (target) <targetname>
The name of the first path_track in the train's path. The train will spawn at this path_track. It will also turn to face the direction indicated by the "Orientation Type" setting.
Max Speed (units/second) (startspeed) <integer>
The maximum speed that this train can move. Any speeds applied to this train, such as by path_tracks or SetSpeed inputs, will be clipped to this maximum value.
Initial Speed (units/second) (speed) <integer>
The speed that the train will move at after it spawns, 0 = stopped.
Change Velocity (velocitytype) <choices>
The method through which this train changes its velocity as it moves along the path.
  • 0 : Instantaneously
  • 1 : Linear blend
  • 2 : Ease in/ease out
Change angles (orientationtype) <choices>
The method through which this train changes its orientation as it moves along the path.
  • 0 : Never (always fixed orientation)
  • 1 : Near paths
  • 2 : Linear blend
  • 3 : Ease in/ease out
Distance Between the Wheels (wheels) <integer>
Used for turning and stopping.
Tip.pngTip:Increase the value for smoother turns.
Height above track (height) <integer>
The height above the track that this train moves.
Bank Angle on Turns (bank) <string>
The angle at which the train will "bank" or tilt when approaching a turn. Use positive or negative angle numbers close to 0 (i.e., between -5 and +5, depending on left or right) to achieve realistic tilt angles.
Damage on Crush (dmg) <integer>
The amount of damage this train does to entities that block it.
Minimum Light Level (_minlight) <string>
The minimum level of ambient light that hits this brush.
Move Sound (MoveSound) <sound>
A sound that is played (and looped) while the train is moving.
Move Ping Sound (MovePingSound) <sound>
A sound that is played more frequently as the train speeds up.
Start Sound (StartSound) <sound>
A sound played when the train starts moving.
Stop Sound (StopSound) <sound>
A sound played when the train stops moving.
Volume (10 = loudest) (volume) <integer>
Volume of the sound when the train is moving.
Min pitch (1-255, 100 = normal) (MoveSoundMinPitch) <integer>
The sound pitch value that the train will approach as it comes to a stop.
Max pitch (1-255, 100 = normal) (MoveSoundMaxPitch) <integer>
The sound pitch value that the train will approach as it approaches its max speed (or 1000 inches/second if the "Use max speed for pitch shifting move sound" flag is not set).
Min move sound interval (MoveSoundMinTime) <float>
Minimum interval at which to play the move ping sound.
Max move sound interval (MoveSoundMaxTime) <float>
Maximum interval at which to play the move ping sound.
Manual Train Speed (manualspeedchanges) <boolean>
Train Speed is controlled through IO, handles accel, decel times.
Manual Accel Speed (manualaccelspeed) <float>
Units per second to accelerate to target speed.
Manual Decel Speed (manualdecelspeed) <float>
Units per second to decelerate to target speed.
Note.pngNote:The above three keyvalues are !FGD in Left 4 Dead and later, but appear to still exist in the engine.

Distance between wheels is the distance in Hammer Units between the front axle and rear axle of your train. The rear axle moves the train and stays on the track. The front axle turns as it approaches path_tracks and does not stay on the track.

Flags

No Pitch (X-rot) : [1]
No User Control : [2]
Forward Only : [4] !FGD

Controlling player may only move the entity forward, or stop it.

Passable : [8]

Disables collisions on the object.

Always Fixed Orientation : [16]
Rideable Train : [128]

Does not knock entities off or cause damage.

Use max speed for pitch shifting move sound : [256]
Not blockable by players : [512]

Inputs

SetSpeed <float>
Set the speed of the train, as a ratio of max speed [0, 1]
SetSpeedDir <float>
Set the speed of the train, as a ratio of max speed. Negative values reverse the direction [-1, 1]
SetSpeedReal <float>
Set the speed of the train. Must be a positive value from 0 to max speed.
SetSpeedDirAccel <float> (not in Left 4 Dead)
Accel/Decel to the specified speed, as a ratio of max speed. Negative values reverse the direction [-1, 1]
SetSpeedForwardModifier <float> (removed since Left 4 Dead)
Applies the given modifier to all forward speeds. [0, 1]
TeleportToPathTrack <targetname> (removed since Left 4 Dead)
Teleport the train to the designated path track. This can be in a new path.
Note.pngNote:The above three inputs appear to have been added to Source 2007 games post-release for TF2's Payload mode, but did not make it into later games, resulting in their apparent "removal". However, SetSpeedDirAccel did later get ported in Left 4 Dead 2 Left 4 Dead 2.
MoveToPathNode <targetname> (in all games since Portal 2)
Move the train to a specific path_track, stopping when it gets there. Must be in the same path.
TeleportToPathNode <targetname> (in all games since Portal 2)
Teleport to another path_track and stop the train. This can be in a new path.
LockOrientation  (in all games since Portal 2)
Lock the current orientation of the train.
UnlockOrientation  (in all games since Portal 2)
Unlock the current orientation of the train.
SetMaxSpeed <float> (in all games since Portal 2)
Set a new max speed for the train.
Stop
Stop the train.
StartForward
Start the train moving forward.
StartBackward
Start the train moving backward.
Icon-Bug.pngBug:If the train's corresponding path_tracks do not have "New Train Speed" set to a nonzero number, StartBackward will exhibit undesired behavior including the train freezing or moving in the wrong direction. This bug can be a pain if the train needs to ride through the path_track again at a different speed. This can be fixed by firing an "addOutput speed '#'" input at the path_track in question.  [todo tested in?]
Resume
Resume the train moving in the current direction after it was stopped via the Stop or Toggle input.
Reverse
Reverse the direction of the train.
Toggle
Toggle the train between start and stop.

Outputs

OnStart
Fired when the train starts moving in either direction.
OnNextPoint  !FGD
Fires continuously every tick when the train is currently moving to its next destination.
Warning.pngWarning:In the default FGD, this is incorrectly listed as "OnNext" and has an incorrect description ("Fires when this train picks a new point to move towards (and just after OnStart)")
OnArrivedAtDestinationNode  (in all games since Portal 2)
Fired when this train arrives at a destination that was specified by the MoveToPathNode input.

See also