OpenTTD Source  20240917-master-g9ab0a47812
economy_type.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef ECONOMY_TYPE_H
11 #define ECONOMY_TYPE_H
12 
14 #include "core/enum_type.hpp"
15 
16 typedef OverflowSafeInt64 Money;
17 
19 enum EconomyType : uint8_t {
20  ET_BEGIN = 0,
21  ET_ORIGINAL = 0,
22  ET_SMOOTH = 1,
23  ET_FROZEN = 2,
24  ET_END = 3,
25 };
26 
32 static const int MIN_CARGO_SCALE = 15;
38 static const int MAX_CARGO_SCALE = 300;
40 static const int DEF_CARGO_SCALE = 100;
41 
43 struct Economy {
45  int16_t fluct;
46  uint8_t interest_rate;
47  uint8_t infl_amount;
48  uint8_t infl_amount_pr;
51  uint64_t inflation_prices;
52  uint64_t inflation_payment;
53 
54  /* Old stuff for savegame conversion only */
57 };
58 
60 enum ScoreID {
61  SCORE_BEGIN = 0,
62  SCORE_VEHICLES = 0,
63  SCORE_STATIONS = 1,
64  SCORE_MIN_PROFIT = 2,
65  SCORE_MIN_INCOME = 3,
66  SCORE_MAX_INCOME = 4,
67  SCORE_DELIVERED = 5,
68  SCORE_CARGO = 6,
69  SCORE_MONEY = 7,
70  SCORE_LOAN = 8,
72  SCORE_END = 10,
73 
74  SCORE_MAX = 1000,
75  /* the scores together of score_info is allowed to be more! */
76 };
78 
79 
80 struct ScoreInfo {
81  int needed;
82  int score;
83 };
84 
89 enum Price {
90  PR_BEGIN = 0,
91  PR_STATION_VALUE = 0,
92  PR_BUILD_RAIL,
93  PR_BUILD_ROAD,
94  PR_BUILD_SIGNALS,
95  PR_BUILD_BRIDGE,
96  PR_BUILD_DEPOT_TRAIN,
97  PR_BUILD_DEPOT_ROAD,
98  PR_BUILD_DEPOT_SHIP,
99  PR_BUILD_TUNNEL,
100  PR_BUILD_STATION_RAIL,
101  PR_BUILD_STATION_RAIL_LENGTH,
102  PR_BUILD_STATION_AIRPORT,
103  PR_BUILD_STATION_BUS,
104  PR_BUILD_STATION_TRUCK,
105  PR_BUILD_STATION_DOCK,
106  PR_BUILD_VEHICLE_TRAIN,
107  PR_BUILD_VEHICLE_WAGON,
108  PR_BUILD_VEHICLE_AIRCRAFT,
109  PR_BUILD_VEHICLE_ROAD,
110  PR_BUILD_VEHICLE_SHIP,
111  PR_BUILD_TREES,
112  PR_TERRAFORM,
113  PR_CLEAR_GRASS,
114  PR_CLEAR_ROUGH,
115  PR_CLEAR_ROCKS,
116  PR_CLEAR_FIELDS,
117  PR_CLEAR_TREES,
118  PR_CLEAR_RAIL,
119  PR_CLEAR_SIGNALS,
120  PR_CLEAR_BRIDGE,
121  PR_CLEAR_DEPOT_TRAIN,
122  PR_CLEAR_DEPOT_ROAD,
123  PR_CLEAR_DEPOT_SHIP,
124  PR_CLEAR_TUNNEL,
125  PR_CLEAR_WATER,
126  PR_CLEAR_STATION_RAIL,
127  PR_CLEAR_STATION_AIRPORT,
128  PR_CLEAR_STATION_BUS,
129  PR_CLEAR_STATION_TRUCK,
130  PR_CLEAR_STATION_DOCK,
131  PR_CLEAR_HOUSE,
132  PR_CLEAR_ROAD,
133  PR_RUNNING_TRAIN_STEAM,
134  PR_RUNNING_TRAIN_DIESEL,
135  PR_RUNNING_TRAIN_ELECTRIC,
136  PR_RUNNING_AIRCRAFT,
137  PR_RUNNING_ROADVEH,
138  PR_RUNNING_SHIP,
139  PR_BUILD_INDUSTRY,
140  PR_CLEAR_INDUSTRY,
141  PR_BUILD_OBJECT,
142  PR_CLEAR_OBJECT,
143  PR_BUILD_WAYPOINT_RAIL,
144  PR_CLEAR_WAYPOINT_RAIL,
145  PR_BUILD_WAYPOINT_BUOY,
146  PR_CLEAR_WAYPOINT_BUOY,
147  PR_TOWN_ACTION,
148  PR_BUILD_FOUNDATION,
149  PR_BUILD_INDUSTRY_RAW,
150  PR_BUILD_TOWN,
151  PR_BUILD_CANAL,
152  PR_CLEAR_CANAL,
153  PR_BUILD_AQUEDUCT,
154  PR_CLEAR_AQUEDUCT,
155  PR_BUILD_LOCK,
156  PR_CLEAR_LOCK,
157  PR_INFRASTRUCTURE_RAIL,
158  PR_INFRASTRUCTURE_ROAD,
159  PR_INFRASTRUCTURE_WATER,
160  PR_INFRASTRUCTURE_STATION,
161  PR_INFRASTRUCTURE_AIRPORT,
162 
163  PR_END,
164  INVALID_PRICE = 0xFF
165 };
167 
168 typedef Money Prices[PR_END];
169 typedef int8_t PriceMultipliers[PR_END];
170 
172 enum ExpensesType : uint8_t {
188 };
189 
193 using Expenses = std::array<Money, EXPENSES_END>;
194 
202 };
203 
210  uint grf_feature;
212 };
213 
215 static const int LOAN_INTERVAL = 10000;
217 static const int64_t INITIAL_LOAN = 100000;
219 static const int64_t MAX_LOAN_LIMIT = 2000000000;
220 
229 static const uint64_t MAX_INFLATION = (1ull << (63 - 32)) - 1;
230 
236 static const int MIN_PRICE_MODIFIER = -8;
237 static const int MAX_PRICE_MODIFIER = 16;
238 static const int INVALID_PRICE_MODIFIER = MIN_PRICE_MODIFIER - 1;
239 
241 static const uint TUNNELBRIDGE_TRACKBIT_FACTOR = 4;
243 static const uint LEVELCROSSING_TRACKBIT_FACTOR = 2;
245 static const uint ROAD_DEPOT_TRACKBIT_FACTOR = 2;
247 static const uint ROAD_STOP_TRACKBIT_FACTOR = 2;
249 static const uint LOCK_DEPOT_TILE_FACTOR = 2;
250 
251 struct CargoPayment;
252 typedef uint32_t CargoPaymentID;
253 
254 #endif /* ECONOMY_TYPE_H */
PriceBaseSpec::category
PriceCategory category
Price is affected by certain difficulty settings.
Definition: economy_type.h:209
SCORE_TOTAL
@ SCORE_TOTAL
This must always be the last entry.
Definition: economy_type.h:71
EXPENSES_TRAIN_REVENUE
@ EXPENSES_TRAIN_REVENUE
Revenue from trains.
Definition: economy_type.h:180
LOAN_INTERVAL
static const int LOAN_INTERVAL
The "steps" in loan size, in British Pounds!
Definition: economy_type.h:215
INVALID_EXPENSES
@ INVALID_EXPENSES
Invalid expense type.
Definition: economy_type.h:187
LEVELCROSSING_TRACKBIT_FACTOR
static const uint LEVELCROSSING_TRACKBIT_FACTOR
Multiplier for how many regular track bits a level crossing counts.
Definition: economy_type.h:243
Price
Price
Enumeration of all base prices for use with Prices.
Definition: economy_type.h:89
Economy::inflation_payment
uint64_t inflation_payment
Cumulated inflation of cargo payment since game start; 16 bit fractional part.
Definition: economy_type.h:52
PriceBaseSpec::grf_feature
uint grf_feature
GRF Feature that decides whether price multipliers apply locally or globally, #GSF_END if none.
Definition: economy_type.h:210
EXPENSES_SHIP_RUN
@ EXPENSES_SHIP_RUN
Running costs ships.
Definition: economy_type.h:178
overflowsafe_type.hpp
Economy::max_loan
Money max_loan
NOSAVE: Maximum possible loan.
Definition: economy_type.h:44
MIN_PRICE_MODIFIER
static const int MIN_PRICE_MODIFIER
Maximum NewGRF price modifiers.
Definition: economy_type.h:236
EXPENSES_END
@ EXPENSES_END
Number of expense types.
Definition: economy_type.h:186
Economy::fluct
int16_t fluct
Economy fluctuation status.
Definition: economy_type.h:45
PCAT_NONE
@ PCAT_NONE
Not affected by difficulty settings.
Definition: economy_type.h:199
Economy::interest_rate
uint8_t interest_rate
Interest.
Definition: economy_type.h:46
ScoreInfo::score
int score
How much score it will give.
Definition: economy_type.h:82
EXPENSES_TRAIN_RUN
@ EXPENSES_TRAIN_RUN
Running costs trains.
Definition: economy_type.h:175
MAX_CARGO_SCALE
static const int MAX_CARGO_SCALE
Maximum allowed value of town_cargo_scale/industry_cargo_scale.
Definition: economy_type.h:38
DECLARE_POSTFIX_INCREMENT
#define DECLARE_POSTFIX_INCREMENT(enum_type)
Some enums need to have allowed incrementing (i.e.
Definition: enum_type.hpp:14
DEF_CARGO_SCALE
static const int DEF_CARGO_SCALE
Default value of town_cargo_scale/industry_cargo_scale.
Definition: economy_type.h:40
SCORE_END
@ SCORE_END
How many scores are there..
Definition: economy_type.h:72
EconomyType
EconomyType
Type of the game economy.
Definition: economy_type.h:19
EXPENSES_AIRCRAFT_RUN
@ EXPENSES_AIRCRAFT_RUN
Running costs aircraft.
Definition: economy_type.h:177
CargoPayment
Helper class to perform the cargo payment.
Definition: economy_base.h:24
EXPENSES_NEW_VEHICLES
@ EXPENSES_NEW_VEHICLES
New vehicles.
Definition: economy_type.h:174
TUNNELBRIDGE_TRACKBIT_FACTOR
static const uint TUNNELBRIDGE_TRACKBIT_FACTOR
Multiplier for how many regular track bits a tunnel/bridge counts.
Definition: economy_type.h:241
PriceBaseSpec::fallback_price
Price fallback_price
Fallback price multiplier for new prices but old grfs.
Definition: economy_type.h:211
EXPENSES_ROADVEH_REVENUE
@ EXPENSES_ROADVEH_REVENUE
Revenue from road vehicles.
Definition: economy_type.h:181
PCAT_CONSTRUCTION
@ PCAT_CONSTRUCTION
Price is affected by "construction cost" difficulty setting.
Definition: economy_type.h:201
PriceBaseSpec::start_price
Money start_price
Default value at game start, before adding multipliers.
Definition: economy_type.h:208
EXPENSES_OTHER
@ EXPENSES_OTHER
Other expenses.
Definition: economy_type.h:185
SCORE_MAX
@ SCORE_MAX
The max score that can be in the performance history.
Definition: economy_type.h:74
EXPENSES_LOAN_INTEREST
@ EXPENSES_LOAN_INTEREST
Interest payments over the loan.
Definition: economy_type.h:184
PriceBaseSpec
Describes properties of price bases.
Definition: economy_type.h:207
Economy::industry_daily_increment
uint32_t industry_daily_increment
The value which will increment industry_daily_change_counter. Computed value. NOSAVE.
Definition: economy_type.h:50
ROAD_DEPOT_TRACKBIT_FACTOR
static const uint ROAD_DEPOT_TRACKBIT_FACTOR
Multiplier for how many regular track bits a road depot counts.
Definition: economy_type.h:245
EXPENSES_AIRCRAFT_REVENUE
@ EXPENSES_AIRCRAFT_REVENUE
Revenue from aircraft.
Definition: economy_type.h:182
Economy::inflation_prices
uint64_t inflation_prices
Cumulated inflation of prices since game start; 16 bit fractional part.
Definition: economy_type.h:51
EXPENSES_ROADVEH_RUN
@ EXPENSES_ROADVEH_RUN
Running costs road vehicles.
Definition: economy_type.h:176
EXPENSES_PROPERTY
@ EXPENSES_PROPERTY
Property costs.
Definition: economy_type.h:179
Economy::old_max_loan_unround_fract
uint16_t old_max_loan_unround_fract
Old: Fraction of the unrounded max loan.
Definition: economy_type.h:56
Economy::infl_amount
uint8_t infl_amount
inflation amount
Definition: economy_type.h:47
MAX_LOAN_LIMIT
static const int64_t MAX_LOAN_LIMIT
The max amount possible to configure for a max loan of a company.
Definition: economy_type.h:219
PCAT_RUNNING
@ PCAT_RUNNING
Price is affected by "vehicle running cost" difficulty setting.
Definition: economy_type.h:200
ExpensesType
ExpensesType
Types of expenses.
Definition: economy_type.h:172
ScoreInfo::needed
int needed
How much you need to get the perfect score.
Definition: economy_type.h:81
Economy
Data of the economy.
Definition: economy_type.h:43
Economy::old_max_loan_unround
Money old_max_loan_unround
Old: Unrounded max loan.
Definition: economy_type.h:55
Economy::infl_amount_pr
uint8_t infl_amount_pr
inflation rate for payment rates
Definition: economy_type.h:48
enum_type.hpp
LOCK_DEPOT_TILE_FACTOR
static const uint LOCK_DEPOT_TILE_FACTOR
Multiplier for how many regular tiles a lock counts.
Definition: economy_type.h:249
ScoreID
ScoreID
Score categories in the detailed performance rating.
Definition: economy_type.h:60
OverflowSafeInt
Overflow safe template for integers, i.e.
Definition: overflowsafe_type.hpp:29
Economy::industry_daily_change_counter
uint32_t industry_daily_change_counter
Bits 31-16 are number of industry to be performed, 15-0 are fractional collected daily.
Definition: economy_type.h:49
INITIAL_LOAN
static const int64_t INITIAL_LOAN
The size of loan for a new company, in British Pounds!
Definition: economy_type.h:217
ROAD_STOP_TRACKBIT_FACTOR
static const uint ROAD_STOP_TRACKBIT_FACTOR
Multiplier for how many regular track bits a bay stop counts.
Definition: economy_type.h:247
MIN_CARGO_SCALE
static const int MIN_CARGO_SCALE
Minimum allowed value of town_cargo_scale/industry_cargo_scale.
Definition: economy_type.h:32
PriceCategory
PriceCategory
Categories of a price bases.
Definition: economy_type.h:198
Expenses
std::array< Money, EXPENSES_END > Expenses
Data type for storage of Money for each ExpensesType category.
Definition: economy_type.h:193
EXPENSES_SHIP_REVENUE
@ EXPENSES_SHIP_REVENUE
Revenue from ships.
Definition: economy_type.h:183
MAX_INFLATION
static const uint64_t MAX_INFLATION
Maximum inflation (including fractional part) without causing overflows in int64_t price computations...
Definition: economy_type.h:229
Prices
Money Prices[PR_END]
Prices of everything.
Definition: economy_type.h:168
ScoreInfo
Data structure for storing how the score is computed for a single score id.
Definition: economy_type.h:80
EXPENSES_CONSTRUCTION
@ EXPENSES_CONSTRUCTION
Construction costs.
Definition: economy_type.h:173