OpenTTD Source 20241224-master-gf74b0cf984
economy.cpp File Reference

Handling of the economy. More...

#include "stdafx.h"
#include "company_func.h"
#include "command_func.h"
#include "industry.h"
#include "town.h"
#include "news_func.h"
#include "network/network.h"
#include "network/network_func.h"
#include "ai/ai.hpp"
#include "aircraft.h"
#include "train.h"
#include "newgrf_engine.h"
#include "engine_base.h"
#include "ground_vehicle.hpp"
#include "newgrf_cargo.h"
#include "newgrf_sound.h"
#include "newgrf_industrytiles.h"
#include "newgrf_station.h"
#include "newgrf_airporttiles.h"
#include "newgrf_roadstop.h"
#include "object.h"
#include "strings_func.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "autoreplace_func.h"
#include "company_gui.h"
#include "signs_base.h"
#include "subsidy_base.h"
#include "subsidy_func.h"
#include "station_base.h"
#include "waypoint_base.h"
#include "economy_base.h"
#include "core/pool_func.hpp"
#include "core/backup_type.hpp"
#include "core/container_func.hpp"
#include "cargo_type.h"
#include "water.h"
#include "game/game.hpp"
#include "cargomonitor.h"
#include "goal_base.h"
#include "story_base.h"
#include "linkgraph/refresh.h"
#include "company_cmd.h"
#include "economy_cmd.h"
#include "vehicle_cmd.h"
#include "timer/timer.h"
#include "timer/timer_game_calendar.h"
#include "timer/timer_game_economy.h"
#include "table/strings.h"
#include "table/pricebase.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  IsEmptyAction
 Action to check if a vehicle has no stored cargo. More...
 
struct  PrepareRefitAction
 Refit preparation action. More...
 
struct  ReturnCargoAction
 Action for returning reserved cargo. More...
 
struct  FinalizeRefitAction
 Action for finalizing a refit. More...
 
struct  ReserveCargoAction
 

Typedefs

typedef std::vector< Industry * > SmallIndustryList
 

Functions

static int32_t BigMulS (const int32_t a, const int32_t b, const uint8_t shift)
 Multiply two integer values and shift the results to right.
 
static Money CalculateCompanyAssetValue (const Company *c)
 Calculate the value of the assets of a company.
 
Money CalculateCompanyValue (const Company *c, bool including_loan)
 Calculate the value of the company.
 
Money CalculateHostileTakeoverValue (const Company *c)
 Calculate what you have to pay to take over a company.
 
int UpdateCompanyRatingAndValue (Company *c, bool update)
 if update is set to true, the economy is updated with this score (also the house is updated, should only be true in the on-tick event)
 
void ChangeOwnershipOfCompanyItems (Owner old_owner, Owner new_owner)
 Change the ownership of all the items of a company.
 
static void CompanyCheckBankrupt (Company *c)
 Check for bankruptcy of a company.
 
static void CompaniesGenStatistics ()
 Update the finances of all companies.
 
bool AddInflation (bool check_year)
 Add monthly inflation.
 
void RecomputePrices ()
 Computes all prices, payments and maximum loan.
 
static void CompaniesPayInterest ()
 Let all companies pay the monthly interest on their loan.
 
static void HandleEconomyFluctuations ()
 
void ResetPriceBaseMultipliers ()
 Reset changes to the price base multipliers.
 
void SetPriceBaseMultiplier (Price price, int factor)
 Change a price base by the given factor.
 
void StartupIndustryDailyChanges (bool init_counter)
 Initialize the variables that will maintain the daily industry change system.
 
void StartupEconomy ()
 
void InitializeEconomy ()
 Resets economy to initial values.
 
Money GetPrice (Price index, uint cost_factor, const GRFFile *grf_file, int shift)
 Determine a certain price.
 
Money GetTransportedGoodsIncome (uint num_pieces, uint dist, uint16_t transit_periods, CargoID cargo_type)
 
