economy.cpp File Reference

Handling of the economy. More...

#include "stdafx.h"
#include "openttd.h"
#include "tile_cmd.h"
#include "company_func.h"
#include "command_func.h"
#include "industry_map.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 "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 "economy_base.h"
#include "oldpool_func.h"
#include "table/strings.h"
#include "table/sprites.h"

Go to the source code of this file.

Data Structures

struct  FoundRoute
struct  FindIndustryToDeliverData

Typedefs

typedef SmallVector< Industry *, 16 > SmallIndustryList

Functions

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 ()
static void AddSingleInflation (Money *value, uint16 *frac, int32 amt)
static void AddInflation (bool check_year=true)
static void CompaniesPayInterest ()
static void HandleEconomyFluctuations ()
void ResetPriceBaseMultipliers ()
 Reset changes to the price base multipliers.
void SetPriceBaseMultiplier (uint price, byte 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 ResetEconomy ()
Money GetPriceByIndex (uint8 index)
Pair SetupSubsidyDecodeParam (const Subsidy *s, bool mode)
void DeleteSubsidyWithTown (TownID index)
void DeleteSubsidyWithIndustry (IndustryID index)
void DeleteSubsidyWithStation (StationID index)
static void FindSubsidyPassengerRoute (FoundRoute *fr)
static void FindSubsidyCargoRoute (FoundRoute *fr)
static bool CheckSubsidyDuplicate (Subsidy *s)
static void SubsidyMonthlyHandler ()
Money GetTransportedGoodsIncome (uint num_pieces, uint dist, byte transit_days, CargoID cargo_type)
static bool FindIndustryToDeliver (TileIndex ind_tile, void *user_data)
static void DeliverGoodsToIndustry (const Station *st, CargoID cargo_type, int num_pieces)
 Transfer goods from station to industry.
static bool CheckSubsidised (Station *from, Station *to, CargoID cargo_type, CompanyID company)
static Money DeliverGoods (int num_pieces, CargoID cargo_type, StationID source, StationID dest, TileIndex source_tile, byte days_in_transit, Company *company)
 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
Subsidy _subsidies [MAX_COMPANIES]
Prices _price
uint16 _price_frac [NUM_PRICES]
Money _cargo_payment_rates [NUM_CARGO]
uint16 _cargo_payment_rates_frac [NUM_CARGO]
Money _additional_cash_required
static byte _price_category [NUM_PRICES]
static const Money _price_base [NUM_PRICES]
static byte price_base_multiplier [NUM_PRICES]
static SmallIndustryList _cargo_delivery_destinations
 The industries we've currently brought cargo to.


Detailed Description

Handling of the economy.

Definition in file economy.cpp.


Function Documentation

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.

Parameters:
a The first integer
b The second integer
shift The amount to shift the value to right.
Returns:
The shifted result

Definition at line 56 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.

Parameters:
a The first unsigned integer
b The second unsigned integer
shift The amount to shift the value to right.
Returns:
The shifted result

Definition at line 72 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.

Todo:
currently this only works for AI companies
Parameters:
tile unused
flags type of operation
p1 company to buy up
p2 unused

Definition at line 2008 of file economy.cpp.

References CMD_ERROR, and DC_EXEC.

CommandCost CmdBuyShareInCompany ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

Acquire shares in an opposing company.

Parameters:
tile unused
flags type of operation
p1 company to buy the shares from
p2 unused

Definition at line 1930 of file economy.cpp.

References _cur_year, _settings_game, CommandCost::AddCost(), EconomySettings::allow_shares, CMD_ERROR, COMPANY_SPECTATOR, DC_EXEC, GameSettings::economy, InvalidateWindow(), and return_cmd_error.

CommandCost CmdSellShareInCompany ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

Sell shares in an opposing company.

Parameters:
tile unused
flags type of operation
p1 company to sell the shares from
p2 unused

Definition at line 1975 of file economy.cpp.

References _settings_game, EconomySettings::allow_shares, CMD_ERROR, COMPANY_SPECTATOR, DC_EXEC, GameSettings::economy, and InvalidateWindow().

static Money DeliverGoods ( int  num_pieces,
CargoID  cargo_type,
StationID  source,
StationID  dest,
TileIndex  source_tile,
byte  days_in_transit,
Company *  company 
) [static]

Delivers goods to industries/towns and calculates the payment.

Parameters:
num_pieces amount of cargo delivered
source Originstation of the cargo
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 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 1372 of file economy.cpp.

References _settings_game, DeliverGoodsToIndustry(), GameSettings::difficulty, DistanceManhattan(), PoolItem< T, Tid, Tpool >::index, SetBit(), DifficultySettings::subsidy_multiplier, Station::town, and Station::xy.

Referenced by CargoPayment::PayFinalDelivery().

static void DeliverGoodsToIndustry ( const Station st,
CargoID  cargo_type,
int  num_pieces 
) [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:
st The station that accepted the cargo
cargo_type Type of cargo delivered
nun_pieces Amount of cargo delivered

Definition at line 1249 of file economy.cpp.

References _settings_game, Pair::a, AddNewsItem(), Pair::b, Rect::bottom, CircularTileSearch(), GameSettings::difficulty, DistanceManhattan(), DistanceMax(), endof, Station::GetCatchmentRadius(), SmallVector< T, S >::Include(), Industry::incoming_cargo_waiting, PoolItem< T, Tid, Tpool >::index, InvalidateWindow(), StationRect::IsEmpty(), Rect::left, MapMaxX(), MapMaxY(), max(), min(), NS_SUBSIDIES, Station::rect, Rect::right, DifficultySettings::subsidy_multiplier, TileXY(), Rect::top, and Station::xy.

Referenced by DeliverGoods().

void LoadUnloadStation ( Station st  ) 

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

Parameters:
st the station to do the loading/unloading for

Definition at line 1840 of file economy.cpp.

References SmallVector< T, S >::Begin(), SmallVector< T, S >::Clear(), SmallVector< T, S >::End(), Station::goods, Station::loading_vehicles, LoadUnloadVehicle(), and TriggerIndustryProduction().

static void LoadUnloadVehicle ( Vehicle *  v,
int *  cargo_left 
) [static]

void PrepareUnload ( Vehicle *  front_v  ) 

Prepare the vehicle to be unloaded.

Parameters:
front_v the vehicle to be unloaded

Definition at line 1534 of file economy.cpp.

References CargoPayment::CargoPayment(), ClrBit(), OUFB_NO_UNLOAD, and SetBit().

void SetPriceBaseMultiplier ( uint  price,
byte  factor 
)

Change a price base by the given factor.

The price base is altered by factors of two, with an offset of 8. NewBaseCost = OldBaseCost * 2^(n-8)

Parameters:
price Index of price base to change.
factor Amount to change by.

Definition at line 777 of file economy.cpp.

void StartupIndustryDailyChanges ( bool  init_counter  ) 

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

Parameters:
init_counter specifies if the counter is required to be initialized

Definition at line 787 of file economy.cpp.

References MapLogX(), and MapLogY().

Referenced by Load_ECMY().

static void TriggerIndustryProduction ( Industry i  )  [static]

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)

Parameters:
update the economy with calculated score
c company been evaluated
Returns:
actual score of this company

Definition at line 141 of file economy.cpp.

References Clamp(), ClampToI32(), CountBits(), Station::facilities, InvalidateWindow(), max(), min(), Station::owner, SCORE_END, SCORE_MAX, and SCORE_TOTAL.

Referenced by CmdBuildCompanyHQ().


Variable Documentation

The industries we've currently brought cargo to.

Definition at line 1240 of file economy.cpp.

byte _price_category[NUM_PRICES] [static]

Initial value:

 {
  0, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 1, 1, 1, 1, 1, 1,
  2,
}

Definition at line 694 of file economy.cpp.

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 80 of file economy.cpp.


Generated on Sun Sep 13 08:19:23 2009 for OpenTTD by  doxygen 1.5.6