annotate src/town_cmd.cpp @ 11106:ada4c4d48050 draft

(svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
author frosch <frosch@openttd.org>
date Wed, 11 Feb 2009 18:50:47 +0000
parents 5980315ec1f3
children bbb79ca77fce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1 /* $Id$ */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2
9111
d48433370037 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium <rubidium@openttd.org>
parents: 9071
diff changeset
3 /** @file town_cmd.cpp Handling of town tiles. */
6201
3b141366478a (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas <belugas@openttd.org>
parents: 6133
diff changeset
4
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
5 #include "stdafx.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
6 #include "openttd.h"
10960
a4e5b5d2837c (svn r15299) -Cleanup: remove many redundant includes
smatz <smatz@openttd.org>
parents: 10855
diff changeset
7 #include "road_type.h"
8102
afb4c7da91df (svn r11663) -Codechange: moving of the road related types and functions.
rubidium <rubidium@openttd.org>
parents: 8088
diff changeset
8 #include "road_internal.h" /* Cleaning up road bits */
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10269
diff changeset
9 #include "road_cmd.h"
6343
f75b72d9fc98 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros <maedhros@openttd.org>
parents: 6342
diff changeset
10 #include "landscape.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
11 #include "town_map.h"
8224
c45446125bf0 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents: 8214
diff changeset
12 #include "viewport_func.h"
8116
9cc845deddfe (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium <rubidium@openttd.org>
parents: 8114
diff changeset
13 #include "command_func.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
14 #include "industry.h"
8785
2a8950a812dc (svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium <rubidium@openttd.org>
parents: 8763
diff changeset
15 #include "station_base.h"
10208
39cf8eebfda5 (svn r14422) -Codechange: also reflect the changes of r14421 in the filenames.
rubidium <rubidium@openttd.org>
parents: 10207
diff changeset
16 #include "company_base.h"
8763
d6e363672edb (svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium <rubidium@openttd.org>
parents: 8707
diff changeset
17 #include "news_func.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
18 #include "gui.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
19 #include "unmovable_map.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
20 #include "water_map.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
21 #include "variables.h"
10960
a4e5b5d2837c (svn r15299) -Cleanup: remove many redundant includes
smatz <smatz@openttd.org>
parents: 10855
diff changeset
22 #include "slope_func.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
23 #include "genworld.h"
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
24 #include "newgrf.h"
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
25 #include "newgrf_house.h"
6629
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
26 #include "newgrf_commons.h"
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
27 #include "newgrf_townname.h"
10837
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
28 #include "newgrf_text.h"
7582
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
29 #include "autoslope.h"
7709
1859cffc251e (svn r11243) -Fix: update waypoint signs when renaming a town
glx <glx@openttd.org>
parents: 7684
diff changeset
30 #include "waypoint.h"
7849
e6ee8bfd9045 (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents: 7847
diff changeset
31 #include "transparency.h"
8083
e02014b06c7f (svn r11644) -Codechange: merge some functions from tunnel_map.h and bridge_map.h into tunnelbridge_map.h
smatz <smatz@openttd.org>
parents: 7969
diff changeset
32 #include "tunnelbridge_map.h"
8114
2d6af5d7a142 (svn r11675) -Codechange: split the string types from the string functions.
rubidium <rubidium@openttd.org>
parents: 8108
diff changeset
33 #include "strings_func.h"
8131
e300ac8001ae (svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium <rubidium@openttd.org>
parents: 8124
diff changeset
34 #include "window_func.h"
8214
6385dffc0b37 (svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium <rubidium@openttd.org>
parents: 8197
diff changeset
35 #include "string_func.h"
8787
ff327b646d49 (svn r12495) -Codechange: reduce the dependency on newgrf_station.h (especially because newgrf_station.h includes a lot of stuff).
rubidium <rubidium@openttd.org>
parents: 8785
diff changeset
36 #include "newgrf_cargo.h"
8847
748b998a108e (svn r12599) -Codechange: force AllocateSafeRaw() to be linked to simplify compiler's decisions about inlining
smatz <smatz@openttd.org>
parents: 8846
diff changeset
37 #include "oldpool_func.h"
8962
322e2779f67a (svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium <rubidium@openttd.org>
parents: 8944
diff changeset
38 #include "economy_func.h"
322e2779f67a (svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium <rubidium@openttd.org>
parents: 8944
diff changeset
39 #include "station_func.h"
10960
a4e5b5d2837c (svn r15299) -Cleanup: remove many redundant includes
smatz <smatz@openttd.org>
parents: 10855
diff changeset
40 #include "cheat_type.h"
9006
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
41 #include "functions.h"
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
42 #include "animated_tile_func.h"
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
43 #include "date_func.h"
10487
75d47d3e0644 (svn r14742) -Codechange: use SmallMap in two cases to reduce compilation time and binary size
smatz <smatz@openttd.org>
parents: 10480
diff changeset
44 #include "core/smallmap_type.hpp"
8083
e02014b06c7f (svn r11644) -Codechange: merge some functions from tunnel_map.h and bridge_map.h into tunnelbridge_map.h
smatz <smatz@openttd.org>
parents: 7969
diff changeset
45
8264
2495310e220f (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents: 8258
diff changeset
46 #include "table/strings.h"
2495310e220f (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents: 8258
diff changeset
47 #include "table/town_land.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
48
8268
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
49 uint _total_towns;
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
50 HouseSpec _house_specs[HOUSE_MAX];
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
51
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
52 Town *_cleared_town;
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
53 int _cleared_town_rating;
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
54
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
55 /* Initialize the town-pool */
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
56 DEFINE_OLD_POOL_GENERIC(Town, Town)
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
57
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
58 Town::Town(TileIndex tile)
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
59 {
10550
98e8bc97ec6b (svn r14807) -Codechange: use INVALID_TILE instead of 0 to mark invalid depots, industries, towns and waypoints
smatz <smatz@openttd.org>
parents: 10532
diff changeset
60 if (tile != INVALID_TILE) _total_towns++;
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
61 this->xy = tile;
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
62 }
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
63
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
64 Town::~Town()
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
65 {
8258
6017c5ebeb7e (svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138 <peter1138@openttd.org>
parents: 8254
diff changeset
66 free(this->name);
7413
571c87eed06c (svn r10799) -Fix: only calling QuickFree and not the destructor on pool cleanups might cause memory leaks due to the way C++ works.
rubidium <rubidium@openttd.org>
parents: 7410
diff changeset
67
571c87eed06c (svn r10799) -Fix: only calling QuickFree and not the destructor on pool cleanups might cause memory leaks due to the way C++ works.
rubidium <rubidium@openttd.org>
parents: 7410
diff changeset
68 if (CleaningPool()) return;
571c87eed06c (svn r10799) -Fix: only calling QuickFree and not the destructor on pool cleanups might cause memory leaks due to the way C++ works.
rubidium <rubidium@openttd.org>
parents: 7410
diff changeset
69
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
70 Industry *i;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
71
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
72 /* Delete town authority window
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
73 * and remove from list of sorted towns */
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
74 DeleteWindowById(WC_TOWN_VIEW, this->index);
9387
a240dd49a2e8 (svn r13297) -Codechange: Use GUIList for the town directory window
peter1138 <peter1138@openttd.org>
parents: 9358
diff changeset
75 InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 0);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
76 _total_towns--;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
77
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
78 /* Delete all industries belonging to the town */
7390
9ae410265dce (svn r10759) -Codechange: make the industry struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7386
diff changeset
79 FOR_ALL_INDUSTRIES(i) if (i->town == this) delete i;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
80
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
81 /* Go through all tiles and delete those belonging to the town */
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
82 for (TileIndex tile = 0; tile < MapSize(); ++tile) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
83 switch (GetTileType(tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
84 case MP_HOUSE:
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
85 if (GetTownByTile(tile) == this) DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
86 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
87
7370
fba35a9abf79 (svn r10733) -Codechange: change MP_STREET into MP_ROAD as we use the word "road" everywhere except in the tile type.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
88 case MP_ROAD:
10340
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
89 /* Cached nearest town is updated later (after this town has been deleted) */
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
90 if (HasTownOwnedRoad(tile) && GetTownIndex(tile) == this->index) {
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
91 DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10269
diff changeset
92 }
10340
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
93 break;
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
94
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
95 case MP_TUNNELBRIDGE:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
96 if (IsTileOwner(tile, OWNER_TOWN) &&
10236
59398a628f10 (svn r14464) -Codechange: replace (uint)-1 with UINT_MAX (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10208
diff changeset
97 ClosestTownFromTile(tile, UINT_MAX) == this)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
98 DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
99 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
100
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
101 default:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
102 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
103 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
104 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
105
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
106 DeleteSubsidyWithTown(this->index);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
107
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
108 MarkWholeScreenDirty();
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
109
10550
98e8bc97ec6b (svn r14807) -Codechange: use INVALID_TILE instead of 0 to mark invalid depots, industries, towns and waypoints
smatz <smatz@openttd.org>
parents: 10532
diff changeset
110 this->xy = INVALID_TILE;
10340
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
111
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
112 UpdateNearestTownForRoadTiles(false);
7386
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
113 }
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
114
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
115 /**
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
116 * Assigns town layout. If Random, generates one based on TileHash.
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
117 */
11002
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
118 void Town::InitializeLayout(TownLayout layout)
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
119 {
11002
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
120 if (layout != TL_RANDOM) {
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
121 this->layout = layout;
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
122 return;
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
123 }
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
124
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
125 this->layout = TileHash(TileX(this->xy), TileY(this->xy)) % (NUM_TLS - 1);
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
126 }
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
127
9463
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
128 Money HouseSpec::GetRemovalCost() const
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
129 {
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
130 return (_price.remove_house * this->removal_cost) >> 8;
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
131 }
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
132
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
133 // Local
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
134 static int _grow_town_result;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
135
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
136 /* Describe the possible states */
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
137 enum TownGrowthResult {
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
138 GROWTH_SUCCEED = -1,
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
139 GROWTH_SEARCH_STOPPED = 0
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
140 // GROWTH_SEARCH_RUNNING >= 1
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
141 };
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
142
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
143 static bool BuildTownHouse(Town *t, TileIndex tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
144
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
145 static void TownDrawHouseLift(const TileInfo *ti)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
146 {
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5587
diff changeset
147 AddChildSpriteScreen(SPR_LIFT, PAL_NONE, 14, 60 - GetLiftPosition(ti->tile));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
148 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
149
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
150 typedef void TownDrawTileProc(const TileInfo *ti);
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
151 static TownDrawTileProc *const _town_draw_tile_procs[1] = {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
152 TownDrawHouseLift
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
153 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
154
8791
2693434c1f4c (svn r12513) -Codechange: rename OriginalTileRandomiser something more descriptive
skidd13 <skidd13@openttd.org>
parents: 8787
diff changeset
155 /**
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
156 * Return a random direction
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
157 *
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
158 * @return a random direction
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
159 */
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
160 static inline DiagDirection RandomDiagDir()
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
161 {
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
162 return (DiagDirection)(3 & Random());
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
163 }
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
164
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
165 /**
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
166 * House Tile drawing handler.
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
167 * Part of the tile loop process
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
168 * @param ti TileInfo of the tile to draw
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
169 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
170 static void DrawTile_Town(TileInfo *ti)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
171 {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
172 HouseID house_id = GetHouseType(ti->tile);
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
173
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
174 if (house_id >= NEW_HOUSE_OFFSET) {
6342
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
175 /* Houses don't necessarily need new graphics. If they don't have a
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
176 * spritegroup associated with them, then the sprite for the substitute
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
177 * house id is drawn instead. */
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
178 if (GetHouseSpecs(house_id)->spritegroup != NULL) {
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
179 DrawNewHouseTile(ti, house_id);
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
180 return;
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
181 } else {
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
182 house_id = GetHouseSpecs(house_id)->substitute_id;
02bfc4a81378 (svn r9367) -Fix (r9315): If a new house doesn't have a corresponding action 3, the
maedhros <maedhros@openttd.org>
parents: 6341
diff changeset
183 }
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
184 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
185
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
186 /* Retrieve pointer to the draw town tile struct */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
187 const DrawBuildingsTileStruct *dcts = &_town_draw_tile_data[house_id << 4 | TileHash2Bit(ti->x, ti->y) << 2 | GetHouseBuildingStage(ti->tile)];
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
188
7335
0090d1c6b978 (svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7333
diff changeset
189 if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5587
diff changeset
190
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
191 DrawGroundSprite(dcts->ground.sprite, dcts->ground.pal);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
192
8806
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8796
diff changeset
193 /* If houses are invisible, do not draw the upper part */
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8796
diff changeset
194 if (IsInvisibilitySet(TO_HOUSES)) return;
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8796
diff changeset
195
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
196 /* Add a house on top of the ground? */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
197 SpriteID image = dcts->building.sprite;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
198 if (image != 0) {
7333
7110c41ab174 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents: 7226
diff changeset
199 AddSortableSpriteToDraw(image, dcts->building.pal,
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
200 ti->x + dcts->subtile_x,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
201 ti->y + dcts->subtile_y,
7577
a9acd5d86f94 (svn r11102) -Codechange: remove some pointless addition+substractions. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7566
diff changeset
202 dcts->width,
a9acd5d86f94 (svn r11102) -Codechange: remove some pointless addition+substractions. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7566
diff changeset
203 dcts->height,
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
204 dcts->dz,
7333
7110c41ab174 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents: 7226
diff changeset
205 ti->z,
7849
e6ee8bfd9045 (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents: 7847
diff changeset
206 IsTransparencySet(TO_HOUSES)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
207 );
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
208
7849
e6ee8bfd9045 (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents: 7847
diff changeset
209 if (IsTransparencySet(TO_HOUSES)) return;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
210 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
211
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
212 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
213 int proc = dcts->draw_proc - 1;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
214
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
215 if (proc >= 0) _town_draw_tile_procs[proc](ti);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
216 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
217 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
218
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
219 static uint GetSlopeZ_Town(TileIndex tile, uint x, uint y)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
220 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
221 return GetTileMaxZ(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
222 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
223
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
224 /** Tile callback routine */
7335
0090d1c6b978 (svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7333
diff changeset
225 static Foundation GetFoundation_Town(TileIndex tile, Slope tileh)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
226 {
7335
0090d1c6b978 (svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7333
diff changeset
227 return FlatteningFoundation(tileh);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
228 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
229
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
230 /**
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
231 * Animate a tile for a town
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
232 * Only certain houses can be animated
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
233 * The newhouses animation superseeds regular ones
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
234 * @param tile TileIndex of the house to animate
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
235 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
236 static void AnimateTile_Town(TileIndex tile)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
237 {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
238 if (GetHouseType(tile) >= NEW_HOUSE_OFFSET) {
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
239 AnimateNewHouseTile(tile);
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
240 return;
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
241 }
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
242
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
243 if (_tick_counter & 3) return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
244
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
245 /* If the house is not one with a lift anymore, then stop this animating.
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
246 * Not exactly sure when this happens, but probably when a house changes.
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
247 * Before this was just a return...so it'd leak animated tiles..
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
248 * That bug seems to have been here since day 1?? */
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
249 if (!(GetHouseSpecs(GetHouseType(tile))->building_flags & BUILDING_IS_ANIMATED)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
250 DeleteAnimatedTile(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
251 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
252 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
253
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
254 if (!LiftHasDestination(tile)) {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
255 uint i;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
256
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
257 /* Building has 6 floors, number 0 .. 6, where 1 is illegal.
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
258 * This is due to the fact that the first floor is, in the graphics,
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
259 * the height of 2 'normal' floors.
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
260 * Furthermore, there are 6 lift positions from floor N (incl) to floor N + 1 (excl) */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
261 do {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
262 i = RandomRange(7);
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
263 } while (i == 1 || i * 6 == GetLiftPosition(tile));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
264
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
265 SetLiftDestination(tile, i);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
266 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
267
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
268 int pos = GetLiftPosition(tile);
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
269 int dest = GetLiftDestination(tile) * 6;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
270 pos += (pos < dest) ? 1 : -1;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
271 SetLiftPosition(tile, pos);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
272
9006
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
273 if (pos == dest) {
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
274 HaltLift(tile);
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
275 DeleteAnimatedTile(tile);
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
276 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
277
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
278 MarkTileDirtyByTile(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
279 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
280
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
281 /**
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
282 * Determines if a town is close to a tile
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
283 * @param tile TileIndex of the tile to query
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
284 * @param dist maximum distance to be accepted
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
285 * @returns true if the tile correspond to the distance criteria
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
286 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
287 static bool IsCloseToTown(TileIndex tile, uint dist)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
288 {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
289 const Town *t;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
290
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
291 FOR_ALL_TOWNS(t) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
292 if (DistanceManhattan(tile, t->xy) < dist) return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
293 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
294 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
295 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
296
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
297 /**
7545
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
298 * Marks the town sign as needing a repaint.
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
299 *
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
300 * This function marks the area of the sign of a town as dirty for repaint.
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
301 *
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
302 * @param t Town requesting town sign for repaint
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
303 * @ingroup dirty
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
304 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
305 static void MarkTownSignDirty(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
306 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
307 MarkAllViewportsDirty(
6491
696f0e1b046e (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium <rubidium@openttd.org>
parents: 6486
diff changeset
308 t->sign.left - 6,
696f0e1b046e (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium <rubidium@openttd.org>
parents: 6486
diff changeset
309 t->sign.top - 3,
696f0e1b046e (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium <rubidium@openttd.org>
parents: 6486
diff changeset
310 t->sign.left + t->sign.width_1 * 4 + 12,
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
311 t->sign.top + 45
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
312 );
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
313 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
314
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
315 /**
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
316 * Resize the sign(label) of the town after changes in
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
317 * population (creation or growth or else)
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
318 * @param t Town to update
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
319 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
320 void UpdateTownVirtCoord(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
321 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
322 MarkTownSignDirty(t);
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
323 Point pt = RemapCoords2(TileX(t->xy) * TILE_SIZE, TileY(t->xy) * TILE_SIZE);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
324 SetDParam(0, t->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
325 SetDParam(1, t->population);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
326 UpdateViewportSignPos(&t->sign, pt.x, pt.y - 24,
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
327 _settings_client.gui.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
328 MarkTownSignDirty(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
329 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
330
7969
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
331 /** Update the virtual coords needed to draw the town sign for all towns. */
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
332 void UpdateAllTownVirtCoords()
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
333 {
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
334 Town *t;
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
335 FOR_ALL_TOWNS(t) {
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
336 UpdateTownVirtCoord(t);
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
337 }
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
338 }
3f7b82356f85 (svn r11525) -Fix: do not do all kinds of 'updates' for town, waypoint, station and other signs when you haven't converted the map to the 'current' format as that means you are going to read data in the 'old' format when you assume that it is in the 'current' format.
rubidium <rubidium@openttd.org>
parents: 7967
diff changeset
339
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
340 /**
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
341 * Change the towns population
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
342 * @param t Town which polulation has changed
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
343 * @param mod polulation change (can be positive or negative)
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
344 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
345 static void ChangePopulation(Town *t, int mod)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
346 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
347 t->population += mod;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
348 InvalidateWindow(WC_TOWN_VIEW, t->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
349 UpdateTownVirtCoord(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
350
9387
a240dd49a2e8 (svn r13297) -Codechange: Use GUIList for the town directory window
peter1138 <peter1138@openttd.org>
parents: 9358
diff changeset
351 InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
352 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
353
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
354 /**
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
355 * Determines the world population
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
356 * Basically, count population of all towns, one by one
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
357 * @return uint32 the calculated population of the world
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
358 */
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
359 uint32 GetWorldPopulation()
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
360 {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
361 uint32 pop = 0;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
362 const Town *t;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
363
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
364 FOR_ALL_TOWNS(t) pop += t->population;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
365 return pop;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
366 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
367
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
368 /**
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
369 * Helper function for house completion stages progression
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
370 * @param tile TileIndex of the house (or parts of it) to "grow"
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
371 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
372 static void MakeSingleHouseBigger(TileIndex tile)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
373 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
374 assert(IsTileType(tile, MP_HOUSE));
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
375
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
376 /* means it is completed, get out. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
377 if (LiftHasDestination(tile)) return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
378
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
379 /* progress in construction stages */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
380 IncHouseConstructionTick(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
381 if (GetHouseConstructionTick(tile) != 0) return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
382
9018
9dcf32675eb5 (svn r12817) -Feature: the ability to play NewGRF sounds for industries and stations.
rubidium <rubidium@openttd.org>
parents: 9006
diff changeset
383 const HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
9dcf32675eb5 (svn r12817) -Feature: the ability to play NewGRF sounds for industries and stations.
rubidium <rubidium@openttd.org>
parents: 9006
diff changeset
384
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
385 /* Check and/or */
9018
9dcf32675eb5 (svn r12817) -Feature: the ability to play NewGRF sounds for industries and stations.
rubidium <rubidium@openttd.org>
parents: 9006
diff changeset
386 if (HasBit(hs->callback_mask, CBM_HOUSE_CONSTRUCTION_STATE_CHANGE)) {
7215
ba8faf180ec2 (svn r10493) -Codechange: update some callback ID enums to reflect their changed usage, add a few and update the comments.
rubidium <rubidium@openttd.org>
parents: 7139
diff changeset
387 uint16 callback_res = GetHouseCallback(CBID_HOUSE_CONSTRUCTION_STATE_CHANGE, 0, 0, GetHouseType(tile), GetTownByTile(tile), tile);
9018
9dcf32675eb5 (svn r12817) -Feature: the ability to play NewGRF sounds for industries and stations.
rubidium <rubidium@openttd.org>
parents: 9006
diff changeset
388 if (callback_res != CALLBACK_FAILED) ChangeHouseAnimationFrame(hs->grffile, tile, callback_res);
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
389 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
390
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
391 if (IsHouseCompleted(tile)) {
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
392 /* Now that construction is complete, we can add the population of the
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
393 * building to the town. */
9018
9dcf32675eb5 (svn r12817) -Feature: the ability to play NewGRF sounds for industries and stations.
rubidium <rubidium@openttd.org>
parents: 9006
diff changeset
394 ChangePopulation(GetTownByTile(tile), hs->population);
10360
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
395 ResetHouseAge(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
396 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
397 MarkTileDirtyByTile(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
398 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
399
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
400 /** Make the house advance in its construction stages until completion
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
401 * @param tile TileIndex of house
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
402 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
403 static void MakeTownHouseBigger(TileIndex tile)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
404 {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
405 uint flags = GetHouseSpecs(GetHouseType(tile))->building_flags;
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
406 if (flags & BUILDING_HAS_1_TILE) MakeSingleHouseBigger(TILE_ADDXY(tile, 0, 0));
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
407 if (flags & BUILDING_2_TILES_Y) MakeSingleHouseBigger(TILE_ADDXY(tile, 0, 1));
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
408 if (flags & BUILDING_2_TILES_X) MakeSingleHouseBigger(TILE_ADDXY(tile, 1, 0));
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
409 if (flags & BUILDING_HAS_4_TILES) MakeSingleHouseBigger(TILE_ADDXY(tile, 1, 1));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
410 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
411
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
412 /**
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
413 * Tile callback function.
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
414 *
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
415 * Periodic tic handler for houses and town
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
416 * @param tile been asked to do its stuff
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
417 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
418 static void TileLoop_Town(TileIndex tile)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
419 {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
420 HouseID house_id = GetHouseType(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
421
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
422 /* NewHouseTileLoop returns false if Callback 21 succeeded, i.e. the house
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
423 * doesn't exist any more, so don't continue here. */
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
424 if (house_id >= NEW_HOUSE_OFFSET && !NewHouseTileLoop(tile)) return;
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
425
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
426 if (!IsHouseCompleted(tile)) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
427 /* Construction is not completed. See if we can go further in construction*/
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
428 MakeTownHouseBigger(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
429 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
430 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
431
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
432 const HouseSpec *hs = GetHouseSpecs(house_id);
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
433
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
434 /* If the lift has a destination, it is already an animated tile. */
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
435 if ((hs->building_flags & BUILDING_IS_ANIMATED) &&
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
436 house_id < NEW_HOUSE_OFFSET &&
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
437 !LiftHasDestination(tile) &&
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
438 Chance16(1, 2)) {
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
439 AddAnimatedTile(tile);
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
440 }
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
441
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
442 Town *t = GetTownByTile(tile);
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
443 uint32 r = Random();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
444
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7903
diff changeset
445 if (HasBit(hs->callback_mask, CBM_HOUSE_PRODUCE_CARGO)) {
6645
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
446 for (uint i = 0; i < 256; i++) {
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
447 uint16 callback = GetHouseCallback(CBID_HOUSE_PRODUCE_CARGO, i, r, house_id, t, tile);
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
448
8287
988d9721ef31 (svn r11851) -Codechange: A few magic numbers removal, plus a little code style
belugas <belugas@openttd.org>
parents: 8268
diff changeset
449 if (callback == CALLBACK_FAILED || callback == CALLBACK_HOUSEPRODCARGO_END) break;
6645
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
450
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
451 CargoID cargo = GetCargoTranslation(GB(callback, 8, 7), hs->grffile);
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
452 if (cargo == CT_INVALID) continue;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
453
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
454 uint amt = GB(callback, 0, 8);
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
455 uint moved = MoveGoodsToStation(tile, 1, 1, cargo, amt);
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
456
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
457 const CargoSpec *cs = GetCargo(cargo);
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
458 switch (cs->town_effect) {
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
459 case TE_PASSENGERS:
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
460 t->new_max_pass += amt;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
461 t->new_act_pass += moved;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
462 break;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
463
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
464 case TE_MAIL:
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
465 t->new_max_mail += amt;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
466 t->new_act_mail += moved;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
467 break;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
468
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
469 default:
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
470 break;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
471 }
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
472 }
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
473 } else {
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
474 if (GB(r, 0, 8) < hs->population) {
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
475 uint amt = GB(r, 0, 8) / 8 + 1;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
476
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
477 if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
478 t->new_max_pass += amt;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
479 t->new_act_pass += MoveGoodsToStation(tile, 1, 1, CT_PASSENGERS, amt);
6645
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
480 }
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
481
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
482 if (GB(r, 8, 8) < hs->mail_generation) {
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
483 uint amt = GB(r, 8, 8) / 8 + 1;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
484
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
485 if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
486 t->new_max_mail += amt;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
487 t->new_act_mail += MoveGoodsToStation(tile, 1, 1, CT_MAIL, amt);
6645
75841d480476 (svn r9876) -Codechange: [NewHouses] Add support for callback 2E (cargo production)
peter1138 <peter1138@openttd.org>
parents: 6642
diff changeset
488 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
489 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
490
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
491 _current_company = OWNER_TOWN;
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
492
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
493 if (hs->building_flags & BUILDING_HAS_1_TILE &&
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7903
diff changeset
494 HasBit(t->flags12, TOWN_IS_FUNDED) &&
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
495 CanDeleteHouse(tile) &&
10360
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
496 GetHouseAge(tile) >= hs->minimum_life &&
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
497 --t->time_until_rebuild == 0) {
6454
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
498 t->time_until_rebuild = GB(r, 16, 8) + 192;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
499
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
500 ClearTownHouse(t, tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
501
6454
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
502 /* Rebuild with another house? */
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
503 if (GB(r, 24, 8) >= 12) BuildTownHouse(t, tile);
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
504 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
505
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
506 _current_company = OWNER_NONE;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
507 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
508
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
509 /**
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
510 * Dummy tile callback function for handling tile clicks in towns
6534
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
511 * @param tile unused
6cfb1cd027f8 (svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
belugas <belugas@openttd.org>
parents: 6525
diff changeset
512 */
10532
d33755b6159a (svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents: 10499
diff changeset
513 static bool ClickTile_Town(TileIndex tile)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
514 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
515 /* not used */
10532
d33755b6159a (svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents: 10499
diff changeset
516 return false;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
517 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
518
11090
df23c4e04638 (svn r15434) -Codechange: bit of type safety for the DC_xxx flags.
rubidium <rubidium@openttd.org>
parents: 11057
diff changeset
519 static CommandCost ClearTile_Town(TileIndex tile, DoCommandFlag flags)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
520 {
10696
7edccbb67398 (svn r15027) -Merge: tomatos and bananas left to be, here is NoAI for all to see.
truebrain <truebrain@openttd.org>
parents: 10681
diff changeset
521 if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
522 if (!CanDeleteHouse(tile)) return CMD_ERROR;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
523
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
524 const HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
525
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
526 CommandCost cost(EXPENSES_CONSTRUCTION);
9463
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
527 cost.AddCost(hs->GetRemovalCost());
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
528
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
529 int rating = hs->remove_rating_decrease;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
530 _cleared_town_rating += rating;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
531 Town *t = _cleared_town = GetTownByTile(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
532
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
533 if (IsValidCompanyID(_current_company)) {
11103
5980315ec1f3 (svn r15449) -Codechange: Rename DC_NO_TOWN_RATING to DC_NO_TEST_TOWN_RATING as that is what it does.
frosch <frosch@openttd.org>
parents: 11090
diff changeset
534 if (rating > t->ratings[_current_company] && !(flags & DC_NO_TEST_TOWN_RATING) && !_cheats.magic_bulldozer.value) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
535 SetDParam(0, t->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
536 return_cmd_error(STR_2009_LOCAL_AUTHORITY_REFUSES);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
537 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
538 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
539
11106
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
540 ChangeTownRating(t, -rating, RATING_HOUSE_MINIMUM, flags);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
541 if (flags & DC_EXEC) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
542 ClearTownHouse(t, tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
543 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
544
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
545 return cost;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
546 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
547
8846
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
548 static void GetProducedCargo_Town(TileIndex tile, CargoID *b)
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
549 {
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
550 HouseID house_id = GetHouseType(tile);
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
551 const HouseSpec *hs = GetHouseSpecs(house_id);
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
552 Town *t = GetTownByTile(tile);
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
553
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
554 if (HasBit(hs->callback_mask, CBM_HOUSE_PRODUCE_CARGO)) {
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
555 for (uint i = 0; i < 256; i++) {
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
556 uint16 callback = GetHouseCallback(CBID_HOUSE_PRODUCE_CARGO, i, 0, house_id, t, tile);
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
557
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
558 if (callback == CALLBACK_FAILED || callback == CALLBACK_HOUSEPRODCARGO_END) break;
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
559
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
560 CargoID cargo = GetCargoTranslation(GB(callback, 8, 7), hs->grffile);
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
561
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
562 if (cargo == CT_INVALID) continue;
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
563 *(b++) = cargo;
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
564 }
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
565 } else {
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
566 if (hs->population > 0) {
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
567 *(b++) = CT_PASSENGERS;
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
568 }
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
569 if (hs->mail_generation > 0) {
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
570 *(b++) = CT_MAIL;
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
571 }
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
572 }
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
573 }
838e1d6a0321 (svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium <rubidium@openttd.org>
parents: 8818
diff changeset
574
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
575 static void GetAcceptedCargo_Town(TileIndex tile, AcceptedCargo ac)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
576 {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
577 const HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
6525
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
578 CargoID accepts[3];
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
579
6525
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
580 /* Set the initial accepted cargo types */
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
581 for (uint8 i = 0; i < lengthof(accepts); i++) {
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
582 accepts[i] = hs->accepts_cargo[i];
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
583 }
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
584
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
585 /* Check for custom accepted cargo types */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7903
diff changeset
586 if (HasBit(hs->callback_mask, CBM_HOUSE_ACCEPT_CARGO)) {
6642
1e9b34ce8000 (svn r9873) -Codechange: Add missing second callback parameter for houses
peter1138 <peter1138@openttd.org>
parents: 6629
diff changeset
587 uint16 callback = GetHouseCallback(CBID_HOUSE_ACCEPT_CARGO, 0, 0, GetHouseType(tile), GetTownByTile(tile), tile);
6525
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
588 if (callback != CALLBACK_FAILED) {
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
589 /* Replace accepted cargo types with translated values from callback */
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
590 accepts[0] = GetCargoTranslation(GB(callback, 0, 5), hs->grffile);
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
591 accepts[1] = GetCargoTranslation(GB(callback, 5, 5), hs->grffile);
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
592 accepts[2] = GetCargoTranslation(GB(callback, 10, 5), hs->grffile);
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
593 }
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
594 }
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
595
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
596 /* Check for custom cargo acceptance */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7903
diff changeset
597 if (HasBit(hs->callback_mask, CBM_HOUSE_CARGO_ACCEPTANCE)) {
6642
1e9b34ce8000 (svn r9873) -Codechange: Add missing second callback parameter for houses
peter1138 <peter1138@openttd.org>
parents: 6629
diff changeset
598 uint16 callback = GetHouseCallback(CBID_HOUSE_CARGO_ACCEPTANCE, 0, 0, GetHouseType(tile), GetTownByTile(tile), tile);
6525
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
599 if (callback != CALLBACK_FAILED) {
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
600 if (accepts[0] != CT_INVALID) ac[accepts[0]] = GB(callback, 0, 4);
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
601 if (accepts[1] != CT_INVALID) ac[accepts[1]] = GB(callback, 4, 4);
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
602 if (_settings_game.game_creation.landscape != LT_TEMPERATE && HasBit(callback, 12)) {
6525
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
603 /* The 'S' bit indicates food instead of goods */
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
604 ac[CT_FOOD] = GB(callback, 8, 4);
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
605 } else {
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
606 if (accepts[2] != CT_INVALID) ac[accepts[2]] = GB(callback, 8, 4);
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
607 }
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
608 return;
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
609 }
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
610 }
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
611
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
612 /* No custom acceptance, so fill in with the default values */
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
613 for (uint8 i = 0; i < lengthof(accepts); i++) {
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
614 if (accepts[i] != CT_INVALID) ac[accepts[i]] = hs->cargo_acceptance[i];
309fb9068af9 (svn r9712) -Codechange: Implement accepted cargo types and cargo acceptance (there is a difference) callbacks for newhouses.
peter1138 <peter1138@openttd.org>
parents: 6491
diff changeset
615 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
616 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
617
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
618 static void GetTileDesc_Town(TileIndex tile, TileDesc *td)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
619 {
10837
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
620 const HouseID house = GetHouseType(tile);
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
621 const HouseSpec *hs = GetHouseSpecs(house);
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
622 bool house_completed = IsHouseCompleted(tile);
9714
cb9766ae1255 (svn r13830) -Feature: show additional NewGRF info in the Tile Info window for stations, houses and industries
smatz <smatz@openttd.org>
parents: 9659
diff changeset
623
cb9766ae1255 (svn r13830) -Feature: show additional NewGRF info in the Tile Info window for stations, houses and industries
smatz <smatz@openttd.org>
parents: 9659
diff changeset
624 td->str = hs->building_name;
10837
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
625
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
626 uint16 callback_res = GetHouseCallback(CBID_HOUSE_CUSTOM_NAME, house_completed ? 1 : 0, 0, house, GetTownByTile(tile), tile);
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
627 if (callback_res != CALLBACK_FAILED) {
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
628 StringID new_name = GetGRFStringID(hs->grffile->grfid, 0xD000 + callback_res);
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
629 if (new_name != STR_NULL && new_name != STR_UNDEFINED) {
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
630 td->str = new_name;
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
631 }
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
632 }
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
633
191f10c27915 (svn r15172) -Feature: Allow a grf to customize house name via callback 0x14D, during Tile Inquiry process
belugas <belugas@openttd.org>
parents: 10814
diff changeset
634 if (!house_completed) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
635 SetDParamX(td->dparam, 0, td->str);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
636 td->str = STR_2058_UNDER_CONSTRUCTION;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
637 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
638
9714
cb9766ae1255 (svn r13830) -Feature: show additional NewGRF info in the Tile Info window for stations, houses and industries
smatz <smatz@openttd.org>
parents: 9659
diff changeset
639 if (hs->grffile != NULL) {
cb9766ae1255 (svn r13830) -Feature: show additional NewGRF info in the Tile Info window for stations, houses and industries
smatz <smatz@openttd.org>
parents: 9659
diff changeset
640 const GRFConfig *gc = GetGRFConfig(hs->grffile->grfid);
cb9766ae1255 (svn r13830) -Feature: show additional NewGRF info in the Tile Info window for stations, houses and industries
smatz <smatz@openttd.org>
parents: 9659
diff changeset
641 td->grf = gc->name;
cb9766ae1255 (svn r13830) -Feature: show additional NewGRF info in the Tile Info window for stations, houses and industries
smatz <smatz@openttd.org>
parents: 9659
diff changeset
642 }
cb9766ae1255 (svn r13830) -Feature: show additional NewGRF info in the Tile Info window for stations, houses and industries
smatz <smatz@openttd.org>
parents: 9659
diff changeset
643
9322
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9234
diff changeset
644 td->owner[0] = OWNER_TOWN;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
645 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
646
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8596
diff changeset
647 static TrackStatus GetTileTrackStatus_Town(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
648 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
649 /* not used */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
650 return 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
651 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
652
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
653 static void ChangeTileOwner_Town(TileIndex tile, Owner old_owner, Owner new_owner)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
654 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
655 /* not used */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
656 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
657
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
658 static bool GrowTown(Town *t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
659
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
660 static void TownTickHandler(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
661 {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7903
diff changeset
662 if (HasBit(t->flags12, TOWN_IS_FUNDED)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
663 int i = t->grow_counter - 1;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
664 if (i < 0) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
665 if (GrowTown(t)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
666 i = t->growth_rate;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
667 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
668 i = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
669 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
670 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
671 t->grow_counter = i;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
672 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
673
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
674 UpdateTownRadius(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
675 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
676
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
677 void OnTick_Town()
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
678 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
679 if (_game_mode == GM_EDITOR) return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
680
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
681 /* Make sure each town's tickhandler invocation frequency is about the
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
682 * same - TOWN_GROWTH_FREQUENCY - independent on the number of towns. */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
683 for (_cur_town_iter += GetMaxTownIndex() + 1;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
684 _cur_town_iter >= TOWN_GROWTH_FREQUENCY;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
685 _cur_town_iter -= TOWN_GROWTH_FREQUENCY) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
686 uint32 i = _cur_town_ctr;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
687
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
688 if (++_cur_town_ctr > GetMaxTownIndex())
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
689 _cur_town_ctr = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
690
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
691 if (IsValidTownID(i)) TownTickHandler(GetTown(i));
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
692 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
693 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
694
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
695 /**
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
696 * Return the RoadBits of a tile
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
697 *
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
698 * @note There are many other functions doing things like that.
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
699 * @note Needs to be checked for needlessness.
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
700 * @param tile The tile we want to analyse
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
701 * @return The roadbits of the given tile
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
702 */
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
703 static RoadBits GetTownRoadBits(TileIndex tile)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
704 {
6661
5850ac8865e8 (svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium <rubidium@openttd.org>
parents: 6645
diff changeset
705 TrackBits b = GetAnyRoadTrackBits(tile, ROADTYPE_ROAD);
5587
c44c070c5032 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents: 5584
diff changeset
706 RoadBits r = ROAD_NONE;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
707
7225
2d9785c79784 (svn r10504) -Codechange: Shorten the test if no track bit has been found
belugas <belugas@openttd.org>
parents: 7215
diff changeset
708 if (b == TRACK_BIT_NONE) return r;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
709 if (b & TRACK_BIT_X) r |= ROAD_X;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
710 if (b & TRACK_BIT_Y) r |= ROAD_Y;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
711 if (b & TRACK_BIT_UPPER) r |= ROAD_NE | ROAD_NW;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
712 if (b & TRACK_BIT_LOWER) r |= ROAD_SE | ROAD_SW;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
713 if (b & TRACK_BIT_LEFT) r |= ROAD_NW | ROAD_SW;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
714 if (b & TRACK_BIT_RIGHT) r |= ROAD_NE | ROAD_SE;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
715 return r;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
716 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
717
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
718 /**
11041
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
719 * Check for parallel road inside a given distance.
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
720 * Assuming a road from (tile - TileOffsByDiagDir(dir)) to tile,
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
721 * is there a parallel road left or right of it within distance dist_multi?
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
722 *
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
723 * @param tile curent tile
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
724 * @param dir target direction
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
725 * @param dist_multi distance multiplyer
11041
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
726 * @return true if there is a parallel road
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
727 */
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
728 static bool IsNeighborRoadTile(TileIndex tile, const DiagDirection dir, uint dist_multi)
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
729 {
11040
d2bb0a7656eb (svn r15380) -Fix (r15190)[FS#2603]: Do not use TileY() on negative TileIndexDiffs. But the test was not needed anyway, as those tiles were already tested in previous iterations.
frosch <frosch@openttd.org>
parents: 11012
diff changeset
730 if (!IsValidTile(tile)) return false;
d2bb0a7656eb (svn r15380) -Fix (r15190)[FS#2603]: Do not use TileY() on negative TileIndexDiffs. But the test was not needed anyway, as those tiles were already tested in previous iterations.
frosch <frosch@openttd.org>
parents: 11012
diff changeset
731
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
732 /* Lookup table for the used diff values */
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
733 const TileIndexDiff tid_lt[3] = {
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
734 TileOffsByDiagDir(ChangeDiagDir(dir, DIAGDIRDIFF_90RIGHT)),
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
735 TileOffsByDiagDir(ChangeDiagDir(dir, DIAGDIRDIFF_90LEFT)),
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
736 TileOffsByDiagDir(ReverseDiagDir(dir)),
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
737 };
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
738
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
739 dist_multi = (dist_multi + 1) * 4;
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
740 for (uint pos = 4; pos < dist_multi; pos++) {
11041
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
741 /* Go (pos / 4) tiles to the left or the right */
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
742 TileIndexDiff cur = tid_lt[(pos & 1) ? 0 : 1] * (pos / 4);
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
743
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
744 /* Use the current tile as origin, or go one tile backwards */
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
745 if (pos & 2) cur += tid_lt[2];
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
746
11041
87ec8ab495b0 (svn r15381) -Fix (r11091): When testing for parallel road two tiles away, do not move more than one tile along the road.
frosch <frosch@openttd.org>
parents: 11040
diff changeset
747 /* Test for roadbit parallel to dir and facing towards the middle axis */
11040
d2bb0a7656eb (svn r15380) -Fix (r15190)[FS#2603]: Do not use TileY() on negative TileIndexDiffs. But the test was not needed anyway, as those tiles were already tested in previous iterations.
frosch <frosch@openttd.org>
parents: 11012
diff changeset
748 if (IsValidTile(tile + cur) &&
d2bb0a7656eb (svn r15380) -Fix (r15190)[FS#2603]: Do not use TileY() on negative TileIndexDiffs. But the test was not needed anyway, as those tiles were already tested in previous iterations.
frosch <frosch@openttd.org>
parents: 11012
diff changeset
749 GetTownRoadBits(TILE_ADD(tile, cur)) & DiagDirToRoadBits((pos & 2) ? dir : ReverseDiagDir(dir))) return true;
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
750 }
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
751 return false;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
752 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
753
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
754 /**
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
755 * Check if a Road is allowed on a given tile
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
756 *
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
757 * @param t The current town
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
758 * @param tile The target tile
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
759 * @param dir The direction in which we want to extend the town
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
760 * @return true if it is allowed else false
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
761 */
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
762 static bool IsRoadAllowedHere(Town *t, TileIndex tile, DiagDirection dir)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
763 {
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
764 if (TileX(tile) < 2 || TileX(tile) >= MapMaxX() || TileY(tile) < 2 || TileY(tile) >= MapMaxY()) return false;
6993
1e527dc3c219 (svn r10249) -Fix [FS#906]: town tried to gather information about the neighbourhood of a tile when it couldn't even *ever* build on that tile.
rubidium <rubidium@openttd.org>
parents: 6956
diff changeset
765
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
766 Slope cur_slope, desired_slope;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
767
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
768 for (;;) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
769 /* Check if there already is a road at this point? */
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
770 if (GetTownRoadBits(tile) == ROAD_NONE) {
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
771 /* No, try if we are able to build a road piece there.
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
772 * If that fails clear the land, and if that fails exit.
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
773 * This is to make sure that we can build a road here later. */
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
774 if (CmdFailed(DoCommand(tile, ((dir == DIAGDIR_NW || dir == DIAGDIR_SE) ? ROAD_X : ROAD_Y), 0, DC_AUTO, CMD_BUILD_ROAD)) &&
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
775 CmdFailed(DoCommand(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR)))
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
776 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
777 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
778
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
779 cur_slope = GetTileSlope(tile, NULL);
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
780 if (cur_slope == SLOPE_FLAT) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
781 no_slope:
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
782 /* Tile has no slope */
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
783 switch (t->layout) {
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
784 default: NOT_REACHED();
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
785
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
786 case TL_ORIGINAL: // Disallow the road if any neighboring tile has a road (distance: 1)
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
787 return !IsNeighborRoadTile(tile, dir, 1);
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
788
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
789 case TL_BETTER_ROADS: // Disallow the road if any neighboring tile has a road (distance: 1 and 2).
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
790 return !IsNeighborRoadTile(tile, dir, 2);
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
791 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
792 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
793
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
794 /* If the tile is not a slope in the right direction, then
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
795 * maybe terraform some. */
7885
db330f75b899 (svn r11436) -Fix [FS#1439]: Towns would not build roads on slopes. Patch by divide.
rubidium <rubidium@openttd.org>
parents: 7880
diff changeset
796 desired_slope = (dir == DIAGDIR_NW || dir == DIAGDIR_SE) ? SLOPE_NW : SLOPE_NE;
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
797 if (desired_slope != cur_slope && ComplementSlope(desired_slope) != cur_slope) {
7967
e30c5ec2d272 (svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13 <skidd13@openttd.org>
parents: 7931
diff changeset
798 if (Chance16(1, 8)) {
7766
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
799 CommandCost res = CMD_ERROR;
7967
e30c5ec2d272 (svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13 <skidd13@openttd.org>
parents: 7931
diff changeset
800 if (!_generating_world && Chance16(1, 10)) {
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
801 /* Note: Do not replace "^ SLOPE_ELEVATED" with ComplementSlope(). The slope might be steep. */
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
802 res = DoCommand(tile, Chance16(1, 16) ? cur_slope : cur_slope ^ SLOPE_ELEVATED, 0,
7766
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
803 DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
804 }
7967
e30c5ec2d272 (svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13 <skidd13@openttd.org>
parents: 7931
diff changeset
805 if (CmdFailed(res) && Chance16(1, 3)) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
806 /* We can consider building on the slope, though. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
807 goto no_slope;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
808 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
809 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
810 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
811 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
812 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
813 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
814 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
815
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
816 static bool TerraformTownTile(TileIndex tile, int edges, int dir)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
817 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
818 TILE_ASSERT(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
819
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
820 CommandCost r = DoCommand(tile, edges, dir, DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
8818
57a0d6670e05 (svn r12564) -Fix: towns couldn't terraform when inflation rised terraform prices enough
smatz <smatz@openttd.org>
parents: 8816
diff changeset
821 if (CmdFailed(r) || r.GetCost() >= (_price.terraform + 2) * 8) return false;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
822 DoCommand(tile, edges, dir, DC_AUTO | DC_NO_WATER | DC_EXEC, CMD_TERRAFORM_LAND);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
823 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
824 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
825
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
826 static void LevelTownLand(TileIndex tile)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
827 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
828 TILE_ASSERT(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
829
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
830 /* Don't terraform if land is plain or if there's a house there. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
831 if (IsTileType(tile, MP_HOUSE)) return;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
832 Slope tileh = GetTileSlope(tile, NULL);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
833 if (tileh == SLOPE_FLAT) return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
834
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
835 /* First try up, then down */
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
836 if (!TerraformTownTile(tile, ~tileh & SLOPE_ELEVATED, 1)) {
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
837 TerraformTownTile(tile, tileh & SLOPE_ELEVATED, 0);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
838 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
839 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
840
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
841 /**
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
842 * Generate the RoadBits of a grid tile
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
843 *
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
844 * @param t current town
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
845 * @param tile tile in reference to the town
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
846 * @param dir The direction to which we are growing ATM
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
847 * @return the RoadBit of the current tile regarding
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
848 * the selected town layout
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
849 */
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
850 static RoadBits GetTownRoadGridElement(Town *t, TileIndex tile, DiagDirection dir)
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
851 {
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
852 /* align the grid to the downtown */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
853 TileIndexDiffC grid_pos = TileIndexToTileIndexDiffC(t->xy, tile); // Vector from downtown to the tile
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
854 RoadBits rcmd = ROAD_NONE;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
855
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
856 switch (t->layout) {
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
857 default: NOT_REACHED();
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
858
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
859 case TL_2X2_GRID:
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
860 if ((grid_pos.x % 3) == 0) rcmd |= ROAD_Y;
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
861 if ((grid_pos.y % 3) == 0) rcmd |= ROAD_X;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
862 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
863
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
864 case TL_3X3_GRID:
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
865 if ((grid_pos.x % 4) == 0) rcmd |= ROAD_Y;
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
866 if ((grid_pos.y % 4) == 0) rcmd |= ROAD_X;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
867 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
868 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
869
7603
52839687a631 (svn r11130) -Fix [FS#1207]: towns build roads that weren't connected to any other road.
rubidium <rubidium@openttd.org>
parents: 7582
diff changeset
870 /* Optimise only X-junctions */
7766
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
871 if (rcmd != ROAD_ALL) return rcmd;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
872
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
873 RoadBits rb_template;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
874
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
875 switch (GetTileSlope(tile, NULL)) {
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
876 default: rb_template = ROAD_ALL; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
877 case SLOPE_W: rb_template = ROAD_NW | ROAD_SW; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
878 case SLOPE_SW: rb_template = ROAD_Y | ROAD_SW; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
879 case SLOPE_S: rb_template = ROAD_SW | ROAD_SE; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
880 case SLOPE_SE: rb_template = ROAD_X | ROAD_SE; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
881 case SLOPE_E: rb_template = ROAD_SE | ROAD_NE; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
882 case SLOPE_NE: rb_template = ROAD_Y | ROAD_NE; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
883 case SLOPE_N: rb_template = ROAD_NE | ROAD_NW; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
884 case SLOPE_NW: rb_template = ROAD_X | ROAD_NW; break;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
885 case SLOPE_STEEP_W:
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
886 case SLOPE_STEEP_S:
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
887 case SLOPE_STEEP_E:
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
888 case SLOPE_STEEP_N:
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
889 rb_template = ROAD_NONE;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
890 break;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
891 }
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
892
7766
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
893 /* Stop if the template is compatible to the growth dir */
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
894 if (DiagDirToRoadBits(ReverseDiagDir(dir)) & rb_template) return rb_template;
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
895 /* If not generate a straight road in the direction of the growth */
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
896 return DiagDirToRoadBits(dir) | DiagDirToRoadBits(ReverseDiagDir(dir));
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
897 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
898
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
899 /**
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
900 * Grows the town with an extra house.
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
901 * Check if there are enough neighbor house tiles
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
902 * next to the current tile. If there are enough
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
903 * add another house.
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
904 *
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
905 * @param t The current town
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
906 * @param tile The target tile for the extra house
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
907 * @return true if an extra house has been added
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
908 */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
909 static bool GrowTownWithExtraHouse(Town *t, TileIndex tile)
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
910 {
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
911 /* We can't look further than that. */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
912 if (TileX(tile) < 2 || TileY(tile) < 2 || MapMaxX() <= TileX(tile) || MapMaxY() <= TileY(tile)) return false;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
913
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
914 uint counter = 0; // counts the house neighbor tiles
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
915
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
916 /* Check the tiles E,N,W and S of the current tile for houses */
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
917 for (DiagDirection dir = DIAGDIR_BEGIN; dir < DIAGDIR_END; dir++) {
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
918
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
919 if (IsTileType(TileAddByDiagDir(tile, dir), MP_HOUSE)) counter++;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
920
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
921 /* If there are enough neighbors stop here */
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
922 if (counter >= 3) {
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
923 if (BuildTownHouse(t, tile)) {
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
924 _grow_town_result = GROWTH_SUCCEED;
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
925 return true;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
926 }
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
927 return false;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
928 }
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
929 }
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
930 return false;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
931 }
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
932
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
933 /**
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
934 * Grows the town with a road piece.
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
935 *
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
936 * @param t The current town
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
937 * @param tile The current tile
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
938 * @param rcmd The RoadBits we want to build on the tile
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
939 * @return true if the RoadBits have been added else false
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
940 */
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
941 static bool GrowTownWithRoad(const Town *t, TileIndex tile, RoadBits rcmd)
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
942 {
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
943 if (CmdSucceeded(DoCommand(tile, rcmd, t->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD))) {
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
944 _grow_town_result = GROWTH_SUCCEED;
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
945 return true;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
946 }
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
947 return false;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
948 }
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
949
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
950 /**
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
951 * Grows the town with a bridge.
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
952 * At first we check if a bridge is reasonable.
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
953 * If so we check if we are able to build it.
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
954 *
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
955 * @param t The current town
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
956 * @param tile The current tile
7845
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
957 * @param bridge_dir The valid direction in which to grow a bridge
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
958 * @return true if a bridge has been build else false
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
959 */
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
960 static bool GrowTownWithBridge(const Town *t, const TileIndex tile, const DiagDirection bridge_dir)
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
961 {
7845
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
962 assert(bridge_dir < DIAGDIR_END);
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
963
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
964 const Slope slope = GetTileSlope(tile, NULL);
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
965 if (slope == SLOPE_FLAT) return false; // no slope, no bridge
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
966
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
967 /* Make sure the direction is compatible with the slope.
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
968 * Well we check if the slope has an up bit set in the
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
969 * reverse direction. */
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
970 if (HASBITS(slope, InclinedSlope(bridge_dir))) return false;
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
971
7847
066ed17e3036 (svn r11397) -Fix r11395: some minor fixes for better town-bridge results (and better comments) (skidd13 / TrueLight)
truelight <truelight@openttd.org>
parents: 7845
diff changeset
972 /* Assure that the bridge is connectable to the start side */
066ed17e3036 (svn r11397) -Fix r11395: some minor fixes for better town-bridge results (and better comments) (skidd13 / TrueLight)
truelight <truelight@openttd.org>
parents: 7845
diff changeset
973 if (!(GetTownRoadBits(TileAddByDiagDir(tile, ReverseDiagDir(bridge_dir))) & DiagDirToRoadBits(bridge_dir))) return false;
066ed17e3036 (svn r11397) -Fix r11395: some minor fixes for better town-bridge results (and better comments) (skidd13 / TrueLight)
truelight <truelight@openttd.org>
parents: 7845
diff changeset
974
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
975 /* We are in the right direction */
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
976 uint8 bridge_length = 0; // This value stores the length of the possible bridge
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
977 TileIndex bridge_tile = tile; // Used to store the other waterside
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
978
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
979 const int delta = TileOffsByDiagDir(bridge_dir);
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
980 do {
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
981 if (bridge_length++ >= 11) {
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
982 /* Max 11 tile long bridges */
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
983 return false;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
984 }
7871
8dad3ff6a7a7 (svn r11421) -Fix [FS#1431]: do not use a function that asserts when wrapping around the map's edge when you use the wrapping (and MP_VOID tiles) to determine whether the bridge can be build.
rubidium <rubidium@openttd.org>
parents: 7849
diff changeset
985 bridge_tile += delta;
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
986 } while (TileX(bridge_tile) != 0 && TileY(bridge_tile) != 0 && IsWaterTile(bridge_tile));
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
987
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
988 /* no water tiles in between? */
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
989 if (bridge_length == 1) return false;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
990
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
991 for (uint8 times = 0; times <= 22; times++) {
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
992 byte bridge_type = RandomRange(MAX_BRIDGES - 1);
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
993
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
994 /* Can we actually build the bridge? */
10149
a2f36a7cdcf4 (svn r14335) -Codechange: Remove some magic numbers.
frosch <frosch@openttd.org>
parents: 10148
diff changeset
995 if (CmdSucceeded(DoCommand(tile, bridge_tile, bridge_type | ROADTYPES_ROAD << 8 | TRANSPORT_ROAD << 15, DC_AUTO, CMD_BUILD_BRIDGE))) {
a2f36a7cdcf4 (svn r14335) -Codechange: Remove some magic numbers.
frosch <frosch@openttd.org>
parents: 10148
diff changeset
996 DoCommand(tile, bridge_tile, bridge_type | ROADTYPES_ROAD << 8 | TRANSPORT_ROAD << 15, DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE);
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
997 _grow_town_result = GROWTH_SUCCEED;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
998 return true;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
999 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1000 }
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1001 /* Quit if it selecting an appropiate bridge type fails a large number of times. */
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1002 return false;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1003 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1004
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1005 /**
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1006 * Grows the given town.
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1007 * There are at the moment 3 possible way's for
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1008 * the town expansion:
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1009 * @li Generate a random tile and check if there is a road allowed
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1010 * @li TL_ORIGINAL
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1011 * @li TL_BETTER_ROADS
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1012 * @li Check if the town geometry allows a road and which one
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1013 * @li TL_2X2_GRID
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1014 * @li TL_3X3_GRID
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1015 * @li Forbid roads, only build houses
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1016 *
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1017 * @param tile_ptr The current tile
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1018 * @param cur_rb The current tiles RoadBits
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1019 * @param target_dir The target road dir
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1020 * @param t1 The current town
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1021 */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1022 static void GrowTownInTile(TileIndex *tile_ptr, RoadBits cur_rb, DiagDirection target_dir, Town *t1)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1023 {
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1024 RoadBits rcmd = ROAD_NONE; // RoadBits for the road construction command
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1025 TileIndex tile = *tile_ptr; // The main tile on which we base our growth
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1026
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1027 TILE_ASSERT(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1028
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1029 if (cur_rb == ROAD_NONE) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1030 /* Tile has no road. First reset the status counter
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1031 * to say that this is the last iteration. */
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
1032 _grow_town_result = GROWTH_SEARCH_STOPPED;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1033
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1034 if (!_settings_game.economy.allow_town_roads && !_generating_world) return;
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1035
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1036 /* Remove hills etc */
10191
078112d3e7d9 (svn r14404) -Change [FS#2176]: don't make the town flatten land unconditionally when build on slopes is turned on. Based on a patch by Eddi.
rubidium <rubidium@openttd.org>
parents: 10149
diff changeset
1037 if (!_settings_game.construction.build_on_slopes || Chance16(1, 6)) LevelTownLand(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1038
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1039 /* Is a road allowed here? */
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1040 switch (t1->layout) {
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1041 default: NOT_REACHED();
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1042
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1043 case TL_3X3_GRID:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1044 case TL_2X2_GRID:
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1045 rcmd = GetTownRoadGridElement(t1, tile, target_dir);
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1046 if (rcmd == ROAD_NONE) return;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1047 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1048
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1049 case TL_BETTER_ROADS:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1050 case TL_ORIGINAL:
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
1051 if (!IsRoadAllowedHere(t1, tile, target_dir)) return;
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1052
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1053 DiagDirection source_dir = ReverseDiagDir(target_dir);
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1054
7967
e30c5ec2d272 (svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13 <skidd13@openttd.org>
parents: 7931
diff changeset
1055 if (Chance16(1, 4)) {
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1056 /* Randomize a new target dir */
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1057 do target_dir = RandomDiagDir(); while (target_dir == source_dir);
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1058 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1059
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
1060 if (!IsRoadAllowedHere(t1, TileAddByDiagDir(tile, target_dir), target_dir)) {
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1061 /* A road is not allowed to continue the randomized road,
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1062 * return if the road we're trying to build is curved. */
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1063 if (target_dir != ReverseDiagDir(source_dir)) return;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1064
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1065 /* Return if neither side of the new road is a house */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1066 if (!IsTileType(TileAddByDiagDir(tile, ChangeDiagDir(target_dir, DIAGDIRDIFF_90RIGHT)), MP_HOUSE) &&
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1067 !IsTileType(TileAddByDiagDir(tile, ChangeDiagDir(target_dir, DIAGDIRDIFF_90LEFT)), MP_HOUSE)) {
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1068 return;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1069 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1070
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1071 /* That means that the road is only allowed if there is a house
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1072 * at any side of the new road. */
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1073 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1074
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1075 rcmd = DiagDirToRoadBits(target_dir) | DiagDirToRoadBits(source_dir);
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1076 break;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1077 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1078
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1079 } else if (target_dir < DIAGDIR_END && !(cur_rb & DiagDirToRoadBits(ReverseDiagDir(target_dir)))) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1080 /* Continue building on a partial road.
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1081 * Should be allways OK, so we only generate
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1082 * the fitting RoadBits */
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
1083 _grow_town_result = GROWTH_SEARCH_STOPPED;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1084
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1085 if (!_settings_game.economy.allow_town_roads && !_generating_world) return;
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1086
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1087 switch (t1->layout) {
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1088 default: NOT_REACHED();
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1089
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1090 case TL_3X3_GRID:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1091 case TL_2X2_GRID:
8970
3667cbc7dc1d (svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium <rubidium@openttd.org>
parents: 8969
diff changeset
1092 rcmd = GetTownRoadGridElement(t1, tile, target_dir);
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1093 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1094
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1095 case TL_BETTER_ROADS:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1096 case TL_ORIGINAL:
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1097 rcmd = DiagDirToRoadBits(ReverseDiagDir(target_dir));
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1098 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1099 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1100 } else {
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1101 bool allow_house = true; // Value which decides if we want to construct a house
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1102
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1103 /* Reached a tunnel/bridge? Then continue at the other side of it. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1104 if (IsTileType(tile, MP_TUNNELBRIDGE)) {
8088
5d7c61206209 (svn r11649) -Codechange: some code can be simplified thanks to changes in r11642
smatz <smatz@openttd.org>
parents: 8083
diff changeset
1105 if (GetTunnelBridgeTransportType(tile) == TRANSPORT_ROAD) {
8197
bdb186c8fe93 (svn r11760) -Codechange: unify the way how other end of a tunnel/bridge is determined at some places
smatz <smatz@openttd.org>
parents: 8187
diff changeset
1106 *tile_ptr = GetOtherTunnelBridgeEnd(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1107 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1108 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1109 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1110
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1111 /* Possibly extend the road in a direction.
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1112 * Randomize a direction and if it has a road, bail out. */
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1113 target_dir = RandomDiagDir();
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1114 if (cur_rb & DiagDirToRoadBits(target_dir)) return;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1115
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1116 /* This is the tile we will reach if we extend to this direction. */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1117 TileIndex house_tile = TileAddByDiagDir(tile, target_dir); // position of a possible house
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1118
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1119 /* Don't walk into water. */
7739
3387a53e113f (svn r11276) -Codechange: be more consistent with naming of some accessors.
rubidium <rubidium@openttd.org>
parents: 7709
diff changeset
1120 if (IsWaterTile(house_tile)) return;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1121
10855
7881d9cd55ab (svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents: 10837
diff changeset
1122 if (!IsValidTile(house_tile) || !IsValidTile(house_tile + TileOffsByDiagDir(target_dir))) return;
7881d9cd55ab (svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents: 10837
diff changeset
1123
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1124 if (_settings_game.economy.allow_town_roads || _generating_world) {
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1125 switch (t1->layout) {
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1126 default: NOT_REACHED();
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1127
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1128 case TL_3X3_GRID: /* Use 2x2 grid afterwards! */
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1129 GrowTownWithExtraHouse(t1, TileAddByDiagDir(house_tile, target_dir));
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1130 /* FALL THROUGH */
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1131
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1132 case TL_2X2_GRID:
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1133 rcmd = GetTownRoadGridElement(t1, house_tile, target_dir);
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1134 allow_house = (rcmd == ROAD_NONE);
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1135 break;
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1136
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1137 case TL_BETTER_ROADS: /* Use original afterwards! */
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1138 GrowTownWithExtraHouse(t1, TileAddByDiagDir(house_tile, target_dir));
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1139 /* FALL THROUGH */
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1140
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1141 case TL_ORIGINAL:
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1142 /* Allow a house at the edge. 60% chance or
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1143 * always ok if no road allowed. */
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1144 rcmd = DiagDirToRoadBits(target_dir);
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1145 allow_house = (!IsRoadAllowedHere(t1, house_tile, target_dir) || Chance16(6, 10));
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1146 break;
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1147 }
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1148 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1149
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1150 if (allow_house) {
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1151 /* Build a house, but not if there already is a house there. */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1152 if (!IsTileType(house_tile, MP_HOUSE)) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1153 /* Level the land if possible */
7967
e30c5ec2d272 (svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13 <skidd13@openttd.org>
parents: 7931
diff changeset
1154 if (Chance16(1, 6)) LevelTownLand(house_tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1155
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1156 /* And build a house.
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1157 * Set result to -1 if we managed to build it. */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1158 if (BuildTownHouse(t1, house_tile)) {
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
1159 _grow_town_result = GROWTH_SUCCEED;
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1160 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1161 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1162 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1163 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1164
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
1165 _grow_town_result = GROWTH_SEARCH_STOPPED;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1166 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1167
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1168 /* Return if a water tile */
7739
3387a53e113f (svn r11276) -Codechange: be more consistent with naming of some accessors.
rubidium <rubidium@openttd.org>
parents: 7709
diff changeset
1169 if (IsWaterTile(tile)) return;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1170
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1171 /* Make the roads look nicer */
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1172 rcmd = CleanUpRoadBits(tile, rcmd);
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1173 if (rcmd == ROAD_NONE) return;
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1174
7845
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
1175 /* Only use the target direction for bridges to ensure they're connected.
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
1176 * The target_dir is as computed previously according to town layout, so
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
1177 * it will match it perfectly. */
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
1178 if (GrowTownWithBridge(t1, tile, target_dir)) return;
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1179
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1180 GrowTownWithRoad(t1, tile, rcmd);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1181 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1182
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1183 /** Returns "growth" if a house was built, or no if the build failed.
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1184 * @param t town to inquiry
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1185 * @param tile to inquiry
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1186 * @return something other than zero(0)if town expansion was possible
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1187 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1188 static int GrowTownAtRoad(Town *t, TileIndex tile)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1189 {
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1190 /* Special case.
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1191 * @see GrowTownInTile Check the else if
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1192 */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1193 DiagDirection target_dir = DIAGDIR_END; // The direction in which we want to extend the town
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1194
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1195 TILE_ASSERT(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1196
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1197 /* Number of times to search.
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1198 * Better roads, 2X2 and 3X3 grid grow quite fast so we give
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1199 * them a little handicap. */
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1200 switch (t->layout) {
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1201 case TL_BETTER_ROADS:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1202 _grow_town_result = 10 + t->num_houses * 2 / 9;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1203 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1204
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1205 case TL_3X3_GRID:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1206 case TL_2X2_GRID:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1207 _grow_town_result = 10 + t->num_houses * 1 / 9;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1208 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1209
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1210 default:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1211 _grow_town_result = 10 + t->num_houses * 4 / 9;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1212 break;
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1213 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1214
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1215 do {
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1216 RoadBits cur_rb = GetTownRoadBits(tile); // The RoadBits of the current tile
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1217
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1218 /* Try to grow the town from this point */
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1219 GrowTownInTile(&tile, cur_rb, target_dir, t);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1220
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1221 /* Exclude the source position from the bitmask
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1222 * and return if no more road blocks available */
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1223 cur_rb &= ~DiagDirToRoadBits(ReverseDiagDir(target_dir));
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1224 if (cur_rb == ROAD_NONE)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1225 return _grow_town_result;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1226
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1227 /* Select a random bit from the blockmask, walk a step
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1228 * and continue the search from there. */
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1229 do target_dir = RandomDiagDir(); while (!(cur_rb & DiagDirToRoadBits(target_dir)));
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1230 tile = TileAddByDiagDir(tile, target_dir);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1231
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9334
diff changeset
1232 if (IsTileType(tile, MP_ROAD) && !IsRoadDepot(tile) && HasTileRoadType(tile, ROADTYPE_ROAD)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1233 /* Don't allow building over roads of other cities */
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9334
diff changeset
1234 if (IsRoadOwner(tile, ROADTYPE_ROAD, OWNER_TOWN) && GetTownByTile(tile) != t) {
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
1235 _grow_town_result = GROWTH_SUCCEED;
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9334
diff changeset
1236 } else if (IsRoadOwner(tile, ROADTYPE_ROAD, OWNER_NONE) && _game_mode == GM_EDITOR) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1237 /* If we are in the SE, and this road-piece has no town owner yet, it just found an
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1238 * owner :) (happy happy happy road now) */
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9334
diff changeset
1239 SetRoadOwner(tile, ROADTYPE_ROAD, OWNER_TOWN);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1240 SetTownIndex(tile, t->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1241 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1242 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1243
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1244 /* Max number of times is checked. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1245 } while (--_grow_town_result >= 0);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1246
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1247 return (_grow_town_result == -2);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1248 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1249
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1250 /**
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1251 * Generate a random road block.
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1252 * The probability of a straight road
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1253 * is somewhat higher than a curved.
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1254 *
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1255 * @return A RoadBits value with 2 bits set
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1256 */
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
1257 static RoadBits GenRandomRoadBits()
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1258 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1259 uint32 r = Random();
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1260 uint a = GB(r, 0, 2);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1261 uint b = GB(r, 8, 2);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1262 if (a == b) b ^= 2;
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1263 return (RoadBits)((ROAD_NW << a) + (ROAD_NW << b));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1264 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1265
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1266 /** Grow the town
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1267 * @param t town to grow
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1268 * @return true iff a house was built
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1269 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1270 static bool GrowTown(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1271 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1272 static const TileIndexDiffC _town_coord_mod[] = {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1273 {-1, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1274 { 1, 1},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1275 { 1, -1},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1276 {-1, -1},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1277 {-1, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1278 { 0, 2},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1279 { 2, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1280 { 0, -2},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1281 {-1, -1},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1282 {-2, 2},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1283 { 2, 2},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1284 { 2, -2},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1285 { 0, 0}
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1286 };
6571
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1287
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1288 /* Current "company" is a town */
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1289 CompanyID old_company = _current_company;
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1290 _current_company = OWNER_TOWN;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1291
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
1292 TileIndex tile = t->xy; // The tile we are working with ATM
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1293
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1294 /* Find a road that we can base the construction on. */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1295 const TileIndexDiffC *ptr;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1296 for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
7566
9da968584674 (svn r11091) -Codechange: Partial rewrite of the road management code of towns, in order to make it more readable and with improved performance. (FS#1161 by skidd13)
belugas <belugas@openttd.org>
parents: 7549
diff changeset
1297 if (GetTownRoadBits(tile) != ROAD_NONE) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1298 int r = GrowTownAtRoad(t, tile);
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1299 _current_company = old_company;
5587
c44c070c5032 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents: 5584
diff changeset
1300 return r != 0;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1301 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1302 tile = TILE_ADD(tile, ToTileIndexDiff(*ptr));
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1303 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1304
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1305 /* No road available, try to build a random road block by
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1306 * clearing some land and then building a road there. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1307 tile = t->xy;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1308 for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1309 /* Only work with plain land that not already has a house */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1310 if (!IsTileType(tile, MP_HOUSE) && GetTileSlope(tile, NULL) == SLOPE_FLAT) {
6946
803e29b0584e (svn r10200) -Codechange: add "shortcut" for !CmdFailed (CmdSucceeded).
rubidium <rubidium@openttd.org>
parents: 6943
diff changeset
1311 if (CmdSucceeded(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1312 DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1313 _current_company = old_company;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1314 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1315 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1316 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1317 tile = TILE_ADD(tile, ToTileIndexDiff(*ptr));
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1318 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1319
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1320 _current_company = old_company;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1321 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1322 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1323
8707
64bd5cfc6426 (svn r12381) -Fix [FS1835] [FS1535] (r11855): The number of houses wasn't computed right. A few other things regaring the updating had to be changed. Big thanks for support to frosch123 and SmatZ, to name just a few. (Inspired by a patch of bilbo)
skidd13 <skidd13@openttd.org>
parents: 8618
diff changeset
1324 void UpdateTownRadius(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1325 {
8944
24302d526047 (svn r12731) -Fix (r12726): copying a 16bit array into 32bit wouldn't work
smatz <smatz@openttd.org>
parents: 8943
diff changeset
1326 static const uint32 _town_squared_town_zone_radius_data[23][5] = {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1327 { 4, 0, 0, 0, 0}, // 0
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1328 { 16, 0, 0, 0, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1329 { 25, 0, 0, 0, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1330 { 36, 0, 0, 0, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1331 { 49, 0, 4, 0, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1332 { 64, 0, 4, 0, 0}, // 20
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1333 { 64, 0, 9, 0, 1},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1334 { 64, 0, 9, 0, 4},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1335 { 64, 0, 16, 0, 4},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1336 { 81, 0, 16, 0, 4},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1337 { 81, 0, 16, 0, 4}, // 40
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1338 { 81, 0, 25, 0, 9},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1339 { 81, 36, 25, 0, 9},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1340 { 81, 36, 25, 16, 9},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1341 { 81, 49, 0, 25, 9},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1342 { 81, 64, 0, 25, 9}, // 60
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1343 { 81, 64, 0, 36, 9},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1344 { 81, 64, 0, 36, 16},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1345 {100, 81, 0, 49, 16},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1346 {100, 81, 0, 49, 25},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1347 {121, 81, 0, 49, 25}, // 80
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1348 {121, 81, 0, 49, 25},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1349 {121, 81, 0, 49, 36}, // 88
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1350 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1351
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1352 if (t->num_houses < 92) {
8943
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1353 memcpy(t->squared_town_zone_radius, _town_squared_town_zone_radius_data[t->num_houses / 4], sizeof(t->squared_town_zone_radius));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1354 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1355 int mass = t->num_houses / 8;
8943
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1356 /* Actually we are proportional to sqrt() but that's right because we are covering an area.
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1357 * The offsets are to make sure the radii do not decrease in size when going from the table
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1358 * to the calculated value.*/
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1359 t->squared_town_zone_radius[0] = mass * 15 - 40;
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1360 t->squared_town_zone_radius[1] = mass * 9 - 15;
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1361 t->squared_town_zone_radius[2] = 0;
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1362 t->squared_town_zone_radius[3] = mass * 5 - 5;
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1363 t->squared_town_zone_radius[4] = mass * 3 + 5;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1364 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1365 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1366
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1367 static bool CreateTownName(uint32 *townnameparts)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1368 {
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1369 extern int _nb_orig_names;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1370 Town *t2;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1371 char buf1[64];
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1372 char buf2[64];
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1373 uint32 r;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1374 /* Do not set too low tries, since when we run out of names, we loop
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1375 * for #tries only one time anyway - then we stop generating more
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1376 * towns. Do not show it too high neither, since looping through all
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1377 * the other towns may take considerable amount of time (10000 is
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1378 * too much). */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1379 int tries = 1000;
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1380 bool grf = (_settings_game.game_creation.town_name >= _nb_orig_names);
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1381 uint32 grfid = grf ? GetGRFTownNameId(_settings_game.game_creation.town_name - _nb_orig_names) : 0;
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1382 uint16 townnametype = grf ? GetGRFTownNameType(_settings_game.game_creation.town_name - _nb_orig_names) : SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1383
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1384 assert(townnameparts != NULL);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1385
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1386 for (;;) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1387 restart:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1388 r = Random();
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1389
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1390 SetDParam(0, r);
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1391 if (grf && grfid != 0) {
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1392 GRFTownNameGenerate(buf1, grfid, townnametype, r, lastof(buf1));
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1393 } else {
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1394 GetString(buf1, townnametype, lastof(buf1));
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1395 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1396
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1397 /* Check size and width */
9914
711da94fe0d7 (svn r14064) -Fix [FS#1752]: check for the length of strings (in bytes) in the command. Checking for the length in pixels is impossible because that differs per client.
rubidium <rubidium@openttd.org>
parents: 9714
diff changeset
1398 if (strlen(buf1) >= MAX_LENGTH_TOWN_NAME_BYTES || GetStringBoundingBox(buf1).width > MAX_LENGTH_TOWN_NAME_PIXELS) continue;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1399
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1400 FOR_ALL_TOWNS(t2) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1401 /* We can't just compare the numbers since
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1402 * several numbers may map to a single name. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1403 SetDParam(0, t2->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1404 GetString(buf2, STR_TOWN, lastof(buf2));
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1405 if (strcmp(buf1, buf2) == 0) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1406 if (tries-- < 0) return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1407 goto restart;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1408 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1409 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1410 *townnameparts = r;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1411 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1412 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1413 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1414
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1415 void UpdateTownMaxPass(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1416 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1417 t->max_pass = t->population >> 3;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1418 t->max_mail = t->population >> 4;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1419 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1420
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1421 /**
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1422 * Does the actual town creation.
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1423 *
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1424 * @param t The town
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1425 * @param tile Where to put it
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1426 * @param townnameparts The town name
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1427 * @param size_mode How the size should be determined
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1428 * @param size Parameter for size determination
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1429 */
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1430 static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSize size, bool city, TownLayout layout)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1431 {
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1432 extern int _nb_orig_names;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1433
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1434 t->xy = tile;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1435 t->num_houses = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1436 t->time_until_rebuild = 10;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1437 UpdateTownRadius(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1438 t->flags12 = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1439 t->population = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1440 t->grow_counter = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1441 t->growth_rate = 250;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1442 t->new_max_pass = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1443 t->new_max_mail = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1444 t->new_act_pass = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1445 t->new_act_mail = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1446 t->max_pass = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1447 t->max_mail = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1448 t->act_pass = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1449 t->act_mail = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1450
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1451 t->pct_pass_transported = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1452 t->pct_mail_transported = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1453 t->fund_buildings_months = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1454 t->new_act_food = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1455 t->new_act_water = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1456 t->act_food = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1457 t->act_water = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1458
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1459 for (uint i = 0; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1460
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1461 t->have_ratings = 0;
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
1462 t->exclusivity = INVALID_COMPANY;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1463 t->exclusive_counter = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1464 t->statues = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1465
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1466 if (_settings_game.game_creation.town_name < _nb_orig_names) {
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1467 /* Original town name */
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1468 t->townnamegrfid = 0;
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1469 t->townnametype = SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name;
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1470 } else {
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1471 /* Newgrf town name */
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1472 t->townnamegrfid = GetGRFTownNameId(_settings_game.game_creation.town_name - _nb_orig_names);
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1473 t->townnametype = GetGRFTownNameType(_settings_game.game_creation.town_name - _nb_orig_names);
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1474 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1475 t->townnameparts = townnameparts;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1476
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1477 UpdateTownVirtCoord(t);
9387
a240dd49a2e8 (svn r13297) -Codechange: Use GUIList for the town directory window
peter1138 <peter1138@openttd.org>
parents: 9358
diff changeset
1478 InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 0);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1479
11002
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
1480 t->InitializeLayout(layout);
8796
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
1481
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1482 t->larger_town = city;
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1483
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1484 int x = (int)size * 16 + 3;
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1485 if (size == TS_RANDOM) x = (Random() & 0xF) + 8;
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1486 if (city) x *= _settings_game.economy.initial_city_size;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1487
9334
3945a8340531 (svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas <belugas@openttd.org>
parents: 9322
diff changeset
1488 t->noise_reached = 0;
3945a8340531 (svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas <belugas@openttd.org>
parents: 9322
diff changeset
1489
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1490 t->num_houses += x;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1491 UpdateTownRadius(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1492
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1493 int i = x * 4;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1494 do {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1495 GrowTown(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1496 } while (--i);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1497
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1498 t->num_houses -= x;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1499 UpdateTownRadius(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1500 UpdateTownMaxPass(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1501 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1502
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1503 /** Create a new town.
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1504 * This obviously only works in the scenario editor. Function not removed
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1505 * as it might be possible in the future to fund your own town :)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1506 * @param tile coordinates where town is built
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1507 * @param flags type of operation
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1508 * @param p1 0..1 size of the town (@see TownSize)
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1509 * 2 true iff it should be a city
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1510 * 3..5 town road layout (@see TownLayout)
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1511 * @param p2 unused
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1512 */
11090
df23c4e04638 (svn r15434) -Codechange: bit of type safety for the DC_xxx flags.
rubidium <rubidium@openttd.org>
parents: 11057
diff changeset
1513 CommandCost CmdBuildTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1514 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1515 /* Only in the scenario editor */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1516 if (_game_mode != GM_EDITOR) return CMD_ERROR;
11002
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
1517
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1518 TownSize size = (TownSize)GB(p1, 0, 2);
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1519 bool city = HasBit(p1, 2);
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1520 TownLayout layout = (TownLayout)GB(p1, 3, 3);
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1521
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1522 if (size > TS_RANDOM) return CMD_ERROR;
11002
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
1523 if (layout > TL_RANDOM) return CMD_ERROR;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1524
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1525 /* Check if too close to the edge of map */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1526 if (DistanceFromEdge(tile) < 12)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1527 return_cmd_error(STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1528
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1529 /* Can only build on clear flat areas, possibly with trees. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1530 if ((!IsTileType(tile, MP_CLEAR) && !IsTileType(tile, MP_TREES)) || GetTileSlope(tile, NULL) != SLOPE_FLAT) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1531 return_cmd_error(STR_0239_SITE_UNSUITABLE);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1532 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1533
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1534 /* Check distance to all other towns. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1535 if (IsCloseToTown(tile, 20))
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1536 return_cmd_error(STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1537
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1538 uint32 townnameparts;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1539
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1540 /* Get a unique name for the town. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1541 if (!CreateTownName(&townnameparts))
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1542 return_cmd_error(STR_023A_TOO_MANY_TOWNS);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1543
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1544 /* Allocate town struct */
9036
74210834ed21 (svn r12855) -Codechange: do not use autoptr's for testing whether certain objects can be build, but check it directly in the pool so we do not have to call destructors in the testing phase. Stations still use the autoptr though.
rubidium <rubidium@openttd.org>
parents: 9020
diff changeset
1545 if (!Town::CanAllocateItem()) return_cmd_error(STR_023A_TOO_MANY_TOWNS);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1546
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1547 /* Create the town */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1548 if (flags & DC_EXEC) {
9036
74210834ed21 (svn r12855) -Codechange: do not use autoptr's for testing whether certain objects can be build, but check it directly in the pool so we do not have to call destructors in the testing phase. Stations still use the autoptr though.
rubidium <rubidium@openttd.org>
parents: 9020
diff changeset
1549 Town *t = new Town(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1550 _generating_world = true;
10340
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
1551 UpdateNearestTownForRoadTiles(true);
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1552 DoCreateTown(t, tile, townnameparts, size, city, layout);
10340
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
1553 UpdateNearestTownForRoadTiles(false);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1554 _generating_world = false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1555 }
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
1556 return CommandCost();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1557 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1558
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1559 Town *CreateRandomTown(uint attempts, TownSize size, bool city, TownLayout layout)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1560 {
10634
66515fd11ca9 (svn r14933) -Codechange: check the whether a pool item can be constructed instead of trying to make it and check for NULL.
rubidium <rubidium@openttd.org>
parents: 10571
diff changeset
1561 if (!Town::CanAllocateItem()) return NULL;
66515fd11ca9 (svn r14933) -Codechange: check the whether a pool item can be constructed instead of trying to make it and check for NULL.
rubidium <rubidium@openttd.org>
parents: 10571
diff changeset
1562
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1563 do {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1564 /* Generate a tile index not too close from the edge */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1565 TileIndex tile = RandomTile();
11002
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
1566 switch (layout) {
10564
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1567 case TL_2X2_GRID:
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1568 tile = TileXY(TileX(tile) - TileX(tile) % 3, TileY(tile) - TileY(tile) % 3);
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1569 break;
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1570 case TL_3X3_GRID:
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1571 tile = TileXY(TileX(tile) & ~3, TileY(tile) & ~3);
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1572 break;
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1573 default: break;
47ec3be0f65c (svn r14821) -Change [FS#2390]: make the road grids of town match, when all are using the same road layout ofcourse (cirdan)
rubidium <rubidium@openttd.org>
parents: 10550
diff changeset
1574 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1575 if (DistanceFromEdge(tile) < 20) continue;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1576
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1577 /* Make sure the tile is plain */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1578 if (!IsTileType(tile, MP_CLEAR) || GetTileSlope(tile, NULL) != SLOPE_FLAT) continue;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1579
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1580 /* Check not too close to a town */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1581 if (IsCloseToTown(tile, 20)) continue;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1582
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1583 uint32 townnameparts;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1584
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1585 /* Get a unique name for the town. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1586 if (!CreateTownName(&townnameparts)) break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1587
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1588 /* Allocate a town struct */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1589 Town *t = new Town(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1590
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1591 DoCreateTown(t, tile, townnameparts, size, city, layout);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1592 return t;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1593 } while (--attempts != 0);
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1594
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1595 return NULL;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1596 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1597
9334
3945a8340531 (svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas <belugas@openttd.org>
parents: 9322
diff changeset
1598 static const byte _num_initial_towns[4] = {5, 11, 23, 46}; // very low, low, normal, high
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1599
11002
9514cd63fe53 (svn r15342) -Feature: allow changing town layout in the 'Found new town' window
smatz <smatz@openttd.org>
parents: 11000
diff changeset
1600 bool GenerateTowns(TownLayout layout)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1601 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1602 uint num = 0;
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1603 uint n = ScaleByMapSize(_num_initial_towns[_settings_game.difficulty.number_towns] + (Random() & 7));
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1604 uint num_cities = _settings_game.economy.larger_towns == 0 ? 0 : n / _settings_game.economy.larger_towns;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1605
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1606 SetGeneratingWorldProgress(GWP_TOWN, n);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1607
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1608 do {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1609 IncreaseGeneratingWorldProgress(GWP_TOWN);
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1610 /* try 20 times to create a random-sized town for the first loop. */
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1611 if (CreateRandomTown(20, TS_RANDOM, num_cities > 0, layout) != NULL) num++;
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1612 if (num_cities > 0) num_cities--;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1613 } while (--n);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1614
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1615 /* give it a last try, but now more aggressive */
11012
88712c0e082e (svn r15352) -Codechange: make the arguments passed around while founding a town a bit more readable
smatz <smatz@openttd.org>
parents: 11002
diff changeset
1616 if (num == 0 && CreateRandomTown(10000, TS_RANDOM, false, layout) == NULL) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1617 if (GetNumTowns() == 0) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1618 /* XXX - can we handle that more gracefully? */
9470
47924a4b2ad4 (svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx <glx@openttd.org>
parents: 9463
diff changeset
1619 if (_game_mode != GM_EDITOR) usererror("Could not generate any town");
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1620
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1621 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1622 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1623 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1624
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1625 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1626 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1627
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1628
8308
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8291
diff changeset
1629 /** Returns the bit corresponding to the town zone of the specified tile
8943
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1630 * @param t Town on which town zone is to be found
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1631 * @param tile TileIndex where town zone needs to be found
8308
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8291
diff changeset
1632 * @return the bit position of the given zone, as defined in HouseZones
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8291
diff changeset
1633 */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1634 HouseZonesBits GetTownRadiusGroup(const Town *t, TileIndex tile)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1635 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1636 uint dist = DistanceSquare(tile, t->xy);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1637
8308
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8291
diff changeset
1638 if (t->fund_buildings_months && dist <= 25) return HZB_TOWN_CENTRE;
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8291
diff changeset
1639
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1640 HouseZonesBits smallest = HZB_TOWN_EDGE;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1641 for (HouseZonesBits i = HZB_BEGIN; i < HZB_END; i++) {
8943
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
1642 if (dist < t->squared_town_zone_radius[i]) smallest = i;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1643 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1644
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1645 return smallest;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1646 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1647
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1648 /**
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1649 * Clears tile and builds a house or house part.
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1650 * @param t tile index
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1651 * @param tid Town index
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1652 * @param counter of construction step
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1653 * @param stage of construction (used for drawing)
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1654 * @param type of house. Index into house specs array
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1655 * @param random_bits required for newgrf houses
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1656 * @pre house can be built here
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1657 */
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1658 static inline void ClearMakeHouseTile(TileIndex tile, Town *t, byte counter, byte stage, HouseID type, byte random_bits)
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1659 {
9436
b3969ef775ba (svn r13351) -Codechange: disable warnings about unused variable for builds without asserts
smatz <smatz@openttd.org>
parents: 9413
diff changeset
1660 CommandCost cc = DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR);
8618
4a33194e5ee7 (svn r12201) -Fix (r12060): compilation warnings - uninitialized variable when compiling with assert disabled
smatz <smatz@openttd.org>
parents: 8616
diff changeset
1661
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1662 assert(CmdSucceeded(cc));
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1663
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1664 IncreaseBuildingCount(t, type);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1665 MakeHouseTile(tile, t->index, counter, stage, type, random_bits);
9006
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
1666 if (GetHouseSpecs(type)->building_flags & BUILDING_IS_ANIMATED) AddAnimatedTile(tile);
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
1667
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
1668 MarkTileDirtyByTile(tile);
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1669 }
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1670
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1671
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1672 /**
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1673 * Write house information into the map. For houses > 1 tile, all tiles are marked.
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1674 * @param t tile index
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1675 * @param tid Town index
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1676 * @param counter of construction step
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1677 * @param stage of construction (used for drawing)
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1678 * @param type of house. Index into house specs array
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1679 * @param random_bits required for newgrf houses
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1680 * @pre house can be built here
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1681 */
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1682 static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, HouseID type, byte random_bits)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1683 {
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1684 BuildingFlags size = GetHouseSpecs(type)->building_flags;
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1685
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1686 ClearMakeHouseTile(t, town, counter, stage, type, random_bits);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1687 if (size & BUILDING_2_TILES_Y) ClearMakeHouseTile(t + TileDiffXY(0, 1), town, counter, stage, ++type, random_bits);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1688 if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(t + TileDiffXY(1, 0), town, counter, stage, ++type, random_bits);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1689 if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), town, counter, stage, ++type, random_bits);
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1690 }
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1691
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1692
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1693 /**
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1694 * Checks if a house can be built here. Important is slope, bridge above
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1695 * and ability to clear the land.
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1696 * @param tile tile to check
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1697 * @param town town that is checking
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1698 * @param noslope are slopes (foundations) allowed?
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1699 * @return true iff house can be built here
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1700 */
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1701 static inline bool CanBuildHouseHere(TileIndex tile, TownID town, bool noslope)
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1702 {
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1703 /* cannot build on these slopes... */
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1704 Slope slope = GetTileSlope(tile, NULL);
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1705 if ((noslope && slope != SLOPE_FLAT) || IsSteepSlope(slope)) return false;
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1706
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1707 /* building under a bridge? */
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1708 if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return false;
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1709
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1710 /* do not try to build over house owned by another town */
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1711 if (IsTileType(tile, MP_HOUSE) && GetTownIndex(tile) != town) return false;
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1712
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1713 /* can we clear the land? */
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1714 return CmdSucceeded(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1715 }
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1716
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1717
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1718 /**
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1719 * Checks if a house can be built at this tile, must have the same max z as parameter.
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1720 * @param tile tile to check
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1721 * @param town town that is checking
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1722 * @param z max z of this tile so more parts of a house are at the same height (with foundation)
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1723 * @param noslope are slopes (foundations) allowed?
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1724 * @return true iff house can be built here
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1725 * @see CanBuildHouseHere()
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1726 */
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1727 static inline bool CheckBuildHouseSameZ(TileIndex tile, TownID town, uint z, bool noslope)
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1728 {
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1729 if (!CanBuildHouseHere(tile, town, noslope)) return false;
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1730
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1731 /* if building on slopes is allowed, there will be flattening foundation (to tile max z) */
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1732 if (GetTileMaxZ(tile) != z) return false;
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1733
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1734 return true;
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1735 }
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1736
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1737
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1738 /**
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1739 * Checks if a house of size 2x2 can be built at this tile
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1740 * @param tile tile, N corner
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1741 * @param town town that is checking
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1742 * @param z maximum tile z so all tile have the same max z
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1743 * @param noslope are slopes (foundations) allowed?
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1744 * @return true iff house can be built
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1745 * @see CheckBuildHouseSameZ()
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1746 */
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1747 static bool CheckFree2x2Area(TileIndex tile, TownID town, uint z, bool noslope)
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1748 {
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1749 /* we need to check this tile too because we can be at different tile now */
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1750 if (!CheckBuildHouseSameZ(tile, town, z, noslope)) return false;
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1751
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1752 for (DiagDirection d = DIAGDIR_SE; d < DIAGDIR_END; d++) {
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1753 tile += TileOffsByDiagDir(d);
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1754 if (!CheckBuildHouseSameZ(tile, town, z, noslope)) return false;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1755 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1756
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1757 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1758 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1759
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1760
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1761 /**
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1762 * Checks if current town layout allows building here
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1763 * @param t town
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1764 * @param tile tile to check
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1765 * @return true iff town layout allows building here
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1766 * @note see layouts
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1767 */
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1768 static inline bool TownLayoutAllowsHouseHere(Town *t, TileIndex tile)
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1769 {
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1770 TileIndexDiffC grid_pos = TileIndexToTileIndexDiffC(t->xy, tile);
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1771
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1772 switch (t->layout) {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1773 case TL_2X2_GRID:
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1774 if ((grid_pos.x % 3) == 0 || (grid_pos.y % 3) == 0) return false;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1775 break;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1776
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1777 case TL_3X3_GRID:
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1778 if ((grid_pos.x % 4) == 0 || (grid_pos.y % 4) == 0) return false;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1779 break;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1780
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1781 default:
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1782 break;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1783 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1784
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1785 return true;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1786 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1787
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1788
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1789 /**
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1790 * Checks if current town layout allows 2x2 building here
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1791 * @param t town
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1792 * @param tile tile to check
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1793 * @return true iff town layout allows 2x2 building here
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1794 * @note see layouts
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1795 */
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1796 static inline bool TownLayoutAllows2x2HouseHere(Town *t, TileIndex tile)
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1797 {
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1798 /* MapSize() is sure dividable by both MapSizeX() and MapSizeY(),
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1799 * so to do only one memory access, use MapSize() */
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1800 uint dx = MapSize() + TileX(t->xy) - TileX(tile);
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1801 uint dy = MapSize() + TileY(t->xy) - TileY(tile);
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1802
11000
def5dbb7e314 (svn r15340) -Fix [FS#2121]: changing town road layout in-game caused ugly road networks
smatz <smatz@openttd.org>
parents: 10960
diff changeset
1803 switch (t->layout) {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1804 case TL_2X2_GRID:
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1805 if ((dx % 3) != 0 || (dy % 3) != 0) return false;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1806 break;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1807
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1808 case TL_3X3_GRID:
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1809 if ((dx % 4) < 2 || (dy % 4) < 2) return false;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1810 break;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1811
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1812 default:
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1813 break;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1814 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1815
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1816 return true;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1817 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1818
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1819
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1820 /**
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1821 * Checks if 1x2 or 2x1 building is allowed here, also takes into account current town layout
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1822 * Also, tests both building positions that occupy this tile
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1823 * @param tile tile where the building should be built
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1824 * @param t town
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1825 * @param maxz all tiles should have the same height
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1826 * @param noslope are slopes forbidden?
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1827 * @param second diagdir from first tile to second tile
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1828 **/
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1829 static bool CheckTownBuild2House(TileIndex *tile, Town *t, uint maxz, bool noslope, DiagDirection second)
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1830 {
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1831 /* 'tile' is already checked in BuildTownHouse() - CanBuildHouseHere() and slope test */
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1832
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1833 TileIndex tile2 = *tile + TileOffsByDiagDir(second);
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1834 if (TownLayoutAllowsHouseHere(t, tile2) && CheckBuildHouseSameZ(tile2, t->index, maxz, noslope)) return true;
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1835
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1836 tile2 = *tile + TileOffsByDiagDir(ReverseDiagDir(second));
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1837 if (TownLayoutAllowsHouseHere(t, tile2) && CheckBuildHouseSameZ(tile2, t->index, maxz, noslope)) {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1838 *tile = tile2;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1839 return true;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1840 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1841
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1842 return false;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1843 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1844
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1845
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1846 /**
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1847 * Checks if 2x2 building is allowed here, also takes into account current town layout
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1848 * Also, tests all four building positions that occupy this tile
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1849 * @param tile tile where the building should be built
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1850 * @param t town
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1851 * @param maxz all tiles should have the same height
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1852 * @param noslope are slopes forbidden?
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1853 **/
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1854 static bool CheckTownBuild2x2House(TileIndex *tile, Town *t, uint maxz, bool noslope)
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1855 {
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1856 TileIndex tile2 = *tile;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1857
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1858 for (DiagDirection d = DIAGDIR_SE;;d++) { // 'd' goes through DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_END
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1859 if (TownLayoutAllows2x2HouseHere(t, tile2) && CheckFree2x2Area(tile2, t->index, maxz, noslope)) {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1860 *tile = tile2;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1861 return true;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1862 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1863 if (d == DIAGDIR_END) break;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1864 tile2 += TileOffsByDiagDir(ReverseDiagDir(d)); // go clockwise
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1865 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1866
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1867 return false;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1868 }
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1869
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1870
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1871 /**
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1872 * Tries to build a house at this tile
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1873 * @param t town the house will belong to
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1874 * @param tile where the house will be built
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1875 * @return false iff no house can be built at this tile
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1876 */
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1877 static bool BuildTownHouse(Town *t, TileIndex tile)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1878 {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1879 /* forbidden building here by town layout */
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1880 if (!TownLayoutAllowsHouseHere(t, tile)) return false;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1881
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1882 /* no house allowed at all, bail out */
8581
0060507052b9 (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town
smatz <smatz@openttd.org>
parents: 8580
diff changeset
1883 if (!CanBuildHouseHere(tile, t->index, false)) return false;
8485
a4493021a8f3 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
smatz <smatz@openttd.org>
parents: 8461
diff changeset
1884
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1885 uint z;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1886 Slope slope = GetTileSlope(tile, &z);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1887
8308
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8291
diff changeset
1888 /* Get the town zone type of the current tile, as well as the climate.
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8291
diff changeset
1889 * This will allow to easily compare with the specs of the new house to build */
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1890 HouseZonesBits rad = GetTownRadiusGroup(t, tile);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1891
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1892 /* Above snow? */
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1893 int land = _settings_game.game_creation.landscape;
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
1894 if (land == LT_ARCTIC && z >= _settings_game.game_creation.snow_line) land = -1;
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1895
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1896 uint bitmask = (1 << rad) + (1 << (land + 12));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1897
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1898 /* bits 0-4 are used
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1899 * bits 11-15 are used
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1900 * bits 5-10 are not used. */
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1901 HouseID houses[HOUSE_MAX];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1902 uint num = 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1903 uint probs[HOUSE_MAX];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1904 uint probability_max = 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1905
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1906 /* Generate a list of all possible houses that can be built. */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1907 for (uint i = 0; i < HOUSE_MAX; i++) {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1908 const HouseSpec *hs = GetHouseSpecs(i);
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1909 /* Verify that the candidate house spec matches the current tile status */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1910 if ((~hs->building_availability & bitmask) == 0 && hs->enabled) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1911 /* Without NewHouses, all houses have probability '1' */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1912 uint cur_prob = (_loaded_newgrf_features.has_newhouses ? hs->probability : 1);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1913 probability_max += cur_prob;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1914 probs[num] = cur_prob;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1915 houses[num++] = (HouseID)i;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1916 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1917 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1918
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1919 uint maxz = GetTileMaxZ(tile);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1920
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1921 while (probability_max > 0) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1922 uint r = RandomRange(probability_max);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1923 uint i;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1924 for (i = 0; i < num; i++) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1925 if (probs[i] > r) break;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1926 r -= probs[i];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1927 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1928
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1929 HouseID house = houses[i];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1930 probability_max -= probs[i];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1931
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1932 /* remove tested house from the set */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1933 num--;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1934 houses[i] = houses[num];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1935 probs[i] = probs[num];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1936
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1937 const HouseSpec *hs = GetHouseSpecs(house);
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1938
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1939 if (_loaded_newgrf_features.has_newhouses) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1940 if (hs->override != 0) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1941 house = hs->override;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1942 hs = GetHouseSpecs(house);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1943 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1944
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1945 if ((hs->extra_flags & BUILDING_IS_HISTORICAL) && !_generating_world) continue;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1946 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1947
9450
abbb771cc919 (svn r13368) -Codechange: give house's min/max_date a better name, as it is really year, not date
belugas <belugas@openttd.org>
parents: 9449
diff changeset
1948 if (_cur_year < hs->min_year || _cur_year > hs->max_year) continue;
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1949
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1950 /* Special houses that there can be only one of. */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1951 uint oneof = 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1952
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1953 if (hs->building_flags & BUILDING_IS_CHURCH) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1954 SetBit(oneof, TOWN_HAS_CHURCH);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1955 } else if (hs->building_flags & BUILDING_IS_STADIUM) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1956 SetBit(oneof, TOWN_HAS_STADIUM);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1957 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1958
9505
4a9a94edf11a (svn r13489) -Fix: first determine where to *exactly* build a house before asking a NewGRF whether the location is good instead of possibly moving the house a tile after the NewGRF said the location is good.
rubidium <rubidium@openttd.org>
parents: 9470
diff changeset
1959 if (HASBITS(t->flags12, oneof)) continue;
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1960
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1961 /* Make sure there is no slope? */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1962 bool noslope = (hs->building_flags & TILE_NOT_SLOPED) != 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1963 if (noslope && slope != SLOPE_FLAT) continue;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1964
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1965 if (hs->building_flags & TILE_SIZE_2x2) {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1966 if (!CheckTownBuild2x2House(&tile, t, maxz, noslope)) continue;
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1967 } else if (hs->building_flags & TILE_SIZE_2x1) {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1968 if (!CheckTownBuild2House(&tile, t, maxz, noslope, DIAGDIR_SW)) continue;
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1969 } else if (hs->building_flags & TILE_SIZE_1x2) {
8580
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1970 if (!CheckTownBuild2House(&tile, t, maxz, noslope, DIAGDIR_SE)) continue;
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1971 } else {
1cbedb922142 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts)
smatz <smatz@openttd.org>
parents: 8488
diff changeset
1972 /* 1x1 house checks are already done */
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1973 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1974
9505
4a9a94edf11a (svn r13489) -Fix: first determine where to *exactly* build a house before asking a NewGRF whether the location is good instead of possibly moving the house a tile after the NewGRF said the location is good.
rubidium <rubidium@openttd.org>
parents: 9470
diff changeset
1975 if (HasBit(hs->callback_mask, CBM_HOUSE_ALLOW_CONSTRUCTION)) {
4a9a94edf11a (svn r13489) -Fix: first determine where to *exactly* build a house before asking a NewGRF whether the location is good instead of possibly moving the house a tile after the NewGRF said the location is good.
rubidium <rubidium@openttd.org>
parents: 9470
diff changeset
1976 uint16 callback_res = GetHouseCallback(CBID_HOUSE_ALLOW_CONSTRUCTION, 0, 0, house, t, tile);
4a9a94edf11a (svn r13489) -Fix: first determine where to *exactly* build a house before asking a NewGRF whether the location is good instead of possibly moving the house a tile after the NewGRF said the location is good.
rubidium <rubidium@openttd.org>
parents: 9470
diff changeset
1977 if (callback_res != CALLBACK_FAILED && GB(callback_res, 0, 8) == 0) continue;
4a9a94edf11a (svn r13489) -Fix: first determine where to *exactly* build a house before asking a NewGRF whether the location is good instead of possibly moving the house a tile after the NewGRF said the location is good.
rubidium <rubidium@openttd.org>
parents: 9470
diff changeset
1978 }
4a9a94edf11a (svn r13489) -Fix: first determine where to *exactly* build a house before asking a NewGRF whether the location is good instead of possibly moving the house a tile after the NewGRF said the location is good.
rubidium <rubidium@openttd.org>
parents: 9470
diff changeset
1979
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1980 /* build the house */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1981 t->num_houses++;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1982
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1983 /* Special houses that there can be only one of. */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1984 t->flags12 |= oneof;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1985
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1986 byte construction_counter = 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1987 byte construction_stage = 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1988
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1989 if (_generating_world) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1990 uint32 r = Random();
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1991
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1992 construction_stage = TOWN_HOUSE_COMPLETED;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1993 if (Chance16(1, 7)) construction_stage = GB(r, 0, 2);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1994
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1995 if (construction_stage == TOWN_HOUSE_COMPLETED) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1996 ChangePopulation(t, hs->population);
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1997 } else {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1998 construction_counter = GB(r, 2, 2);
8487
b616c9edbe1c (svn r12062) -Fix: possible deadlock when there are no houses available to build at given tile
smatz <smatz@openttd.org>
parents: 8485
diff changeset
1999 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2000 }
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
2001
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2002 MakeTownHouse(tile, t, construction_counter, construction_stage, house, Random());
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
2003
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
2004 return true;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2005 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2006
8487
b616c9edbe1c (svn r12062) -Fix: possible deadlock when there are no houses available to build at given tile
smatz <smatz@openttd.org>
parents: 8485
diff changeset
2007 return false;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2008 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2009
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
2010 /**
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
2011 * Update data structures when a house is removed
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
2012 * @param tile Tile of the house
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
2013 * @param t Town owning the house
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
2014 * @param house House type
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
2015 */
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2016 static void DoClearTownHouseHelper(TileIndex tile, Town *t, HouseID house)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2017 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2018 assert(IsTileType(tile, MP_HOUSE));
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2019 DecreaseBuildingCount(t, house);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2020 DoClearSquare(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2021 DeleteAnimatedTile(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2022 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2023
8942
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2024 /**
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2025 * Determines if a given HouseID is part of a multitile house.
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2026 * The given ID is set to the ID of the north tile and the TileDiff to the north tile is returned.
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2027 *
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2028 * @param house Is changed to the HouseID of the north tile of the same house
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2029 * @return TileDiff from the tile of the given HouseID to the north tile
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2030 */
10269
b678a31b4b36 (svn r14504) -Cleanup: Use the right variable type for tile offsets.
michi_cc <michi_cc@openttd.org>
parents: 10260
diff changeset
2031 TileIndexDiff GetHouseNorthPart(HouseID &house)
8942
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2032 {
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2033 if (house >= 3) { // house id 0,1,2 MUST be single tile houses, or this code breaks.
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2034 if (GetHouseSpecs(house - 1)->building_flags & TILE_SIZE_2x1) {
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2035 house--;
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2036 return TileDiffXY(-1, 0);
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2037 } else if (GetHouseSpecs(house - 1)->building_flags & BUILDING_2_TILES_Y) {
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2038 house--;
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2039 return TileDiffXY(0, -1);
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2040 } else if (GetHouseSpecs(house - 2)->building_flags & BUILDING_HAS_4_TILES) {
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2041 house -= 2;
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2042 return TileDiffXY(-1, 0);
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2043 } else if (GetHouseSpecs(house - 3)->building_flags & BUILDING_HAS_4_TILES) {
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2044 house -= 3;
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2045 return TileDiffXY(-1, -1);
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2046 }
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2047 }
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2048 return 0;
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2049 }
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2050
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2051 void ClearTownHouse(Town *t, TileIndex tile)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2052 {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2053 assert(IsTileType(tile, MP_HOUSE));
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2054
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2055 HouseID house = GetHouseType(tile);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2056
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2057 /* need to align the tile to point to the upper left corner of the house */
8942
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2058 tile += GetHouseNorthPart(house); // modifies house to the ID of the north tile
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2059
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2060 const HouseSpec *hs = GetHouseSpecs(house);
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2061
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2062 /* Remove population from the town if the house is finished. */
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2063 if (IsHouseCompleted(tile)) {
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2064 ChangePopulation(t, -hs->population);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2065 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2066
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2067 t->num_houses--;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2068
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2069 /* Clear flags for houses that only may exist once/town. */
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2070 if (hs->building_flags & BUILDING_IS_CHURCH) {
7929
4d13dbed828c (svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7928
diff changeset
2071 ClrBit(t->flags12, TOWN_HAS_CHURCH);
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2072 } else if (hs->building_flags & BUILDING_IS_STADIUM) {
7929
4d13dbed828c (svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7928
diff changeset
2073 ClrBit(t->flags12, TOWN_HAS_STADIUM);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2074 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2075
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2076 /* Do the actual clearing of tiles */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2077 uint eflags = hs->building_flags;
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2078 DoClearTownHouseHelper(tile, t, house);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2079 if (eflags & BUILDING_2_TILES_Y) DoClearTownHouseHelper(tile + TileDiffXY(0, 1), t, ++house);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2080 if (eflags & BUILDING_2_TILES_X) DoClearTownHouseHelper(tile + TileDiffXY(1, 0), t, ++house);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2081 if (eflags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1), t, ++house);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2082 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2083
7097
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2084 static bool IsUniqueTownName(const char *name)
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2085 {
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2086 const Town *t;
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2087
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2088 FOR_ALL_TOWNS(t) {
10656
39feee39693a (svn r14958) -Codechange [FS#1923]: when checking for unique names, compare only with manually set names
smatz <smatz@openttd.org>
parents: 10634
diff changeset
2089 if (t->name != NULL && strcmp(t->name, name) == 0) return false;
7097
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2090 }
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2091
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2092 return true;
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2093 }
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2094
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2095 /** Rename a town (server-only).
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2096 * @param tile unused
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2097 * @param flags type of operation
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2098 * @param p1 town ID to rename
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2099 * @param p2 unused
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2100 */
11090
df23c4e04638 (svn r15434) -Codechange: bit of type safety for the DC_xxx flags.
rubidium <rubidium@openttd.org>
parents: 11057
diff changeset
2101 CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2102 {
9914
711da94fe0d7 (svn r14064) -Fix [FS#1752]: check for the length of strings (in bytes) in the command. Checking for the length in pixels is impossible because that differs per client.
rubidium <rubidium@openttd.org>
parents: 9714
diff changeset
2103 if (!IsValidTownID(p1)) return CMD_ERROR;
10148
81642658c8be (svn r14334) -Feature: ability to reset name to default/automatic value (for vehicles, engines, towns, groups, stations, waypoints, managers and companies)
smatz <smatz@openttd.org>
parents: 9914
diff changeset
2104
10499
45ca88a8de7d (svn r14754) -Codechange: get rid of _cmd_text and just pass it as (optional) parameter.
rubidium <rubidium@openttd.org>
parents: 10487
diff changeset
2105 bool reset = StrEmpty(text);
10148
81642658c8be (svn r14334) -Feature: ability to reset name to default/automatic value (for vehicles, engines, towns, groups, stations, waypoints, managers and companies)
smatz <smatz@openttd.org>
parents: 9914
diff changeset
2106
81642658c8be (svn r14334) -Feature: ability to reset name to default/automatic value (for vehicles, engines, towns, groups, stations, waypoints, managers and companies)
smatz <smatz@openttd.org>
parents: 9914
diff changeset
2107 if (!reset) {
10499
45ca88a8de7d (svn r14754) -Codechange: get rid of _cmd_text and just pass it as (optional) parameter.
rubidium <rubidium@openttd.org>
parents: 10487
diff changeset
2108 if (strlen(text) >= MAX_LENGTH_TOWN_NAME_BYTES) return CMD_ERROR;
45ca88a8de7d (svn r14754) -Codechange: get rid of _cmd_text and just pass it as (optional) parameter.
rubidium <rubidium@openttd.org>
parents: 10487
diff changeset
2109 if (!IsUniqueTownName(text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
10148
81642658c8be (svn r14334) -Feature: ability to reset name to default/automatic value (for vehicles, engines, towns, groups, stations, waypoints, managers and companies)
smatz <smatz@openttd.org>
parents: 9914
diff changeset
2110 }
7097
5c2889ace3ac (svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138 <peter1138@openttd.org>
parents: 7058
diff changeset
2111
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2112 if (flags & DC_EXEC) {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2113 Town *t = GetTown(p1);
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2114
8258
6017c5ebeb7e (svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138 <peter1138@openttd.org>
parents: 8254
diff changeset
2115 free(t->name);
10499
45ca88a8de7d (svn r14754) -Codechange: get rid of _cmd_text and just pass it as (optional) parameter.
rubidium <rubidium@openttd.org>
parents: 10487
diff changeset
2116 t->name = reset ? NULL : strdup(text);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2117
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2118 UpdateTownVirtCoord(t);
9387
a240dd49a2e8 (svn r13297) -Codechange: Use GUIList for the town directory window
peter1138 <peter1138@openttd.org>
parents: 9358
diff changeset
2119 InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2120 UpdateAllStationVirtCoord();
7709
1859cffc251e (svn r11243) -Fix: update waypoint signs when renaming a town
glx <glx@openttd.org>
parents: 7684
diff changeset
2121 UpdateAllWaypointSigns();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2122 MarkWholeScreenDirty();
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2123 }
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
2124 return CommandCost();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2125 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2126
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2127 /** Called from GUI */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2128 void ExpandTown(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2129 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2130 _generating_world = true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2131
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2132 /* The more houses, the faster we grow */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2133 uint amount = RandomRange(ClampToU16(t->num_houses / 10)) + 3;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2134 t->num_houses += amount;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2135 UpdateTownRadius(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2136
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2137 uint n = amount * 10;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2138 do GrowTown(t); while (--n);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2139
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2140 t->num_houses -= amount;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2141 UpdateTownRadius(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2142
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2143 UpdateTownMaxPass(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2144 _generating_world = false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2145 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2146
5587
c44c070c5032 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents: 5584
diff changeset
2147 extern const byte _town_action_costs[8] = {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2148 2, 4, 9, 35, 48, 53, 117, 175
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2149 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2150
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2151 static void TownActionAdvertiseSmall(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2152 {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2153 ModifyStationRatingAround(t->xy, _current_company, 0x40, 10);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2154 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2155
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2156 static void TownActionAdvertiseMedium(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2157 {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2158 ModifyStationRatingAround(t->xy, _current_company, 0x70, 15);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2159 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2160
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2161 static void TownActionAdvertiseLarge(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2162 {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2163 ModifyStationRatingAround(t->xy, _current_company, 0xA0, 20);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2164 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2165
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2166 static void TownActionRoadRebuild(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2167 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2168 t->road_build_months = 6;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2169
9658
27697e657d2e (svn r13730) -Fix: make a copy of the names for news messages about the deletion of companies as the removal of a company could lead to wrong names in the news messages.
rubidium <rubidium@openttd.org>
parents: 9652
diff changeset
2170 char *company_name = MallocT<char>(64);
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2171 SetDParam(0, _current_company);
9658
27697e657d2e (svn r13730) -Fix: make a copy of the names for news messages about the deletion of companies as the removal of a company could lead to wrong names in the news messages.
rubidium <rubidium@openttd.org>
parents: 9652
diff changeset
2172 GetString(company_name, STR_COMPANY_NAME, company_name + 64);
27697e657d2e (svn r13730) -Fix: make a copy of the names for news messages about the deletion of companies as the removal of a company could lead to wrong names in the news messages.
rubidium <rubidium@openttd.org>
parents: 9652
diff changeset
2173
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2174 SetDParam(0, t->index);
9658
27697e657d2e (svn r13730) -Fix: make a copy of the names for news messages about the deletion of companies as the removal of a company could lead to wrong names in the news messages.
rubidium <rubidium@openttd.org>
parents: 9652
diff changeset
2175 SetDParamStr(1, company_name);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2176
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2177 AddNewsItem(STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING,
9658
27697e657d2e (svn r13730) -Fix: make a copy of the names for news messages about the deletion of companies as the removal of a company could lead to wrong names in the news messages.
rubidium <rubidium@openttd.org>
parents: 9652
diff changeset
2178 NS_GENERAL, t->xy, 0, company_name);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2179 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2180
6257
d7d39048e2ee (svn r9066) -Fix [FS#638]: store the owner of a statue, so when it gets removed, the town is notified of it
truelight <truelight@openttd.org>
parents: 6247
diff changeset
2181 static bool DoBuildStatueOfCompany(TileIndex tile, TownID town_id)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2182 {
7549
b202efd99ae5 (svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium <rubidium@openttd.org>
parents: 7545
diff changeset
2183 /* Statues can be build on slopes, just like houses. Only the steep slopes is a no go. */
b202efd99ae5 (svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium <rubidium@openttd.org>
parents: 7545
diff changeset
2184 if (IsSteepSlope(GetTileSlope(tile, NULL))) return false;
11057
a56076ea98c6 (svn r15397) -Fix [FS#2618]: a town could build a statue under a bridge.
rubidium <rubidium@openttd.org>
parents: 11041
diff changeset
2185 /* Don't build statues under bridges. */
a56076ea98c6 (svn r15397) -Fix [FS#2618]: a town could build a statue under a bridge.
rubidium <rubidium@openttd.org>
parents: 11041
diff changeset
2186 if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return false;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2187
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2188 if (!IsTileType(tile, MP_HOUSE) &&
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2189 !IsTileType(tile, MP_CLEAR) &&
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2190 !IsTileType(tile, MP_TREES)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2191 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2192 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2193
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2194 CompanyID old = _current_company;
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2195 _current_company = OWNER_NONE;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2196 CommandCost r = DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2197 _current_company = old;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2198
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2199 if (CmdFailed(r)) return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2200
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2201 MakeStatue(tile, _current_company, town_id);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2202 MarkTileDirtyByTile(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2203
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2204 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2205 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2206
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2207 /**
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2208 * Search callback function for TownActionBuildStatue
6484
17fdaec13730 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas <belugas@openttd.org>
parents: 6455
diff changeset
2209 * @param tile on which to perform the search
9592
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2210 * @param user_data The town_id for which we want a statue
6201
3b141366478a (svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas <belugas@openttd.org>
parents: 6133
diff changeset
2211 * @return the result of the test
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2212 */
9592
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2213 static bool SearchTileForStatue(TileIndex tile, void *user_data)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2214 {
9592
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2215 TownID *town_id = (TownID *)user_data;
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2216 return DoBuildStatueOfCompany(tile, *town_id);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2217 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2218
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2219 /**
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2220 * Perform a 9x9 tiles circular search from the center of the town
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2221 * in order to find a free tile to place a statue
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2222 * @param t town to search in
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2223 */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2224 static void TownActionBuildStatue(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2225 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2226 TileIndex tile = t->xy;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2227
9592
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2228 if (CircularTileSearch(&tile, 9, SearchTileForStatue, &t->index)) {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2229 SetBit(t->statues, _current_company); // Once found and built, "inform" the Town
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2230 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2231 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2232
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2233 static void TownActionFundBuildings(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2234 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2235 /* Build next tick */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2236 t->grow_counter = 1;
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2237 /* If we were not already growing */
7931
44ff7a6d801f (svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7929
diff changeset
2238 SetBit(t->flags12, TOWN_IS_FUNDED);
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2239 /* And grow for 3 months */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2240 t->fund_buildings_months = 3;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2241 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2242
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2243 static void TownActionBuyRights(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2244 {
7657
65ad965cd225 (svn r11188) -Codechange: rewrite of the town action related code (remove some of the magic).
rubidium <rubidium@openttd.org>
parents: 7642
diff changeset
2245 /* Check if it's allowed to by the rights */
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
2246 if (!_settings_game.economy.exclusive_rights) return;
7657
65ad965cd225 (svn r11188) -Codechange: rewrite of the town action related code (remove some of the magic).
rubidium <rubidium@openttd.org>
parents: 7642
diff changeset
2247
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2248 t->exclusive_counter = 12;
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2249 t->exclusivity = _current_company;
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2250
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2251 ModifyStationRatingAround(t->xy, _current_company, 130, 17);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2252 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2253
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2254 static void TownActionBribe(Town *t)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2255 {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2256 if (Chance16(1, 14)) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2257 /* set as unwanted for 6 months */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2258 t->unwanted[_current_company] = 6;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2259
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2260 /* set all close by station ratings to 0 */
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2261 Station *st;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2262 FOR_ALL_STATIONS(st) {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2263 if (st->town == t && st->owner == _current_company) {
6350
8132258640be (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138 <peter1138@openttd.org>
parents: 6343
diff changeset
2264 for (CargoID i = 0; i < NUM_CARGO; i++) st->goods[i].rating = 0;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2265 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2266 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2267
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2268 /* only show errormessage to the executing player. All errors are handled command.c
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2269 * but this is special, because it can only 'fail' on a DC_EXEC */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2270 if (IsLocalCompany()) ShowErrorMessage(STR_BRIBE_FAILED_2, STR_BRIBE_FAILED, 0, 0);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2271
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2272 /* decrease by a lot!
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2273 * ChangeTownRating is only for stuff in demolishing. Bribe failure should
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2274 * be independent of any cheat settings
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2275 */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2276 if (t->ratings[_current_company] > RATING_BRIBE_DOWN_TO) {
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2277 t->ratings[_current_company] = RATING_BRIBE_DOWN_TO;
9444
c0d73c88570a (svn r13362) -Fix: make the town authority window a bit less glitchy
smatz <smatz@openttd.org>
parents: 9436
diff changeset
2278 InvalidateWindow(WC_TOWN_AUTHORITY, t->index);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2279 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2280 } else {
11106
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2281 ChangeTownRating(t, RATING_BRIBE_UP_STEP, RATING_BRIBE_MAXIMUM, DC_EXEC);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2282 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2283 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2284
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2285 typedef void TownActionProc(Town *t);
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2286 static TownActionProc *const _town_action_proc[] = {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2287 TownActionAdvertiseSmall,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2288 TownActionAdvertiseMedium,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2289 TownActionAdvertiseLarge,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2290 TownActionRoadRebuild,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2291 TownActionBuildStatue,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2292 TownActionFundBuildings,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2293 TownActionBuyRights,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2294 TownActionBribe
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2295 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2296
10814
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2297 enum TownActions {
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2298 TACT_NONE = 0x00,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2299
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2300 TACT_ADVERTISE_SMALL = 0x01,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2301 TACT_ADVERTISE_MEDIUM = 0x02,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2302 TACT_ADVERTISE_LARGE = 0x04,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2303 TACT_ROAD_REBUILD = 0x08,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2304 TACT_BUILD_STATUE = 0x10,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2305 TACT_FOUND_BUILDINGS = 0x20,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2306 TACT_BUY_RIGHTS = 0x40,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2307 TACT_BRIBE = 0x80,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2308
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2309 TACT_ADVERTISE = TACT_ADVERTISE_SMALL | TACT_ADVERTISE_MEDIUM | TACT_ADVERTISE_LARGE,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2310 TACT_CONSTRUCTION = TACT_ROAD_REBUILD | TACT_BUILD_STATUE | TACT_FOUND_BUILDINGS,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2311 TACT_FUNDS = TACT_BUY_RIGHTS | TACT_BRIBE,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2312 TACT_ALL = TACT_ADVERTISE | TACT_CONSTRUCTION | TACT_FUNDS,
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2313 };
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2314
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2315 DECLARE_ENUM_AS_BIT_SET(TownActions);
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2316
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2317 /** Get a list of available actions to do at a town.
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2318 * @param nump if not NULL add put the number of available actions in it
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2319 * @param cid the company that is querying the town
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2320 * @param t the town that is queried
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2321 * @return bitmasked value of enabled actions
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2322 */
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2323 uint GetMaskOfTownActions(int *nump, CompanyID cid, const Town *t)
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2324 {
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2325 int num = 0;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2326 TownActions buttons = TACT_NONE;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2327
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2328 /* Spectators and unwanted have no options */
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2329 if (cid != COMPANY_SPECTATOR && !(_settings_game.economy.bribe && t->unwanted[cid])) {
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2330
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2331 /* Things worth more than this are not shown */
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2332 Money avail = GetCompany(cid)->money + _price.station_value * 200;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2333 Money ref = _price.build_industry >> 8;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2334
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2335 /* Check the action bits for validity and
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2336 * if they are valid add them */
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2337 for (uint i = 0; i != lengthof(_town_action_costs); i++) {
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2338 const TownActions cur = (TownActions)(1 << i);
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2339
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2340 /* Is the company not able to bribe ? */
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2341 if (cur == TACT_BRIBE && (!_settings_game.economy.bribe || t->ratings[cid] >= RATING_BRIBE_MAXIMUM))
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2342 continue;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2343
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2344 /* Is the company not able to buy exclusive rights ? */
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2345 if (cur == TACT_BUY_RIGHTS && !_settings_game.economy.exclusive_rights)
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2346 continue;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2347
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2348 /* Is the company not able to build a statue ? */
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2349 if (cur == TACT_BUILD_STATUE && HasBit(t->statues, cid))
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2350 continue;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2351
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2352 if (avail >= _town_action_costs[i] * ref) {
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2353 buttons |= cur;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2354 num++;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2355 }
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2356 }
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2357 }
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2358
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2359 if (nump != NULL) *nump = num;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2360 return buttons;
7d649936eaa3 (svn r15149) -Codechange: GetMaskOfTownActions() is used by a Cmd handler, therefore it does not belong in _gui.
peter1138 <peter1138@openttd.org>
parents: 10696
diff changeset
2361 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2362
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2363 /** Do a town action.
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2364 * This performs an action such as advertising, building a statue, funding buildings,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2365 * but also bribing the town-council
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2366 * @param tile unused
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2367 * @param flags type of operation
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2368 * @param p1 town to do the action at
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2369 * @param p2 action to perform, @see _town_action_proc for the list of available actions
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2370 */
11090
df23c4e04638 (svn r15434) -Codechange: bit of type safety for the DC_xxx flags.
rubidium <rubidium@openttd.org>
parents: 11057
diff changeset
2371 CommandCost CmdDoTownAction(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2372 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2373 if (!IsValidTownID(p1) || p2 > lengthof(_town_action_proc)) return CMD_ERROR;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2374
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2375 Town *t = GetTown(p1);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2376
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2377 if (!HasBit(GetMaskOfTownActions(NULL, _current_company, t), p2)) return CMD_ERROR;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2378
8230
5b61305fcdd4 (svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium <rubidium@openttd.org>
parents: 8224
diff changeset
2379 CommandCost cost(EXPENSES_OTHER, (_price.build_industry >> 8) * _town_action_costs[p2]);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2380
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2381 if (flags & DC_EXEC) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2382 _town_action_proc[p2](t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2383 InvalidateWindow(WC_TOWN_AUTHORITY, p1);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2384 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2385
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2386 return cost;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2387 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2388
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2389 static void UpdateTownGrowRate(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2390 {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2391 /* Increase company ratings if they're low */
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2392 const Company *c;
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2393 FOR_ALL_COMPANIES(c) {
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2394 if (t->ratings[c->index] < RATING_GROWTH_MAXIMUM) {
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2395 t->ratings[c->index] = min((int)RATING_GROWTH_MAXIMUM, t->ratings[c->index] + RATING_GROWTH_UP_STEP);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2396 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2397 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2398
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2399 int n = 0;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2400
8816
d278baac2725 (svn r12562) -Cleanup: variable scope in terraform_cmd.cpp
smatz <smatz@openttd.org>
parents: 8815
diff changeset
2401 const Station *st;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2402 FOR_ALL_STATIONS(st) {
8943
d5c75b8f3503 (svn r12726) -Fix [FS#1877]: overflow causing strange building behaviour in towns.
rubidium <rubidium@openttd.org>
parents: 8942
diff changeset
2403 if (DistanceSquare(st->xy, t->xy) <= t->squared_town_zone_radius[0]) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2404 if (st->time_since_load <= 20 || st->time_since_unload <= 20) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2405 n++;
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2406 if (IsValidCompanyID(st->owner)) {
8815
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2407 int new_rating = t->ratings[st->owner] + RATING_STATION_UP_STEP;
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2408 t->ratings[st->owner] = min(new_rating, INT16_MAX); // do not let it overflow
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2409 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2410 } else {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2411 if (IsValidCompanyID(st->owner)) {
8815
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2412 int new_rating = t->ratings[st->owner] + RATING_STATION_DOWN_STEP;
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2413 t->ratings[st->owner] = max(new_rating, INT16_MIN);
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2414 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2415 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2416 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2417 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2418
8815
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2419 /* clamp all ratings to valid values */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2420 for (uint i = 0; i < MAX_COMPANIES; i++) {
8815
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2421 t->ratings[i] = Clamp(t->ratings[i], RATING_MINIMUM, RATING_MAXIMUM);
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2422 }
d89ac2583e59 (svn r12561) -Fix: do not affect town rating change by the order in which we examine stations
smatz <smatz@openttd.org>
parents: 8814
diff changeset
2423
9444
c0d73c88570a (svn r13362) -Fix: make the town authority window a bit less glitchy
smatz <smatz@openttd.org>
parents: 9436
diff changeset
2424 InvalidateWindow(WC_TOWN_AUTHORITY, t->index);
c0d73c88570a (svn r13362) -Fix: make the town authority window a bit less glitchy
smatz <smatz@openttd.org>
parents: 9436
diff changeset
2425
7929
4d13dbed828c (svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7928
diff changeset
2426 ClrBit(t->flags12, TOWN_IS_FUNDED);
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
2427 if (_settings_game.economy.town_growth_rate == 0 && t->fund_buildings_months == 0) return;
6454
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2428
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2429 /** Towns are processed every TOWN_GROWTH_FREQUENCY ticks, and this is the
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2430 * number of times towns are processed before a new building is built. */
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2431 static const uint16 _grow_count_values[2][6] = {
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
2432 { 120, 120, 120, 100, 80, 60 }, // Fund new buildings has been activated
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
2433 { 320, 420, 300, 220, 160, 100 } // Normal values
6454
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2434 };
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2435
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2436 uint16 m;
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2437
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2438 if (t->fund_buildings_months != 0) {
6454
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2439 m = _grow_count_values[0][min(n, 5)];
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2440 t->fund_buildings_months--;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2441 } else {
6454
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2442 m = _grow_count_values[1][min(n, 5)];
7967
e30c5ec2d272 (svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13 <skidd13@openttd.org>
parents: 7931
diff changeset
2443 if (n == 0 && !Chance16(1, 12)) return;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2444 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2445
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
2446 if (_settings_game.game_creation.landscape == LT_ARCTIC) {
6343
f75b72d9fc98 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros <maedhros@openttd.org>
parents: 6342
diff changeset
2447 if (TilePixelHeight(t->xy) >= GetSnowLine() && t->act_food == 0 && t->population > 90)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2448 return;
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
2449 } else if (_settings_game.game_creation.landscape == LT_TROPIC) {
8969
01cc3ee6ecb1 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium <rubidium@openttd.org>
parents: 8965
diff changeset
2450 if (GetTropicZone(t->xy) == TROPICZONE_DESERT && (t->act_food == 0 || t->act_water == 0) && t->population > 60)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2451 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2452 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2453
6455
d686356a6da6 (svn r9614) -Feature: Use the normal growth rate values when the growth rate is set to none and "Fund new buildings" is used.
maedhros <maedhros@openttd.org>
parents: 6454
diff changeset
2454 /* Use the normal growth rate values if new buildings have been funded in
d686356a6da6 (svn r9614) -Feature: Use the normal growth rate values when the growth rate is set to none and "Fund new buildings" is used.
maedhros <maedhros@openttd.org>
parents: 6454
diff changeset
2455 * this town and the growth rate is set to none. */
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
2456 uint growth_multiplier = _settings_game.economy.town_growth_rate != 0 ? _settings_game.economy.town_growth_rate - 1 : 1;
6455
d686356a6da6 (svn r9614) -Feature: Use the normal growth rate values when the growth rate is set to none and "Fund new buildings" is used.
maedhros <maedhros@openttd.org>
parents: 6454
diff changeset
2457
d686356a6da6 (svn r9614) -Feature: Use the normal growth rate values when the growth rate is set to none and "Fund new buildings" is used.
maedhros <maedhros@openttd.org>
parents: 6454
diff changeset
2458 m >>= growth_multiplier;
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
2459 if (t->larger_town) m /= 2;
6454
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2460
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2461 t->growth_rate = m / (t->num_houses / 50 + 1);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2462 if (m <= t->grow_counter)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2463 t->grow_counter = m;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2464
7931
44ff7a6d801f (svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7929
diff changeset
2465 SetBit(t->flags12, TOWN_IS_FUNDED);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2466 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2467
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2468 static void UpdateTownAmounts(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2469 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2470 /* Using +1 here to prevent overflow and division by zero */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2471 t->pct_pass_transported = t->new_act_pass * 256 / (t->new_max_pass + 1);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2472
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2473 t->max_pass = t->new_max_pass; t->new_max_pass = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2474 t->act_pass = t->new_act_pass; t->new_act_pass = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2475 t->act_food = t->new_act_food; t->new_act_food = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2476 t->act_water = t->new_act_water; t->new_act_water = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2477
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2478 /* Using +1 here to prevent overflow and division by zero */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2479 t->pct_mail_transported = t->new_act_mail * 256 / (t->new_max_mail + 1);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2480 t->max_mail = t->new_max_mail; t->new_max_mail = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2481 t->act_mail = t->new_act_mail; t->new_act_mail = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2482
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2483 InvalidateWindow(WC_TOWN_VIEW, t->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2484 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2485
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2486 static void UpdateTownUnwanted(Town *t)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2487 {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2488 const Company *c;
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2489
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2490 FOR_ALL_COMPANIES(c) {
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2491 if (t->unwanted[c->index] > 0) t->unwanted[c->index]--;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2492 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2493 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2494
10681
b232483d773c (svn r14992) -Codechange: Rename 'CheckIfAuthorityAllows' to 'CheckIfAuthorityAllowsNewStation' and unduplicate a tiny bit of code.
frosch <frosch@openttd.org>
parents: 10656
diff changeset
2495 /**
b232483d773c (svn r14992) -Codechange: Rename 'CheckIfAuthorityAllows' to 'CheckIfAuthorityAllowsNewStation' and unduplicate a tiny bit of code.
frosch <frosch@openttd.org>
parents: 10656
diff changeset
2496 * Checks whether the local authority allows construction of a new station (rail, road, airport, dock) on the given tile
b232483d773c (svn r14992) -Codechange: Rename 'CheckIfAuthorityAllows' to 'CheckIfAuthorityAllowsNewStation' and unduplicate a tiny bit of code.
frosch <frosch@openttd.org>
parents: 10656
diff changeset
2497 * @param tile The tile where the station shall be constructed.
11103
5980315ec1f3 (svn r15449) -Codechange: Rename DC_NO_TOWN_RATING to DC_NO_TEST_TOWN_RATING as that is what it does.
frosch <frosch@openttd.org>
parents: 11090
diff changeset
2498 * @param flags Command flags. DC_NO_TEST_TOWN_RATING is tested.
10681
b232483d773c (svn r14992) -Codechange: Rename 'CheckIfAuthorityAllows' to 'CheckIfAuthorityAllowsNewStation' and unduplicate a tiny bit of code.
frosch <frosch@openttd.org>
parents: 10656
diff changeset
2499 */
11090
df23c4e04638 (svn r15434) -Codechange: bit of type safety for the DC_xxx flags.
rubidium <rubidium@openttd.org>
parents: 11057
diff changeset
2500 bool CheckIfAuthorityAllowsNewStation(TileIndex tile, DoCommandFlag flags)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2501 {
11103
5980315ec1f3 (svn r15449) -Codechange: Rename DC_NO_TOWN_RATING to DC_NO_TEST_TOWN_RATING as that is what it does.
frosch <frosch@openttd.org>
parents: 11090
diff changeset
2502 if (!IsValidCompanyID(_current_company) || (flags & DC_NO_TEST_TOWN_RATING)) return true;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2503
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
2504 Town *t = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2505 if (t == NULL) return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2506
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2507 if (t->ratings[_current_company] > RATING_VERYPOOR) return true;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2508
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2509 _error_message = STR_2009_LOCAL_AUTHORITY_REFUSES;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2510 SetDParam(0, t->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2511
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2512 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2513 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2514
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2515
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2516 Town *CalcClosestTownFromTile(TileIndex tile, uint threshold)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2517 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2518 Town *t;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2519 uint best = threshold;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2520 Town *best_town = NULL;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2521
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2522 FOR_ALL_TOWNS(t) {
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2523 uint dist = DistanceManhattan(tile, t->xy);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2524 if (dist < best) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2525 best = dist;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2526 best_town = t;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2527 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2528 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2529
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2530 return best_town;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2531 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2532
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2533
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2534 Town *ClosestTownFromTile(TileIndex tile, uint threshold)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2535 {
10340
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2536 switch (GetTileType(tile)) {
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2537 case MP_ROAD:
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2538 if (!HasTownOwnedRoad(tile)) {
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2539 TownID tid = GetTownIndex(tile);
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2540 if (tid == (TownID)INVALID_TOWN) {
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2541 /* in the case we are generating "many random towns", this value may be INVALID_TOWN */
10345
3f904839d38f (svn r14596) -Fix (r14591): Missing 'return'.
frosch <frosch@openttd.org>
parents: 10340
diff changeset
2542 if (_generating_world) return CalcClosestTownFromTile(tile, threshold);
10340
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2543 assert(GetNumTowns() == 0);
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2544 return NULL;
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2545 }
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2546
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2547 Town *town = GetTown(tid);
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2548 assert(town->IsValid());
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2549 assert(town == CalcClosestTownFromTile(tile, UINT_MAX));
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2550
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2551 if (DistanceManhattan(tile, town->xy) >= threshold) town = NULL;
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2552
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2553 return town;
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2554 }
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2555 /* FALL THROUGH */
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2556
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2557 case MP_HOUSE:
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2558 return GetTownByTile(tile);
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2559
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2560 default:
e3f0f062c7c3 (svn r14591) -Fix [FS#2388](r14528): cached nearest town could be invalid after importing older savegame and during town generation
smatz <smatz@openttd.org>
parents: 10289
diff changeset
2561 return CalcClosestTownFromTile(tile, threshold);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2562 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2563 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2564
8232
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2565 static bool _town_rating_test = false;
10487
75d47d3e0644 (svn r14742) -Codechange: use SmallMap in two cases to reduce compilation time and binary size
smatz <smatz@openttd.org>
parents: 10480
diff changeset
2566 SmallMap<const Town *, int, 4> _town_test_ratings;
8232
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2567
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2568 void SetTownRatingTestMode(bool mode)
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2569 {
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2570 static int ref_count = 0;
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2571 if (mode) {
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2572 if (ref_count == 0) {
10487
75d47d3e0644 (svn r14742) -Codechange: use SmallMap in two cases to reduce compilation time and binary size
smatz <smatz@openttd.org>
parents: 10480
diff changeset
2573 _town_test_ratings.Clear();
8232
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2574 }
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2575 ref_count++;
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2576 } else {
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2577 assert(ref_count > 0);
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2578 ref_count--;
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2579 }
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2580 _town_rating_test = !(ref_count == 0);
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2581 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2582
9040
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2583 static int GetRating(const Town *t)
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2584 {
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2585 if (_town_rating_test) {
10487
75d47d3e0644 (svn r14742) -Codechange: use SmallMap in two cases to reduce compilation time and binary size
smatz <smatz@openttd.org>
parents: 10480
diff changeset
2586 SmallMap<const Town *, int>::iterator it = _town_test_ratings.Find(t);
75d47d3e0644 (svn r14742) -Codechange: use SmallMap in two cases to reduce compilation time and binary size
smatz <smatz@openttd.org>
parents: 10480
diff changeset
2587 if (it != _town_test_ratings.End()) {
75d47d3e0644 (svn r14742) -Codechange: use SmallMap in two cases to reduce compilation time and binary size
smatz <smatz@openttd.org>
parents: 10480
diff changeset
2588 return it->second;
9040
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2589 }
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2590 }
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2591 return t->ratings[_current_company];
9040
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2592 }
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2593
11106
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2594 /**
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2595 * Changes town rating of the current company
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2596 * @param t Town to affect
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2597 * @param add Value to add
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2598 * @param max Minimum (add < 0) resp. maximum (add > 0) rating that should be archievable with this change
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2599 * @param flags Command flags, especially DC_NO_MODIFY_TOWN_RATING is tested
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2600 */
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2601 void ChangeTownRating(Town *t, int add, int max, DoCommandFlag flags)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2602 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2603 /* if magic_bulldozer cheat is active, town doesn't penaltize for removing stuff */
11106
ada4c4d48050 (svn r15452) -Codechange: Add DC_NO_MODIFY_TOWN_RATING.
frosch <frosch@openttd.org>
parents: 11103
diff changeset
2604 if (t == NULL || (flags & DC_NO_MODIFY_TOWN_RATING) ||
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2605 !IsValidCompanyID(_current_company) ||
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2606 (_cheats.magic_bulldozer.value && add < 0)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2607 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2608 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2609
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2610 SetBit(t->have_ratings, _current_company);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2611
9040
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2612 int rating = GetRating(t);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2613 if (add < 0) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2614 if (rating > max) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2615 rating += add;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2616 if (rating < max) rating = max;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2617 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2618 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2619 if (rating < max) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2620 rating += add;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2621 if (rating > max) rating = max;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2622 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2623 }
8232
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2624 if (_town_rating_test) {
9040
37ec76c96c04 (svn r12859) -Fix: make the town rating tests use less memory and much quicker; from 13% to unnoticable in the profile in games with lots of towns and lots of very active AIs.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
2625 _town_test_ratings[t] = rating;
8232
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2626 } else {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2627 t->ratings[_current_company] = rating;
9444
c0d73c88570a (svn r13362) -Fix: make the town authority window a bit less glitchy
smatz <smatz@openttd.org>
parents: 9436
diff changeset
2628 InvalidateWindow(WC_TOWN_AUTHORITY, t->index);
8232
cca79a4335e0 (svn r11795) -Fix [FS#1616]: take town rating into account when testing if a command can be executed.
glx <glx@openttd.org>
parents: 8230
diff changeset
2629 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2630 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2631
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2632 /* penalty for removing town-owned stuff */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2633 static const int _default_rating_settings [3][3] = {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2634 /* ROAD_REMOVE, TUNNELBRIDGE_REMOVE, INDUSTRY_REMOVE */
7641
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
2635 { 0, 128, 384}, // Permissive
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
2636 { 48, 192, 480}, // Neutral
5e3cd60f89c4 (svn r11172) -Codechange: rewrite of town road building and addition of the possibility to clean up unconnected road bits during the local road reconstructions. Based on a patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7603
diff changeset
2637 { 96, 384, 768}, // Hostile
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2638 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2639
11090
df23c4e04638 (svn r15434) -Codechange: bit of type safety for the DC_xxx flags.
rubidium <rubidium@openttd.org>
parents: 11057
diff changeset
2640 bool CheckforTownRating(DoCommandFlag flags, Town *t, byte type)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2641 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2642 /* if magic_bulldozer cheat is active, town doesn't restrict your destructive actions */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2643 if (t == NULL || !IsValidCompanyID(_current_company) || _cheats.magic_bulldozer.value)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2644 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2645
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2646 /* check if you're allowed to remove the street/bridge/tunnel/industry
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2647 * owned by a town no removal if rating is lower than ... depends now on
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2648 * difficulty setting. Minimum town rating selected by difficulty level
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2649 */
9413
512ea64da840 (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents: 9387
diff changeset
2650 int modemod = _default_rating_settings[_settings_game.difficulty.town_council_tolerance][type];
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2651
11103
5980315ec1f3 (svn r15449) -Codechange: Rename DC_NO_TOWN_RATING to DC_NO_TEST_TOWN_RATING as that is what it does.
frosch <frosch@openttd.org>
parents: 11090
diff changeset
2652 if (GetRating(t) < 16 + modemod && !(flags & DC_NO_TEST_TOWN_RATING)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2653 SetDParam(0, t->index);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2654 _error_message = STR_2009_LOCAL_AUTHORITY_REFUSES;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2655 return false;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2656 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2657
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2658 return true;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2659 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2660
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
2661 void TownsMonthlyLoop()
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2662 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2663 Town *t;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2664
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2665 FOR_ALL_TOWNS(t) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2666 if (t->road_build_months != 0) t->road_build_months--;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2667
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2668 if (t->exclusive_counter != 0)
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10191
diff changeset
2669 if (--t->exclusive_counter == 0) t->exclusivity = INVALID_COMPANY;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2670
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2671 UpdateTownGrowRate(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2672 UpdateTownAmounts(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2673 UpdateTownUnwanted(t);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2674 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2675 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2676
10360
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2677 void TownsYearlyLoop()
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2678 {
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2679 /* Increment house ages */
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2680 for (TileIndex t = 0; t < MapSize(); t++) {
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2681 if (!IsTileType(t, MP_HOUSE)) continue;
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2682 IncrementHouseAge(t);
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2683 }
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2684 }
d352cf399eb7 (svn r14611) -Fix (r13437)[FS#2421]: Store the age of a house in the map array instead of the construction year.
frosch <frosch@openttd.org>
parents: 10345
diff changeset
2685
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
2686 void InitializeTowns()
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2687 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2688 /* Clean the town pool and create 1 block in it */
7401
1e97c047c9f6 (svn r10773) -Codechange: use pool.CleanPool instead of CleanPool(&pool) and similarly for AddBlock*.
rubidium <rubidium@openttd.org>
parents: 7390
diff changeset
2689 _Town_pool.CleanPool();
1e97c047c9f6 (svn r10773) -Codechange: use pool.CleanPool instead of CleanPool(&pool) and similarly for AddBlock*.
rubidium <rubidium@openttd.org>
parents: 7390
diff changeset
2690 _Town_pool.AddBlockToPool();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2691
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2692 memset(_subsidies, 0, sizeof(_subsidies));
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2693 for (Subsidy *s = _subsidies; s != endof(_subsidies); s++) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2694 s->cargo_type = CT_INVALID;
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2695 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2696
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2697 _cur_town_ctr = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2698 _cur_town_iter = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2699 _total_towns = 0;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2700 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2701
11090
df23c4e04638 (svn r15434) -Codechange: bit of type safety for the DC_xxx flags.
rubidium <rubidium@openttd.org>
parents: 11057
diff changeset
2702 static CommandCost TerraformTile_Town(TileIndex tile, DoCommandFlag flags, uint z_new, Slope tileh_new)
7494
3f6f5fcc079a (svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium <rubidium@openttd.org>
parents: 7483
diff changeset
2703 {
7582
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
2704 if (AutoslopeEnabled()) {
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
2705 HouseID house = GetHouseType(tile);
8942
a1797e9f9173 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
frosch <frosch@openttd.org>
parents: 8847
diff changeset
2706 GetHouseNorthPart(house); // modifies house to the ID of the north tile
8814
eb3b487b80a4 (svn r12560) -Cleanup: town_cmd.cpp and header files - variable scope and a bit of coding style
smatz <smatz@openttd.org>
parents: 8806
diff changeset
2707 const HouseSpec *hs = GetHouseSpecs(house);
7582
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
2708
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
2709 /* Here we differ from TTDP by checking TILE_NOT_SLOPED */
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
2710 if (((hs->building_flags & TILE_NOT_SLOPED) == 0) && !IsSteepSlope(tileh_new) &&
8230
5b61305fcdd4 (svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium <rubidium@openttd.org>
parents: 8224
diff changeset
2711 (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new))) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
7582
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
2712 }
e77bd387f449 (svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7577
diff changeset
2713
7494
3f6f5fcc079a (svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium <rubidium@openttd.org>
parents: 7483
diff changeset
2714 return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
3f6f5fcc079a (svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium <rubidium@openttd.org>
parents: 7483
diff changeset
2715 }
3f6f5fcc079a (svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium <rubidium@openttd.org>
parents: 7483
diff changeset
2716
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10259
diff changeset
2717 /** Tile callback functions for a town */
5587
c44c070c5032 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium <rubidium@openttd.org>
parents: 5584
diff changeset
2718 extern const TileTypeProcs _tile_type_town_procs = {
10259
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2719 DrawTile_Town, // draw_tile_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2720 GetSlopeZ_Town, // get_slope_z_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2721 ClearTile_Town, // clear_tile_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2722 GetAcceptedCargo_Town, // get_accepted_cargo_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2723 GetTileDesc_Town, // get_tile_desc_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2724 GetTileTrackStatus_Town, // get_tile_track_status_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2725 ClickTile_Town, // click_tile_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2726 AnimateTile_Town, // animate_tile_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2727 TileLoop_Town, // tile_loop_clear
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2728 ChangeTileOwner_Town, // change_tile_owner_clear
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2729 GetProducedCargo_Town, // get_produced_cargo_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2730 NULL, // vehicle_enter_tile_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2731 GetFoundation_Town, // get_foundation_proc
17db0806ef6a (svn r14490) -Codechange: fix comment style on a few locations (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
2732 TerraformTile_Town, // terraform_tile_proc
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2733 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2734
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2735 void ResetHouses()
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2736 {
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2737 memset(&_house_specs, 0, sizeof(_house_specs));
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2738 memcpy(&_house_specs, &_original_house_specs, sizeof(_original_house_specs));
7666
93b6cfc32b2e (svn r11197) -Fix: It is not useful to reset the override of an entity every time a new grf file is been submitted.
belugas <belugas@openttd.org>
parents: 7657
diff changeset
2739
93b6cfc32b2e (svn r11197) -Fix: It is not useful to reset the override of an entity every time a new grf file is been submitted.
belugas <belugas@openttd.org>
parents: 7657
diff changeset
2740 /* Reset any overrides that have been set. */
93b6cfc32b2e (svn r11197) -Fix: It is not useful to reset the override of an entity every time a new grf file is been submitted.
belugas <belugas@openttd.org>
parents: 7657
diff changeset
2741 _house_mngr.ResetOverride();
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2742 }