OpenTTD Source 20241224-master-gf74b0cf984
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
17
19enum 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
32static const int MIN_CARGO_SCALE = 15;
38static const int MAX_CARGO_SCALE = 300;
40static const int DEF_CARGO_SCALE = 100;
41
43struct Economy {
45 int16_t fluct;
46 uint8_t interest_rate;
47 uint8_t infl_amount;
53
54 /* Old stuff for savegame conversion only */
57};
58
60enum 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
80struct ScoreInfo {
81 int needed;
82 int score;
83};
84
89enum Price : uint8_t {
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
168typedef Money Prices[PR_END];
169typedef int8_t PriceMultipliers[PR_END];
170
189
193using Expenses = std::array<Money, EXPENSES_END>;
194
203
213
215static const int LOAN_INTERVAL = 10000;
217static const int64_t INITIAL_LOAN = 100000;
219static const int64_t MAX_LOAN_LIMIT = 2000000000;
220
229static const uint64_t MAX_INFLATION = (1ull << (63 - 32)) - 1;
230
236static const int MIN_PRICE_MODIFIER = -8;
237static const int MAX_PRICE_MODIFIER = 16;
238static const int INVALID_PRICE_MODIFIER = MIN_PRICE_MODIFIER - 1;
239
241static const uint TUNNELBRIDGE_TRACKBIT_FACTOR = 4;
243static const uint LEVELCROSSING_TRACKBIT_FACTOR = 2;
245static const uint ROAD_DEPOT_TRACKBIT_FACTOR = 2;
247static const uint ROAD_STOP_TRACKBIT_FACTOR = 2;
249static const uint LOCK_DEPOT_TILE_FACTOR = 2;
250
251struct CargoPayment;
252typedef uint32_t CargoPaymentID;
253
254#endif /* ECONOMY_TYPE_H */
ScoreID
Score categories in the detailed performance rating.
@ SCORE_END
How many scores are there..
@ SCORE_MAX
The max score that can be in the performance history.
@ SCORE_TOTAL
This must always be the last entry.
static const uint LOCK_DEPOT_TILE_FACTOR
Multiplier for how many regular tiles a lock counts.
static const uint LEVELCROSSING_TRACKBIT_FACTOR
Multiplier for how many regular track bits a level crossing counts.
static const int64_t MAX_LOAN_LIMIT
The max amount possible to configure for a max loan of a company.
EconomyType
Type of the game economy.
static const int MIN_PRICE_MODIFIER
Maximum NewGRF price modifiers.
static const uint ROAD_STOP_TRACKBIT_FACTOR
Multiplier for how many regular track bits a bay stop counts.
static const uint ROAD_DEPOT_TRACKBIT_FACTOR
Multiplier for how many regular track bits a road depot counts.
std::array< Money, EXPENSES_END > Expenses
Data type for storage of Money for each ExpensesType category.
ExpensesType
Types of expenses.
@ EXPENSES_ROADVEH_RUN
Running costs road vehicles.
@ EXPENSES_END
Number of expense types.
@ EXPENSES_TRAIN_RUN
Running costs trains.
@ EXPENSES_AIRCRAFT_REVENUE
Revenue from aircraft.
@ EXPENSES_CONSTRUCTION
Construction costs.
@ EXPENSES_AIRCRAFT_RUN
Running costs aircraft.
@ EXPENSES_ROADVEH_REVENUE
Revenue from road vehicles.
@ EXPENSES_PROPERTY
Property costs.
@ EXPENSES_OTHER
Other expenses.
@ EXPENSES_SHIP_REVENUE
Revenue from ships.
@ EXPENSES_LOAN_INTEREST
Interest payments over the loan.
@ EXPENSES_TRAIN_REVENUE
Revenue from trains.
@ EXPENSES_SHIP_RUN
Running costs ships.
@ INVALID_EXPENSES
Invalid expense type.
@ EXPENSES_NEW_VEHICLES
New vehicles.
Money Prices[PR_END]
Prices of everything.
static const int LOAN_INTERVAL
The "steps" in loan size, in British Pounds!
static const uint TUNNELBRIDGE_TRACKBIT_FACTOR
Multiplier for how many regular track bits a tunnel/bridge counts.
static const int MIN_CARGO_SCALE
Minimum allowed value of town_cargo_scale/industry_cargo_scale.
static const int64_t INITIAL_LOAN
The size of loan for a new company, in British Pounds!
static const uint64_t MAX_INFLATION
Maximum inflation (including fractional part) without causing overflows in int64_t price computations...
Price
Enumeration of all base prices for use with Prices.
static const int MAX_CARGO_SCALE
Maximum allowed value of town_cargo_scale/industry_cargo_scale.
PriceCategory
Categories of a price bases.
@ PCAT_RUNNING
Price is affected by "vehicle running cost" difficulty setting.
@ PCAT_CONSTRUCTION
Price is affected by "construction cost" difficulty setting.
@ PCAT_NONE
Not affected by difficulty settings.
static const int DEF_CARGO_SCALE
Default value of town_cargo_scale/industry_cargo_scale.
Type (helpers) for enums.
#define DECLARE_POSTFIX_INCREMENT(enum_type)
Some enums need to have allowed incrementing (i.e.
Definition enum_type.hpp:18
An overflow safe integer-like type.
Helper class to perform the cargo payment.
Data of the economy.
uint64_t inflation_payment
Cumulated inflation of cargo payment since game start; 16 bit fractional part.
uint8_t infl_amount
inflation amount
uint64_t inflation_prices
Cumulated inflation of prices since game start; 16 bit fractional part.
Money old_max_loan_unround
Old: Unrounded max loan.
int16_t fluct
Economy fluctuation status.
uint8_t infl_amount_pr
inflation rate for payment rates
uint32_t industry_daily_change_counter
Bits 31-16 are number of industry to be performed, 15-0 are fractional collected daily.
uint32_t industry_daily_increment
The value which will increment industry_daily_change_counter. Computed value. NOSAVE.
uint16_t old_max_loan_unround_fract
Old: Fraction of the unrounded max loan.
Money max_loan
NOSAVE: Maximum possible loan.
uint8_t interest_rate
Interest.
Describes properties of price bases.
Price fallback_price
Fallback price multiplier for new prices but old grfs.
PriceCategory category
Price is affected by certain difficulty settings.
Money start_price
Default value at game start, before adding multipliers.
uint grf_feature
GRF Feature that decides whether price multipliers apply locally or globally, GSF_END if none.
Data structure for storing how the score is computed for a single score id.
int needed
How much you need to get the perfect score.
int score
How much score it will give.