summaryrefslogtreecommitdiff
path: root/economy.h
blob: cee60e314185b91946b91b2ee9f60a8e646773a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef ECONOMY_H
#define ECONOMY_H

typedef struct {
	// Maximum possible loan
	int32 max_loan;
	int32 max_loan_unround;
	// Economy fluctuation status
	int fluct;
	// Interest
	byte interest_rate;
	byte infl_amount;
	byte infl_amount_pr;
} Economy;

VARDEF Economy _economy;

typedef struct Subsidy {
	byte cargo_type;
	byte age;
	byte from;
	byte to;
} Subsidy;


enum {
    SCORE_VEHICLES = 0,
    SCORE_STATIONS = 1,
    SCORE_MIN_PROFIT = 2,
    SCORE_MIN_INCOME = 3,
    SCORE_MAX_INCOME = 4,
    SCORE_DELIVERED = 5,
    SCORE_CARGO = 6,
    SCORE_MONEY = 7,
    SCORE_LOAN = 8,
    SCORE_TOTAL = 9, // This must always be the last entry

    NUM_SCORE = 10, // How many scores are there..
    
    SCORE_MAX = 1000, 	// The max score that can be in the performance history
    					//  the scores together of score_info is allowed to be more!
};

typedef struct ScoreInfo {
    byte id;			// Unique ID of the score
    int needed;			// How much you need to get the perfect score
    int score;			// How much score it will give
} ScoreInfo;

static const ScoreInfo score_info[] = {
    {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}
};

int _score_part[MAX_PLAYERS][NUM_SCORE];

void UpdateCompanyRatingAndValue(Player *p, bool update);


VARDEF Subsidy _subsidies[MAX_PLAYERS];
Pair SetupSubsidyDecodeParam(Subsidy *s, bool mode);
void DeleteSubsidyWithIndustry(byte index);
void DeleteSubsidyWithStation(byte index);

int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, byte cargo_type);
uint MoveGoodsToStation(uint tile, int w, int h, int type, uint amount);

#endif /* ECONOMY_H */