Increase Train Lifespans, Fine Tune Maintenance Costs

It's not a map? It's not a Train? Share and download the files here
Post Reply
railage
Posts: 33
Joined: Tue Dec 22, 2015 2:09 am

Increase Train Lifespans, Fine Tune Maintenance Costs

Post by railage » Thu Mar 10, 2016 10:26 pm

Ever gotten tired of replacing engines so often toward the end of a game?
Using the "<,>" shortcut keys to scroll through the engines helps some, but it's still a chore.

I like to play without patents because those make the game too easy, and are random. After getting a powerful one the game starts losing economic challenge. There's an XML file available that will work for any custom map. It basically disables patents. Thread is here. Forget about the Lubricator Patent in this thread.

The Wiki hosted on Bobby's site has good info on how the game handles maintenance cost. It's recommended reading before trying to use this spreadsheet.

I don't want to repeat the Wiki here. Just add new info. Please use that to learn the basics of what Base Maintenance Cost, Periodic Maintenance Increase, Trade in Value, and Optimum Train Life mean.

The Concepts behind the updated Spreadsheet
The concepts are not mine.
See this 2009 post on Bobby's forum. [url=http://sidmeiersrailroads.net/viewtopic.php?p=1558#p1558]Covak[/url] wrote:I'll increase those MaintenanceCosts, but reduce fTrainMaintModifier in the difficulty settings to keep the base maintenance costs the same, and then the periodic increase amount will be reduced (since it's also multiplied by fTrainMaintModifier, I think). Yay :)
Periodic Maintenance Increase is directly tied to your chosen difficulty level's <fTrainMaintModifier>. The formula is 500*(<fTrainMaintModifier>). For Robber Baron that's 500*1.4=700. This formula is true for every engine in the game. The difficulty level is the only adjustment for this.

Base Maintenance Cost for an engine takes the <MaintenanceCost> for an engine (found in the Train XML file. The game then applies the difficulty level's <fTrainMaintModifier>. This gives <MaintenanceCost>*<fTrainMaintModifier>. For the Consolidation on Robber Baron we get 3500*1.4=4900. By increasing the <MaintenanceCost> in the Train XML, Base Maintenance Cost can be changed without affecting Periodic Maintenance Increase.

The current ratio of Periodic Maintenance Increase to Base Maintenance Cost is one of the fundamentals behind the short Optimum Train Life. Adjusting this ratio can dramatically increase Optimum Train Life, without greatly impacting the actual running costs of a train in the game.

A short word on Trade in Value. Trade in Value is the other piece of this puzzle. Increasing the purchase price for an engine can help extend Optimum Train Life. This can either be done manually in the Train XML file or by using the difficulty level's <fTrainCostModifier>.

All maintenance costs are based on ticks per month. This is the <iTurnsperMonth> in the Scenario_User XML. Trade in Value, on the other hand is based on actual Months. For this reason, maps that use slower time incur shorter values for Optimum Train Life.

Spreadsheet Features:

This spreadsheet auto-generates results based upon the inputs given for:
Ticks per month : (<iTurnsperMonth)
Diff. Maint. Modifier : (<fMaintenanceCostModifier>)
Train Cost Modifier : (<fTrainCostModifier>)

A third optional section :
By answering YES in the top left corner, an additional input is available. I called this Manual Modifier. The idea of this is that we are previewing changes to each engine's <MaintenanceCost> values in the Train XML before you go and make them manually. If using this modifier, use the Column C values for each engine's <MaintenanceCost>.
A warning about using high values of <MaintenanceCost> paired with low values of <fMaintenanceCostModifier>. The AI always pays <MaintenanceCost> as it shown in the Train XML. Essentially, it has no <fMaintenanceCostModifier>.

For custom engines:

There is a second sheet. Open the Train XML and go through the entry for each <Train>. Put the <Name> in Column D, the <Cost> in Column A, and the <MaintenanceCost> in Column B. Simple stuff. The rest is auto-generated. Remember to enter the correct game speed for Ticks per Month.

Running cost:
This is the total cost incurred per 1,000 ticks, averaged out over the life of the train. This reading is useful to see how your changes will affect a train's profitability. It's also good to compare the running costs for unmodified trains if you set all the inputs to their current in-game settings.


Using the spreadsheet:
Running cost is visible. This is the total cost of all maintenance plus engine purchase incurred per 1,000 ticks, averaged out over the life of the train. This reading is useful to see how your changes will affect a train's profitability. It's also good to compare the running costs for unmodified trains if you set all the inputs to their current in-game settings.

A simple way to make an engine last longer is to increase it's price. The Difficulty level <fTrainCostModifier> enables all engine's purchase costs to be increased by a percentage with one edit to the Difficulty XML instead of changing the cost for each individual train. As an example, on Robber Baron level, normal game speed, I saw that doubling engine cost gave a 50%+ longer life, but running cost was only up 20%. Running cost drops back to normal if Difficulty Train Maintenance Modifier is reduced by 0.1 or so.

For very slow maps, combine everything. Expensive engines, low <fTrainMaintModifier>, and high Train XML <MaintenanceCost> should make the engines usable in single player. AI would get slaughtered though. This is a large improvement over having a very low Base Maintenance Cost which just begs for replacement every 1,000 ticks on Robber Baron settings.
Attachments
Maintenance Cost Balancer.zip
(63.92 KiB) Downloaded 404 times

Post Reply