Here you can find information about how OpenTTD calculates in-game figures.
You always wanted to know how the station-rating was built up? How goods-distribution works? Here you can find it!
Each part of the company rating is a linear function, ie. earning 50% of the target for a component will give 50% of the points allocated for that component. Where components involve monetary amounts, these are converted to the currency of the current game; internally these amounts are stored as the pound amount.
|Component||Target||Points (min)||Points (max)||Percentage|
|Vehicle count||>=120||0 points for 0 vehicles||100 points for at least 120 vehicles||0 to 10%|
|Number of station parts company owns||>=80||0 points for 0 parts||100 points for at least 80 parts||0 to 10%|
|Lowest profit of vehicles at least two years old||>=£10,000||0 points for loss or £0||100 points for at least £10,000||0 to 10%|
|Lowest quarterly revenue earned in past 3 years||>=£50k||0 points for £0||50 points for at least £50k||0 to 5%|
|Highest quarterly revenue earned in past 3 years||>=£100k||0 points for £0||100 points for at least £100k||0 to 10%|
|Units of cargo delivered in past year||>=40,000||0 points for 0 units||400 points for at least 40,000 units||0 to 40%|
|Number of types of cargo delivered in past quarter||>=8||0 points for 0 cargo-types||50 points for at least 8 cargo-types||0 to 5%|
|Current cash in bank||>=£10m||0 points for £0||50 points for at least £10m||0 to 5%|
|Current loan from bank||£0||0 points for >£250k||50 points for £0||0 to 5%|
|Totals||0 points||1000 points||0 to 100%|
This section shows the factors that affect the station rating. All calculations are done separately for each cargo type.
|Factor||Condition||Rating points||Rating %|
|Max speed of last vehicle entering station (to a max of 255 km/h)||Above 85 km/h (52 mph)||(Speed (km/h) - 85) / 4||0% to 17%|
|Age in years of last vehicle entering station||2||10||4%|
|Days since last cargo pickup
Multiply days in "Condition" column by 4 if last vehicle was a ship.
(Note: If a vehicle was ready to pick up a cargo but there was no cargo, it is regarded as a cargo pickup anyhow)
|30 to 52,5||25||10%|
|15 to 30||50||20%|
|7.5 to 15||95||37%|
|less than 7.5||130||51%|
|Units of cargo waiting at station||More than 1500||-90||-35%|
|1001 to 1500||-35||-14%|
|601 to 1000||0||0%|
|301 to 600||10||4%|
|101 to 300||30||12%|
|less than 100||40||16%|
|Statue in town of station||Built||26||10%|
|Small advertising campaign||Station within 10 tiles of town center||+64||+25%|
|Medium advertising campaign||Station within 15 tiles of town center||+112||+44%|
|Large advertising campaign||Station within 20 tiles of town center||+160||+63%|
|Road vehicle crashed||Station within 22 tiles of crash||-160||-63%|
|Train crashed||Station within 30 tiles of crash||-160||-63%|
Divide the total rating points by 255 to get the percent rating. The maximum possible rating is 100%. Advertising campaigns give an instant, temporary boost to ratings of nearby stations. The boost will gradually fall down to the calculated rating.
The amount of cargo that can be transported from an industry is fully reliant on the station rating. So if the amount of cargo transported from an industry is low, it is probably because the station rating is low, too.
Every 2.5 days station ratings are computed; ratings can't change by more than 2 points per cycle, except after crashes.
Note: The exact formula can be seen under "UpdateStationRating()" in station_cmd.cpp.
Note: If rating will less than 50%, the station starts losing cargo.
Cargo delivery to stations
During each cycle of 2.5 days for each cargo type of the delivering industry a maximum of 2 stations can get cargo assigned. If there are more than 2 possible stations with the same maximum rating value for the current cargo type then it depends on internal ordering of the stations which ones get the cargo.
If there's only one possible station then the delivered amount is: produced_amount * station_rating_in_percent, rounded up to the next integer value.
For two possible stations the calculation is more complex. First the rating in points of station 2 is divided by 2 for the further local calculations. The amount available to station 1 is calculated as follows: (station_rating_in_points1 * (amount + 1)) / (station_rating_in_points1 + station_rating_in_points2); for similar ratings this is about 2/3 of the production, it increases for larger differences. The result is subject to the same calculation as in the single station case. This is delivered to station 1. If station 1 doesn't get the full amount available to it then that part won't be transported at all. The remaining amount of the production, if any, is subject to the same calculation as in the single station case and delivered to station 2.
Ratings limit some player actions; they start at +500 and can change based on some actions.
Currently you can exploit the game by clearing ~200 trees and then replanting them. This sets the rating to -1000 (the minimum), and then raises it to 220.
* "Required rating" is listed for the settings Permissive / Neutral / Hostile of
Each month players' ratings automatically change:
- Rating goes up by 5 if it is less than 200.
- Rating goes up by 12 for each station that has transferred cargo in the last 50 days.
- Rating goes down by 15 for each station that has not transferred cargo in the last 50 days.
A player has a rating of -300, (Very Poor), 2 active stations and 1 inactive station at a town.
5pts + 2 * 12pts - 15pts = 14pts points gain per month.
(-200 - -300)pts / 14pts/mo = 8 months before the town will let him build another station.
Code for town ratings is in town.h, town_cmd.c, tree_cmd.c, and road_cmd.c.
Here is how the game determines how much cargo an industry produces per month. This table lists possible starting productions governed by the smooth economy patch. Production is a multiple of 8 or 9 (sometimes 10 with forests).
|Raw Material Industry||Produced Cargo||Initial production range|
|Coal Mine||Coal||56 to 176|
|Forest||Wood||48 to 152|
|Oil Rig||Oil||56 to 176|
|Farm||Grain and Livestock||40 to 112|
|Copper Mine||Copper Ore||56 to 112|
|Oil Well||Oil||48 to 152|
|Iron Mine||Iron Ore||40 to 112|
|Bank||Valuables||24 to 64|
|Gold Mine||Gold||24 to 80|
|Diamond Mine||Diamonds||24 to 80|
|Fruit Plantation||Fruit||40 to 112|
|Rubber Plantation||Rubber||40 to 112|
|Water Supply||Water||48 to 152|
|Farm||Maize||40 to 128|
|Lumber Mill||Wood||180 or 225 (if trees available)|
|Cotton Candy Forest||Cotton Candy||48 to 152|
|Battery Farm||Batteries||40 to 128|
|Cola Wells||Cola||48 to 136|
|Plastic Fountain||Plastic||56 to 160|
|Bubble Generator||Bubbles||48 to 152|
|Toffee Quarry||Toffee||40 to 112|
|Sugar Mine||Sugar||40 to 128|
Each month the game randomly changes some industry productions.
Default / TTD-like Economy Rules
For 256x256 tile maps there is one change per month possible (only 1 industry changes). Number scales nicely with map size since the introduction of "Daily production changes" function in trunk (r14332).
- As with smooth economy, industries deliver cargo to the stations 8, 9 or 10 (high production forests only - more than 400t) times per month.
However - productions are limited to 6 production levels: lowest, lower, normal (with a new game started or a new industry built), higher, 2x higher and the highest. Production changes between these levels are either a 50% decrease (half) or a 100% increase (double).
- A Coal Mine: lowest (32 or 40 t per month), lower (64 or 72), normal (120 or 135), higher (240 or 270), 2x higher (480 or 540) and the highest (960 or 1080).
- A Forest: lowest (32 or 64 t per month), lower (35 or 70), normal ( 78 or 117), higher (208 or 260), 2x higher (416 or 468 or 520 (= 10x multiplier)) and the highest (832 or 936 or 1040).
- A Gold Mine: lowest (12 or 18 bags/month), lower (32 or 40), normal ( 56 or 63), higher (112 or 126), 2x higher (224 or 252) and the highest (448 or 504).
To make things simple, let's look what are the chances for 256x256 maps (max. 1 change per month = max. 1 industry per month changes production):
- The chance for a production change each month is:
- 50% for only_decrease industry to decrease (currently only Temperate terrain Oil Wells) or
- 50% for 1/3 chance (=16.7%) that other industry (non only_decrease) changes production.
- If a production change does occur (~16.7% chance per month):
- For an industry that has poor or no service (less than 60% of its cargo is transported): 33% chance of increase, 67% chance of decrease.
- For an industry that has good (greater than 60%) service: 67% chance of increase, 33% chance of decrease.
- There is no bonus for excellent service with default economy.
- To calculate the chance for a particular change, i.e. 50% * 1/3 * 33% = 5.56%:
- Poor service: 5.56% that 1 possible change per month is an increase and 11.12% that 1 possible change per month is a decrease.
- Good service: 11.12% that 1 possible change per month is an increase and 5.56% that 1 possible change per month is a decrease.
Smooth Economy Rules
- The chance for a production change each month is 4.5%, i.e. 4.5% of producing industries from industry list change production.
- If a production change does occur:
- For an industry that has poor or no service (less than 60% of its cargo is transported): 33% chance of increase, 67% chance of decrease
- For an industry that has good (greater than 60%) service: 67% chance of increase, 33% chance of decrease
- For an industry that has excellent (greater than 80%) service: 83% chance of increase, 17% chance of decrease
- These two are multiplied together, i.e. 4.5% * 33% = 1.5%:
- Poor service: 1.5% to increase and 3.0% to decrease
- Good service: 3.0% to increase and 1.5% to decrease
- Excellent service: 3.75% to increase and 0.75% to decrease
- With the smooth economy option enabled, production changes per month are between 3 and 23%
- Industries with very low productions, (ie. 12-40 tonnes per month) will have higher changes.
- Primary industries produce cargo 8 or 9 times (10 times possible for forests) a month. Monthly production is an industries 'base value' multiplied times 8 or 9 (or 10 for higher productions forests). For example, the base value for a coal mine is 15 tons, so the monthly production is 120 or 135 tons. This base value is capped at 255, so the maximum possible monthly production for any industry is 2040 or 2295 (or 2550 - again - forest).Ref
If a coal mine has 70% of its output transported, there is a 3% chance (4.5% * 67%) of a production increase from 3-23% and a 1.5% chance (4.5% * 33%) of a production decrease from 3-23% (but 13% on average).
(1 + (0.03 - 0.015) * 0.13) ^12 - 1 = 0.0237 or 2.37%
The coal mine will grow an average of 2.37% after the first year
(1.0237 ^20) - 1 = 59.6% after twenty years
(1.0237 ^50) - 1 = 321.8% or 3.22x after fifty years
(1.0237 ^100) - 1 = 10.35x after one hundred years
For an industry with rating of more than 80%, there is a 3.75% chance of increase and 0.75% chance of decrease:
(1 + (.0375 - 0.0075) * .13) ^12 - 1 = 0.0478 or 4.78%
The industry will grow approximately 4.78% after first year
(1.0478 ^20) - 1 = 2.54x after twenty years
(1.0478 ^50) - 1 = 10.32x after fifty years
(1.0478 ^100) - 1 = 106.62x after one hundred years
For good service, it takes 29.6 years on average to double; with excellent service, it takes 14.8 years. If in the game's time a day is 2.36 seconds, then the doubling time with good service is 7.1 hours; with excellent service, the doubling time is 3.6 hours. For production to go from near bottom of 100 to near maximum of 2100 takes 130 years with good service and 65 years with excellent service.
However, in game you will find industries changing their production rate very randomly. It must be stressed the above examples are only true when observing many industries over the long-term; individual industries may greatly deviate from these averages. Statistically speaking, 6 out of 10 industries will not go from 100 to 2100 even with the best service during 65 years. About 1 out of 9 industries will even lower their production when being served at 60-80% cargo transported for 50 years.
For more responsiveness from industries, adapt the number of wagons to industry production (for the lowest production, you should use two wagons). [Full Load] orders are usually used for such cargo trains.
Note: The exact formula can be seen under "ChangeIndustryProduction()" in industry_cmd.cpp.
Delivery payment rates
The amount you get paid for delivering cargo is based on 4 factors: the amount of cargo you deliver, the value of the cargo, the distance you deliver it, and how on-time you deliver it.
|Initial cargo |
Initial cargo payment values are for delivering 100 pieces of cargo 1 tile. Payment goes up with inflation as the game progresses.
Late delivery penalties:
- For each day after the Early Delivery time that you deliver the cargo, you are penalized 0.4%.
- For each day after the Late Delivery time that you deliver the cargo, you are penalized an additional 0.4%.
- Maximum penalty is 88%.
Examples (no inflation):
Deliver 200,000 liters of oil 20 squares in 10 days:
2 * £54 * 20 squares * 100% = £2160
Deliver 100 bags of mail 100 squares in 100 days:
£55 * 100 squares * (1 - 80*0.004 - 10*0.004) = £3520
HINT calculate easy:
Income = cargo units * cargo value * 0,4
cargo value comes from the Y-axis on the specific transported goods graph in-game
measure your real delivery time in days and plot on x-axis This result will give you an easy estimation of your income with 5% deviation
- The exact formula is much more complicated and slightly more accurate, due to rounding error when converting from larger discrete values. See economy.cpp (GetTransportedGoodsIncome) and Cargo income.
- Distance is measured between the name-labeled tiles of the stations, not from the industries or by vehicle distance traveled. It is computed by adding the differences in x and y tiles (manhattan distance), not straight-line distance.
- Each cargo has a characteristic time at which payment is maximized, assuming you can keep it moving away from the source station at a constant speed. For a cargo with a "late delivery" penalty, this time is typically around 70 days; for one without, this is typically around 130 days.
Internally OpenTTD works with a unit called "km-ish/h", which is equal to "mph/1.6". The conversion factor from km-ish/h to km/h is 1.00584, and the conversion factor from km-ish/h to mph is 1.6.
A tile is, for vehicle speed purposes 664.(216) km-ish, 668 km or 415 miles long. This is based on the following facts:
- A tile has 16 sub locations per X/Y axis.
- A vehicle has stores remainder of tile movement in a byte called subspeed, thus has 256 different values.
- The vehicle's (raw) speed is added to subspeed. The resulting number is divided by 256, the remainder is stored in subspeed and the vehicle is moved quotient sub locations forward. For trains and aircraft the raw speed is in km-ish/h, for road vehicles/ships in 0.5 km-ish/h. For trains and aircraft this step is done twice a tick, whereas ships and road vehicles do it once a tick.
- A day contains 74 ticks, and takes 24 hours.
Now assume a vehicle going 1 km-ish/hour: (1 * 16 * 256) / (74 * 2) * 24 = 664.(216).
The net result is that 100 km/hour is ~3.6 tiles/day.
- By default aircraft fly at a quarter of their listed speed (this can be changed in advanced settings).
- Aircraft acceleration varies per aircraft, between 144 km-ish/h/day and 400 km-ish/h/day.
- Broken down planes fly at 320 km-ish/h.
- Airport taxi speed is 150 km-ish/h.
- Road vehicles accelerate at 37 km-ish/h/day.
- Road vehicles go around corners at half their max speed.
- Road vehicles accelerate an additional 74 km-ish/h/day downhill.
- When going uphill, road vehicles slow down 10% 4 times per tile. This balances out with acceleration at 34-ish km/h for all road vehicles.
(Note: This does not apply when using the improved road vehicle acceleration model.)
- Ships accelerate at 37 km-ish/h/day.
- A "stopped" ship resumes its last speed instantly.
(with the realistic train acceleration patch)
- Trains are not affected going up or down hills if they are powerful enough.
- Trains are limited to entering and exiting a depot at 61km/h.
- Trains can make one 45° turn without slowing down.
- When making two or more 45° turns in the same direction, the max speed is limited as follows:
"Curvature" means the average number of wagons of the train between turns. However, very sharp turns (curvatures 0 and 1) are not averaged out in longer trains.
- New railtypes can specify custom maximum curve speeds in the same steps as the three default types in the table.
- Tilting train gain an additional bonus of 20% on the maximum speed.
- Train acceleration and max speed are affected by engine power, maximum tractive effort (all engines and powered wagons combined), current speed, air drag, total train mass, and wagons/engines on slopes.
- Non maglev train Acceleration spreadsheet can be found on tt-forums: tt-forums
- Braking is twice acceleration except when entering a depot or a station.
See aircraft_cmd.c, roadveh_cmd.c, ship_cmd.c, train_cmd.c, vechicle.c for code.
As of OpenTTD 1.4.2, given power in hp, max tractive effort in kN, total weight of the train in tonnes, the number train parts (engines and wagons), the air drag value of the first engine in the train (NewGRF setting, defaults to
min(192,max(1,floor(2048/max_speed))), meaning faster trains are built more aerodynamically), the combined weight of any train parts (engines or wagons) currently on an up-slope, the combined weight of any train parts (engines or wagons) currently on a down-slope, the slope steepness (game setting [1-10], default 3), and the current speed of the train in km/h, the acceleration of a non-maglev train can be calculated as follows:
- force = min((max_te * 1000), floor((power * 746) / (current_speed * 5/18))) [N]
- slope_force = weight_on_upslope * slope_steepness * 100 - weight_on_downslope * slope_steepness * 100 [N]
- axle_friction = total_weight * 10 [N]
- rolling_friction = total_weight * 15 * (1 + floor(current_speed / 512)) [N]
- air_drag_coefficient = 14 * floor(air_drag_value * 1 + number_of_parts * 3/20) / 1000
- air_drag = floor(air_drag_coefficient * current_speed^2) [N]
- acceleration = (force - (slope_force + axle_friction + rolling_friction + air_drag)) / (total_weight * 4) [256th of a km/h per half-tick]
Note: air_drag_coefficient is twice that if any part of the train is in a tunnel
Given the same values, the equilibrium speed, eg the speed the train would eventually settle on if the same conditions continued indefinitely, can be calculated as follows [Assuming a constant
rolling_friction (ie the speed stays below 512 km/h), and ignoring the flooring of
air_drag to an integral value]:
- p = (slope_force + axle_friction + rolling_friction) / air_drag_coefficient
- q = (-power * 746 * 18/5) / air_drag_coefficient
- C = (27/2*q + ((27/2*q)^2 + 27*p^3)^(1/2))^(1/3)
- equilibrium = min(max_speed, p/C - C/3, max(0, max_te * 1000 / air_drag_coefficient - p)^(1/2))