The game by default comes with 2 variations for each train car: v1 and v2. Each engine is defined to pull a certain variation of cars. The engines that are released before 1900 pull v1, and the engines that are released after 1900 pull v2.
If you have an engine from 1880, it will always pull v1 cars even if you add more cars to it in 1910. However, if you upgrade the 1880 engine to a 1910 engine and then add cars, it will keep the v1 cars and add v2 cars to it because the new engine takes v2 cars. Get it?
With the release of the Basin & Range map, we added a new variation of train cars: bnsf. All the new engines from that map were coded (in the XML) to pull bnsf train cars.
Adding a new variation of train cars makes it possible to have some engines pull v1, some pull v2, and now some pull bnsf train cars all on the same map.
Let's say I have the following 3 engines in a map:
1880 2-8-0 Consolidation
1900 4-6-2 Pacific
1994 AC-4400 with the Santa Fe War Bonnet paint scheme
I can make the Consolidation pull v1 train cars, the Pacific pull v2 train cars, and the AC-4400 pull bnsf train cars by coding it this way in the map's RRT_Trains.xml file.
Then in the game, in 1880 I create the Consolidation and add a couple grain hoppers. This will add the shorter open gondola style hoppers. Then in 1900 I upgrade the engine to a Pacific and add a couple more grain hoppers. This will add the new closed hopper cars. So now my train has 2 different grain hoppers. Then in 1994 I upgrade the engine to an AC-4400 and add a few more grain hoppers. This will add the bnsf grain cars. So now my train has 3 different grain hoppers!
I think we can have any number of train car variations which would mean a single train could contain 8 different train cars hauling the same thing.
Big Papa and I have been thinking of ways to expand the passenger service by adding more passenger car types in this manner. Hopefully we will get to this some day.