author | celestar |
Tue, 12 Jun 2007 11:56:35 +0000 | |
branch | gamebalance |
changeset 9908 | 0fa543611bbe |
parent 9906 | 6f41b8713b65 |
child 9909 | dce9a6923bb7 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
3 |
/** @file town.h */ |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
4 |
|
0 | 5 |
#ifndef TOWN_H |
6 |
#define TOWN_H |
|
7 |
||
5216
d581e4db95b6
(svn r7331) - Codechange: Rename all memory pool macro's and types to "old pool", so the new pool implementation can be committed alongside it.
matthijs
parents:
4983
diff
changeset
|
8 |
#include "oldpool.h" |
0 | 9 |
#include "player.h" |
9888
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
10 |
#include "economy_new.h" |
9901
a922f277ebfd
(svn r9408) [gamebalance] -Feature: The new economic data is stored in the savegame from now on. I'll try to make sure that intra-branch compability is maintained in the future for easier testing. Newer trunk games (as soon as trunk bumps the saveload revision) will not load however.
celestar
parents:
9899
diff
changeset
|
11 |
#include "saveload.h" |
9896
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
12 |
#include "functions.h" |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
13 |
#include "helpers.hpp" |
0 | 14 |
|
5299
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
15 |
enum { |
9896
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
16 |
HOUSE_NO_CLASS = 0, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
17 |
NEW_HOUSE_OFFSET = 110, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
18 |
HOUSE_MAX = 512, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
19 |
INVALID_TOWN = 0xFFFF, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
20 |
INVALID_HOUSE_ID = 0xFFFF, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
21 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
22 |
/* There can only be as many classes as there are new houses, plus one for |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
23 |
* NO_CLASS, as the original houses don't have classes. */ |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
24 |
HOUSE_CLASS_MAX = HOUSE_MAX - NEW_HOUSE_OFFSET + 1, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
25 |
}; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
26 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
27 |
enum BuildingFlags { |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
28 |
TILE_NO_FLAG = 0, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
29 |
TILE_SIZE_1x1 = 1U << 0, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
30 |
TILE_NOT_SLOPED = 1U << 1, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
31 |
TILE_SIZE_2x1 = 1U << 2, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
32 |
TILE_SIZE_1x2 = 1U << 3, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
33 |
TILE_SIZE_2x2 = 1U << 4, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
34 |
BUILDING_IS_ANIMATED = 1U << 5, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
35 |
BUILDING_IS_CHURCH = 1U << 6, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
36 |
BUILDING_IS_STADIUM = 1U << 7, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
37 |
BUILDING_HAS_1_TILE = TILE_SIZE_1x1 | TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
38 |
BUILDING_2_TILES_X = TILE_SIZE_2x1 | TILE_SIZE_2x2, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
39 |
BUILDING_2_TILES_Y = TILE_SIZE_1x2 | TILE_SIZE_2x2, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
40 |
BUILDING_HAS_4_TILES = TILE_SIZE_2x2, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
41 |
}; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
42 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
43 |
DECLARE_ENUM_AS_BIT_SET(BuildingFlags) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
44 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
45 |
enum HouseZones { ///< Bit Value Meaning |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
46 |
HZ_NOZNS = 0x0000, ///< 0 This is just to get rid of zeros, meaning none |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
47 |
HZ_ZON1 = 0x0001, ///< 0..4 1,2,4,8,10 which town zones the building can be built in, Zone1 been the further suburb |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
48 |
HZ_ZON2 = 0x0002, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
49 |
HZ_ZON3 = 0x0004, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
50 |
HZ_ZON4 = 0x0008, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
51 |
HZ_ZON5 = 0x0010, ///< center of town |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
52 |
HZ_ZONALL = 0x001F, ///< 1F This is just to englobe all above types at once |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
53 |
HZ_SUBARTC_ABOVE = 0x0800, ///< 11 800 can appear in sub-arctic climate above the snow line |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
54 |
HZ_TEMP = 0x1000, ///< 12 1000 can appear in temperate climate |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
55 |
HZ_SUBARTC_BELOW = 0x2000, ///< 13 2000 can appear in sub-arctic climate below the snow line |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
56 |
HZ_SUBTROPIC = 0x4000, ///< 14 4000 can appear in subtropical climate |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
57 |
HZ_TOYLND = 0x8000 ///< 15 8000 can appear in toyland climate |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
58 |
}; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
59 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
60 |
DECLARE_ENUM_AS_BIT_SET(HouseZones) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
61 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
62 |
enum HouseExtraFlags { |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
63 |
NO_EXTRA_FLAG = 0, |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
64 |
BUILDING_IS_HISTORICAL = 1U << 0, ///< this house will only appear during town generation in random games, thus the historical |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
65 |
BUILDING_IS_PROTECTED = 1U << 1, ///< towns and AI will not remove this house, while human players will be able tp |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
66 |
SYNCHRONISED_CALLBACK_1B = 1U << 2, ///< synchronized callback 1B will be performed, on multi tile houses |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
67 |
CALLBACK_1A_RANDOM_BITS = 1U << 3, ///< callback 1A needs random bits |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
68 |
}; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
69 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
70 |
DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
71 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
72 |
typedef uint16 HouseID; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
73 |
typedef uint16 HouseClassID; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
74 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
75 |
struct BuildingCounts { |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
76 |
uint8 id_count[HOUSE_MAX]; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
77 |
uint8 class_count[HOUSE_CLASS_MAX]; |
5299
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
78 |
}; |
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
79 |
|
9888
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
80 |
struct Town : EconomicObject { |
0 | 81 |
TileIndex xy; |
82 |
||
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
83 |
/* Current population of people and amount of houses. */ |
0 | 84 |
uint16 num_houses; |
85 |
uint32 population; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
121
diff
changeset
|
86 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
87 |
/* Town name */ |
0 | 88 |
uint16 townnametype; |
89 |
uint32 townnameparts; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
121
diff
changeset
|
90 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
91 |
/* NOSAVE: Location of name sign, UpdateTownVirtCoord updates this. */ |
0 | 92 |
ViewportSign sign; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
121
diff
changeset
|
93 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
94 |
/* Makes sure we don't build certain house types twice. |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
95 |
* bit 0 = Building funds received |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
96 |
* bit 1 = CHURCH |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
97 |
* bit 2 = STADIUM */ |
0 | 98 |
byte flags12; |
99 |
||
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
100 |
/* Which players have a statue? */ |
0 | 101 |
byte statues; |
102 |
||
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
103 |
/* Player ratings as well as a mask that determines which players have a rating. */ |
0 | 104 |
byte have_ratings; |
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
105 |
uint8 unwanted[MAX_PLAYERS]; ///< how many months companies aren't wanted by towns (bribe) |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
106 |
PlayerByte exclusivity; ///< which player has exslusivity |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
107 |
uint8 exclusive_counter; ///< months till the exclusivity expires |
0 | 108 |
int16 ratings[MAX_PLAYERS]; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
121
diff
changeset
|
109 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
110 |
/* Maximum amount of passengers and mail that can be transported. */ |
1377
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
111 |
uint32 max_pass; |
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
112 |
uint32 max_mail; |
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
113 |
uint32 new_max_pass; |
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
114 |
uint32 new_max_mail; |
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
115 |
uint32 act_pass; |
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
116 |
uint32 act_mail; |
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
117 |
uint32 new_act_pass; |
2a418162176e
(svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit
celestar
parents:
1362
diff
changeset
|
118 |
uint32 new_act_mail; |
0 | 119 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
120 |
/* Amount of passengers that were transported. */ |
0 | 121 |
byte pct_pass_transported; |
122 |
byte pct_mail_transported; |
|
123 |
||
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
124 |
/* Amount of food and paper that was transported. Actually a bit mask would be enough. */ |
0 | 125 |
uint16 act_food; |
4
cad62d5f9708
(svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents:
0
diff
changeset
|
126 |
uint16 act_water; |
0 | 127 |
uint16 new_act_food; |
4
cad62d5f9708
(svn r5) -Fix: townname generation of TTDLX savegames. All work
darkvater
parents:
0
diff
changeset
|
128 |
uint16 new_act_water; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
121
diff
changeset
|
129 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
130 |
/* Time until we rebuild a house. */ |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
131 |
uint16 time_until_rebuild; |
0 | 132 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
133 |
/* When to grow town next time. */ |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
134 |
uint16 grow_counter; |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
135 |
int16 growth_rate; |
0 | 136 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
137 |
/* Fund buildings program in action? */ |
0 | 138 |
byte fund_buildings_months; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
121
diff
changeset
|
139 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
140 |
/* Fund road reconstruction in action? */ |
0 | 141 |
byte road_build_months; |
142 |
||
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
143 |
/* Index in town array */ |
3346
96c5db77aa83
(svn r4130) - CodeChange: Add proper semantics for TownID for such variables instead of using the general uint16-type. We probably need to change GetTown() and IsTownIndex() as well to use TownID.
Darkvater
parents:
2958
diff
changeset
|
144 |
TownID index; |
0 | 145 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
146 |
/* NOSAVE: UpdateTownRadius updates this given the house count. */ |
0 | 147 |
uint16 radius[5]; |
9888
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
148 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
149 |
/* NOSAVE: The number of each type of building in the town. */ |
9896
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
150 |
BuildingCounts building_counts; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
151 |
|
9888
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
152 |
/** |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
153 |
* Sets the economic activity level of a town |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
154 |
* @param level The activity level |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
155 |
*/ |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
156 |
/* virtual */ |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
157 |
template <typename T> |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
158 |
void SetActivity(T level) |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
159 |
{ |
9889
cfd2278f9099
(svn r9165) [gamebalance] -Add: Towns now have different levels of wealth. Alas, it doesn't have any influence either up to now
celestar
parents:
9888
diff
changeset
|
160 |
DEBUG(eco, 7, "Setting EAL of town %d [0x%x] to %f", index, xy, (double)level); |
9888
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
161 |
m_activity_level = level; |
7cf72895ca8c
(svn r9152) [gamebalance] -Add: Towns now have an economic activity level so that poorer and richer towns can occur on the map
celestar
parents:
6233
diff
changeset
|
162 |
} |
9890
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
163 |
|
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
164 |
byte GetWealthLevel() const |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
165 |
{ |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
166 |
FixedT<int32, 16> level = GetActivity() * 10; |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
167 |
if (level < 7) return 0; |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
168 |
if (level < 9) return 1; |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
169 |
if (level < 12) return 2; |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
170 |
if (level < 15) return 3; |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
171 |
return 4; |
37b56728c471
(svn r9170) [gamebalance] -Feature: Show the economic status of the town in the view window
celestar
parents:
9889
diff
changeset
|
172 |
} |
9894
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
173 |
|
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
174 |
/** |
9902
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
175 |
* Computes the cost of a single tile should the player |
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
176 |
* want to purcase or sell it. |
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
177 |
* @param t The tile which is to be purcahsed |
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
178 |
* @return The cost for the purcahse |
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
179 |
* @todo Incorporate the factor of 10 in the base price |
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
180 |
*/ |
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
181 |
static int64 GetTilePrice(TileIndex tile); |
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
182 |
|
ed8f92929297
(svn r9414) [gamebalance] -Feature: The cost of purchasing land off a town depends on the wealth level of a town.
celestar
parents:
9901
diff
changeset
|
183 |
/** |
9894
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
184 |
* Adjusts the activity level of a town dependent |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
185 |
* on player performance. Towns with a high share of |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
186 |
* transported passengers are increasing the EAL, those |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
187 |
* with a low share of transported passengers will |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
188 |
* see a reduction in activity. In order to not wreck |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
189 |
* new games (where no or almost no towns) are connected |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
190 |
* and thus have zero transported passengers, These |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
191 |
* will be untouched. |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
192 |
* @pre Must be called BEFORE UpdateAmounts |
70d78ac95d6c
(svn r9310) [gamebalance] -Feature: Player performance now influences the wealth level of a town (albeit only on a small scale). This is the first feedback effect that the player has on the local and global economy. Please refrain from using the AI too much for the time being because it'll trash the ratings most likely.
celestar
parents:
9890
diff
changeset
|
193 |
*/ |
9899
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
194 |
void UpdateActivity(); |
9897
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
195 |
|
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
196 |
/** |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
197 |
* Gets the so ralled "town radius group" of a tile which is a |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
198 |
* representation of how close a tile is relative to the town |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
199 |
* center depending on the size of the town |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
200 |
* @param tile The tile which the town radius is to be computed for |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
201 |
* @param ignore_funding When a player opted to fund buildings, select the |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
202 |
* appropriate group unless this flag is set. |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
203 |
* @return The town radius group |
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
204 |
*/ |
9899
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
205 |
uint GetRadiusGroup(TileIndex tile, bool ignore_funding = false) const; |
9897
4a2d75b60786
(svn r9332) [gamebalance] -Codechange: Make TownGetRadiusGroup a method of towns and give it the option to ignore the "fund buildings" option later on
celestar
parents:
9896
diff
changeset
|
206 |
|
9899
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
207 |
/** |
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
208 |
* Obtains the highest Town Radius Group a town is in. |
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
209 |
* @param [in] tile The tile which to find the radius group for |
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
210 |
* @param [out] group The group for in which tile is located |
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
211 |
* @return The town to which 'group' belongs |
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
212 |
*/ |
cde52f745560
(svn r9386) [gamebalance] -Feature: Selling and buying land costs now take proximity to town centers into account. Move some code around while I'm at it. Also selling land gives as much money as buying land costs.
celestar
parents:
9897
diff
changeset
|
213 |
static const Town *GetRadiusGroupForTile(TileIndex tile, uint &group); |
9901
a922f277ebfd
(svn r9408) [gamebalance] -Feature: The new economic data is stored in the savegame from now on. I'll try to make sure that intra-branch compability is maintained in the future for easier testing. Newer trunk games (as soon as trunk bumps the saveload revision) will not load however.
celestar
parents:
9899
diff
changeset
|
214 |
|
a922f277ebfd
(svn r9408) [gamebalance] -Feature: The new economic data is stored in the savegame from now on. I'll try to make sure that intra-branch compability is maintained in the future for easier testing. Newer trunk games (as soon as trunk bumps the saveload revision) will not load however.
celestar
parents:
9899
diff
changeset
|
215 |
/** |
a922f277ebfd
(svn r9408) [gamebalance] -Feature: The new economic data is stored in the savegame from now on. I'll try to make sure that intra-branch compability is maintained in the future for easier testing. Newer trunk games (as soon as trunk bumps the saveload revision) will not load however.
celestar
parents:
9899
diff
changeset
|
216 |
* Descriptor for the "town" part of the savegame |
a922f277ebfd
(svn r9408) [gamebalance] -Feature: The new economic data is stored in the savegame from now on. I'll try to make sure that intra-branch compability is maintained in the future for easier testing. Newer trunk games (as soon as trunk bumps the saveload revision) will not load however.
celestar
parents:
9899
diff
changeset
|
217 |
*/ |
a922f277ebfd
(svn r9408) [gamebalance] -Feature: The new economic data is stored in the savegame from now on. I'll try to make sure that intra-branch compability is maintained in the future for easier testing. Newer trunk games (as soon as trunk bumps the saveload revision) will not load however.
celestar
parents:
9899
diff
changeset
|
218 |
static const SaveLoad town_desc[]; |
0 | 219 |
}; |
220 |
||
9896
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
221 |
struct HouseSpec { |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
222 |
/* Standard properties */ |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
223 |
Year min_date; ///< introduction year of the house |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
224 |
Year max_date; ///< last year it can be built |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
225 |
byte population; ///< population (Zero on other tiles in multi tile house.) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
226 |
byte removal_cost; ///< cost multiplier for removing it |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
227 |
StringID building_name; ///< building name |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
228 |
uint16 remove_rating_decrease; ///< rating decrease if removed |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
229 |
byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below) |
9906
6f41b8713b65
(svn r9674) [gamebalance] -Sync: r9322:9420 from trunk
celestar
parents:
9902
diff
changeset
|
230 |
byte cargo_acceptance[3]; ///< acceptance level for the cargo slots |
6f41b8713b65
(svn r9674) [gamebalance] -Sync: r9322:9420 from trunk
celestar
parents:
9902
diff
changeset
|
231 |
CargoID accepts_cargo[3]; ///< 3 input cargo slots |
9896
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
232 |
BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
233 |
HouseZones building_availability; ///< where can it be built (climates, zones) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
234 |
bool enabled; ///< the house is still avaible (by default, true.newgrf can disable it, though) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
235 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
236 |
/* NewHouses properties */ |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
237 |
HouseID substitute_id; ///< which house this one is based on |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
238 |
struct SpriteGroup *spritegroup; ///< pointer to the different sprites of the house |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
239 |
HouseID override; ///< which house this one replaces |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
240 |
uint16 callback_mask; ///< House callback flags |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
241 |
byte random_colour[4]; ///< 4 "random" colours |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
242 |
byte probability; ///< Relative probability of appearing (16 is the standard value) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
243 |
HouseExtraFlags extra_flags; ///< some more flags |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
244 |
HouseClassID class_id; ///< defines the class this house has (grf file based) @See HouseGetVariable, prop 0x44 |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
245 |
byte animation_frames; ///< number of animation frames |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
246 |
byte animation_speed; ///< amount of time between each of those frames |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
247 |
byte processing_time; ///< Periodic refresh multiplier |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
248 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
249 |
/* grf file related properties*/ |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
250 |
uint8 local_id; ///< id defined by the grf file for this house |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
251 |
const struct GRFFile *grffile; ///< grf file that introduced this house |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
252 |
}; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
253 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
254 |
VARDEF HouseSpec _house_specs[HOUSE_MAX]; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
255 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
9894
diff
changeset
|
256 |
uint32 GetWorldPopulation(); |
0 | 257 |
|
835
a22d6bc16a51
(svn r1312) -Add: Patch which is on by default: population in label of the town
truelight
parents:
820
diff
changeset
|
258 |
void UpdateTownVirtCoord(Town *t); |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
9894
diff
changeset
|
259 |
void InitializeTown(); |
3346
96c5db77aa83
(svn r4130) - CodeChange: Add proper semantics for TownID for such variables instead of using the general uint16-type. We probably need to change GetTown() and IsTownIndex() as well to use TownID.
Darkvater
parents:
2958
diff
changeset
|
260 |
void ShowTownViewWindow(TownID town); |
0 | 261 |
void ExpandTown(Town *t); |
3674
e55478cff17e
(svn r4591) -Fix (FS#122) Game no longer errors out when "Many random towns" is selected in the scenario editor.
celestar
parents:
3432
diff
changeset
|
262 |
Town *CreateRandomTown(uint attempts, uint size_mode); |
0 | 263 |
|
264 |
enum { |
|
265 |
ROAD_REMOVE = 0, |
|
266 |
UNMOVEABLE_REMOVE = 1, |
|
267 |
TUNNELBRIDGE_REMOVE = 1, |
|
268 |
INDUSTRY_REMOVE = 2 |
|
269 |
}; |
|
270 |
||
1005 | 271 |
enum { |
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
272 |
/* These refer to the maximums, so Appalling is -1000 to -400 |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
273 |
* MAXIMUM RATINGS BOUNDARIES */ |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
274 |
RATING_MINIMUM = -1000, |
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
275 |
RATING_APPALLING = -400, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
276 |
RATING_VERYPOOR = -200, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
277 |
RATING_POOR = 0, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
278 |
RATING_MEDIOCRE = 200, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
279 |
RATING_GOOD = 400, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
280 |
RATING_VERYGOOD = 600, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
281 |
RATING_EXCELLENT = 800, |
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
282 |
RATING_OUTSTANDING = 1000, ///< OUTSTANDING |
1005 | 283 |
|
284 |
RATING_MAXIMUM = RATING_OUTSTANDING, |
|
285 |
||
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
286 |
/* RATINGS AFFECTING NUMBERS */ |
1005 | 287 |
RATING_TREE_DOWN_STEP = -35, |
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
288 |
RATING_TREE_MINIMUM = RATING_MINIMUM, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
289 |
RATING_TREE_UP_STEP = 7, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
290 |
RATING_TREE_MAXIMUM = 220, |
1005 | 291 |
|
292 |
RATING_TUNNEL_BRIDGE_DOWN_STEP = -250, |
|
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
293 |
RATING_TUNNEL_BRIDGE_MINIMUM = 0, |
1005 | 294 |
|
295 |
RATING_INDUSTRY_DOWN_STEP = -1500, |
|
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
296 |
RATING_INDUSTRY_MINIMUM = RATING_MINIMUM, |
1005 | 297 |
|
298 |
RATING_ROAD_DOWN_STEP = -50, |
|
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
299 |
RATING_ROAD_MINIMUM = -100, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4277
diff
changeset
|
300 |
RATING_HOUSE_MINIMUM = RATING_MINIMUM, |
1005 | 301 |
|
302 |
RATING_BRIBE_UP_STEP = 200, |
|
303 |
RATING_BRIBE_MAXIMUM = 800, |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
304 |
RATING_BRIBE_DOWN_TO = -50 // XXX SHOULD BE SOMETHING LOWER? |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
305 |
}; |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
306 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
307 |
/** This is the number of ticks between towns being processed for building new |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
308 |
* houses or roads. This value originally came from the size of the town array |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
309 |
* in TTD. */ |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
310 |
static const byte TOWN_GROWTH_FREQUENCY = 70; |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
311 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
312 |
/** Simple value that indicates the house has reached the final stage of |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
313 |
* construction. */ |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
314 |
static const byte TOWN_HOUSE_COMPLETED = 3; |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
315 |
|
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
316 |
/** This enum is used in conjonction with town->flags12. |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
317 |
* IT simply states what bit is used for. |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
318 |
* It is pretty unrealistic (IMHO) to only have one church/stadium |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
319 |
* per town, NO MATTER the population of it. |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
320 |
* And there are 5 more bits available on flags12... |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
321 |
*/ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3349
diff
changeset
|
322 |
enum { |
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
323 |
TOWN_IS_FUNDED = 0, ///< Town has received some funds for |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
324 |
TOWN_HAS_CHURCH = 1, ///< There can be only one church by town. |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
325 |
TOWN_HAS_STADIUM = 2 ///< There can be only one stadium by town. |
1005 | 326 |
}; |
327 |
||
2958
3f8946daf55f
(svn r3520) Remove unused parameters from some functions
tron
parents:
2817
diff
changeset
|
328 |
bool CheckforTownRating(uint32 flags, Town *t, byte type); |
0 | 329 |
|
4277
3539bd14f023
(svn r5907) Remove more indirection by using pointers instead of IDs. Also fix some bogus warnings on MSVC by using (void*) casts
tron
parents:
3674
diff
changeset
|
330 |
VARDEF const Town** _town_sort; |
919
b0d6c7642f99
(svn r1407) -Codechange: changed a lot around _stations, _vehicles, _towns and _industries
truelight
parents:
835
diff
changeset
|
331 |
|
5216
d581e4db95b6
(svn r7331) - Codechange: Rename all memory pool macro's and types to "old pool", so the new pool implementation can be committed alongside it.
matthijs
parents:
4983
diff
changeset
|
332 |
DECLARE_OLD_POOL(Town, Town, 3, 8000) |
1260
c60e76928e5c
(svn r1764) -Add: dynamic towns, you can now have up to 64k towns (let me know when
truelight
parents:
1220
diff
changeset
|
333 |
|
9896
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
334 |
static inline HouseSpec *GetHouseSpecs(HouseID house_id) |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
335 |
{ |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
336 |
assert(house_id < HOUSE_MAX); |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
337 |
return &_house_specs[house_id]; |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
338 |
} |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
339 |
|
1260
c60e76928e5c
(svn r1764) -Add: dynamic towns, you can now have up to 64k towns (let me know when
truelight
parents:
1220
diff
changeset
|
340 |
/** |
1330
8a67d04016ce
(svn r1834) - Fix: NPF does not check the owner of its target, busses try to enter other players' depots. TODO
matthijs
parents:
1260
diff
changeset
|
341 |
* Check if a Town really exists. |
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
342 |
* @param town to inquiry |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
343 |
* @return true if it exists |
1330
8a67d04016ce
(svn r1834) - Fix: NPF does not check the owner of its target, busses try to enter other players' depots. TODO
matthijs
parents:
1260
diff
changeset
|
344 |
*/ |
2436
177cb6a8339f
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2186
diff
changeset
|
345 |
static inline bool IsValidTown(const Town* town) |
1330
8a67d04016ce
(svn r1834) - Fix: NPF does not check the owner of its target, busses try to enter other players' depots. TODO
matthijs
parents:
1260
diff
changeset
|
346 |
{ |
4346
3f00094f2670
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
347 |
return town->xy != 0; |
1330
8a67d04016ce
(svn r1834) - Fix: NPF does not check the owner of its target, busses try to enter other players' depots. TODO
matthijs
parents:
1260
diff
changeset
|
348 |
} |
8a67d04016ce
(svn r1834) - Fix: NPF does not check the owner of its target, busses try to enter other players' depots. TODO
matthijs
parents:
1260
diff
changeset
|
349 |
|
9908
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
350 |
/** |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
351 |
* Check if a TownID is valid. |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
352 |
* @param TownID to inquiry |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
353 |
* @return true if it exists |
0fa543611bbe
(svn r10112) [gamebalance] -Sync: r9520:9620 from trunk
celestar
parents:
9906
diff
changeset
|
354 |
*/ |
5299
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
355 |
static inline bool IsValidTownID(TownID index) |
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
356 |
{ |
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
357 |
return index < GetTownPoolSize() && IsValidTown(GetTown(index)); |
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
358 |
} |
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
359 |
|
4354
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
360 |
VARDEF uint _total_towns; |
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
361 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
9894
diff
changeset
|
362 |
static inline TownID GetMaxTownIndex() |
4354
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
363 |
{ |
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
364 |
/* TODO - This isn't the real content of the function, but |
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
365 |
* with the new pool-system this will be replaced with one that |
5247
c3eece01af11
(svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents:
5216
diff
changeset
|
366 |
* _really_ returns the highest index. Now it just returns |
4354
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
367 |
* the next safe value we are sure about everything is below. |
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
368 |
*/ |
5298
6d4c150bdd94
(svn r7451) -Fix (7372): GetNum(Towns|Industries) should return the actual number of towns and industries.
rubidium
parents:
5247
diff
changeset
|
369 |
return GetTownPoolSize() - 1; |
5247
c3eece01af11
(svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents:
5216
diff
changeset
|
370 |
} |
c3eece01af11
(svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents:
5216
diff
changeset
|
371 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
9894
diff
changeset
|
372 |
static inline uint GetNumTowns() |
5247
c3eece01af11
(svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents:
5216
diff
changeset
|
373 |
{ |
4357
3d72606e9192
(svn r6058) -Fix: Get(Industry|Town)ArraySize could never return 0
truelight
parents:
4356
diff
changeset
|
374 |
return _total_towns; |
4354
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
375 |
} |
684ab9249dae
(svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents:
4352
diff
changeset
|
376 |
|
4356
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
377 |
/** |
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
378 |
* Return a random valid town. |
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
379 |
*/ |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
9894
diff
changeset
|
380 |
static inline Town *GetRandomTown() |
4356
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
381 |
{ |
5299
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
382 |
int num = RandomRange(GetNumTowns()); |
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
383 |
TownID index = INVALID_TOWN; |
4356
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
384 |
|
5299
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
385 |
while (num >= 0) { |
4356
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
386 |
num--; |
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
387 |
|
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
388 |
index++; |
6233
57721387461b
(svn r8681) -Fix (FS#608): wrong comment (rfalke)
rubidium
parents:
6220
diff
changeset
|
389 |
/* Make sure we have a valid town */ |
5299
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
390 |
while (!IsValidTownID(index)) { |
4356
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
391 |
index++; |
5299
5d613241ee5e
(svn r7452) -Fix: GetRandom(Industry|Town) must return a valid industry/town and should not need to loop over the pool for a second time.
rubidium
parents:
5298
diff
changeset
|
392 |
assert(index <= GetMaxTownIndex()); |
4356
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
393 |
} |
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
394 |
} |
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
395 |
|
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
396 |
return GetTown(index); |
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
397 |
} |
bc52a48e2590
(svn r6057) -Codechange: made a function GetRandomXXX, that _always_ returns a valid XXX, unless there are none to pick from. Then NULL is returned.
truelight
parents:
4354
diff
changeset
|
398 |
|
4396
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
399 |
void DestroyTown(Town *t); |
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
400 |
|
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
401 |
static inline void DeleteTown(Town *t) |
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
402 |
{ |
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
403 |
DestroyTown(t); |
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
404 |
t->xy = 0; |
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
405 |
} |
549f28155809
(svn r6149) -Codechange: DeleteTown removes a town from the pool
truelight
parents:
4357
diff
changeset
|
406 |
|
6220
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5838
diff
changeset
|
407 |
Town* CalcClosestTownFromTile(TileIndex tile, uint threshold); |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5838
diff
changeset
|
408 |
|
4983 | 409 |
#define FOR_ALL_TOWNS_FROM(t, start) for (t = GetTown(start); t != NULL; t = (t->index + 1U < GetTownPoolSize()) ? GetTown(t->index + 1U) : NULL) if (IsValidTown(t)) |
1260
c60e76928e5c
(svn r1764) -Add: dynamic towns, you can now have up to 64k towns (let me know when
truelight
parents:
1220
diff
changeset
|
410 |
#define FOR_ALL_TOWNS(t) FOR_ALL_TOWNS_FROM(t, 0) |
c60e76928e5c
(svn r1764) -Add: dynamic towns, you can now have up to 64k towns (let me know when
truelight
parents:
1220
diff
changeset
|
411 |
|
0 | 412 |
VARDEF bool _town_sort_dirty; |
413 |
VARDEF byte _town_sort_order; |
|
414 |
||
415 |
VARDEF Town *_cleared_town; |
|
416 |
VARDEF int _cleared_town_rating; |
|
417 |
||
9896
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
418 |
uint OriginalTileRandomiser(uint x, uint y); |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
419 |
void ResetHouses(); |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
420 |
|
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
421 |
void ClearTownHouse(Town *t, TileIndex tile); |
2473804114de
(svn r9324) [gamebalance] -Sync: r9314:9322 from trunk (newhouses)
celestar
parents:
9895
diff
changeset
|
422 |
|
0 | 423 |
#endif /* TOWN_H */ |