static uint DeliverGoodsToIndustry (const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source, CompanyID company)
 Transfer goods from station to industry.
 
static Money DeliverGoods (int num_pieces, CargoID cargo_type, StationID dest, uint distance, uint16_t periods_in_transit, Company *company, SourceType src_type, SourceID src)
 Delivers goods to industries/towns and calculates the payment.
 
static void TriggerIndustryProduction (Industry *i)
 Inform the industry about just delivered cargo DeliverGoodsToIndustry() silently incremented incoming_cargo_waiting, now it is time to do something with the new cargo.
 
void PrepareUnload (Vehicle *front_v)
 Prepare the vehicle to be unloaded.
 
static uint GetLoadAmount (Vehicle *v)
 Gets the amount of cargo the given vehicle can load in the current tick.
 
template<class Taction >
bool IterateVehicleParts (Vehicle *v, Taction action)
 Iterate the articulated parts of a vehicle, also considering the special cases of "normal" aircraft and double headed trains.
 
static void HandleStationRefit (Vehicle *v, CargoArray &consist_capleft, Station *st, StationIDStack next_station, CargoID new_cid)
 Refit a vehicle in a station.
 
static bool MayLoadUnderExclusiveRights (const Station *st, const Vehicle *v)
 Test whether a vehicle can load cargo at a station even if exclusive transport rights are present.
 
static void ReserveConsist (Station *st, Vehicle *u, CargoArray *consist_capleft, StationIDStack *next_station)
 Reserves cargo if the full load order and improved_load is set or if the current order allows autorefit.
 
static void UpdateLoadUnloadTicks (Vehicle *front, const Station *st, int ticks)
 Update the vehicle's load_unload_ticks, the time it will wait until it tries to load or unload again.
 
static void LoadUnloadVehicle (Vehicle *front)
 Loads/unload the vehicle if possible.
 
void LoadUnloadStation (Station *st)
 Load/unload the vehicles in this station according to the order they entered.
 
static void DoAcquireCompany (Company *c, bool hostile_takeover)
 
CommandCost CmdBuyCompany (DoCommandFlag flags, CompanyID target_company, bool hostile_takeover)
 Buy up another company.
 

Variables

CargoPaymentPool _cargo_payment_pool ("CargoPayment")
 
const ScoreInfo _score_info []
 Score info, values used for computing the detailed performance rating.
 
int64_t _score_part [MAX_COMPANIES][SCORE_END]
 
Economy _economy
 
Prices _price
 
static PriceMultipliers _price_base_multiplier
 
static SmallIndustryList _cargo_delivery_destinations
 The industries we've currently brought cargo to.
 
static IntervalTimer< TimerGameCalendar_calendar_inflation_monthly ({TimerGameCalendar::MONTH, TimerGameCalendar::Priority::COMPANY}, [](auto) { if(_settings_game.economy.inflation) { AddInflation();RecomputePrices();} })
 Every calendar month update of inflation.
 
static IntervalTimer< TimerGameEconomy_economy_companies_monthly ({ TimerGameEconomy::MONTH, TimerGameEconomy::Priority::COMPANY }, [](auto) { CompaniesGenStatistics();CompaniesPayInterest();HandleEconomyFluctuations();})
 Every economy month update of company economic data, plus economy fluctuations.
 

Detailed Description

Handling of the economy.

Definition in file economy.cpp.

Typedef Documentation

◆ SmallIndustryList

typedef std::vector<Industry *> SmallIndustryList

Definition at line 85 of file economy.cpp.

Function Documentation

◆ AddInflation()

bool AddInflation ( bool  check_year)

Add monthly inflation.

Parameters
check_yearShall the inflation get stopped after 170 years?
Returns
true if inflation is maxed and nothing was changed

Definition at line 721 of file economy.cpp.

References Economy::infl_amount, Economy::infl_amount_pr, Economy::inflation_payment, Economy::inflation_prices, MAX_INFLATION, and TimerGameConst< struct Calendar >::ORIGINAL_MAX_YEAR.

