annotate src/town_cmd.cpp @ 9914:711da94fe0d7 draft

(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.
author rubidium <rubidium@openttd.org>
date Wed, 13 Aug 2008 06:22:04 +0000
parents cb9766ae1255
children 81642658c8be
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"
8119
b6ec923e9fa8 (svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium <rubidium@openttd.org>
parents: 8116
diff changeset
7 #include "tile_cmd.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
8 #include "debug.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
9 #include "road_map.h"
8102
afb4c7da91df (svn r11663) -Codechange: moving of the road related types and functions.
rubidium <rubidium@openttd.org>
parents: 8088
diff changeset
10 #include "road_internal.h" /* Cleaning up road bits */
6343
f75b72d9fc98 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros <maedhros@openttd.org>
parents: 6342
diff changeset
11 #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
12 #include "town_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
13 #include "tunnel_map.h"
8224
c45446125bf0 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents: 8214
diff changeset
14 #include "viewport_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
15 #include "town.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
16 #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
17 #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
18 #include "station_base.h"
8254
7d580c9c41fb (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium <rubidium@openttd.org>
parents: 8232
diff changeset
19 #include "player_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
20 #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
21 #include "saveload.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
22 #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
23 #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
24 #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
25 #include "variables.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
26 #include "bridge.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
27 #include "bridge_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
28 #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
29 #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
30 #include "newgrf_callbacks.h"
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
31 #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
32 #include "newgrf_commons.h"
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
33 #include "newgrf_townname.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
34 #include "autoslope.h"
7709
1859cffc251e (svn r11243) -Fix: update waypoint signs when renaming a town
glx <glx@openttd.org>
parents: 7684
diff changeset
35 #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
36 #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
37 #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
38 #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
39 #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
40 #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
41 #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
42 #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
43 #include "sprite.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
44 #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
45 #include "station_func.h"
8965
89de4625fe7d (svn r12757) -Codechange: move all cheat related stuff from all over the place to a single location.
rubidium <rubidium@openttd.org>
parents: 8962
diff changeset
46 #include "cheat_func.h"
9006
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
47 #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
48 #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
49 #include "date_func.h"
9581
9a3e1ee617ce (svn r13618) -Codechange: move tar-specific declarations to separate file
smatz <smatz@openttd.org>
parents: 9522
diff changeset
50 #include <map>
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
51
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
52 #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
53 #include "table/sprites.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
54 #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
55
8268
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
56 uint _total_towns;
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
57 HouseSpec _house_specs[HOUSE_MAX];
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
58
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
59 Town *_cleared_town;
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
60 int _cleared_town_rating;
ab53b3bf7100 (svn r11832) -Codechange: get rid of (quite) some VARDEFs.
rubidium <rubidium@openttd.org>
parents: 8264
diff changeset
61
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
62 /* 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
63 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
64
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
65 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
66 {
7410
1da8340185cb (svn r10787) -Fix r10755: _total_towns was not increased when placing town manually in scenario editor
glx <glx@openttd.org>
parents: 7401
diff changeset
67 if (tile != 0) _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
68 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
69 }
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
70
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
71 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
72 {
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
73 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
74
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
75 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
76
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
77 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
78
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
79 /* 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
80 * 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
81 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
82 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
83 _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
84
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
85 /* 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
86 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
87
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
88 /* 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
89 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
90 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
91 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
92 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
93 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
94
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
95 case MP_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
96 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
97 if (IsTileOwner(tile, OWNER_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
98 ClosestTownFromTile(tile, (uint)-1) == 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
99 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
100 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
101
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
102 default:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
103 break;
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
106
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
107 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
108
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
109 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
110
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
111 this->xy = 0;
f9b4e970b14d (svn r10755) -Codechange: make the town struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
112 }
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
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
114 /**
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 * Generate a random town road layout.
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
116 *
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 * The layout is based on the TileHash.
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
118 */
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 void Town::InitializeLayout()
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
120 {
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
121 this->layout = (TownLayout)(TileHash(TileX(this->xy), TileY(this->xy)) % NUM_TLS);
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
122
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 /* Set invalid layouts to valid ones */
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
124 switch (this->layout) {
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
125 default: break;
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 case TL_RANDOM: this->layout = TL_ORIGINAL; break;
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 case TL_NO_ROADS: this->layout = TL_BETTER_ROADS; break;
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
128 }
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
129 }
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
130
9463
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
131 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
132 {
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
133 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
134 }
371c474da67e (svn r13383) -Codechange: Put the cost of house removal in a class member
belugas <belugas@openttd.org>
parents: 9450
diff changeset
135
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
136 // Local
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
137 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
138
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
139 /* 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
140 enum TownGrowthResult {
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
141 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
142 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
143 // 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
144 };
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
145
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
146 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
147
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
148 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
149 {
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5587
diff changeset
150 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
151 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
152
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
153 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
154 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
155 TownDrawHouseLift
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
156 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
157
8791
2693434c1f4c (svn r12513) -Codechange: rename OriginalTileRandomiser something more descriptive
skidd13 <skidd13@openttd.org>
parents: 8787
diff changeset
158 /**
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
159 * 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
160 *
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 * @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
162 */
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 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
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 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
166 }
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
167
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
168 /**
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
169 * 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
170 * 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
171 * @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
172 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
173 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
174 {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
175 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
176
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
177 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
178 /* 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
179 * 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
180 * 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
181 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
182 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
183 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
184 } 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
185 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
186 }
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
187 }
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
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
189 /* 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
190 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
191
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
192 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
193
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
194 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
195
8806
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8796
diff changeset
196 /* 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
197 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
198
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
199 /* 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
200 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
201 if (image != 0) {
7333
7110c41ab174 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents: 7226
diff changeset
202 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
203 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
204 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
205 dcts->width,
a9acd5d86f94 (svn r11102) -Codechange: remove some pointless addition+substractions. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7566
diff changeset
206 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
207 dcts->dz,
7333
7110c41ab174 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents: 7226
diff changeset
208 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
209 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
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
7849
e6ee8bfd9045 (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents: 7847
diff changeset
212 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
213 }
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 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
216 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
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 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
219 }
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
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
222 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
223 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
224 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
225 }
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 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
228 {
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
229 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
230 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
231
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
232 /**
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 * 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
234 * 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
235 * 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
236 * @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
237 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
238 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
239 {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
240 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
241 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
242 return;
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
243 }
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
244
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
245 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
246
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
247 /* 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
248 * 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
249 * 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
250 * 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
251 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
252 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
253 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
254 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
255
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
256 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
257 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
258
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
259 /* 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
260 * 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
261 * 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
262 * 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
263 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
264 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
265 } 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
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 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
268 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
269
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
270 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
271 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
272 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
273 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
274
9006
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
275 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
276 HaltLift(tile);
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
277 DeleteAnimatedTile(tile);
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
278 }
5584
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 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
281 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
282
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
283 /**
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 * 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
285 * @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
286 * @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
287 * @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
288 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
289 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
290 {
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
291 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
292
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
293 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
294 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
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 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
297 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
298
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
299 /**
7545
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
300 * 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
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 * 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
303 *
a84d70ad7876 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7500
diff changeset
304 * @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
305 * @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
306 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
307 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
308 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
309 MarkAllViewportsDirty(
6491
696f0e1b046e (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium <rubidium@openttd.org>
parents: 6486
diff changeset
310 t->sign.left - 6,
696f0e1b046e (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium <rubidium@openttd.org>
parents: 6486
diff changeset
311 t->sign.top - 3,
696f0e1b046e (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium <rubidium@openttd.org>
parents: 6486
diff changeset
312 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
313 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
314 );
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
315 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
316
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
317 /**
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 * 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
319 * 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
320 * @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
321 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
322 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
323 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
324 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
325 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
326 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
327 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
328 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
329 _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
330 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
331 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
332
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
333 /** 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
334 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
335 {
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 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
337 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
338 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
339 }
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
340 }
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
341
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
342 /**
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 * 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
344 * @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
345 * @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
346 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
347 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
348 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
349 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
350 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
351 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
352
9387
a240dd49a2e8 (svn r13297) -Codechange: Use GUIList for the town directory window
peter1138 <peter1138@openttd.org>
parents: 9358
diff changeset
353 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
354 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
355
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
356 /**
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 * 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
358 * 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
359 * @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
360 */
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
361 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
362 {
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
363 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
364 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
365
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
366 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
367 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
368 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
369
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
370 /**
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 * 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
372 * @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
373 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
374 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
375 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
376 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
377
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
378 /* 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
379 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
380
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
381 /* 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
382 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
383 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
384
9018
9dcf32675eb5 (svn r12817) -Feature: the ability to play NewGRF sounds for industries and stations.
rubidium <rubidium@openttd.org>
parents: 9006
diff changeset
385 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
386
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
387 /* 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
388 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
389 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
390 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
391 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
392
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
393 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
394 /* 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
395 * 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
396 ChangePopulation(GetTownByTile(tile), hs->population);
9006
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
397 SetHouseConstructionYear(tile, _cur_year);
5584
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 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
400 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
401
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
402 /** Make the house advances in its construction stages until completion
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
403 * @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
404 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
405 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
406 {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
407 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
408 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
409 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
410 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
411 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
412 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
413
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
414 /**
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
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
491 _current_player = OWNER_TOWN;
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) &&
6605
c3aef1e6e3e1 (svn r9823) -Feature: Add support for house property 1F - minimum life span.
maedhros <maedhros@openttd.org>
parents: 6571
diff changeset
496 max(_cur_year - GetHouseConstructionYear(tile), 0) >= 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
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
506 _current_player = 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 /**
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
510 * Unused 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
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 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
513 static void ClickTile_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
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 */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
516 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
517
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6914
diff changeset
518 static CommandCost ClearTile_Town(TileIndex tile, byte 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
519 {
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
520 if ((flags & DC_AUTO) && !(flags & DC_AI_BUILDING)) 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
521 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
522
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
523 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
524
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 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
526 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
527
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
528 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
529 _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
530 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
531
9652
a05d108fe78f (svn r13719) -Codechange: rename IsValidPlayer to IsValidPlayerID in line with all other structs/classes that are in a pool.
rubidium <rubidium@openttd.org>
parents: 9594
diff changeset
532 if (IsValidPlayerID(_current_player)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
533 if (rating > t->ratings[_current_player] && !(flags & DC_NO_TOWN_RATING) && !_cheats.magic_bulldozer.value) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
534 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
535 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
536 }
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
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
539 ChangeTownRating(t, -rating, RATING_HOUSE_MINIMUM);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
540 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
541 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
542 }
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 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
545 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
546
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
547 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
548 {
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 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
550 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
551 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
552
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 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
554 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
555 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
556
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 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
558
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 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
560
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 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
562 *(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
563 }
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 } 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
565 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
566 *(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
567 }
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 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
569 *(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
570 }
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
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
574 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
575 {
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
576 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
577 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
578
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
579 /* 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
580 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
581 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
582 }
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 /* 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
585 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
586 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
587 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
588 /* 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
589 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
590 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
591 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
592 }
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 /* 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
596 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
597 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
598 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
599 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
600 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
601 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
602 /* 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
603 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
604 } 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
605 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
606 }
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 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
608 }
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 /* 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
612 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
613 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
614 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
615 }
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 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
618 {
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
619 const HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
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
620
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
621 td->str = hs->building_name;
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
622 if (!IsHouseCompleted(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
623 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
624 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
625 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
626
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
627 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
628 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
629 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
630 }
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
631
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
632 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
633 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
634
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8596
diff changeset
635 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
636 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
637 /* 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
638 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
639 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
640
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
641 static void ChangeTileOwner_Town(TileIndex tile, PlayerID old_player, PlayerID new_player)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
642 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
643 /* 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
644 }
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 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
647
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
648 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
649 {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7903
diff changeset
650 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
651 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
652 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
653 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
654 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
655 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
656 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
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
659 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
660 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
661
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
662 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
663 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
664
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
665 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
666 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
667 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
668
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
669 /* 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
670 * 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
671 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
672 _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
673 _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
674 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
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 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
677 _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
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 (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
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
682
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
683 /**
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
684 * 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
685 *
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
686 * @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
687 * @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
688 * @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
689 * @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
690 */
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
691 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
692 {
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
693 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
694 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
695
7225
2d9785c79784 (svn r10504) -Codechange: Shorten the test if no track bit has been found
belugas <belugas@openttd.org>
parents: 7215
diff changeset
696 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
697 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
698 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
699 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
700 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
701 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
702 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
703 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
704 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
705
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
706 /**
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
707 * Check if a neighboring tile has a 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
708 *
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
709 * @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
710 * @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
711 * @param dist_multi distance multiplyer
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
712 * @return true if one of the neighboring tiles at the
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
713 * given distance is a road tile else 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
714 */
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
715 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
716 {
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
717 /* 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
718 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
719 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
720 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
721 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
722 };
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
723
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
724 /* We add 1 to the distance because we want to get 1 for
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
725 * the min distance multiplyer and not 0.
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
726 * Therefore we start at 4. The 4 is used because
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
727 * there are 4 tiles per distance step to check. */
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
728 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
729 for (uint pos = 4; pos < dist_multi; pos++) {
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
730 TileIndexDiff cur = 0;
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
731 /* For each even value of pos add the right TileIndexDiff
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
732 * for each uneven value the left TileIndexDiff
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
733 * for each with 2nd bit set (2,3,6,7,..) add the reversed TileIndexDiff */
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
734 cur += tid_lt[(pos & 1) ? 0 : 1];
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
735 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
736
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
737 cur = (uint)(pos / 4) * cur; // Multiply for the fitting distance
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 if (GetTownRoadBits(TILE_ADD(tile, cur)) & DiagDirToRoadBits((pos & 2) ? dir : ReverseDiagDir(dir))) return true;
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 }
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 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
741 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
742
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
743 /**
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
744 * 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
745 *
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
746 * @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
747 * @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
748 * @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
749 * @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
750 */
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
751 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
752 {
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
753 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
754
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
755 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
756
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
757 for (;;) {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
758 /* 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
759 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
760 /* 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
761 * 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
762 * 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
763 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
764 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
765 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
766 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
767
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
768 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
769 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
770 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
771 /* Tile has no slope */
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
772 switch (t->GetActiveLayout()) {
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
773 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
774
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
775 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
776 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
777
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
778 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
779 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
780 }
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
782
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
783 /* 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
784 * 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
785 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
786 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
787 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
788 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
789 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
790 /* 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
791 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
792 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
793 }
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
794 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
795 /* 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
796 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
797 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
798 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
799 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
800 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
801 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
802 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
803 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
804
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
805 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
806 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
807 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
808
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
809 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
810 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
811 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
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 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
816 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
817 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
818
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
819 /* 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
820 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
821 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
822 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
823
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
824 /* 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
825 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
826 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
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
829
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
830 /**
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
831 * 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
832 *
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
833 * @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
834 * @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
835 * @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
836 * @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
837 * 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
838 */
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
839 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
840 {
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 /* 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
842 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
843 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
844
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
845 switch (t->GetActiveLayout()) {
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
846 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
847
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 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
849 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
850 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
851 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
852
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
853 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
854 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
855 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
856 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
857 }
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
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
859 /* 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
860 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
861
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
862 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
863
f0585ed32dd3 (svn r11315) -Fix [FS#1353]: towns are not growing beyond height differences. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7762
diff changeset
864 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
865 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
866 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
867 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
868 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
869 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
870 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
871 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
872 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
873 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
874 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
875 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
876 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
877 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
878 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
879 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
880 }
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
881
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
882 /* 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
883 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
884 /* 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
885 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
886 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
887
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
888 /**
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
889 * 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
890 * 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
891 * 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
892 * 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
893 *
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
894 * @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
895 * @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
896 * @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
897 */
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
898 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
899 {
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
900 /* 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
901 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
902
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 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
904
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 /* 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
906 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
907
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
908 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
909
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
910 /* 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
911 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
912 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
913 _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
914 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
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 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
917 }
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 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
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
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 /**
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 * 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
924 *
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 * @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
926 * @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
927 * @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
928 * @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
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 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
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 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
933 _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
934 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
935 }
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
936 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
937 }
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
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 /**
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 * 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
941 * 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
942 * 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
943 *
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
944 * @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
945 * @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
946 * @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
947 * @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
948 */
8451
af88cc5ebb4b (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
skidd13 <skidd13@openttd.org>
parents: 8359
diff changeset
949 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
950 {
7845
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
951 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
952
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
953 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
954 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
955
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
956 /* 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
957 * 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
958 * 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
959 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
960
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
961 /* 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
962 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
963
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
964 /* 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
965 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
966 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
967
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 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
969 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
970 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
971 /* 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
972 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
973 }
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
974 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
975 } 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
976
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 /* 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
978 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
979
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 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
981 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
982
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 /* Can we actually build the 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
984 if (CmdSucceeded(DoCommand(tile, bridge_tile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_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
985 DoCommand(tile, bridge_tile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), 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
986 _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
987 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
988 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
989 }
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
990 /* 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
991 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
992 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
993
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
994 /**
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
995 * 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
996 * 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
997 * 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
998 * @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
999 * @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
1000 * @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
1001 * @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
1002 * @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
1003 * @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
1004 * @li Forbid roads, only build 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
1005 * @li TL_NO_ROADS
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
1006 *
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
1007 * @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
1008 * @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
1009 * @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
1010 * @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
1011 */
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
1012 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
1013 {
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
1014 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
1015 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
1016
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1017 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
1018
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
1019 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
1020 /* 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
1021 * 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
1022 _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
1023
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1024 /* Remove hills etc */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1025 LevelTownLand(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1026
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1027 /* Is a road allowed here? */
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
1028 switch (t1->GetActiveLayout()) {
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
1029 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
1030
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1031 case TL_NO_ROADS: /* Disallow 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
1032 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
1033
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1034 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
1035 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
1036 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
1037 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
1038 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
1039
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1040 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
1041 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
1042 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
1043
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
1044 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
1045
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
1046 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
1047 /* 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
1048 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
1049 }
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
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, 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
1052 /* 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
1053 * 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
1054 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
1055
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1056 /* 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
1057 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
1058 !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
1059 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
1060 }
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
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1062 /* 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
1063 * 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
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
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
1066 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
1067 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
1068 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1069
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
1070 } 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
1071 /* 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
1072 * 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
1073 * 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
1074 _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
1075
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
1076 switch (t1->GetActiveLayout()) {
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
1077 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
1078
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1079 case TL_NO_ROADS: /* Disallow 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
1080 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
1081
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1082 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
1083 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
1084 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
1085 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
1086
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1087 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
1088 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
1089 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
1090 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
1091 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1092 } else {
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
1093 bool allow_house = false; // 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
1094
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1095 /* 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
1096 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
1097 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
1098 *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
1099 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1100 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1101 }
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 /* 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
1104 * 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
1105 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
1106 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
1107
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1108 /* 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
1109 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
1110
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
1111 /* 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
1112 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
1113
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
1114 switch (t1->GetActiveLayout()) {
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
1115 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
1116
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1117 case TL_NO_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
1118 allow_house = 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
1119 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
1120
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1121 case TL_3X3_GRID: /* Use 2x2 grid afterwards! */
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
1122 GrowTownWithExtraHouse(t1, TileAddByDiagDir(house_tile, target_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
1123 /* FALL THROUGH */
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
1124
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1125 case TL_2X2_GRID:
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
1126 rcmd = GetTownRoadGridElement(t1, house_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
1127 allow_house = (rcmd == ROAD_NONE);
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1128 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
1129
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1130 case TL_BETTER_ROADS: /* Use original afterwards! */
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
1131 GrowTownWithExtraHouse(t1, TileAddByDiagDir(house_tile, target_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
1132 /* FALL THROUGH */
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
1133
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1134 case TL_ORIGINAL:
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1135 /* Allow a house at the edge. 60% chance or
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1136 * always ok if no road allowed. */
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
1137 rcmd = DiagDirToRoadBits(target_dir);
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
1138 allow_house = (!IsRoadAllowedHere(t1, house_tile, target_dir) || Chance16(6, 10));
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
1139 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
1140 }
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1141
6777295c2328 (svn r9779) -Feature: Add the possiblity to choose different road patterns for towns to use.
belugas <belugas@openttd.org>
parents: 6560
diff changeset
1142 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
1143 /* 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
1144 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
1145 /* 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
1146 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
1147
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1148 /* And build a house.
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1149 * 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
1150 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
1151 _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
1152 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1153 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1154 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1155 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1156
7684
ea99aeb26c95 (svn r11215) -Codechange: replace magic constants with less magic symbols. Patch by skidd13.
rubidium <rubidium@openttd.org>
parents: 7666
diff changeset
1157 _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
1158 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1159
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1160 /* 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
1161 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
1162
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
1163 /* 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
1164 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
1165 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
1166
7845
469ee079ee16 (svn r11395) -Fix: allow town-bridges to be build on slopes (Rafal Rzepecki)
truelight <truelight@openttd.org>
parents: 7766
diff changeset
1167 /* 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
1168 * 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
1169 * 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
1170 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
1171
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 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
1173 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1174
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1175 /** 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
1176 * @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
1177 * @param tile to inquiry
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1178 * @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
1179 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1180 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
1181 {
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
1182 /* 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
1183 * @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
1184 */
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
1185 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
1186
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1187 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
1188
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
1189 /* 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
1190 * 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
1191 * them a little handicap. */
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
1192 switch (t->GetActiveLayout()) {
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
1193 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
1194 _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
1195 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
1196
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 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
1198 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
1199 _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
1200 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
1201
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 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
1203 _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
1204 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
1205 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1206
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1207 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
1208 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
1209
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1210 /* 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
1211 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
1212
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1213 /* 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
1214 * 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
1215 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
1216 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
1217 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
1218
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1219 /* 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
1220 * 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
1221 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
1222 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
1223
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9334
diff changeset
1224 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
1225 /* 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
1226 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
1227 _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
1228 } 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
1229 /* 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
1230 * 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
1231 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
1232 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
1233 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1234 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1235
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1236 /* 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
1237 } 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
1238
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1239 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
1240 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1241
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
1242 /**
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
1243 * 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
1244 * 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
1245 * 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
1246 *
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
1247 * @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
1248 */
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
1249 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
1250 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1251 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
1252 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
1253 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
1254 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
1255 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
1256 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1257
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1258 /** 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
1259 * @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
1260 * @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
1261 */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1262 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
1263 {
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
1264 /* Let the town be a ghost 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
1265 * The player wanted it in such a way. Thus there he has it. ;)
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
1266 * Never reached in editor mode. */
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
1267 if (_settings_game.economy.town_layout == TL_NO_ROADS && _generating_world) {
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
1268 return 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
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
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1271 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
1272 {-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
1273 { 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
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, 0},
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1277 { 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
1278 { 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
1279 { 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
1280 {-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
1281 {-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
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 { 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
1285 };
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
1286
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1287 /* Current player is a 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
1288 PlayerID old_player = _current_player;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1289 _current_player = OWNER_TOWN;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1290
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
1291 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
1292
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1293 /* 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
1294 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
1295 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
1296 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
1297 int r = GrowTownAtRoad(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
1298 _current_player = old_player;
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
1299 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
1300 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1301 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
1302 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1303
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1304 /* 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
1305 * 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
1306 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
1307 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
1308 /* 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
1309 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
1310 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
1311 DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1312 _current_player = old_player;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1313 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
1314 }
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 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
1317 }
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 _current_player = old_player;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1320 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
1321 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1322
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
1323 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
1324 {
8944
24302d526047 (svn r12731) -Fix (r12726): copying a 16bit array into 32bit wouldn't work
smatz <smatz@openttd.org>
parents: 8943
diff changeset
1325 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
1326 { 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
1327 { 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
1328 { 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
1329 { 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
1330 { 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
1331 { 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
1332 { 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
1333 { 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
1334 { 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
1335 { 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
1336 { 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
1337 { 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
1338 { 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
1339 { 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
1340 { 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
1341 { 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
1342 { 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
1343 { 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
1344 {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
1345 {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
1346 {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
1347 {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
1348 {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
1349 };
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 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
1352 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
1353 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1354 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
1355 /* 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
1356 * 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
1357 * 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
1358 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
1359 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
1360 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
1361 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
1362 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
1363 }
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 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
1367 {
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1368 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
1369 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
1370 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
1371 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
1372 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
1373 /* 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
1374 * 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
1375 * 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
1376 * 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
1377 * 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
1378 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
1379 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
1380 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
1381 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
1382
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
1383 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
1384
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1385 for (;;) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1386 restart:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1387 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
1388
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1389 SetDParam(0, r);
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1390 if (grf && grfid != 0) {
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1391 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
1392 } else {
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1393 GetString(buf1, townnametype, lastof(buf1));
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1394 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1395
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1396 /* 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
1397 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
1398
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1399 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
1400 /* 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
1401 * 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
1402 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
1403 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
1404 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
1405 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
1406 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
1407 }
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 *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
1410 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
1411 }
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 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
1415 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1416 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
1417 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
1418 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1419
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1420 /**
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1421 * 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
1422 *
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1423 * @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
1424 * @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
1425 * @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
1426 * @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
1427 * @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
1428 */
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1429 static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSizeMode size_mode, uint 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
1430 {
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1431 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
1432
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1433 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
1434 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
1435 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
1436 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
1437 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
1438 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
1439 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
1440 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
1441 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
1442 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
1443 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
1444 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
1445 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
1446 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
1447 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
1448 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
1449
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1450 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
1451 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
1452 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
1453 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
1454 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
1455 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
1456 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
1457
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
1458 for (uint i = 0; i != MAX_PLAYERS; 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
1459
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1460 t->have_ratings = 0;
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
1461 t->exclusivity = INVALID_PLAYER;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1462 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
1463 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
1464
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
1465 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
1466 /* Original town name */
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1467 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
1468 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
1469 } else {
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
1470 /* 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
1471 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
1472 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
1473 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1474 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
1475
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1476 UpdateTownVirtCoord(t);
9387
a240dd49a2e8 (svn r13297) -Codechange: Use GUIList for the town directory window
peter1138 <peter1138@openttd.org>
parents: 9358
diff changeset
1477 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
1478
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
1479 t->InitializeLayout();
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
1480
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1481 /* Random town size. */
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
1482 int x = (Random() & 0xF) + 8;
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1483
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1484 switch (size_mode) {
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1485 default: NOT_REACHED();
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1487 case TSM_RANDOM:
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1488 t->larger_town = false;
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1489 break;
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1490
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1491 case TSM_FIXED:
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1492 x = size * 16 + 3;
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1493 t->larger_town = false;
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1494 break;
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1495
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1496 case TSM_CITY:
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
1497 x *= _settings_game.economy.initial_city_size;
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1498 t->larger_town = true;
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1499 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
1500 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1501
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
1502 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
1503
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1504 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
1505 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
1506
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
1507 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
1508 do {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1509 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
1510 } 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
1511
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1512 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
1513 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
1514 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
1515 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1516
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1517 /** 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
1518 * 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
1519 * 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
1520 * @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
1521 * @param flags type of operation
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1522 * @param p1 size of the town (0 = small, 1 = medium, 2 = large)
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1523 * @param p2 size mode (@see TownSizeMode)
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 */
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6914
diff changeset
1525 CommandCost CmdBuildTown(TileIndex tile, uint32 flags, uint32 p1, uint32 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
1526 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1527 /* 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
1528 if (_game_mode != GM_EDITOR) return CMD_ERROR;
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1529 if (p2 > TSM_CITY) 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
1530
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1531 /* 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
1532 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
1533 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
1534
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1535 /* 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
1536 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
1537 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
1538 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
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 /* 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
1541 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
1542 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
1543
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
1544 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
1545
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1546 /* 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
1547 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
1548 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
1549
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1550 /* 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
1551 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
1552
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1553 /* 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
1554 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
1555 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
1556 _generating_world = true;
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1557 DoCreateTown(t, tile, townnameparts, (TownSizeMode)p2, 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
1558 _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
1559 }
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
1560 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
1561 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1562
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1563 Town *CreateRandomTown(uint attempts, TownSizeMode mode, uint 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
1564 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1565 do {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1566 /* 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
1567 TileIndex tile = RandomTile();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1568 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
1569
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1570 /* 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
1571 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
1572
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1573 /* 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
1574 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
1575
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
1576 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
1577
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1578 /* 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
1579 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
1580
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1581 /* 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
1582 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
1583 if (t == NULL) break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1584
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1585 DoCreateTown(t, tile, townnameparts, mode, 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
1586 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
1587 } 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
1588
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1589 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
1590 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1591
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
1592 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
1593
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
1594 bool GenerateTowns()
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 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1596 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
1597 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
1598 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
1599
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1600 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
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 do {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1603 IncreaseGeneratingWorldProgress(GWP_TOWN);
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1604 /* try 20 times to create a random-sized town for the first loop. */
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1605 TownSizeMode mode = num_cities > 0 ? TSM_CITY : TSM_RANDOM;
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
1606 if (CreateRandomTown(20, mode, _settings_game.economy.initial_city_size) != 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
1607 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
1608 } 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
1609
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1610 /* give it a last try, but now more aggressive */
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
1611 if (num == 0 && CreateRandomTown(10000, TSM_RANDOM, 0) == 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
1612 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
1613 /* 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
1614 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
1615
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1616 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
1617 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1618 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1619
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1620 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
1621 }
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
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
1624 /** 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
1625 * @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
1626 * @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
1627 * @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
1628 */
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
1629 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
1630 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1631 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
1632
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
1633 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
1634
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
1635 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
1636 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
1637 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
1638 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1639
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1640 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
1641 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1642
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
1643 /**
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
1644 * 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
1645 * @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
1646 * @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
1647 * @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
1648 * @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
1649 * @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
1650 * @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
1651 * @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
1652 */
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1653 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
1654 {
9436
b3969ef775ba (svn r13351) -Codechange: disable warnings about unused variable for builds without asserts
smatz <smatz@openttd.org>
parents: 9413
diff changeset
1655 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
1656
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
1657 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
1658
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1659 IncreaseBuildingCount(t, type);
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1660 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
1661 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
1662
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8970
diff changeset
1663 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
1664 }
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
1665
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
1666
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
1667 /**
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
1668 * 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
1669 * @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
1670 * @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
1671 * @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
1672 * @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
1673 * @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
1674 * @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
1675 * @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
1676 */
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1677 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
1678 {
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
1679 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
1680
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1681 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
1682 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
1683 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
1684 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
1685 }
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
1686
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
1687
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
1688 /**
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
1689 * 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
1690 * 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
1691 * @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
1692 * @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
1693 * @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
1694 * @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
1695 */
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
1696 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
1697 {
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 /* 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
1699 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
1700 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
1701
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 /* 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
1703 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
1704
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
1705 /* 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
1706 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
1707
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
1708 /* 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
1709 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
1710 }
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
1711
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
1712
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 /**
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 * 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
1715 * @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
1716 * @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
1717 * @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
1718 * @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
1719 * @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
1720 * @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
1721 */
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
1722 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
1723 {
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
1724 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
1725
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 /* 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
1727 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
1728
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
1729 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
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
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
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 * 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
1735 * @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
1736 * @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
1737 * @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
1738 * @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
1739 * @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
1740 * @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
1741 */
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
1742 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
1743 {
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 /* 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
1745 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
1746
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
1747 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
1748 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
1749 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
1750 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1751
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1752 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
1753 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1754
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
1755
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
1756 /**
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
1757 * 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
1758 * @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
1759 * @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
1760 * @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
1761 * @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
1762 */
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 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
1764 {
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 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
1766
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
1767 switch (t->GetActiveLayout()) {
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
1768 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
1769 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
1770 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
1771
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
1772 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
1773 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
1774 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
1775
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 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
1777 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
1778 }
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
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 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
1781 }
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
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 * 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
1786 * @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
1787 * @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
1788 * @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
1789 * @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
1790 */
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 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
1792 {
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 /* 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
1794 * 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
1795 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
1796 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
1797
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
1798 switch (t->GetActiveLayout()) {
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
1799 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
1800 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
1801 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
1802
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
1803 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
1804 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
1805 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
1806
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 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
1808 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
1809 }
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
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 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
1812 }
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
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 * 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
1817 * 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
1818 * @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
1819 * @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
1820 * @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
1821 * @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
1822 * @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
1823 **/
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 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
1825 {
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 /* '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
1827
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 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
1829 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
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 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
1832 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
1833 *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
1834 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
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
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
1837 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
1838 }
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
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 * 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
1843 * 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
1844 * @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
1845 * @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
1846 * @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
1847 * @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
1848 **/
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 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
1850 {
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 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
1852
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 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
1854 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
1855 *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
1856 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
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 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
1859 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
1860 }
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
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 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
1863 }
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
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 /**
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
1867 * 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
1868 * @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
1869 * @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
1870 * @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
1871 */
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 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
1873 {
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
1874 /* 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
1875 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
1876
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
1877 /* 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
1878 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
1879
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1880 uint z;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1881 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
1882
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
1883 /* 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
1884 * 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
1885 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
1886
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1887 /* 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
1888 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
1889 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
1890
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1891 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
1892
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
1893 /* 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
1894 * 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
1895 * 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
1896 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
1897 uint num = 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1898 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
1899 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
1900
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1901 /* 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
1902 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
1903 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
1904 /* 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
1905 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
1906 /* 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
1907 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
1908 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
1909 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
1910 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
1911 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1912 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1913
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1914 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
1915
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1916 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
1917 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
1918 uint i;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1919 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
1920 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
1921 r -= probs[i];
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1922 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1923
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1924 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
1925 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
1926
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1927 /* 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
1928 num--;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1929 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
1930 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
1931
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
1932 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
1933
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1934 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
1935 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
1936 house = hs->override;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1937 hs = GetHouseSpecs(house);
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
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1940 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
1941 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1942
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
1943 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
1944
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1945 /* 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
1946 uint oneof = 0;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1947
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1948 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
1949 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
1950 } 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
1951 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
1952 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1953
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
1954 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
1955
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1956 /* 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
1957 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
1958 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
1959
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1960 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
1961 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
1962 } 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
1963 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
1964 } 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
1965 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
1966 } 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
1967 /* 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
1968 }
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1969
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
1970 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
1971 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
1972 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
1973 }
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
1974
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1975 /* build the house */
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1976 t->num_houses++;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1977
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1978 /* 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
1979 t->flags12 |= oneof;
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1980
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1981 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
1982 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
1983
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1984 if (_generating_world) {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1985 uint32 r = Random();
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1986
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1987 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
1988 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
1989
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1990 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
1991 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
1992 } else {
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1993 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
1994 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1995 }
8488
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1996
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
1997 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
1998
0b3e6ee2c852 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse()
smatz <smatz@openttd.org>
parents: 8487
diff changeset
1999 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
2000 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2001
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
2002 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
2003 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2004
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2005
9522
4c8878e06411 (svn r13518) -Fix [FS#2083]: Properly count number of non-north housetiles.
frosch <frosch@openttd.org>
parents: 9505
diff changeset
2006 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
2007 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2008 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
2009 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
2010 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
2011 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
2012 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2013
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
2014 /**
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
2015 * 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
2016 * 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
2017 *
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
2018 * @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
2019 * @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
2020 */
9594
3686a9dc67d5 (svn r13634) -Codechange: Let house var 0x65 ignore the house, the variable is queried for.
frosch <frosch@openttd.org>
parents: 9592
diff changeset
2021 TileIndex 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
2022 {
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
2023 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
2024 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
2025 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 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
2027 } 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
2028 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 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
2030 } 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
2031 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
2032 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
2033 } 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
2034 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
2035 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
2036 }
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 }
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 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
2039 }
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
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2041 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
2042 {
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
2043 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
2044
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2045 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
2046
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2047 /* 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
2048 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
2049
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
2050 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
2051
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2052 /* 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
2053 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
2054 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
2055 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2056
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2057 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
2058
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2059 /* 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
2060 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
2061 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
2062 } 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
2063 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
2064 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2065
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2066 /* 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
2067 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
2068 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
2069 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
2070 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
2071 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
2072 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2073
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
2074 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
2075 {
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
2076 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
2077 char buf[512];
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
2078
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
2079 FOR_ALL_TOWNS(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
2080 SetDParam(0, t->index);
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
2081 GetString(buf, STR_TOWN, lastof(buf));
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
2082 if (strcmp(buf, name) == 0) return false;
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
2083 }
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
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 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
2086 }
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
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2088 /** 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
2089 * @param tile unused
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2090 * @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
2091 * @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
2092 * @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
2093 */
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6914
diff changeset
2094 CommandCost CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 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
2095 {
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
2096 if (!IsValidTownID(p1)) return CMD_ERROR;
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
2097 if (StrEmpty(_cmd_text) || strlen(_cmd_text) >= MAX_LENGTH_TOWN_NAME_BYTES) 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
2098
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
2099 if (!IsUniqueTownName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
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
2100
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2101 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
2102 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
2103
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
2104 free(t->name);
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
2105 t->name = strdup(_cmd_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
2106
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2107 UpdateTownVirtCoord(t);
9387
a240dd49a2e8 (svn r13297) -Codechange: Use GUIList for the town directory window
peter1138 <peter1138@openttd.org>
parents: 9358
diff changeset
2108 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
2109 UpdateAllStationVirtCoord();
7709
1859cffc251e (svn r11243) -Fix: update waypoint signs when renaming a town
glx <glx@openttd.org>
parents: 7684
diff changeset
2110 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
2111 MarkWholeScreenDirty();
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2112 }
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
2113 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
2114 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2115
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2116 /** 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
2117 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
2118 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2119 _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
2120
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2121 /* 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
2122 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
2123 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
2124 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
2125
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
2126 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
2127 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
2128
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2129 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
2130 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
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 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
2133 _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
2134 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2135
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
2136 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
2137 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
2138 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2139
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
2140 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
2141 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2142 ModifyStationRatingAround(t->xy, _current_player, 0x40, 10);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2143 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2144
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
2145 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
2146 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2147 ModifyStationRatingAround(t->xy, _current_player, 0x70, 15);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2148 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2149
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
2150 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
2151 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2152 ModifyStationRatingAround(t->xy, _current_player, 0xA0, 20);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2153 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2154
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
2155 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
2156 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2157 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
2158
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
2159 char *company_name = MallocT<char>(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
2160 SetDParam(0, _current_player);
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
2161 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
2162
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2163 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
2164 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
2165
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2166 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
2167 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
2168 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2169
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
2170 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
2171 {
7549
b202efd99ae5 (svn r11069) -Codechange: allow slopes under statues. Patch by kaan.
rubidium <rubidium@openttd.org>
parents: 7545
diff changeset
2172 /* 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
2173 if (IsSteepSlope(GetTileSlope(tile, NULL))) 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
2174
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2175 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
2176 !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
2177 !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
2178 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
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
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
2181 PlayerID old = _current_player;
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 _current_player = 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
2183 CommandCost r = 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
2184 _current_player = old;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2185
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2186 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
2187
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
2188 MakeStatue(tile, _current_player, 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
2189 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
2190
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 true;
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
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2194 /**
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2195 * Search callback function for TownActionBuildStatue
6484
17fdaec13730 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas <belugas@openttd.org>
parents: 6455
diff changeset
2196 * @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
2197 * @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
2198 * @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
2199 */
9592
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2200 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
2201 {
9592
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2202 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
2203 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
2204 }
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 * 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
2208 * 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
2209 * @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
2210 */
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
2211 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
2212 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2213 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
2214
9592
b8910fe673fc (svn r13632) -Codechange: Use 'void *' for user-data of CircularTileSearch().
frosch <frosch@openttd.org>
parents: 9581
diff changeset
2215 if (CircularTileSearch(&tile, 9, SearchTileForStatue, &t->index)) {
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
2216 SetBit(t->statues, _current_player); // 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
2217 }
5584
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
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
2220 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
2221 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2222 /* 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
2223 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
2224 /* 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
2225 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
2226 /* 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
2227 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
2228 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2229
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 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
2231 {
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
2232 /* 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
2233 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
2234
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2235 t->exclusive_counter = 12;
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->exclusivity = _current_player;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2237
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2238 ModifyStationRatingAround(t->xy, _current_player, 130, 17);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2239 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2240
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
2241 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
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 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
2244 /* set as unwanted for 6 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
2245 t->unwanted[_current_player] = 6;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2246
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2247 /* 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
2248 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
2249 FOR_ALL_STATIONS(st) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2250 if (st->town == t && st->owner == _current_player) {
6350
8132258640be (svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138 <peter1138@openttd.org>
parents: 6343
diff changeset
2251 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
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2254
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2255 /* 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
2256 * but this is special, because it can only 'fail' on a 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
2257 if (IsLocalPlayer()) ShowErrorMessage(STR_BRIBE_FAILED_2, STR_BRIBE_FAILED, 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
2258
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2259 /* 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
2260 * 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
2261 * 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
2262 */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2263 if (t->ratings[_current_player] > RATING_BRIBE_DOWN_TO) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2264 t->ratings[_current_player] = 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
2265 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
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 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2268 ChangeTownRating(t, RATING_BRIBE_UP_STEP, RATING_BRIBE_MAXIMUM);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2269 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2270 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2271
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
2272 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
2273 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
2274 TownActionAdvertiseSmall,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2275 TownActionAdvertiseMedium,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2276 TownActionAdvertiseLarge,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2277 TownActionRoadRebuild,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2278 TownActionBuildStatue,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2279 TownActionFundBuildings,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2280 TownActionBuyRights,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2281 TownActionBribe
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 extern uint GetMaskOfTownActions(int *nump, PlayerID pid, const 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
2285
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2286 /** 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
2287 * 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
2288 * 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
2289 * @param tile unused
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2290 * @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
2291 * @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
2292 * @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
2293 */
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6914
diff changeset
2294 CommandCost CmdDoTownAction(TileIndex tile, uint32 flags, uint32 p1, uint32 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
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 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
2297
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
2298 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
2299
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7903
diff changeset
2300 if (!HasBit(GetMaskOfTownActions(NULL, _current_player, 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
2301
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
2302 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
2303
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2304 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
2305 _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
2306 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
2307 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2308
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2309 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
2310 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2311
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2312 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
2313 {
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
2314 /* Increase player ratings if they're low */
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
2315 const Player *p;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2316 FOR_ALL_PLAYERS(p) {
9659
14e241fadc66 (svn r13731) -Codechange: make a pool of the array of players.
rubidium <rubidium@openttd.org>
parents: 9658
diff changeset
2317 if (t->ratings[p->index] < RATING_GROWTH_MAXIMUM) {
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
2318 t->ratings[p->index] = min((int)RATING_GROWTH_MAXIMUM, t->ratings[p->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
2319 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2320 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2321
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
2322 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
2323
8816
d278baac2725 (svn r12562) -Cleanup: variable scope in terraform_cmd.cpp
smatz <smatz@openttd.org>
parents: 8815
diff changeset
2324 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
2325 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
2326 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
2327 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
2328 n++;
9652
a05d108fe78f (svn r13719) -Codechange: rename IsValidPlayer to IsValidPlayerID in line with all other structs/classes that are in a pool.
rubidium <rubidium@openttd.org>
parents: 9594
diff changeset
2329 if (IsValidPlayerID(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
2330 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
2331 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
2332 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2333 } else {
9652
a05d108fe78f (svn r13719) -Codechange: rename IsValidPlayer to IsValidPlayerID in line with all other structs/classes that are in a pool.
rubidium <rubidium@openttd.org>
parents: 9594
diff changeset
2334 if (IsValidPlayerID(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
2335 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
2336 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
2337 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2338 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2339 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2340 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2341
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
2342 /* clamp all ratings to valid values */
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
2343 for (uint i = 0; i < MAX_PLAYERS; i++) {
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
2344 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
2345 }
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
2346
9444
c0d73c88570a (svn r13362) -Fix: make the town authority window a bit less glitchy
smatz <smatz@openttd.org>
parents: 9436
diff changeset
2347 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
2348
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
2349 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
2350 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
2351
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2352 /** 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
2353 * 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
2354 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
2355 { 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
2356 { 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
2357 };
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2358
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
2359 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
2360
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2361 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
2362 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
2363 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
2364 } 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
2365 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
2366 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
2367 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2368
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
2369 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
2370 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
2371 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
2372 } 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
2373 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
2374 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2375 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2376
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
2377 /* 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
2378 * 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
2379 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
2380
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
2381 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
2382 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
2383
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2384 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
2385 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
2386 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
2387
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
2388 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
2389 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2390
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2391 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
2392 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2393 /* 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
2394 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
2395
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2396 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
2397 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
2398 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
2399 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
2400
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2401 /* 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
2402 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
2403 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
2404 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
2405
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2406 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
2407 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2408
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2409 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
2410 {
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
2411 const Player *p;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2412
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2413 FOR_ALL_PLAYERS(p) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2414 if (t->unwanted[p->index] > 0) t->unwanted[p->index]--;
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 bool CheckIfAuthorityAllows(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
2419 {
9652
a05d108fe78f (svn r13719) -Codechange: rename IsValidPlayer to IsValidPlayerID in line with all other structs/classes that are in a pool.
rubidium <rubidium@openttd.org>
parents: 9594
diff changeset
2420 if (!IsValidPlayerID(_current_player)) 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
2421
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
2422 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
2423 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
2424
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
2425 if (t->ratings[_current_player] > 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
2426
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2427 _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
2428 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
2429
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2430 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
2431 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2432
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2433
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
2434 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
2435 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2436 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
2437 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
2438 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
2439
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2440 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
2441 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
2442 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
2443 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
2444 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
2445 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2446 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2447
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 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
2449 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2450
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2451
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2452 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
2453 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2454 if (IsTileType(tile, MP_HOUSE) || (
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9334
diff changeset
2455 IsTileType(tile, MP_ROAD) && HasTileRoadType(tile, ROADTYPE_ROAD) &&
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9334
diff changeset
2456 IsRoadOwner(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
2457 )) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2458 return GetTownByTile(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2459 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2460 return CalcClosestTownFromTile(tile, threshold);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2461 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2462 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2463
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
2464 static bool _town_rating_test = false;
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
2465 std::map<const Town *, int> _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
2466
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
2467 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
2468 {
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
2469 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
2470 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
2471 if (ref_count == 0) {
9068
577905d5025f (svn r12920) -Fix (r12859): town rating was affected even after the test run
smatz <smatz@openttd.org>
parents: 9040
diff changeset
2472 _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
2473 }
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
2474 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
2475 } 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
2476 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
2477 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
2478 }
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
2479 _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
2480 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2481
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
2482 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
2483 {
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
2484 if (_town_rating_test) {
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
2485 std::map<const Town *, int>::iterator it = _town_test_ratings.find(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
2486 if (it != _town_test_ratings.end()) {
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
2487 return (*it).second;
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
2488 }
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
2489 }
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
2490 return t->ratings[_current_player];
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
2491 }
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
2492
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2493 void ChangeTownRating(Town *t, int add, int max)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2494 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2495 /* if magic_bulldozer cheat is active, town doesn't penaltize for removing stuff */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2496 if (t == NULL ||
9652
a05d108fe78f (svn r13719) -Codechange: rename IsValidPlayer to IsValidPlayerID in line with all other structs/classes that are in a pool.
rubidium <rubidium@openttd.org>
parents: 9594
diff changeset
2497 !IsValidPlayerID(_current_player) ||
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2498 (_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
2499 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2500 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2501
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
2502 SetBit(t->have_ratings, _current_player);
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
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
2504 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
2505 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
2506 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
2507 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
2508 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
2509 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2510 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2511 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
2512 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
2513 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
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 }
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
2516 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
2517 _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
2518 } 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
2519 t->ratings[_current_player] = rating;
9444
c0d73c88570a (svn r13362) -Fix: make the town authority window a bit less glitchy
smatz <smatz@openttd.org>
parents: 9436
diff changeset
2520 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
2521 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2522 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2523
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2524 /* 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
2525 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
2526 /* 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
2527 { 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
2528 { 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
2529 { 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
2530 };
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 bool CheckforTownRating(uint32 flags, Town *t, byte type)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2533 {
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2534 /* if magic_bulldozer cheat is active, town doesn't restrict your destructive actions */
9652
a05d108fe78f (svn r13719) -Codechange: rename IsValidPlayer to IsValidPlayerID in line with all other structs/classes that are in a pool.
rubidium <rubidium@openttd.org>
parents: 9594
diff changeset
2535 if (t == NULL || !IsValidPlayerID(_current_player) || _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
2536 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
2537
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2538 /* 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
2539 * 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
2540 * 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
2541 */
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
2542 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
2543
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
2544 if (GetRating(t) < 16 + modemod && !(flags & DC_NO_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
2545 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
2546 _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
2547 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
2548 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2549
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2550 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
2551 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2552
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
2553 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
2554 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2555 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
2556
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2557 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
2558 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
2559
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2560 if (t->exclusive_counter != 0)
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
2561 if (--t->exclusive_counter == 0) t->exclusivity = INVALID_PLAYER;
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 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
2564 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
2565 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
2566 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2567 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2568
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
2569 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
2570 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2571 /* 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
2572 _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
2573 _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
2574
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2575 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
2576 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
2577 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
2578 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2579
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2580 _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
2581 _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
2582 _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
2583 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2584
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
2585 static CommandCost TerraformTile_Town(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
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
2586 {
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
2587 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
2588 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
2589 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
2590 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
2591
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
2592 /* 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
2593 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
2594 (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
2595 }
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
2596
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
2597 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
2598 }
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
2599
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
2600 extern const TileTypeProcs _tile_type_town_procs = {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2601 DrawTile_Town, /* draw_tile_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2602 GetSlopeZ_Town, /* get_slope_z_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2603 ClearTile_Town, /* clear_tile_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2604 GetAcceptedCargo_Town, /* get_accepted_cargo_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2605 GetTileDesc_Town, /* get_tile_desc_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2606 GetTileTrackStatus_Town, /* get_tile_track_status_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2607 ClickTile_Town, /* click_tile_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2608 AnimateTile_Town, /* animate_tile_proc */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2609 TileLoop_Town, /* tile_loop_clear */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2610 ChangeTileOwner_Town, /* change_tile_owner_clear */
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
2611 GetProducedCargo_Town, /* get_produced_cargo_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
2612 NULL, /* vehicle_enter_tile_proc */
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
2613 GetFoundation_Town, /* get_foundation_proc */
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
2614 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
2615 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2616
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2617
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2618 /** Save and load of 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
2619 static const SaveLoad _town_desc[] = {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2620 SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2621 SLE_CONDVAR(Town, xy, SLE_UINT32, 6, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2622
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
2623 SLE_CONDNULL(2, 0, 2), ///< population, no longer in use
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
2624 SLE_CONDNULL(4, 3, 84), ///< population, no longer in use
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
2625 SLE_CONDNULL(2, 0, 91), ///< num_houses, no longer in use
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
2626
6956
6d300d04ac5e (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx <glx@openttd.org>
parents: 6950
diff changeset
2627 SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, 66, SL_MAX_VERSION),
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2628 SLE_VAR(Town, townnametype, SLE_UINT16),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2629 SLE_VAR(Town, townnameparts, SLE_UINT32),
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
2630 SLE_CONDSTR(Town, name, SLE_STR, 0, 84, SL_MAX_VERSION),
5584
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 SLE_VAR(Town, flags12, SLE_UINT8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2633 SLE_VAR(Town, statues, SLE_UINT8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2634
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
2635 SLE_CONDNULL(1, 0, 1), ///< sort_index, no longer in use
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2636
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2637 SLE_VAR(Town, have_ratings, SLE_UINT8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2638 SLE_ARR(Town, ratings, SLE_INT16, 8),
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2639 /* failed bribe attempts are stored since savegame format 4 */
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
2640 SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, SL_MAX_VERSION),
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
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2642 SLE_CONDVAR(Town, max_pass, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2643 SLE_CONDVAR(Town, max_mail, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2644 SLE_CONDVAR(Town, new_max_pass, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2645 SLE_CONDVAR(Town, new_max_mail, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2646 SLE_CONDVAR(Town, act_pass, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2647 SLE_CONDVAR(Town, act_mail, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2648 SLE_CONDVAR(Town, new_act_pass, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2649 SLE_CONDVAR(Town, new_act_mail, SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2650
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2651 SLE_CONDVAR(Town, max_pass, SLE_UINT32, 9, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2652 SLE_CONDVAR(Town, max_mail, SLE_UINT32, 9, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2653 SLE_CONDVAR(Town, new_max_pass, SLE_UINT32, 9, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2654 SLE_CONDVAR(Town, new_max_mail, SLE_UINT32, 9, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2655 SLE_CONDVAR(Town, act_pass, SLE_UINT32, 9, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2656 SLE_CONDVAR(Town, act_mail, SLE_UINT32, 9, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2657 SLE_CONDVAR(Town, new_act_pass, SLE_UINT32, 9, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2658 SLE_CONDVAR(Town, new_act_mail, SLE_UINT32, 9, SL_MAX_VERSION),
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 SLE_VAR(Town, pct_pass_transported, SLE_UINT8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2661 SLE_VAR(Town, pct_mail_transported, SLE_UINT8),
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 SLE_VAR(Town, act_food, SLE_UINT16),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2664 SLE_VAR(Town, act_water, SLE_UINT16),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2665 SLE_VAR(Town, new_act_food, SLE_UINT16),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2666 SLE_VAR(Town, new_act_water, SLE_UINT16),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2667
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
2668 SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT8, 0, 53),
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2669 SLE_CONDVAR(Town, grow_counter, SLE_UINT8, 0, 53),
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2670 SLE_CONDVAR(Town, growth_rate, SLE_UINT8, 0, 53),
b0788d6496a9 (svn r9613) -Feature: Make it possible to have some control over the town growth. The
maedhros <maedhros@openttd.org>
parents: 6427
diff changeset
2671
8359
59a8ddb2ed88 (svn r11925) -Fix (r122, r9867): loading old, pre savegame version 2, savegames.
rubidium <rubidium@openttd.org>
parents: 8308
diff changeset
2672 SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, 54, SL_MAX_VERSION),
59a8ddb2ed88 (svn r11925) -Fix (r122, r9867): loading old, pre savegame version 2, savegames.
rubidium <rubidium@openttd.org>
parents: 8308
diff changeset
2673 SLE_CONDVAR(Town, grow_counter, SLE_UINT16, 54, SL_MAX_VERSION),
59a8ddb2ed88 (svn r11925) -Fix (r122, r9867): loading old, pre savegame version 2, savegames.
rubidium <rubidium@openttd.org>
parents: 8308
diff changeset
2674 SLE_CONDVAR(Town, growth_rate, SLE_INT16, 54, SL_MAX_VERSION),
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
2675
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2676 SLE_VAR(Town, fund_buildings_months, SLE_UINT8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2677 SLE_VAR(Town, road_build_months, SLE_UINT8),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2678
8359
59a8ddb2ed88 (svn r11925) -Fix (r122, r9867): loading old, pre savegame version 2, savegames.
rubidium <rubidium@openttd.org>
parents: 8308
diff changeset
2679 SLE_CONDVAR(Town, exclusivity, SLE_UINT8, 2, SL_MAX_VERSION),
59a8ddb2ed88 (svn r11925) -Fix (r122, r9867): loading old, pre savegame version 2, savegames.
rubidium <rubidium@openttd.org>
parents: 8308
diff changeset
2680 SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, 2, SL_MAX_VERSION),
6486
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
2681
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
2682 SLE_CONDVAR(Town, larger_town, SLE_BOOL, 56, SL_MAX_VERSION),
12262d0c44ed (svn r9667) -Feature: Add the concept of cities. A (configurable) proportion of towns can
maedhros <maedhros@openttd.org>
parents: 6484
diff changeset
2683
6422
fb10eafe2a26 (svn r9558) -Documentation: doxygen and comment changes: 'T' now. Almost done
belugas <belugas@openttd.org>
parents: 6357
diff changeset
2684 /* reserve extra space in savegame here. (currently 30 bytes) */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2685 SLE_CONDNULL(30, 2, SL_MAX_VERSION),
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2686
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2687 SLE_END()
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2688 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2689
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2690 /* Save and load the mapping between the house id on the map, and the grf file
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2691 * it came from. */
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2692 static const SaveLoad _house_id_mapping_desc[] = {
6629
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2693 SLE_VAR(EntityIDMapping, grfid, SLE_UINT32),
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2694 SLE_VAR(EntityIDMapping, entity_id, SLE_UINT8),
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2695 SLE_VAR(EntityIDMapping, substitute_id, SLE_UINT8),
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2696 SLE_END()
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2697 };
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2698
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2699 static void Save_HOUSEIDS()
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2700 {
6629
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2701 uint j = _house_mngr.GetMaxMapping();
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2702
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2703 for (uint i = 0; i < j; i++) {
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2704 SlSetArrayIndex(i);
6629
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2705 SlObject(&_house_mngr.mapping_ID[i], _house_id_mapping_desc);
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2706 }
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2707 }
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2708
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2709 static void Load_HOUSEIDS()
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2710 {
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2711 int index;
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2712
6629
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2713 _house_mngr.ResetMapping();
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2714 uint max_id = _house_mngr.GetMaxMapping();
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2715
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2716 while ((index = SlIterateArray()) != -1) {
6629
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2717 if ((uint)index >= max_id) break;
188437dffcff (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas <belugas@openttd.org>
parents: 6610
diff changeset
2718 SlObject(&_house_mngr.mapping_ID[index], _house_id_mapping_desc);
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2719 }
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2720 }
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2721
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
2722 static void Save_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
2723 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2724 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
2725
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2726 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
2727 SlSetArrayIndex(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
2728 SlObject(t, _town_desc);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2729 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2730 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2731
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
2732 static void Load_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
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 int index;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2735
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2736 _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
2737
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2738 while ((index = SlIterateArray()) != -1) {
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
2739 Town *t = new (index) 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
2740 SlObject(t, _town_desc);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2741
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2742 _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
2743 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2744
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2745 /* This is to ensure all pointers are within the limits of
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2746 * the size of the TownPool */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2747 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
2748 _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
2749 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2750
6247
57363e064324 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents: 6201
diff changeset
2751 void AfterLoadTown()
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2752 {
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
2753 Town *t;
54e679b675c5 (svn r12534) -Feature: Add a new type of town road layouts - random for each town
skidd13 <skidd13@openttd.org>
parents: 8791
diff changeset
2754 FOR_ALL_TOWNS(t) t->InitializeLayout();
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2755 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2756
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2757 extern const ChunkHandler _town_chunk_handlers[] = {
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2758 { 'HIDS', Save_HOUSEIDS, Load_HOUSEIDS, CH_ARRAY },
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2759 { 'CITY', Save_TOWN, Load_TOWN, CH_ARRAY | CH_LAST},
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2760 };
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
2761
6332
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2762 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
2763 {
60486b0b3e39 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros <maedhros@openttd.org>
parents: 6257
diff changeset
2764 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
2765 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
2766
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
2767 /* 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
2768 _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
2769 }