I touched on this a while back in a private convo with some of the big steam guys on this forum, but I think that it would be beneficial to map any steam exhaust emissions and sounds (pulse-based) to the
crankpin position.
Here's what the exhaust pattern for a two- or four-cylinder (non-articulated/non-duplex) locomotive looks like...:
NOTE: The numbers on the driving wheel are to help people locate the crankpin positions by imagining the face of the wheel as a clock face. Sometimes it's more helpful than "Forward Dead Center", "Top Quarter", etc.
It could be possible to map the exhaust emissions and sound to the crankpins if the shape file's animation keyframes on which each crankpin hits a "dead center" is known. (For pre-existing models, you may have to uncompress the shape file to find this information.) Here's how it can potentially be coded into an
*.eng file (two-cylinder with 16 driving wheel keyframes assumed):
ORTSWheelCrankAngleDifference ( 0deg 90deg )
ORTSWheelCrankDeadCenterKeyFrames(
Comment ( *** Left Cylinder *** )
Cylinder1 (
Forward ( 0 )
Back ( 8 )
)
Comment ( *** Right Cylinder *** )
Cylinder2 (
Forward ( 4 )
Back ( 12 )
)
)
Here's what a four-cylinder locomotive (GWR Castle, Balanced Compound, etc.) would be coded (again, assuming there are 16 driving wheel keyframes total):
ORTSWheelCrankAngleDifference ( 0deg 180deg 270deg 90deg )
ORTSWheelCrankDeadCenterKeyFrames(
Comment ( *** Left Outer Cylinder *** )
Cylinder1 (
Forward ( 0 )
Back ( 8 )
)
Comment ( *** Left Inner Cylinder *** )
Cylinder2 (
Forward ( 8 )
Back ( 0 )
)
Comment ( *** Right Inner Cylinder *** )
Cylinder3 (
Forward ( 12 )
Back ( 4 )
)
Comment ( *** Right Outer Cylinder *** )
Cylinder4 (
Forward ( 4 )
Back ( 12 )
)
)
For 3-cylinder locomotives (Flying Scotsman, Union Pacific 9000), the exhaust pattern would look like this:
Even though there are 6 puffs/chuffs per driving wheel rotation, the driving wheel animation is still divided into 8 or 16 keyframes. Since 4 is not divisible by 3, it becomes necessary to specify non-integer values for the dead center keyframes (again, 16 keyframes assumed):
ORTSWheelCrankAngleDifference ( 0deg 120deg 240deg )
ORTSWheelCrankDeadCenterKeyFrames(
Comment ( *** Left Cylinder *** )
Cylinder1 (
Forward ( 0 )
Back ( 8 )
)
Comment ( *** Center Cylinder *** )
Cylinder2 (
Forward ( 2.667 )
Back ( 10.667 )
)
Comment ( *** Right Cylinder *** )
Cylinder3 (
Forward ( 5.33 )
Back ( 13.33 )
)
)
In the case of articulated (Big Boy, Challenger, etc.) or divided-drive (PRR T1, Q2, etc.) locomotives, these parameters would fall within each
ORTSSteamEngines grouping (one-piece model with 16 keyframes assumed):
ORTSSteamEngines ( 2
Steam (
Comment ( Front Steam Engine )
NumCylinders ( 2 )
CylinderStroke ( 32.0in )
CylinderDiameter ( 23.0in )
AttachedAxle( 0 )
ExcessRodBalance ( 100lb )
ORTSWheelCrankAngleDifference ( 0deg 90deg )
ORTSWheelCrankDeadCenterKeyFrames(
Comment ( *** Left Cylinder *** )
Cylinder1 (
Forward ( 0 )
Back ( 8 )
)
Comment ( *** Right Cylinder *** )
Cylinder2 (
Forward ( 4 )
Back ( 12 )
)
)
)
Steam (
Comment ( Rear Steam Engine )
NumCylinders ( 2 )
CylinderStroke ( 32.0in )
CylinderDiameter ( 23.0in )
AttachedAxle( 1 )
ExcessRodBalance ( 100lb )
ORTSWheelCrankAngleDifference ( 0deg 90deg )
ORTSWheelCrankDeadCenterKeyFrames(
Comment ( *** Left Cylinder *** )
Cylinder1 (
Forward ( 0 )
Back ( 8 )
)
Comment ( *** Right Cylinder *** )
Cylinder2 (
Forward ( 4 )
Back ( 12 )
)
)
)
)
For geared locomotives (Heisler, Shay, Climax), the gear reduction complicates the calculation of the dead centers, as these dead centers would be located relative to the crankshaft instead of the wheels, even though the wheels are animated "conventionally."