Referenced by AfterLoadGame().

◆ BigMulS()

static int32_t BigMulS ( const int32_t  a,
const int32_t  b,
const uint8_t  shift 
)
inlinestatic

Multiply two integer values and shift the results to right.

This function multiplies two integer values. The result is shifted by the amount of shift to right.

Parameters
aThe first integer
bThe second integer
shiftThe amount to shift the value to right.
Returns
The shifted result

Definition at line 80 of file economy.cpp.

◆ CalculateCompanyAssetValue()

◆ CalculateCompanyValue()

Money CalculateCompanyValue ( const Company c,
bool  including_loan 
)

Calculate the value of the company.

That is the value of all assets (vehicles, stations) and money (including loan), except when including_loan is false which is useful when we want to calculate the value for bankruptcy.

Parameters
cthe company to get the value of.
including_loaninclude the loan in the company value.
Returns
the value of the company.

Definition at line 149 of file economy.cpp.

References CalculateCompanyAssetValue(), CompanyProperties::current_loan, and CompanyProperties::money.

Referenced by CompanyCheckBankrupt(), CompanyWindow::SetStringParameters(), and UpdateCompanyRatingAndValue().

◆ CalculateHostileTakeoverValue()

Money CalculateHostileTakeoverValue ( const Company c)

Calculate what you have to pay to take over a company.

This is different from bankruptcy and company value, and involves a few more parameters to make it more realistic.

You have to pay for:

  • The value of all the assets in the company.
  • The loan the company has (the investors really want their money back).
  • The profit for the next two years (if positive) based on the last four quarters.

And on top of that, they walk away with all the money they have in the bank.

Parameters
cthe company to get the value of.
Returns
The value of the company.

Definition at line 176 of file economy.cpp.

References CalculateCompanyAssetValue(), CompanyProperties::current_loan, CompanyEconomyEntry::expenses, CompanyEconomyEntry::income, CompanyProperties::money, and CompanyProperties::old_economy.

Referenced by CmdBuyCompany().

◆ ChangeOwnershipOfCompanyItems()

void ChangeOwnershipOfCompanyItems ( Owner  old_owner,
Owner  new_owner 
)

Change the ownership of all the items of a company.

Parameters
old_ownerThe company that gets removed.
new_ownerThe company to merge to, or INVALID_OWNER to remove the company.

Definition at line 334 of file economy.cpp.

References _current_company, _local_company, _networking, AddTrackToSignalBuffer(), ChangeTileOwner(), ChangeWindowOwner(), ClearCargoDeliveryMonitoring(), ClearCargoPickupMonitoring(), ClrBit(), CompanyServiceInterval(), GroupStatistics::CountEngine(), GroupStatistics::CountVehicle(), DC_BANKRUPT, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetTrackBits(), HasBit(), HasSignalOnTrack(), HasSignals(), INVALID_COMPANY, INVALID_OWNER, IsCompanyBuildableVehicleType(), IsLevelCrossingTile(), IsTileOwner(), IsTileType(), Map::Iterate(), SpecializedStation< Waypoint, true >::Iterate(), SpecializedStation< Station, false >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_goal_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_subsidy_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_sign_pool >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_story_page_pool >::Iterate(), MarkWholeScreenDirty(), MP_RAILWAY, NetworkClientsToSpectators(), FreeUnitIDGenerator::NextID(), OWNER_NONE, RATING_INITIAL, RebuildSubsidisedSourceAndDestinationCache(), RemoveAllEngineReplacementForCompany(), RemoveFirstTrack(), Backup< T >::Restore(), VehicleDefaultSettings::servint_aircraft, VehicleDefaultSettings::servint_ispercent, VehicleDefaultSettings::servint_roadveh, VehicleDefaultSettings::servint_ships, VehicleDefaultSettings::servint_trains, SetBit(), SetLocalCompany(), CompanyProperties::settings, TRACK_BIT_NONE, GroupStatistics::UpdateAutoreplace(), UpdateLevelCrossing(), UpdateSignalsInBuffer(), FreeUnitIDGenerator::UseID(), and CompanySettings::vehicle.

