#include "stdafx.h"
#include "tile_cmd.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 "vehicle_gui.h"
#include "ai/ai.hpp"
#include "aircraft.h"
#include "train.h"
#include "newgrf_cargo.h"
#include "newgrf_engine.h"
#include "newgrf_sound.h"
#include "newgrf_industries.h"
#include "newgrf_industrytiles.h"
#include "newgrf_station.h"
#include "unmovable.h"
#include "group.h"
#include "strings_func.h"
#include "functions.h"
#include "window_func.h"
#include "date_func.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "gfx_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 "table/strings.h"
#include "table/sprites.h"
#include "table/pricebase.h"
Go to the source code of this file.
Typedefs | |
| typedef SmallVector< Industry *, 16 > | SmallIndustryList |
Functions | |
| CargoPaymentPool | _cargo_payment_pool ("CargoPayment") |
| static int32 | BigMulS (const int32 a, const int32 b, const uint8 shift) |
| Multiply two integer values and shift the results to right. | |
| static uint32 | BigMulSU (const uint32 a, const uint32 b, const uint8 shift) |
| Multiply two unsigned integers and shift the results to right. | |
| Money | CalculateCompanyValue (const Company *c) |
| 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) |
| static void | ChangeNetworkOwner (Owner current_owner, Owner new_owner) |
| static void | CompanyCheckBankrupt (Company *c) |
| static void | CompaniesGenStatistics () |
| void | AddInflation (bool check_year) |
| Add monthly inflation. | |
| void | RecomputePrices () |
| Computes all prices, payments and maximum loan. | |
| static void | CompaniesPayInterest () |
| 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, byte transit_days, CargoID cargo_type) |
| static uint | DeliverGoodsToIndustry (const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source) |
| Transfer goods from station to industry. | |
| static Money | DeliverGoods (int num_pieces, CargoID cargo_type, StationID dest, TileIndex source_tile, byte days_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 void | LoadUnloadVehicle (Vehicle *v, int *cargo_left) |
| Loads/unload the vehicle if possible. | |
| void | LoadUnloadStation (Station *st) |
| Load/unload the vehicles in this station according to the order they entered. | |
| void | CompaniesMonthlyLoop () |
| static void | DoAcquireCompany (Company *c) |
| int | GetAmountOwnedBy (const Company *c, Owner owner) |
| CommandCost | CmdBuyShareInCompany (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
| Acquire shares in an opposing company. | |
| CommandCost | CmdSellShareInCompany (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
| Sell shares in an opposing company. | |
| CommandCost | CmdBuyCompany (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
| Buy up another company. | |
Variables | |
| const ScoreInfo | _score_info [] |
| int | _score_part [MAX_COMPANIES][SCORE_END] |
| Economy | _economy |
| Prices | _price |
| Money | _additional_cash_required |
| static PriceMultipliers | _price_base_multiplier |
| static SmallIndustryList | _cargo_delivery_destinations |
| The industries we've currently brought cargo to. | |
Definition in file economy.cpp.
| void AddInflation | ( | bool | check_year | ) |
Add monthly inflation.
| check_year | Shall the inflation get stopped after 170 years? |
Definition at line 591 of file economy.cpp.
References _cur_year, _settings_game, GameSettings::game_creation, MAX_INFLATION, min(), ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR, and GameCreationSettings::starting_year.
| static int32 BigMulS | ( | const int32 | a, | |
| const int32 | b, | |||
| const uint8 | shift | |||
| ) | [inline, static] |
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.
| a | The first integer | |
| b | The second integer | |
| shift | The amount to shift the value to right. |
Definition at line 70 of file economy.cpp.
| static uint32 BigMulSU | ( | const uint32 | a, | |
| const uint32 | b, | |||
| const uint8 | shift | |||
| ) | [inline, static] |
Multiply two unsigned integers and shift the results to right.
This function multiplies two unsigned integers. The result is shifted by the amount of shift to right.
| a | The first unsigned integer | |
| b | The second unsigned integer | |
| shift | The amount to shift the value to right. |
Definition at line 86 of file economy.cpp.
| CommandCost CmdBuyCompany | ( | TileIndex | tile, | |
| DoCommandFlag | flags, | |||
| uint32 | p1, | |||
| uint32 | p2, | |||
| const char * | text | |||
| ) |
Buy up another company.
When a competing company is gone bankrupt you get the chance to purchase that company.
| tile | unused | |
| flags | type of operation | |
| p1 | company to buy up | |
| p2 | unused | |
| text | unused |
Definition at line 1563 of file economy.cpp.
| CommandCost CmdBuyShareInCompany | ( | TileIndex | tile, | |
| DoCommandFlag | flags, | |||
| uint32 | p1, | |||
| uint32 | p2, | |||
| const char * | text | |||
| ) |
Acquire shares in an opposing company.
| tile | unused | |
| flags | type of operation | |
| p1 | company to buy the shares from | |
| p2 | unused | |
| text | unused |
Definition at line 1481 of file economy.cpp.
References _cur_year, _settings_game, CommandCost::AddCost(), EconomySettings::allow_shares, CMD_ERROR, COMPANY_SPECTATOR, DC_EXEC, GameSettings::economy, return_cmd_error, and SetWindowDirty().
| CommandCost CmdSellShareInCompany | ( | TileIndex | tile, | |
| DoCommandFlag | flags, | |||
| uint32 | p1, | |||
| uint32 | p2, | |||
| const char * | text | |||
| ) |
Sell shares in an opposing company.
| tile | unused | |
| flags | type of operation | |
| p1 | company to sell the shares from | |
| p2 | unused | |
| text | unused |
Definition at line 1528 of file economy.cpp.
References _settings_game, EconomySettings::allow_shares, CMD_ERROR, COMPANY_SPECTATOR, DC_EXEC, GameSettings::economy, and SetWindowDirty().
| static Money DeliverGoods | ( | int | num_pieces, | |
| CargoID | cargo_type, | |||
| StationID | dest, | |||
| TileIndex | source_tile, | |||
| byte | days_in_transit, | |||
| Company * | company, | |||
| SourceType | src_type, | |||
| SourceID | src | |||
| ) | [static] |
Delivers goods to industries/towns and calculates the payment.
| num_pieces | amount of cargo delivered | |
| cargo_type | the type of cargo that is delivered | |
| dest | Station the cargo has been unloaded | |
| source_tile | The origin of the cargo for distance calculation | |
| days_in_transit | Travel time | |
| company | The company delivering the cargo | |
| src_type | Type of source of cargo (industry, town, headquarters) | |
| src | Index of source of cargo |
Definition at line 928 of file economy.cpp.
References _settings_game, Station::always_accepted, CheckSubsidised(), DeliverGoodsToIndustry(), GameSettings::difficulty, DistanceManhattan(), CargoSpec::Get(), SpecializedStation< Station, false >::Get(), HasBit(), SetBit(), ST_INDUSTRY, DifficultySettings::subsidy_multiplier, TE_FOOD, TE_WATER, BaseStation::town, CargoSpec::town_effect, and BaseStation::xy.
Referenced by CargoPayment::PayFinalDelivery().
| static uint DeliverGoodsToIndustry | ( | const Station * | st, | |
| CargoID | cargo_type, | |||
| uint | num_pieces, | |||
| IndustryID | source | |||
| ) | [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.
| st | The station that accepted the cargo | |
| cargo_type | Type of cargo delivered | |
| num_pieces | Amount of cargo delivered | |
| source | The source of the cargo |
Definition at line 873 of file economy.cpp.
References Industry::accepts_cargo, IndustrySpec::callback_mask, CBID_INDUSTRY_REFUSE_CARGO, CBM_IND_REFUSE_CARGO, GetIndustrySpec(), IndustrySpec::grf_prop, GRFFileProps::grffile, HasBit(), SmallVector< T, S >::Include(), Industry::incoming_cargo_waiting, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem< Tpool >::index, Station::industries_near, SmallVector< T, S >::Length(), lengthof, min(), Industry::type, and Industry::xy.
Referenced by DeliverGoods().
Determine a certain price.
| index | Price base | |
| cost_factor | Price factor | |
| grf_file | NewGRF to use local price multipliers from. | |
| shift | Extra bit shifting after the computation |
Definition at line 797 of file economy.cpp.
References GRFFile::price_base_multipliers.
Referenced by GetRefitCost().
| void LoadUnloadStation | ( | Station * | st | ) |
Load/unload the vehicles in this station according to the order they entered.
| st | the station to do the loading/unloading for |
Definition at line 1387 of file economy.cpp.
References SmallVector< T, S >::Begin(), SmallVector< T, S >::Clear(), SmallVector< T, S >::End(), Station::goods, Station::loading_vehicles, LoadUnloadVehicle(), NUM_CARGO, and TriggerIndustryProduction().
| static void LoadUnloadVehicle | ( | Vehicle * | v, | |
| int * | cargo_left | |||
| ) | [static] |
Loads/unload the vehicle if possible.
| v | the vehicle to be (un)loaded | |
| cargo_left | the amount of each cargo type that is virtually left on the platform to be picked up by another vehicle when all previous vehicles have loaded. |
Definition at line 1107 of file economy.cpp.
References _cur_year, _settings_client, _settings_game, TrainCache::cached_max_speed, TrainCache::cached_total_length, CalcPercentVehicleFilled(), CALLBACK_FAILED, CBID_VEHICLE_LOAD_AMOUNT, CBM_VEHICLE_LOAD_AMOUNT, CC_PASSENGERS, ClrBit(), COMPANY_SPECTATOR, SpecializedVehicle< Train, VEH_TRAIN >::From(), SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), GB(), SpecializedStation< Station, false >::Get(), Station::GetPlatformLength(), GetStationIndex(), GetVehicleCallback(), GetWindowClassForVehicleType(), Station::goods, OrderSettings::gradual_loading, ClientSettings::gui, HasBit(), OrderSettings::improved_load, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem< Tpool >::index, IsCargoInClass(), Aircraft::IsNormalAircraft(), IsTileType(), Station::last_vehicle_type, GUISettings::loading_indicators, Station::MarkTilesDirty(), max(), min(), MP_STATION, CargoList< StationCargoList >::MTA_CARGO_LOAD, CargoList< VehicleCargoList >::MTA_FINAL_DELIVERY, CargoList< VehicleCargoList >::MTA_TRANSFER, CargoList< VehicleCargoList >::MTA_UNLOAD, OLF_FULL_LOAD_ANY, OLFB_FULL_LOAD, OLFB_NO_LOAD, GameSettings::order, OUFB_NO_UNLOAD, OUFB_TRANSFER, OUFB_UNLOAD, SB(), SetBit(), CargoPayment::SetCargo(), SetWindowDirty(), Train::tcache, TILE_SIZE, Station::time_since_load, Station::time_since_unload, VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, and BaseStation::xy.
Referenced by LoadUnloadStation().
| void PrepareUnload | ( | Vehicle * | front_v | ) |
Prepare the vehicle to be unloaded.
| front_v | the vehicle to be unloaded |
Definition at line 1079 of file economy.cpp.
References CargoPayment::CargoPayment(), ClrBit(), OUFB_NO_UNLOAD, and SetBit().
| 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
| price | Index of price base to change. | |
| factor | Amount to change by. |
Definition at line 740 of file economy.cpp.
References Clamp().
Referenced by FinalisePriceBaseMultipliers().
| void StartupIndustryDailyChanges | ( | bool | init_counter | ) |
Initialize the variables that will maintain the daily industry change system.
| init_counter | specifies if the counter is required to be initialized |
Definition at line 750 of file economy.cpp.
References MapLogX(), and MapLogY().
Referenced by Load_ECMY().
| static void TriggerIndustryProduction | ( | Industry * | i | ) | [static] |
Inform the industry about just delivered cargo DeliverGoodsToIndustry() silently incremented incoming_cargo_waiting, now it is time to do something with the new cargo.
| i | The industry to process |
Definition at line 970 of file economy.cpp.
References _date, IndustrySpec::callback_mask, CBM_IND_PRODUCTION_256_TICKS, CBM_IND_PRODUCTION_CARGO_ARRIVAL, GetIndustrySpec(), HasBit(), Industry::incoming_cargo_waiting, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem< Tpool >::index, IndustryProductionCallback(), IndustrySpec::input_cargo_multiplier, Industry::last_cargo_accepted_at, lengthof, min(), Industry::produced_cargo_waiting, SetWindowDirty(), Industry::type, and Industry::was_cargo_delivered.
Referenced by LoadUnloadStation().
| 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)
| update | the economy with calculated score | |
| c | company been evaluated |
Definition at line 152 of file economy.cpp.
References Clamp(), ClampToI32(), CountBits(), BaseStation::facilities, max(), min(), BaseStation::owner, SCORE_END, SCORE_MAX, SCORE_TOTAL, SetWindowDirty(), Station::time_since_load, and Station::time_since_unload.
Referenced by CmdBuildCompanyHQ().
| const ScoreInfo _score_info[] |
Initial value:
{
{ SCORE_VEHICLES, 120, 100 },
{ SCORE_STATIONS, 80, 100 },
{ SCORE_MIN_PROFIT, 10000, 100 },
{ SCORE_MIN_INCOME, 50000, 50 },
{ SCORE_MAX_INCOME, 100000, 100 },
{ SCORE_DELIVERED, 40000, 400 },
{ SCORE_CARGO, 8, 50 },
{ SCORE_MONEY, 10000000, 50 },
{ SCORE_LOAN, 250000, 50 },
{ SCORE_TOTAL, 0, 0 }
}
Definition at line 94 of file economy.cpp.
1.5.6