Referenced by CmdCompanyCtrl(), and ResetLandscapeConfirmationCallback().

◆ CmdBuyCompany()

CommandCost CmdBuyCompany ( DoCommandFlag  flags,
CompanyID  target_company,
bool  hostile_takeover 
)

Buy up another company.

When a competing company is gone bankrupt you get the chance to purchase that company.

Todo:
currently this only works for AI companies
Parameters
flagstype of operation
target_companycompany to buy up
hostile_takeoverwhether to buy up the company even if it is not bankrupt
Returns
the cost of this operation or an error

Definition at line 2045 of file economy.cpp.

References _current_company, _local_company, _networking, CompanyProperties::bankrupt_asked, CalculateHostileTakeoverValue(), CheckTakeoverVehicleLimit(), CMD_ERROR, DC_EXEC, EXPENSES_OTHER, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, and CompanyProperties::is_ai.

◆ CompaniesGenStatistics()

◆ CompaniesPayInterest()

◆ CompanyCheckBankrupt()

◆ DeliverGoods()

static Money DeliverGoods ( int  num_pieces,
CargoID  cargo_type,
StationID  dest,
uint  distance,
uint16_t  periods_in_transit,
Company company,
SourceType  src_type,
SourceID  src 
)
static

Delivers goods to industries/towns and calculates the payment.

Parameters
num_piecesamount of cargo delivered
cargo_typethe type of cargo that is delivered
destStation the cargo has been unloaded
distanceThe distance the cargo has traveled.
periods_in_transitTravel time in cargo aging periods
companyThe company delivering the cargo
src_typeType of source of cargo (industry, town, headquarters)
srcIndex of source of cargo
Returns
Revenue for delivering cargo
Note
The cargo is just added to the stockpile of the industry. It is due to the caller to trigger the industry's production machinery

Definition at line 1111 of file economy.cpp.

References _settings_game, AddCargoDelivery(), Station::always_accepted, CheckSubsidised(), CompanyProperties::cur_economy, CompanyEconomyEntry::delivered_cargo, DeliverGoodsToIndustry(), GameSettings::difficulty, GoodsEntry::GES_ACCEPTED_BIGTICK, GoodsEntry::GES_CURRENT_MONTH, GoodsEntry::GES_EVER_ACCEPTED, SpecializedStation< Station, false >::Get(), CargoSpec::Get(), Station::goods, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Industry, TransportedCargoStat< Tstorage >::new_act, Town::received, SetBit(), GoodsEntry::status, DifficultySettings::subsidy_multiplier, BaseStation::town, and CargoSpec::town_acceptance_effect.

Referenced by CargoPayment::PayFinalDelivery().

◆ DeliverGoodsToIndustry()

static uint DeliverGoodsToIndustry ( const Station st,
CargoID  cargo_type,
uint  num_pieces,
IndustryID  source,
CompanyID  company 
)
static

Transfer goods from station to industry.

All cargo is delivered to the nearest (Manhattan) industry to the station sign, which is inside the acceptance rectangle and actually accepts the cargo.

Parameters
stThe station that accepted the cargo
cargo_typeType of cargo delivered
num_piecesAmount of cargo delivered
sourceThe source of the cargo
companyThe company delivering the cargo
Returns
actually accepted pieces of cargo

Definition at line 1056 of file economy.cpp.

References _cargo_delivery_destinations, Industry::accepted, AddCargoDelivery(), TimerGameEconomy::date, Industry::exclusive_supplier, Industry::GetCargoAccepted(), include(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Station::industries_near, Industry, IndustryTemporarilyRefusesCargo(), INVALID_OWNER, and BaseStation::owner.

Referenced by DeliverGoods().

◆ DoAcquireCompany()

static void DoAcquireCompany ( Company c,
bool  hostile_takeover 
)
static

Definition at line 2007 of file economy.cpp.

◆ GetLoadAmount()

◆ GetPrice()

Money GetPrice ( Price  index,
uint  cost_factor,
const GRFFile grf_file,
int  shift 
)

Determine a certain price.

Parameters
indexPrice base
cost_factorPrice factor
grf_fileNewGRF to use local price multipliers from.
shiftExtra bit shifting after the computation
Returns
Price

Definition at line 966 of file economy.cpp.

References GRFFile::price_base_multipliers.

Referenced by ObjectSpec::GetBuildCost(), RoadStopSpec::GetBuildCost(), ObjectSpec::GetClearCost(), RoadStopSpec::GetClearCost(), Engine::GetCost(), GetRefitCost(), Engine::GetRunningCost(), Aircraft::GetRunningCost(), RoadVehicle::GetRunningCost(), Ship::GetRunningCost(), and Train::GetRunningCost().

◆ GetTransportedGoodsIncome()

Money GetTransportedGoodsIncome ( uint  num_pieces,
uint  dist,
uint16_t  transit_periods,
CargoID  cargo_type 
)

Definition at line 982 of file economy.cpp.

◆ HandleEconomyFluctuations()

static void HandleEconomyFluctuations ( )
static

Definition at line 861 of file economy.cpp.

◆ HandleStationRefit()

static void HandleStationRefit ( Vehicle v,
CargoArray consist_capleft,
Station st,
StationIDStack  next_station,
CargoID  new_cid 
)
static

◆ InitializeEconomy()

void InitializeEconomy ( )

Resets economy to initial values.

Definition at line 951 of file economy.cpp.

References ClearCargoDeliveryMonitoring(), ClearCargoPickupMonitoring(), Economy::inflation_payment, and Economy::inflation_prices.

◆ IterateVehicleParts()

template<class Taction >
bool IterateVehicleParts ( Vehicle v,
Taction  action 
)

Iterate the articulated parts of a vehicle, also considering the special cases of "normal" aircraft and double headed trains.

Apply an action to each vehicle and immediately return false if that action does so. Otherwise return true.

Template Parameters
TactionClass of action to be applied. Must implement bool operator()([const] Vehicle *).
Parameters
vFirst articulated part.
actionInstance of Taction.
Returns
false if any of the action invocations returned false, true otherwise.

Definition at line 1365 of file economy.cpp.

References SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), SpecializedVehicle< T, Type >::From(), Vehicle::HasArticulatedPart(), GroundVehicle< T, Type >::IsMultiheaded(), Aircraft::IsNormalAircraft(), Vehicle::Next(), BaseVehicle::type, VEH_AIRCRAFT, and VEH_TRAIN.

Referenced by HandleStationRefit(), and ReserveConsist().

◆ LoadUnloadStation()

void LoadUnloadStation ( Station st)

Load/unload the vehicles in this station according to the order they entered.

Parameters
stthe station to do the loading/unloading for

Definition at line 1950 of file economy.cpp.

References _cargo_delivery_destinations, LoadUnloadVehicle(), TriggerIndustryProduction(), VS_CRASHED, and VS_STOPPED.

◆ LoadUnloadVehicle()

static void LoadUnloadVehicle ( Vehicle front)
static

Loads/unload the vehicle if possible.

Parameters
frontthe vehicle to be (un)loaded

Definition at line 1637 of file economy.cpp.

References _local_company, _settings_client, _settings_game, AAT_STATION_CARGO_TAKEN, StationCargoList::AvailableCount(), Vehicle::build_year, VehicleCache::cached_max_speed, CalcPercentVehicleFilled(), GoodsEntry::cargo, Vehicle::cargo, CARGO_AUTO_REFIT, Vehicle::cargo_cap, Vehicle::cargo_payment, Vehicle::cargo_type, CC_PASSENGERS, ClrBit(), COMPANY_SPECTATOR, Vehicle::cur_speed, Vehicle::current_order, BaseConsist::current_order_time, Vehicle::fill_percent_te_id, SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), GoodsEntry::GES_ACCEPTANCE, GoodsEntry::GES_RATING, SpecializedStation< Station, false >::Get(), GetLoadAmount(), Order::GetLoadType(), Vehicle::GetNextStoppingStation(), Order::GetRefitCargo(), GetStationIndex(), Order::GetTimetabledWait(), Order::GetUnloadType(), GetWindowClassForVehicleType(), Station::goods, OrderSettings::gradual_loading, ClientSettings::gui, HandleStationRefit(), Vehicle::HasArticulatedPart(), HasBit(), GoodsEntry::HasRating(), OrderSettings::improved_load, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsCargoInClass(), Order::IsRefit(), IsTileType(), Order::IsType(), GoodsEntry::last_age, GoodsEntry::last_speed, Vehicle::last_station_visited, BaseConsist::lateness_counter, StationCargoList::Load(), Vehicle::load_unload_ticks, GUISettings::loading_indicators, Vehicle::MarkDirty(), Station::MarkTilesDirty(), MayLoadUnderExclusiveRights(), MP_STATION, CargoList< VehicleCargoList, CargoPacketList >::MTA_DELIVER, CargoList< VehicleCargoList, CargoPacketList >::MTA_KEEP, CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD, CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER, Vehicle::Next(), OLF_FULL_LOAD_ANY, OLFB_FULL_LOAD, OLFB_NO_LOAD, GameSettings::order, OUFB_NO_UNLOAD, OUFB_TRANSFER, OUFB_UNLOAD, BaseStation::owner, Vehicle::owner, Vehicle::Previous(), ReserveConsist(), RSRT_CARGO_TAKEN, RSRT_VEH_LOADS, LinkRefresher::Run(), SAT_CARGO_TAKEN, SAT_TRAIN_LOADS, SB(), SetBit(), SetWindowDirty(), ShowFillingPercent(), SRT_CARGO_TAKEN, SRT_TRAIN_LOADS, GoodsEntry::status, VehicleCargoList::StoredCount(), Vehicle::tile, GoodsEntry::time_since_pickup, StationCargoList::TotalCount(), TriggerStationRandomisation(), BaseVehicle::type, UpdateFillingPercent(), UpdateLoadUnloadTicks(), Vehicle::vcache, VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, BaseConsist::vehicle_flags, VF_CARGO_UNLOADING, VF_LOADING_FINISHED, VF_STOP_LOADING, WC_STATION_LIST, WC_STATION_VIEW, WC_VEHICLE_DETAILS, Vehicle::x_pos, BaseStation::xy, Vehicle::y_pos, TimerGameCalendar::year, and Vehicle::z_pos.

Referenced by LoadUnloadStation().

◆ MayLoadUnderExclusiveRights()

static bool MayLoadUnderExclusiveRights ( const Station st,
const Vehicle v 
)
static

Test whether a vehicle can load cargo at a station even if exclusive transport rights are present.

Parameters
stStation with cargo waiting to be loaded.
vVehicle loading the cargo.
Returns
true when a vehicle can load the cargo.

Definition at line 1557 of file economy.cpp.

References Town::exclusive_counter, Town::exclusivity, BaseStation::owner, Vehicle::owner, OWNER_NONE, and BaseStation::town.

Referenced by LoadUnloadVehicle().

◆ PrepareUnload()

◆ RecomputePrices()

◆ ReserveConsist()

static void ReserveConsist ( Station st,
Vehicle u,
CargoArray consist_capleft,
StationIDStack next_station 
)
static

Reserves cargo if the full load order and improved_load is set or if the current order allows autorefit.

Parameters
stStation where the consist is loading at the moment.
uFront of the loading vehicle consist.
consist_capleftIf given, save free capacities after reserving there.
next_stationStation(s) the vehicle will stop at next.

Definition at line 1589 of file economy.cpp.

References Vehicle::cargo_payment, Vehicle::current_order, SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), SpecializedVehicle< T, Type >::From(), Order::GetRefitCargo(), Aircraft::IsNormalAircraft(), Order::IsRefit(), IterateVehicleParts(), Vehicle::Next(), VEH_AIRCRAFT, and VEH_TRAIN.

Referenced by LoadUnloadVehicle().

◆ ResetPriceBaseMultipliers()

void ResetPriceBaseMultipliers ( )

Reset changes to the price base multipliers.

Definition at line 887 of file economy.cpp.

Referenced by ResetNewGRFData().

◆ SetPriceBaseMultiplier()

void SetPriceBaseMultiplier ( Price  price,
int  factor 
)

Change a price base by the given factor.

The price base is altered by factors of two. NewBaseCost = OldBaseCost * 2^n

Parameters
priceIndex of price base to change.
factorAmount to change by.

Definition at line 899 of file economy.cpp.

References Clamp(), and MIN_PRICE_MODIFIER.

Referenced by FinalisePriceBaseMultipliers().

◆ StartupEconomy()

void StartupEconomy ( )

Definition at line 926 of file economy.cpp.

◆ StartupIndustryDailyChanges()

void StartupIndustryDailyChanges ( bool  init_counter)

Initialize the variables that will maintain the daily industry change system.

Parameters
init_counterspecifies if the counter is required to be initialized

Definition at line 909 of file economy.cpp.

References Economy::industry_daily_change_counter, Economy::industry_daily_increment, Map::LogX(), and Map::LogY().

Referenced by ECMYChunkHandler::Load().

◆ TriggerIndustryProduction()

◆ UpdateCompanyRatingAndValue()

◆ UpdateLoadUnloadTicks()

static void UpdateLoadUnloadTicks ( Vehicle front,
const Station st,
int  ticks 
)
static

Update the vehicle's load_unload_ticks, the time it will wait until it tries to load or unload again.

Adjust for overhang of trains and set it at least to 1.

Parameters
frontThe vehicle to be updated.
stThe station the vehicle is loading at.
ticksThe time it would normally wait, based on cargo loaded and unloaded.

Definition at line 1619 of file economy.cpp.

References _settings_game, GroundVehicleCache::cached_total_length, Vehicle::GetGroundVehicleCache(), Station::GetPlatformLength(), Vehicle::load_unload_ticks, GameSettings::order, OrderSettings::station_length_loading_penalty, Vehicle::tile, TILE_SIZE, BaseVehicle::type, and VEH_TRAIN.

Referenced by LoadUnloadVehicle().

Variable Documentation

◆ _cargo_delivery_destinations

SmallIndustryList _cargo_delivery_destinations
static

The industries we've currently brought cargo to.

Definition at line 1044 of file economy.cpp.

Referenced by DeliverGoodsToIndustry(), and LoadUnloadStation().

◆ _economy

Economy _economy

Definition at line 104 of file economy.cpp.

◆ _price

Prices _price

Definition at line 105 of file economy.cpp.

◆ _price_base_multiplier

PriceMultipliers _price_base_multiplier
static

Definition at line 106 of file economy.cpp.

◆ _score_info

const ScoreInfo _score_info[]
Initial value:
= {
{ 120, 100},
{ 80, 100},
{ 10000, 100},
{ 50000, 50},
{ 100000, 100},
{ 40000, 400},
{ 8, 50},
{10000000, 50},
{ 250000, 50},
{ 0, 0}
}

Score info, values used for computing the detailed performance rating.

Definition at line 90 of file economy.cpp.

Referenced by PerformanceRatingDetailWindow::DrawWidget(), and UpdateCompanyRatingAndValue().

◆ _score_part

int64_t _score_part[MAX_COMPANIES][SCORE_END]

Definition at line 103 of file economy.cpp.