annotate src/road_cmd.cpp @ 10289:5f3f0d0a6e07 draft

(svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
author rubidium <rubidium@openttd.org>
date Sat, 25 Oct 2008 13:51:47 +0000 (2008-10-25)
parents d23fed9a51e2
children e3f0f062c7c3
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: 9067
diff changeset
3 /** @file road_cmd.cpp Commands related to road tiles. */
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
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"
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
7 #include "map_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
8 #include "bridge_map.h"
6160
6bb39697173c (svn r8908) -Codechange: declaration of DrawBridgeMiddle does not belong in a map accessors header.
rubidium <rubidium@openttd.org>
parents: 6134
diff changeset
9 #include "bridge.h"
6134
7f92815712e4 (svn r8876) -Fix
tron <tron@openttd.org>
parents: 6133
diff changeset
10 #include "cmd_helper.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
11 #include "rail_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
12 #include "road_map.h"
8102
afb4c7da91df (svn r11663) -Codechange: moving of the road related types and functions.
rubidium <rubidium@openttd.org>
parents: 8096
diff changeset
13 #include "road_internal.h"
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
14 #include "sprite.h"
8119
b6ec923e9fa8 (svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium <rubidium@openttd.org>
parents: 8116
diff changeset
15 #include "tile_cmd.h"
6343
f75b72d9fc98 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros <maedhros@openttd.org>
parents: 6259
diff changeset
16 #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
17 #include "town_map.h"
8224
c45446125bf0 (svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents: 8211
diff changeset
18 #include "viewport_func.h"
8116
9cc845deddfe (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium <rubidium@openttd.org>
parents: 8114
diff changeset
19 #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
20 #include "town.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
21 #include "yapf/yapf.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: 8912
diff changeset
22 #include "depot_base.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: 8912
diff changeset
23 #include "depot_func.h"
6541
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
24 #include "newgrf.h"
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
25 #include "station_map.h"
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
26 #include "tunnel_map.h"
8211
165064de4629 (svn r11774) -Change: do not include variables.h in a header when it is not needed.
rubidium <rubidium@openttd.org>
parents: 8197
diff changeset
27 #include "variables.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: 7539
diff changeset
28 #include "autoslope.h"
7849
e6ee8bfd9045 (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents: 7832
diff changeset
29 #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: 8081
diff changeset
30 #include "tunnelbridge_map.h"
8106
47b1794a7eca (svn r11667) -Codechange: split window.h into a header that defines some 'global' window related types, on that defined 'global' window functions and one that defines functions and types only used by *_gui.cpps.
rubidium <rubidium@openttd.org>
parents: 8102
diff changeset
31 #include "window_func.h"
8114
2d6af5d7a142 (svn r11675) -Codechange: split the string types from the string functions.
rubidium <rubidium@openttd.org>
parents: 8108
diff changeset
32 #include "strings_func.h"
8144
d18c8a0bb638 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium <rubidium@openttd.org>
parents: 8139
diff changeset
33 #include "vehicle_func.h"
d18c8a0bb638 (svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium <rubidium@openttd.org>
parents: 8139
diff changeset
34 #include "vehicle_base.h"
8157
019833e42fda (svn r11719) -Codechange: split sound.h in a header with types and one with functions.
rubidium <rubidium@openttd.org>
parents: 8144
diff changeset
35 #include "sound_func.h"
8342
441cda3cfbdb (svn r11908) -Fix: update crossing when merging a company, when building a crossing and after loading older savegame
smatz <smatz@openttd.org>
parents: 8308
diff changeset
36 #include "road_func.h"
8398
a6304b304752 (svn r11968) -Codechange: remove redundant FindLengthOfTunnel(), use GetTunnelBridgeLength() and/or GetOtherTunnelEnd() instead
smatz <smatz@openttd.org>
parents: 8390
diff changeset
37 #include "tunnelbridge.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
38 #include "cheat_func.h"
9006
9bf1de259ada (svn r12801) -Codechange: remove the dependency of function.h in town_map.h
rubidium <rubidium@openttd.org>
parents: 8965
diff changeset
39 #include "functions.h"
9009
870efbdb988d (svn r12804) -Codechange: move the effect vehicle handling out of vehicle.cpp
rubidium <rubidium@openttd.org>
parents: 9006
diff changeset
40 #include "effectvehicle_func.h"
9154
046d0b6e0218 (svn r13016) -Codechange: unify the detection if rail catenary should be drawn
smatz <smatz@openttd.org>
parents: 9111
diff changeset
41 #include "elrail_func.h"
9038
6e86ab2cba9f (svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium <rubidium@openttd.org>
parents: 9036
diff changeset
42 #include "oldpool_func.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: 8081
diff changeset
43
8264
2495310e220f (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents: 8254
diff changeset
44 #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: 8254
diff changeset
45 #include "table/strings.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: 7539
diff changeset
46
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
47 /**
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
48 * Verify whether a road vehicle is available.
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
49 * @return \c true if at least one road vehicle is available, \c false if not
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
50 */
9298
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
51 bool RoadVehiclesAreBuilt()
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
52 {
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
53 const Vehicle* v;
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
54
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
55 FOR_ALL_VEHICLES(v) {
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
56 if (v->type == VEH_ROAD) return true;
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
57 }
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
58 return false;
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
59 }
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
60
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
61 /**
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
62 * Change the side of the road vehicles drive on (server only).
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
63 * @param tile unused
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
64 * @param flags operation to perform
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
65 * @param p1 the side of the road; 0 = left side and 1 = right side
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
66 * @param p2 unused
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
67 */
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
68 CommandCost CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
69 {
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
70 /* Check boundaries and you can only change this if NO vehicles have been built yet,
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
71 * except in the intro-menu where of course it's always possible to do so. */
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
72 if (p1 > 1 || (_game_mode != GM_MENU && RoadVehiclesAreBuilt())) return CMD_ERROR;
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
73
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
74 if (flags & DC_EXEC) {
9346
0c181c088ed8 (svn r13242) -Codechange: remove _opt_ptr.
rubidium <rubidium@openttd.org>
parents: 9342
diff changeset
75 if (_game_mode == GM_MENU) {
9461
2449dff4b686 (svn r13379) -Fix (r13255): drive side can't be changed in intro
glx <glx@openttd.org>
parents: 9413
diff changeset
76 _settings_newgame.vehicle.road_side = p1;
9346
0c181c088ed8 (svn r13242) -Codechange: remove _opt_ptr.
rubidium <rubidium@openttd.org>
parents: 9342
diff changeset
77 } else {
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: 9358
diff changeset
78 _settings_game.vehicle.road_side = p1;
9346
0c181c088ed8 (svn r13242) -Codechange: remove _opt_ptr.
rubidium <rubidium@openttd.org>
parents: 9342
diff changeset
79 }
9298
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
80 InvalidateWindow(WC_GAME_OPTIONS, 0);
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
81 }
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
82 return CommandCost();
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
83 }
b2a46cf9b23e (svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
rubidium <rubidium@openttd.org>
parents: 9224
diff changeset
84
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: 7539
diff changeset
85 #define M(x) (1 << (x))
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: 7539
diff changeset
86 /* Level crossings may only be built on these slopes */
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: 7539
diff changeset
87 static const uint32 VALID_LEVEL_CROSSING_SLOPES = (M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT));
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: 7539
diff changeset
88 #undef M
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
89
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
90 /* Invalid RoadBits on slopes */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
91 static const RoadBits _invalid_tileh_slopes_road[2][15] = {
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
92 /* The inverse of the mixable RoadBits on a leveled slope */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
93 {
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
94 ROAD_NONE, // SLOPE_FLAT
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
95 ROAD_NE | ROAD_SE, // SLOPE_W
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
96 ROAD_NE | ROAD_NW, // SLOPE_S
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
97
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
98 ROAD_NE, // SLOPE_SW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
99 ROAD_NW | ROAD_SW, // SLOPE_E
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
100 ROAD_NONE, // SLOPE_EW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
101
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
102 ROAD_NW, // SLOPE_SE
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
103 ROAD_NONE, // SLOPE_WSE
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
104 ROAD_SE | ROAD_SW, // SLOPE_N
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
105
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
106 ROAD_SE, // SLOPE_NW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
107 ROAD_NONE, // SLOPE_NS
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
108 ROAD_NONE, // SLOPE_ENW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
109
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
110 ROAD_SW, // SLOPE_NE
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
111 ROAD_NONE, // SLOPE_SEN
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
112 ROAD_NONE // SLOPE_NWS
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
113 },
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
114 /* The inverse of the allowed straight roads on a slope
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
115 * (with and without a foundation). */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
116 {
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
117 ROAD_NONE, // SLOPE_FLAT
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
118 ROAD_NONE, // SLOPE_W Foundation
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
119 ROAD_NONE, // SLOPE_S Foundation
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
120
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
121 ROAD_Y, // SLOPE_SW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
122 ROAD_NONE, // SLOPE_E Foundation
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
123 ROAD_ALL, // SLOPE_EW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
124
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
125 ROAD_X, // SLOPE_SE
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
126 ROAD_ALL, // SLOPE_WSE
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
127 ROAD_NONE, // SLOPE_N Foundation
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
128
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
129 ROAD_X, // SLOPE_NW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
130 ROAD_ALL, // SLOPE_NS
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
131 ROAD_ALL, // SLOPE_ENW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
132
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
133 ROAD_Y, // SLOPE_NE
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
134 ROAD_ALL, // SLOPE_SEN
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
135 ROAD_ALL // SLOPE_NW
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
136 }
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
137 };
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
138
8384
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
139 Foundation GetRoadFoundation(Slope tileh, RoadBits bits);
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
140
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
141 /**
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
142 * Is it allowed to remove the given road bits from the given tile?
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
143 * @param tile the tile to remove the road from
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
144 * @param remove the roadbits that are going to be removed
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
145 * @param owner the actual owner of the roadbits of the tile
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
146 * @param rt the road type to remove the bits from
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
147 * @param flags command flags
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
148 * @param town_check Shall the town rating checked/affected
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
149 * @return true when it is allowed to remove the road bits
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
150 */
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
151 bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, RoadType rt, uint32 flags, bool town_check)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
152 {
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: 6626
diff changeset
153 if (_game_mode == GM_EDITOR || remove == ROAD_NONE) 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
154
6751
f1e45e71da47 (svn r9986) -Fix (r9934): flooding towns could not remove tram tracks (boekabart).
rubidium <rubidium@openttd.org>
parents: 6732
diff changeset
155 /* Water can always flood and towns can always remove "normal" road pieces.
f1e45e71da47 (svn r9986) -Fix (r9934): flooding towns could not remove tram tracks (boekabart).
rubidium <rubidium@openttd.org>
parents: 6732
diff changeset
156 * Towns are not be allowed to remove non "normal" road pieces, like tram
f1e45e71da47 (svn r9986) -Fix (r9934): flooding towns could not remove tram tracks (boekabart).
rubidium <rubidium@openttd.org>
parents: 6732
diff changeset
157 * tracks as that would result in trams that cannot turn. */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
158 if (_current_company == OWNER_WATER ||
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
159 (rt == ROADTYPE_ROAD && !IsValidCompanyID(_current_company))) 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
160
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
161 /* Only do the special processing if the road is owned
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
162 * by 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
163 if (owner != OWNER_TOWN) return (owner == OWNER_NONE) || CheckOwnership(owner);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
164
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
165 if (!town_check) return true;
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
166
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
167 if (_cheats.magic_bulldozer.value) 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
168
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
169 Town *t = ClosestTownFromTile(tile, UINT_MAX);
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
170 if (t == NULL) return true;
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
171
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
172 /* check if you're allowed to remove the street owned by a town
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
173 * removal allowance depends on difficulty setting */
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
174 if (!CheckforTownRating(flags, t, ROAD_REMOVE)) return false;
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
175
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
176 /* Get a bitmask of which neighbouring roads has a tile */
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
177 RoadBits n = ROAD_NONE;
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
178 RoadBits present = GetAnyRoadBits(tile, rt);
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: 6626
diff changeset
179 if (present & ROAD_NE && GetAnyRoadBits(TILE_ADDXY(tile, -1, 0), rt) & ROAD_SW) n |= ROAD_NE;
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: 6626
diff changeset
180 if (present & ROAD_SE && GetAnyRoadBits(TILE_ADDXY(tile, 0, 1), rt) & ROAD_NW) n |= ROAD_SE;
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: 6626
diff changeset
181 if (present & ROAD_SW && GetAnyRoadBits(TILE_ADDXY(tile, 1, 0), rt) & ROAD_NE) n |= ROAD_SW;
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: 6626
diff changeset
182 if (present & ROAD_NW && GetAnyRoadBits(TILE_ADDXY(tile, 0, -1), rt) & ROAD_SE) n |= ROAD_NW;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
183
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
184 int rating_decrease = RATING_ROAD_DOWN_STEP_EDGE;
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
185 /* If 0 or 1 bits are set in n, or if no bits that match the bits to remove,
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
186 * then allow it */
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
187 if (KillFirstBit(n) != ROAD_NONE && (n & remove) != ROAD_NONE) {
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
188 /* you can remove all kind of roads with extra dynamite */
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: 9358
diff changeset
189 if (!_settings_game.construction.extra_dynamite) {
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
190 SetDParam(0, t->index);
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
191 _error_message = STR_2009_LOCAL_AUTHORITY_REFUSES;
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
192 return false;
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
193 }
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
194 rating_decrease = RATING_ROAD_DOWN_STEP_INNER;
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 }
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
196 ChangeTownRating(t, rating_decrease, RATING_ROAD_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
197
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
198 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
199 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
200
8428
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
201
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
202 /** Delete a piece of road.
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
203 * @param tile tile where to remove road from
6483
f7bd49098924 (svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas <belugas@openttd.org>
parents: 6427
diff changeset
204 * @param flags operation to perform
8428
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
205 * @param pieces roadbits to remove
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
206 * @param rt roadtype to remove
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
207 * @param crossing_check should we check if there is a tram track when we are removing road from crossing?
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
208 */
8912
7a72608476a7 (svn r12682) -Fix [FS#1920]: removing road pieces from a town gave you twice the intended penalty.
rubidium <rubidium@openttd.org>
parents: 8859
diff changeset
209 static CommandCost RemoveRoad(TileIndex tile, uint32 flags, RoadBits pieces, RoadType rt, bool crossing_check, bool town_check = 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
210 {
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9322
diff changeset
211 RoadTypes rts = GetRoadTypes(tile);
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9322
diff changeset
212 /* The tile doesn't have the given road type */
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9322
diff changeset
213 if (!HasBit(rts, rt)) return CMD_ERROR;
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9322
diff changeset
214
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
215 bool town_road_under_stop = false;
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
216
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
217 switch (GetTileType(tile)) {
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: 7355
diff changeset
218 case MP_ROAD:
8075
8de1216a9e47 (svn r11636) -Fix: it was possible to build/remove road/tram in tunnel/bridge when there was vehicle in it
smatz <smatz@openttd.org>
parents: 8043
diff changeset
219 if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
220 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
221
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
222 case MP_STATION:
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
223 if (!IsDriveThroughStopTile(tile)) return CMD_ERROR;
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
224 if (rt == ROADTYPE_ROAD) town_road_under_stop = GetStopBuiltOnTownRoad(tile);
8075
8de1216a9e47 (svn r11636) -Fix: it was possible to build/remove road/tram in tunnel/bridge when there was vehicle in it
smatz <smatz@openttd.org>
parents: 8043
diff changeset
225 if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
226 break;
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
227
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
228 case MP_TUNNELBRIDGE:
8390
381a22f19287 (svn r11960) -Cleanup: simplify some IsTunnel(Tile) / IsBridge(Tile) conditions
smatz <smatz@openttd.org>
parents: 8384
diff changeset
229 if (GetTunnelBridgeTransportType(tile) != TRANSPORT_ROAD) return CMD_ERROR;
10083
4923bdc50041 (svn r14258) -Codechange: rework the way to query the vehicle hash to make sure it always results in the same irregardless of the order of the hash-linked-list.
rubidium <rubidium@openttd.org>
parents: 10017
diff changeset
230 if (HasVehicleOnTunnelBridge(tile, GetOtherTunnelBridgeEnd(tile))) return CMD_ERROR;
8390
381a22f19287 (svn r11960) -Cleanup: simplify some IsTunnel(Tile) / IsBridge(Tile) conditions
smatz <smatz@openttd.org>
parents: 8384
diff changeset
231 break;
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
232
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
233 default:
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
234 return CMD_ERROR;
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
235 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
236
9342
6357104c8bb9 (svn r13234) -Fix: Check/affect town rating when removing/bulldozing town-owned road under drivethrough stops.
frosch <frosch@openttd.org>
parents: 9341
diff changeset
237 if (!CheckAllowRemoveRoad(tile, pieces, town_road_under_stop ? OWNER_TOWN : GetRoadOwner(tile, rt), rt, flags, town_check)) 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
238
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: 7355
diff changeset
239 if (!IsTileType(tile, MP_ROAD)) {
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
240 /* If it's the last roadtype, just clear the whole tile */
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
241 if (rts == RoadTypeToRoadTypes(rt)) return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
242
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
243 CommandCost cost(EXPENSES_CONSTRUCTION);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
244 if (IsTileType(tile, MP_TUNNELBRIDGE)) {
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
245 TileIndex other_end = GetOtherTunnelBridgeEnd(tile);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
246 /* Pay for *every* tile of the bridge or tunnel */
8398
a6304b304752 (svn r11968) -Codechange: remove redundant FindLengthOfTunnel(), use GetTunnelBridgeLength() and/or GetOtherTunnelEnd() instead
smatz <smatz@openttd.org>
parents: 8390
diff changeset
247 cost.AddCost((GetTunnelBridgeLength(other_end, tile) + 2) * _price.remove_road);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
248 if (flags & DC_EXEC) {
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
249 SetRoadTypes(other_end, GetRoadTypes(other_end) & ~RoadTypeToRoadTypes(rt));
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
250 SetRoadTypes(tile, GetRoadTypes(tile) & ~RoadTypeToRoadTypes(rt));
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
251
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
252 /* Mark tiles diry that have been repaved */
6714
ed8181c3da57 (svn r9946) -Fix: more places that weren't correctly marked dirty...
rubidium <rubidium@openttd.org>
parents: 6713
diff changeset
253 MarkTileDirtyByTile(tile);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
254 MarkTileDirtyByTile(other_end);
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
255 if (IsBridge(tile)) {
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: 8081
diff changeset
256 TileIndexDiff delta = TileOffsByDiagDir(GetTunnelBridgeDirection(tile));
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
257
6713
80ec86a82007 (svn r9945) -Fix: bridges were not properly marked dirty when adding/removing roadtypes.
rubidium <rubidium@openttd.org>
parents: 6711
diff changeset
258 for (TileIndex t = tile + delta; t != other_end; t += delta) MarkTileDirtyByTile(t);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
259 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
260 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
261 } else {
10128
7d0a9f0b76da (svn r14314) -Fix: pay for two road bits when adding/removing roadtype at drive through road stop/level crossing
smatz <smatz@openttd.org>
parents: 10109
diff changeset
262 assert(IsDriveThroughStopTile(tile));
7d0a9f0b76da (svn r14314) -Fix: pay for two road bits when adding/removing roadtype at drive through road stop/level crossing
smatz <smatz@openttd.org>
parents: 10109
diff changeset
263 cost.AddCost(_price.remove_road * 2);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
264 if (flags & DC_EXEC) {
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
265 SetRoadTypes(tile, GetRoadTypes(tile) & ~RoadTypeToRoadTypes(rt));
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
266 MarkTileDirtyByTile(tile);
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
267 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
268 }
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
269 return cost;
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
270 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
271
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 switch (GetRoadTileType(tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
273 case ROAD_TILE_NORMAL: {
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
274 const Slope tileh = GetTileSlope(tile, NULL);
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: 6626
diff changeset
275 RoadBits present = GetRoadBits(tile, rt);
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
276 const RoadBits other = GetOtherRoadBits(tile, rt);
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
277 const Foundation f = GetRoadFoundation(tileh, present);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
278
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
279 if (HasRoadWorks(tile) && _current_company != OWNER_WATER) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
280
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
281 /* Autocomplete to a straight road
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
282 * @li on steep slopes
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
283 * @li if the bits of the other roadtypes result in another foundation
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
284 * @li if build on slopes is disabled */
8747
640aafa5c0a1 (svn r12443) -Add: OpenTTDs version to openttd.cfg, just so we do not need to keep to ask people for their version number because it's likely they give you the wrong answer anyway.
rubidium <rubidium@openttd.org>
parents: 8746
diff changeset
285 if (IsSteepSlope(tileh) || (IsStraightRoad(other) &&
640aafa5c0a1 (svn r12443) -Add: OpenTTDs version to openttd.cfg, just so we do not need to keep to ask people for their version number because it's likely they give you the wrong answer anyway.
rubidium <rubidium@openttd.org>
parents: 8746
diff changeset
286 (other & _invalid_tileh_slopes_road[0][tileh & SLOPE_ELEVATED]) != ROAD_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: 9358
diff changeset
287 (tileh != SLOPE_FLAT && !_settings_game.construction.build_on_slopes)) {
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
288 pieces |= MirrorRoadBits(pieces);
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
290
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
291 /* limit the bits to delete to the existing bits. */
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
292 pieces &= present;
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
293 if (pieces == ROAD_NONE) 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
294
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
295 /* Now set present what it will be after the remove */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
296 present ^= pieces;
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
297
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
298 /* Check for invalid RoadBit combinations on slopes */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
299 if (tileh != SLOPE_FLAT && present != ROAD_NONE &&
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
300 (present & _invalid_tileh_slopes_road[0][tileh & SLOPE_ELEVATED]) == present) {
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
301 return CMD_ERROR;
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
302 }
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
303
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
304 if (flags & DC_EXEC) {
9067
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
305 if (HasRoadWorks(tile)) {
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
306 /* flooding tile with road works, don't forget to remove the effect vehicle too */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
307 assert(_current_company == OWNER_WATER);
9067
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
308 Vehicle *v;
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
309 FOR_ALL_VEHICLES(v) {
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
310 if (v->type == VEH_EFFECT && TileVirtXY(v->x_pos, v->y_pos) == tile) {
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
311 delete v;
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
312 }
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
313 }
ee88bc1733a9 (svn r12919) -Fix [FS#1965]: flood road tiles even when there are road works in progress
smatz <smatz@openttd.org>
parents: 9038
diff changeset
314 }
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
315 if (present == ROAD_NONE) {
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: 6626
diff changeset
316 RoadTypes rts = GetRoadTypes(tile) & ComplementRoadTypes(RoadTypeToRoadTypes(rt));
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: 6626
diff changeset
317 if (rts == ROADTYPES_NONE) {
7536
52edfe2a54b8 (svn r11056) -Fix [FS#1213]: road/tram tiles would not always get marked dirty properly, causing glitches for non-local players. Patch by SmatZ.
rubidium <rubidium@openttd.org>
parents: 7516
diff changeset
318 /* Includes MarkTileDirtyByTile() */
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: 6626
diff changeset
319 DoClearSquare(tile);
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: 6626
diff changeset
320 } else {
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
321 if (rt == ROADTYPE_ROAD && IsRoadOwner(tile, ROADTYPE_ROAD, OWNER_TOWN)) {
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
322 /* Promote ownership from tram or highway and invalidate town index */
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
323 SetRoadOwner(tile, ROADTYPE_ROAD, GetRoadOwner(tile, (HasBit(rts, ROADTYPE_TRAM) ? ROADTYPE_TRAM : ROADTYPE_HWAY)));
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
324 SetTownIndex(tile, (TownID)INVALID_TOWN);
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
325 }
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
326 SetRoadBits(tile, ROAD_NONE, rt);
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: 6626
diff changeset
327 SetRoadTypes(tile, rts);
7536
52edfe2a54b8 (svn r11056) -Fix [FS#1213]: road/tram tiles would not always get marked dirty properly, causing glitches for non-local players. Patch by SmatZ.
rubidium <rubidium@openttd.org>
parents: 7516
diff changeset
328 MarkTileDirtyByTile(tile);
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: 6626
diff changeset
329 }
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 } else {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
331 /* When bits are removed, you *always* end up with something that
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
332 * is not a complete straight road tile. However, trams do not have
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
333 * onewayness, so they cannot remove it either. */
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
334 if (rt != ROADTYPE_TRAM) SetDisallowedRoadDirections(tile, DRD_NONE);
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: 6626
diff changeset
335 SetRoadBits(tile, present, rt);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
336 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
337 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
338 }
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
339
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
340 /* If we change the foundation we have to pay for it. */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
341 return CommandCost(EXPENSES_CONSTRUCTION, CountBits(pieces) * _price.remove_road +
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
342 ((GetRoadFoundation(tileh, present) != f) ? _price.terraform : (Money)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
343 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
344
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
345 case ROAD_TILE_CROSSING: {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
346 if (pieces & ComplementRoadBits(GetCrossingRoadBits(tile))) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
347 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
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
6697
398474f3706e (svn r9929) -Fix [FS#803]: fix several drawing issues.
rubidium <rubidium@openttd.org>
parents: 6691
diff changeset
350 /* Don't allow road to be removed from the crossing when there is tram;
398474f3706e (svn r9929) -Fix [FS#803]: fix several drawing issues.
rubidium <rubidium@openttd.org>
parents: 6691
diff changeset
351 * we can't draw the crossing without trambits ;) */
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
352 if (rt == ROADTYPE_ROAD && HasTileRoadType(tile, ROADTYPE_TRAM) && (flags & DC_EXEC || crossing_check)) return CMD_ERROR;
6697
398474f3706e (svn r9929) -Fix [FS#803]: fix several drawing issues.
rubidium <rubidium@openttd.org>
parents: 6691
diff changeset
353
8187
628ae1d0d227 (svn r11750) -Revert (r11749): commited too much
glx <glx@openttd.org>
parents: 8186
diff changeset
354 if (flags & DC_EXEC) {
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: 6626
diff changeset
355 RoadTypes rts = GetRoadTypes(tile) & ComplementRoadTypes(RoadTypeToRoadTypes(rt));
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: 6626
diff changeset
356 if (rts == ROADTYPES_NONE) {
9789
a650fef48373 (svn r13931) -Codechange [YAPP]: Retain the reservation state when building/removing waypoints or level crossings. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9785
diff changeset
357 TrackBits tracks = GetCrossingRailBits(tile);
a650fef48373 (svn r13931) -Codechange [YAPP]: Retain the reservation state when building/removing waypoints or level crossings. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9785
diff changeset
358 bool reserved = GetCrossingReservation(tile);
a650fef48373 (svn r13931) -Codechange [YAPP]: Retain the reservation state when building/removing waypoints or level crossings. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9785
diff changeset
359 MakeRailNormal(tile, GetTileOwner(tile), tracks, GetRailType(tile));
a650fef48373 (svn r13931) -Codechange [YAPP]: Retain the reservation state when building/removing waypoints or level crossings. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9785
diff changeset
360 if (reserved) SetTrackReservation(tile, tracks);
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: 6626
diff changeset
361 } else {
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: 6626
diff changeset
362 SetRoadTypes(tile, rts);
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
363 /* If we ever get HWAY and it is possible without road then we will need to promote ownership and invalidate town index here, too */
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: 6626
diff changeset
364 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
365 MarkTileDirtyByTile(tile);
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
366 YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(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
367 }
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
368 return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_road * 2);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
369 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
370
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
371 default:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
372 case ROAD_TILE_DEPOT:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
373 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
374 }
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
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
377
8428
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
378 /** Delete a piece of road.
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
379 * @param tile tile where to remove road from
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
380 * @param flags operation to perform
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
381 * @param p1 bit 0..3 road pieces to remove (RoadBits)
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
382 * bit 4..5 road type
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
383 * @param p2 unused
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
384 */
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
385 CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
386 {
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
387 RoadType rt = (RoadType)GB(p1, 4, 2);
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
388 if (!IsValidRoadType(rt)) return CMD_ERROR;
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
389
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
390 RoadBits pieces = Extract<RoadBits, 0>(p1);
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
391
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
392 return RemoveRoad(tile, flags, pieces, rt, true);
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
393 }
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
394
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: 7601
diff changeset
395 /**
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: 7601
diff changeset
396 * Calculate the costs for roads on slopes
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: 7601
diff changeset
397 * Aside modify the RoadBits to fit on the slopes
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: 7601
diff changeset
398 *
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: 7601
diff changeset
399 * @note The RoadBits are modified too!
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: 7601
diff changeset
400 * @param tileh The current slope
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: 7601
diff changeset
401 * @param pieces The RoadBits we want to add
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
402 * @param existing The existent RoadBits of the current type
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
403 * @param other The other existent RoadBits
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: 7601
diff changeset
404 * @return The costs for these RoadBits on this slope
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: 7601
diff changeset
405 */
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
406 static CommandCost CheckRoadSlope(Slope tileh, RoadBits *pieces, RoadBits existing, RoadBits other)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
407 {
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
408 /* Remove already build pieces */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
409 CLRBITS(*pieces, existing);
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
410
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
411 /* If we can't build anything stop here */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
412 if (*pieces == ROAD_NONE) return CMD_ERROR;
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
413
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
414 /* All RoadBit combos are valid on flat land */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
415 if (tileh == SLOPE_FLAT) return CommandCost();
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
416
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
417 /* Proceed steep Slopes first to reduce lookup table size */
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: 7601
diff changeset
418 if (IsSteepSlope(tileh)) {
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: 7601
diff changeset
419 /* Force straight 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: 7601
diff changeset
420 *pieces |= MirrorRoadBits(*pieces);
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
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
422 /* Use existing as all existing since only straight
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
423 * roads are allowed here. */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
424 existing |= other;
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
425
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
426 if ((existing == ROAD_NONE || existing == *pieces) && IsStraightRoad(*pieces)) {
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
427 return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
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 }
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 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
430 }
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: 7601
diff changeset
431
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
432 /* Save the merge of all bits of the current type */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
433 RoadBits type_bits = existing | *pieces;
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: 7601
diff changeset
434
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
435 /* Roads on slopes */
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: 9358
diff changeset
436 if (_settings_game.construction.build_on_slopes && (_invalid_tileh_slopes_road[0][tileh] & (other | type_bits)) == ROAD_NONE) {
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
437
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
438 /* If we add leveling we've got to pay for it */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
439 if ((other | existing) == ROAD_NONE) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
440
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
441 return CommandCost();
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: 7601
diff changeset
442 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
443
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
444 /* Autocomplete uphill roads */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
445 *pieces |= MirrorRoadBits(*pieces);
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
446 type_bits = existing | *pieces;
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
447
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
448 /* Uphill roads */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
449 if (IsStraightRoad(type_bits) && (other == type_bits || other == ROAD_NONE) &&
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
450 (_invalid_tileh_slopes_road[1][tileh] & (other | type_bits)) == ROAD_NONE) {
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
451
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
452 /* Slopes with foundation ? */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
453 if (IsSlopeWithOneCornerRaised(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
454
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
455 /* Prevent build on slopes if it isn't allowed */
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: 9358
diff changeset
456 if (_settings_game.construction.build_on_slopes) {
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
457
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
458 /* If we add foundation we've got to pay for it */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
459 if ((other | existing) == ROAD_NONE) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
460
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
461 return CommandCost();
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
462 }
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
463 } else {
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
464 if (CountBits(existing) == 1) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
465 return CommandCost();
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
466 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
467 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
468 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
469 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
470
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
471 /** Build a piece of road.
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
472 * @param tile tile where to build road
6483
f7bd49098924 (svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas <belugas@openttd.org>
parents: 6427
diff changeset
473 * @param flags operation to perform
6134
7f92815712e4 (svn r8876) -Fix
tron <tron@openttd.org>
parents: 6133
diff changeset
474 * @param p1 bit 0..3 road pieces to build (RoadBits)
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: 6626
diff changeset
475 * bit 4..5 road type
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
476 * bit 6..7 disallowed directions to toggle
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
477 * @param p2 the town that is building the road (0 if not applicable)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
478 */
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6857
diff changeset
479 CommandCost CmdBuildRoad(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
480 {
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
481 CommandCost cost(EXPENSES_CONSTRUCTION);
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
482
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
483 RoadBits existing = ROAD_NONE;
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
484 RoadBits other_bits = 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
485
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
486 /* Road pieces are max 4 bitset values (NE, NW, SE, SW) and town can only be non-zero
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
487 * if a non-company is building the road */
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
488 if ((IsValidCompanyID(_current_company) && p2 != 0) || (_current_company == OWNER_TOWN && !IsValidTownID(p2))) return CMD_ERROR;
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
489 if (_current_company != OWNER_TOWN) {
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
490 const Town *town = CalcClosestTownFromTile(tile, UINT_MAX);
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
491 p2 = (town != NULL) ? town->index : (TownID)INVALID_TOWN;
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
492 }
6134
7f92815712e4 (svn r8876) -Fix
tron <tron@openttd.org>
parents: 6133
diff changeset
493
7f92815712e4 (svn r8876) -Fix
tron <tron@openttd.org>
parents: 6133
diff changeset
494 RoadBits pieces = Extract<RoadBits, 0>(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
495
8690
efeb7acc4651 (svn r12363) -Fix: do not allow building 'zero' road bits
smatz <smatz@openttd.org>
parents: 8647
diff changeset
496 /* do not allow building 'zero' road bits, code wouldn't handle it */
efeb7acc4651 (svn r12363) -Fix: do not allow building 'zero' road bits
smatz <smatz@openttd.org>
parents: 8647
diff changeset
497 if (pieces == ROAD_NONE) return CMD_ERROR;
efeb7acc4651 (svn r12363) -Fix: do not allow building 'zero' road bits
smatz <smatz@openttd.org>
parents: 8647
diff changeset
498
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: 6626
diff changeset
499 RoadType rt = (RoadType)GB(p1, 4, 2);
7857
707c26c48f4e (svn r11407) -Fix: do not allow building of tram-tracks when they are not available (SmatZ)
truelight <truelight@openttd.org>
parents: 7849
diff changeset
500 if (!IsValidRoadType(rt) || !ValParamRoadType(rt)) return CMD_ERROR;
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: 6626
diff changeset
501
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
502 DisallowedRoadDirections toggle_drd = (DisallowedRoadDirections)GB(p1, 6, 2);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
503
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
504 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
505
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
506 switch (GetTileType(tile)) {
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: 7355
diff changeset
507 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
508 switch (GetRoadTileType(tile)) {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
509 case ROAD_TILE_NORMAL: {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
510 if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS);
6756
df99458f5c49 (svn r9991) -Fix: one could build road when trams were driving on the tile and vice versa.
rubidium <rubidium@openttd.org>
parents: 6751
diff changeset
511
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
512 other_bits = GetOtherRoadBits(tile, rt);
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
513 if (!HasTileRoadType(tile, rt)) 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
514
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: 6626
diff changeset
515 existing = GetRoadBits(tile, rt);
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
516 bool crossing = !IsStraightRoad(existing | pieces);
6768
639a3c6b34ed (svn r10004) -Fix: trams can always intersect/have junctions on one way roads (because they only work for busses and lorries).
rubidium <rubidium@openttd.org>
parents: 6764
diff changeset
517 if (rt != ROADTYPE_TRAM && (GetDisallowedRoadDirections(tile) != DRD_NONE || toggle_drd != DRD_NONE) && crossing) {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
518 /* Junctions cannot be one-way */
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
519 return_cmd_error(STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
520 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
521 if ((existing & pieces) == pieces) {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
522 /* We only want to set the (dis)allowed road directions */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
523 if (toggle_drd != DRD_NONE && rt != ROADTYPE_TRAM && IsRoadOwner(tile, ROADTYPE_ROAD, _current_company)) {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
524 if (crossing) return_cmd_error(STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
525
8601
94ed88937d4d (svn r12183) -Codechange: give a better error message when building road over existing road with vehicle on it, or do not fail at all
smatz <smatz@openttd.org>
parents: 8598
diff changeset
526 if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
94ed88937d4d (svn r12183) -Codechange: give a better error message when building road over existing road with vehicle on it, or do not fail at all
smatz <smatz@openttd.org>
parents: 8598
diff changeset
527
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
528 /* Ignore half built tiles */
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
529 if (flags & DC_EXEC && rt != ROADTYPE_TRAM && IsStraightRoad(existing)) {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
530 SetDisallowedRoadDirections(tile, GetDisallowedRoadDirections(tile) ^ toggle_drd);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
531 MarkTileDirtyByTile(tile);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
532 }
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
533 return CommandCost();
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
534 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
535 return_cmd_error(STR_1007_ALREADY_BUILT);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
536 }
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
537 } 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
538
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
539 case ROAD_TILE_CROSSING:
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
540 other_bits = GetCrossingRoadBits(tile);
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
541 if (pieces & ComplementRoadBits(other_bits)) goto do_clear;
10128
7d0a9f0b76da (svn r14314) -Fix: pay for two road bits when adding/removing roadtype at drive through road stop/level crossing
smatz <smatz@openttd.org>
parents: 10109
diff changeset
542 pieces = other_bits; // we need to pay for both roadbits
10130
480c1b0837fd (svn r14316) -Fix: do not allow building road over level crossings and drive-through road stops in the wrong direction even when the roadtype is present
smatz <smatz@openttd.org>
parents: 10129
diff changeset
543
480c1b0837fd (svn r14316) -Fix: do not allow building road over level crossings and drive-through road stops in the wrong direction even when the roadtype is present
smatz <smatz@openttd.org>
parents: 10129
diff changeset
544 if (HasTileRoadType(tile, rt)) return_cmd_error(STR_1007_ALREADY_BUILT);
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: 6626
diff changeset
545 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
546
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
547 default:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
548 case ROAD_TILE_DEPOT:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
549 goto do_clear;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
550 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
551 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
552
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
553 case MP_RAILWAY: {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
554 if (IsSteepSlope(tileh)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
555 return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
556 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
557
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
558 /* Level crossings may only be built on these slopes */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
559 if (!HasBit(VALID_LEVEL_CROSSING_SLOPES, 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
560 return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
561 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
562
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
563 if (GetRailTileType(tile) != RAIL_TILE_NORMAL) goto do_clear;
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
564
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
565 Axis roaddir;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
566 switch (GetTrackBits(tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
567 case TRACK_BIT_X:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
568 if (pieces & ROAD_X) goto do_clear;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
569 roaddir = AXIS_Y;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
570 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
571
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
572 case TRACK_BIT_Y:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
573 if (pieces & ROAD_Y) goto do_clear;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
574 roaddir = AXIS_X;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
575 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
576
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
577 default: goto do_clear;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
578 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
579
6406
ecbbe4b0a9a2 (svn r9542) -Fix(FS# 712): When checking if a vehicle is on a given tile, and you are working on the ground tile, do not take aircrafts into account, as they do not pose any danger for the construction/destruction/conversion itself. Z stuff, in other words
belugas <belugas@openttd.org>
parents: 6393
diff changeset
580 if (!EnsureNoVehicleOnGround(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
581
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
582 if (flags & DC_EXEC) {
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
583 YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
6697
398474f3706e (svn r9929) -Fix [FS#803]: fix several drawing issues.
rubidium <rubidium@openttd.org>
parents: 6691
diff changeset
584 /* Always add road to the roadtypes (can't draw without it) */
9789
a650fef48373 (svn r13931) -Codechange [YAPP]: Retain the reservation state when building/removing waypoints or level crossings. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9785
diff changeset
585 bool reserved = HasBit(GetTrackReservation(tile), AxisToTrack(OtherAxis(roaddir)));
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
586 MakeRoadCrossing(tile, _current_company, _current_company, _current_company, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
9789
a650fef48373 (svn r13931) -Codechange [YAPP]: Retain the reservation state when building/removing waypoints or level crossings. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9785
diff changeset
587 SetCrossingReservation(tile, reserved);
8344
6312fafcfe47 (svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
smatz <smatz@openttd.org>
parents: 8342
diff changeset
588 UpdateLevelCrossing(tile, 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
589 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
590 }
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
591 return CommandCost(EXPENSES_CONSTRUCTION, _price.build_road * (rt == ROADTYPE_ROAD ? 2 : 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
592 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
593
10129
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
594 case MP_STATION: {
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
595 if (!IsDriveThroughStopTile(tile)) goto do_clear;
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
596
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
597 RoadBits curbits = AxisToRoadBits(DiagDirToAxis(GetRoadStopDir(tile)));
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
598 if (pieces & ~curbits) goto do_clear;
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
599 pieces = curbits; // we need to pay for both roadbits
10130
480c1b0837fd (svn r14316) -Fix: do not allow building road over level crossings and drive-through road stops in the wrong direction even when the roadtype is present
smatz <smatz@openttd.org>
parents: 10129
diff changeset
600
480c1b0837fd (svn r14316) -Fix: do not allow building road over level crossings and drive-through road stops in the wrong direction even when the roadtype is present
smatz <smatz@openttd.org>
parents: 10129
diff changeset
601 if (HasTileRoadType(tile, rt)) return_cmd_error(STR_1007_ALREADY_BUILT);
10129
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
602 } break;
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
603
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
604 case MP_TUNNELBRIDGE:
8390
381a22f19287 (svn r11960) -Cleanup: simplify some IsTunnel(Tile) / IsBridge(Tile) conditions
smatz <smatz@openttd.org>
parents: 8384
diff changeset
605 if (GetTunnelBridgeTransportType(tile) != TRANSPORT_ROAD) return CMD_ERROR;
9583
87a47b4bb074 (svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
rubidium <rubidium@openttd.org>
parents: 9461
diff changeset
606 if (MirrorRoadBits(DiagDirToRoadBits(GetTunnelBridgeDirection(tile))) != pieces) return CMD_ERROR;
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
607 if (HasTileRoadType(tile, rt)) return_cmd_error(STR_1007_ALREADY_BUILT);
8390
381a22f19287 (svn r11960) -Cleanup: simplify some IsTunnel(Tile) / IsBridge(Tile) conditions
smatz <smatz@openttd.org>
parents: 8384
diff changeset
608 /* Don't allow adding roadtype to the bridge/tunnel when vehicles are already driving on it */
10083
4923bdc50041 (svn r14258) -Codechange: rework the way to query the vehicle hash to make sure it always results in the same irregardless of the order of the hash-linked-list.
rubidium <rubidium@openttd.org>
parents: 10017
diff changeset
609 if (HasVehicleOnTunnelBridge(tile, GetOtherTunnelBridgeEnd(tile))) return CMD_ERROR;
8390
381a22f19287 (svn r11960) -Cleanup: simplify some IsTunnel(Tile) / IsBridge(Tile) conditions
smatz <smatz@openttd.org>
parents: 8384
diff changeset
610 break;
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
611
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
612 default: {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
613 do_clear:;
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
614 CommandCost ret = DoCommand(tile, 0, 0, flags, 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
615 if (CmdFailed(ret)) return ret;
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
616 cost.AddCost(ret);
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
617 } 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
618 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
619
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
620 if (other_bits != pieces) {
6715
daaf943a1281 (svn r9947) -Fix [FS#807]: don't check whether roadbits may be built when they are already built for another type.
rubidium <rubidium@openttd.org>
parents: 6714
diff changeset
621 /* Check the foundation/slopes when adding road/tram bits */
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
622 CommandCost ret = CheckRoadSlope(tileh, &pieces, existing, other_bits);
6715
daaf943a1281 (svn r9947) -Fix [FS#807]: don't check whether roadbits may be built when they are already built for another type.
rubidium <rubidium@openttd.org>
parents: 6714
diff changeset
623 /* Return an error if we need to build a foundation (ret != 0) but the
daaf943a1281 (svn r9947) -Fix [FS#807]: don't check whether roadbits may be built when they are already built for another type.
rubidium <rubidium@openttd.org>
parents: 6714
diff changeset
624 * current patch-setting is turned off (or stupid AI@work) */
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: 9358
diff changeset
625 if (CmdFailed(ret) || (ret.GetCost() != 0 && !_settings_game.construction.build_on_slopes)) {
6715
daaf943a1281 (svn r9947) -Fix [FS#807]: don't check whether roadbits may be built when they are already built for another type.
rubidium <rubidium@openttd.org>
parents: 6714
diff changeset
626 return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
daaf943a1281 (svn r9947) -Fix [FS#807]: don't check whether roadbits may be built when they are already built for another type.
rubidium <rubidium@openttd.org>
parents: 6714
diff changeset
627 }
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
628 cost.AddCost(ret);
6715
daaf943a1281 (svn r9947) -Fix [FS#807]: don't check whether roadbits may be built when they are already built for another type.
rubidium <rubidium@openttd.org>
parents: 6714
diff changeset
629 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
630
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: 7355
diff changeset
631 if (IsTileType(tile, MP_ROAD)) {
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
632 /* Don't put the pieces that already exist */
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 pieces &= ComplementRoadBits(existing);
8384
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
634
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
635 /* Check if new road bits will have the same foundation as other existing road types */
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
636 if (IsNormalRoad(tile)) {
8384
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
637 Slope slope = GetTileSlope(tile, NULL);
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
638 Foundation found_new = GetRoadFoundation(slope, pieces | existing);
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
639
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
640 /* Test if all other roadtypes can be built at that foundation */
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
641 for (RoadType rtest = ROADTYPE_ROAD; rtest < ROADTYPE_END; rtest++) {
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
642 if (rtest != rt) { // check only other road types
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
643 RoadBits bits = GetRoadBits(tile, rtest);
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
644 /* do not check if there are not road bits of given type */
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
645 if (bits != ROAD_NONE && GetRoadFoundation(slope, bits) != found_new) {
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
646 return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
647 }
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
648 }
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
649 }
30198447a5e7 (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation
smatz <smatz@openttd.org>
parents: 8344
diff changeset
650 }
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
652
8601
94ed88937d4d (svn r12183) -Codechange: give a better error message when building road over existing road with vehicle on it, or do not fail at all
smatz <smatz@openttd.org>
parents: 8598
diff changeset
653 if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
94ed88937d4d (svn r12183) -Codechange: give a better error message when building road over existing road with vehicle on it, or do not fail at all
smatz <smatz@openttd.org>
parents: 8598
diff changeset
654
7832
1f9fb5d427f9 (svn r11382) -Codechange: renamed COUNTBITS to CountBits, as it is no longer a macro (skidd13)
truelight <truelight@openttd.org>
parents: 7819
diff changeset
655 cost.AddCost(CountBits(pieces) * _price.build_road);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
656 if (IsTileType(tile, MP_TUNNELBRIDGE)) {
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
657 /* Pay for *every* tile of the bridge or tunnel */
8398
a6304b304752 (svn r11968) -Codechange: remove redundant FindLengthOfTunnel(), use GetTunnelBridgeLength() and/or GetOtherTunnelEnd() instead
smatz <smatz@openttd.org>
parents: 8390
diff changeset
658 cost.MultiplyCost(GetTunnelBridgeLength(GetOtherTunnelBridgeEnd(tile), tile) + 2);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
659 }
5584
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 if (flags & DC_EXEC) {
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
662 switch (GetTileType(tile)) {
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: 7355
diff changeset
663 case MP_ROAD: {
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
664 RoadTileType rtt = GetRoadTileType(tile);
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
665 if (existing == ROAD_NONE || rtt == ROAD_TILE_CROSSING) {
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
666 SetRoadTypes(tile, GetRoadTypes(tile) | RoadTypeToRoadTypes(rt));
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
667 SetRoadOwner(tile, rt, _current_company);
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
668 if (rt == ROADTYPE_ROAD) SetTownIndex(tile, p2);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
669 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
670 if (rtt != ROAD_TILE_CROSSING) SetRoadBits(tile, existing | pieces, rt);
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
671 } break;
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
672
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
673 case MP_TUNNELBRIDGE: {
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
674 TileIndex other_end = GetOtherTunnelBridgeEnd(tile);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
675
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
676 SetRoadTypes(other_end, GetRoadTypes(other_end) | RoadTypeToRoadTypes(rt));
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: 6626
diff changeset
677 SetRoadTypes(tile, GetRoadTypes(tile) | RoadTypeToRoadTypes(rt));
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
678
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
679 /* Mark tiles diry that have been repaved */
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
680 MarkTileDirtyByTile(other_end);
6714
ed8181c3da57 (svn r9946) -Fix: more places that weren't correctly marked dirty...
rubidium <rubidium@openttd.org>
parents: 6713
diff changeset
681 MarkTileDirtyByTile(tile);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
682 if (IsBridge(tile)) {
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: 8081
diff changeset
683 TileIndexDiff delta = TileOffsByDiagDir(GetTunnelBridgeDirection(tile));
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
684
6713
80ec86a82007 (svn r9945) -Fix: bridges were not properly marked dirty when adding/removing roadtypes.
rubidium <rubidium@openttd.org>
parents: 6711
diff changeset
685 for (TileIndex t = tile + delta; t != other_end; t += delta) MarkTileDirtyByTile(t);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
686 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
687 } break;
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
688
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
689 case MP_STATION:
10129
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
690 assert(IsDriveThroughStopTile(tile));
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
691 SetRoadTypes(tile, GetRoadTypes(tile) | RoadTypeToRoadTypes(rt));
10129
67099e82faab (svn r14315) -Fix: allow adding roadtypes only to drive-through road stops
smatz <smatz@openttd.org>
parents: 10128
diff changeset
692 if (rt == ROADTYPE_ROAD) SetStopBuiltOnTownRoad(tile, false);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
693 break;
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
694
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
695 default:
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
696 MakeRoadNormal(tile, pieces, RoadTypeToRoadTypes(rt), p2, _current_company, _current_company, _current_company);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
697 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
698 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
699
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
700 if (rt != ROADTYPE_TRAM && IsNormalRoadTile(tile)) {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
701 existing |= pieces;
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
702 SetDisallowedRoadDirections(tile, IsStraightRoad(existing) ?
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
703 GetDisallowedRoadDirections(tile) ^ toggle_drd : DRD_NONE);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
704 }
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
705
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
706 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
707 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
708 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
709 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
710
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
711 /** Build a long piece of road.
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
712 * @param end_tile end tile of drag
6483
f7bd49098924 (svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas <belugas@openttd.org>
parents: 6427
diff changeset
713 * @param flags operation to perform
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
714 * @param p1 start tile of drag
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
715 * @param p2 various bitstuffed elements
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
716 * - p2 = (bit 0) - start tile starts in the 2nd half of tile (p2 & 1)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
717 * - p2 = (bit 1) - end tile starts in the 2nd half of tile (p2 & 2)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
718 * - p2 = (bit 2) - direction: 0 = along x-axis, 1 = along y-axis (p2 & 4)
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
719 * - p2 = (bit 3 + 4) - road type
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
720 * - p2 = (bit 5) - set road direction
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
721 */
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6857
diff changeset
722 CommandCost CmdBuildLongRoad(TileIndex end_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
723 {
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
724 CommandCost cost(EXPENSES_CONSTRUCTION);
6710
967edc35a015 (svn r9942) -Fix [FS#804]: crash when upgrading both ends of a bridge.
rubidium <rubidium@openttd.org>
parents: 6702
diff changeset
725 bool had_bridge = false;
7428
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
726 bool had_tunnel = false;
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
727 bool had_success = false;
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
728 DisallowedRoadDirections drd = DRD_NORTHBOUND;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
729
8601
94ed88937d4d (svn r12183) -Codechange: give a better error message when building road over existing road with vehicle on it, or do not fail at all
smatz <smatz@openttd.org>
parents: 8598
diff changeset
730 _error_message = INVALID_STRING_ID;
94ed88937d4d (svn r12183) -Codechange: give a better error message when building road over existing road with vehicle on it, or do not fail at all
smatz <smatz@openttd.org>
parents: 8598
diff changeset
731
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
732 if (p1 >= MapSize()) 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
733
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
734 TileIndex start_tile = p1;
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
735 RoadType rt = (RoadType)GB(p2, 3, 2);
7857
707c26c48f4e (svn r11407) -Fix: do not allow building of tram-tracks when they are not available (SmatZ)
truelight <truelight@openttd.org>
parents: 7849
diff changeset
736 if (!IsValidRoadType(rt) || !ValParamRoadType(rt)) 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
737
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
738 /* Only drag in X or Y direction dictated by the direction variable */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
739 if (!HasBit(p2, 2) && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
740 if (HasBit(p2, 2) && TileX(start_tile) != TileX(end_tile)) return CMD_ERROR; // y-axis
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
741
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
742 /* Swap start and ending tile, also the half-tile drag var (bit 0 and 1) */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
743 if (start_tile > end_tile || (start_tile == end_tile && HasBit(p2, 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
744 TileIndex t = start_tile;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
745 start_tile = end_tile;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
746 end_tile = t;
7954
38bb7c45688f (svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents: 7928
diff changeset
747 p2 ^= IsInsideMM(p2 & 3, 1, 3) ? 3 : 0;
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
748 drd = DRD_SOUTHBOUND;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
749 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
750
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
751 /* On the X-axis, we have to swap the initial bits, so they
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
752 * will be interpreted correctly in the GTTS. Futhermore
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
753 * when you just 'click' on one tile to build them. */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
754 if (HasBit(p2, 2) == (start_tile == end_tile && HasBit(p2, 0) == HasBit(p2, 1))) drd ^= DRD_BOTH;
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
755 /* No disallowed direction bits have to be toggled */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
756 if (!HasBit(p2, 5)) drd = DRD_NONE;
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
757
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
758 TileIndex tile = start_tile;
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
759 /* Start tile is the small number. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
760 for (;;) {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
761 RoadBits bits = HasBit(p2, 2) ? ROAD_Y : ROAD_X;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
762
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
763 if (tile == end_tile && !HasBit(p2, 1)) bits &= ROAD_NW | ROAD_NE;
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
764 if (tile == start_tile && HasBit(p2, 0)) bits &= ROAD_SE | ROAD_SW;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
765
9583
87a47b4bb074 (svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
rubidium <rubidium@openttd.org>
parents: 9461
diff changeset
766 _error_message = INVALID_STRING_ID;
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
767 CommandCost ret = DoCommand(tile, drd << 6 | rt << 4 | bits, 0, flags, 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
768 if (CmdFailed(ret)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
769 if (_error_message != STR_1007_ALREADY_BUILT) 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
770 } else {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
771 had_success = true;
7428
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
772 /* Only pay for the upgrade on one side of the bridges and tunnels */
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
773 if (IsTileType(tile, MP_TUNNELBRIDGE)) {
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
774 if (IsBridge(tile)) {
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: 8081
diff changeset
775 if ((!had_bridge || GetTunnelBridgeDirection(tile) == DIAGDIR_SE || GetTunnelBridgeDirection(tile) == DIAGDIR_SW)) {
7428
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
776 cost.AddCost(ret);
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
777 }
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
778 had_bridge = true;
8390
381a22f19287 (svn r11960) -Cleanup: simplify some IsTunnel(Tile) / IsBridge(Tile) conditions
smatz <smatz@openttd.org>
parents: 8384
diff changeset
779 } else { // IsTunnel(tile)
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: 8081
diff changeset
780 if ((!had_tunnel || GetTunnelBridgeDirection(tile) == DIAGDIR_SE || GetTunnelBridgeDirection(tile) == DIAGDIR_SW)) {
7428
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
781 cost.AddCost(ret);
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
782 }
d3fb06b480d2 (svn r10833) -Fix [FS#1115]: assertion (different cost between test and execution) of overbuilding road tunnels with tram tracks (and vice versa) when the dragged area contains both ends of the tunnel.
rubidium <rubidium@openttd.org>
parents: 7389
diff changeset
783 had_tunnel = true;
6710
967edc35a015 (svn r9942) -Fix [FS#804]: crash when upgrading both ends of a bridge.
rubidium <rubidium@openttd.org>
parents: 6702
diff changeset
784 }
967edc35a015 (svn r9942) -Fix [FS#804]: crash when upgrading both ends of a bridge.
rubidium <rubidium@openttd.org>
parents: 6702
diff changeset
785 } else {
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
786 cost.AddCost(ret);
6710
967edc35a015 (svn r9942) -Fix [FS#804]: crash when upgrading both ends of a bridge.
rubidium <rubidium@openttd.org>
parents: 6702
diff changeset
787 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
788 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
789
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
790 if (tile == end_tile) break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
791
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
792 tile += HasBit(p2, 2) ? TileDiffXY(0, 1) : TileDiffXY(1, 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
793 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
794
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
795 return !had_success ? CMD_ERROR : cost;
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 }
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 /** Remove a long piece of road.
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
799 * @param end_tile end tile of drag
6483
f7bd49098924 (svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas <belugas@openttd.org>
parents: 6427
diff changeset
800 * @param flags operation to perform
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
801 * @param p1 start tile of drag
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
802 * @param p2 various bitstuffed elements
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
803 * - p2 = (bit 0) - start tile starts in the 2nd half of tile (p2 & 1)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
804 * - p2 = (bit 1) - end tile starts in the 2nd half of tile (p2 & 2)
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
805 * - p2 = (bit 2) - direction: 0 = along x-axis, 1 = along y-axis (p2 & 4)
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
806 * - p2 = (bit 3 + 4) - road 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
807 */
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6857
diff changeset
808 CommandCost CmdRemoveLongRoad(TileIndex end_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
809 {
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
810 CommandCost cost(EXPENSES_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
811
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
812 if (p1 >= MapSize()) 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
813
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
814 TileIndex start_tile = p1;
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
815 RoadType rt = (RoadType)GB(p2, 3, 2);
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
816 if (!IsValidRoadType(rt)) 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
817
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
818 /* Only drag in X or Y direction dictated by the direction variable */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
819 if (!HasBit(p2, 2) && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
820 if (HasBit(p2, 2) && TileX(start_tile) != TileX(end_tile)) return CMD_ERROR; // y-axis
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
821
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
822 /* Swap start and ending tile, also the half-tile drag var (bit 0 and 1) */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
823 if (start_tile > end_tile || (start_tile == end_tile && HasBit(p2, 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
824 TileIndex t = start_tile;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
825 start_tile = end_tile;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
826 end_tile = t;
7954
38bb7c45688f (svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents: 7928
diff changeset
827 p2 ^= IsInsideMM(p2 & 3, 1, 3) ? 3 : 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
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
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
830 Money money = GetAvailableMoneyForCommand();
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
831 TileIndex tile = start_tile;
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
832 /* Start tile is the small number. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
833 for (;;) {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
834 RoadBits bits = HasBit(p2, 2) ? ROAD_Y : ROAD_X;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
835
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
836 if (tile == end_tile && !HasBit(p2, 1)) bits &= ROAD_NW | ROAD_NE;
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
837 if (tile == start_tile && HasBit(p2, 0)) bits &= ROAD_SE | ROAD_SW;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
838
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
839 /* try to remove the halves. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
840 if (bits != 0) {
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
841 CommandCost ret = RemoveRoad(tile, flags & ~DC_EXEC, bits, rt, true);
7442
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
842 if (CmdSucceeded(ret)) {
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
843 if (flags & DC_EXEC) {
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
844 money -= ret.GetCost();
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
845 if (money < 0) {
7442
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
846 _additional_cash_required = DoCommand(end_tile, start_tile, p2, flags & ~DC_EXEC, CMD_REMOVE_LONG_ROAD).GetCost();
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
847 return cost;
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
848 }
8912
7a72608476a7 (svn r12682) -Fix [FS#1920]: removing road pieces from a town gave you twice the intended penalty.
rubidium <rubidium@openttd.org>
parents: 8859
diff changeset
849 RemoveRoad(tile, flags, bits, rt, true, false);
7442
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
850 }
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
851 cost.AddCost(ret);
60cf5845f300 (svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
rubidium <rubidium@openttd.org>
parents: 7428
diff changeset
852 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
853 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
854
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
855 if (tile == end_tile) break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
856
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
857 tile += HasBit(p2, 2) ? TileDiffXY(0, 1) : TileDiffXY(1, 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
858 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
859
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
860 return (cost.GetCost() == 0) ? CMD_ERROR : cost;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
861 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
862
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
863 /** Build a road depot.
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
864 * @param tile tile where to build the depot
6483
f7bd49098924 (svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas <belugas@openttd.org>
parents: 6427
diff changeset
865 * @param flags operation to perform
6134
7f92815712e4 (svn r8876) -Fix
tron <tron@openttd.org>
parents: 6133
diff changeset
866 * @param p1 bit 0..1 entrance direction (DiagDirection)
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
867 * bit 2..3 road 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
868 * @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
869 *
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
870 * @todo When checking for the tile slope,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
871 * distingush between "Flat land required" and "land sloped in wrong direction"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
872 */
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6857
diff changeset
873 CommandCost CmdBuildRoadDepot(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
874 {
6134
7f92815712e4 (svn r8876) -Fix
tron <tron@openttd.org>
parents: 6133
diff changeset
875 DiagDirection dir = Extract<DiagDirection, 0>(p1);
6662
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
876 RoadType rt = (RoadType)GB(p1, 2, 2);
baa28c8cfe84 (svn r9893) -Fix (r9892): various small bugs that only act up when using something different than plain roads.
rubidium <rubidium@openttd.org>
parents: 6661
diff changeset
877
7857
707c26c48f4e (svn r11407) -Fix: do not allow building of tram-tracks when they are not available (SmatZ)
truelight <truelight@openttd.org>
parents: 7849
diff changeset
878 if (!IsValidRoadType(rt) || !ValParamRoadType(rt)) 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
879
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
880 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
881 if (tileh != SLOPE_FLAT && (
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: 9358
diff changeset
882 !_settings_game.construction.build_on_slopes ||
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
883 IsSteepSlope(tileh) ||
6134
7f92815712e4 (svn r8876) -Fix
tron <tron@openttd.org>
parents: 6133
diff changeset
884 !CanBuildDepotByTileh(dir, 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
885 )) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
886 return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
887 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
888
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
889 CommandCost cost = DoCommand(tile, 0, 0, flags, 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
890 if (CmdFailed(cost)) 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
891
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
892 if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
893
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: 9009
diff changeset
894 if (!Depot::CanAllocateItem()) 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
895
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
896 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: 9009
diff changeset
897 Depot *dep = new Depot(tile);
10236
59398a628f10 (svn r14464) -Codechange: replace (uint)-1 with UINT_MAX (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10207
diff changeset
898 dep->town_index = ClosestTownFromTile(tile, UINT_MAX)->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
899
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
900 MakeRoadDepot(tile, _current_company, dir, rt, dep->town_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
901 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
902 }
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
903 return cost.AddCost(_price.build_road_depot);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
904 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
905
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6857
diff changeset
906 static CommandCost RemoveRoadDepot(TileIndex tile, uint32 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
907 {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
908 if (!CheckTileOwnership(tile) && _current_company != OWNER_WATER) 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
909
7758
013f54f32e5e (svn r11303) -Fix: EnsureNoVehicle and EnsureNoVehicleOnGround were both used to check whether there was no vehicle on the ground, except that the former didn't take care of aircraft shadows. So now we only use EnsureNoVehicleOnGround.
rubidium <rubidium@openttd.org>
parents: 7730
diff changeset
910 if (!EnsureNoVehicleOnGround(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
911
7389
63f05f10a3c1 (svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
912 if (flags & DC_EXEC) {
63f05f10a3c1 (svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
913 DoClearSquare(tile);
63f05f10a3c1 (svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
914 delete GetDepotByTile(tile);
63f05f10a3c1 (svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium <rubidium@openttd.org>
parents: 7370
diff changeset
915 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
916
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
917 return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_road_depot);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
918 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
919
6943
fd42cb9816c6 (svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium <rubidium@openttd.org>
parents: 6857
diff changeset
920 static CommandCost ClearTile_Road(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
921 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
922 switch (GetRoadTileType(tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
923 case ROAD_TILE_NORMAL: {
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: 6626
diff changeset
924 RoadBits b = GetAllRoadBits(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
925
5637
2ea5b88a8a32 (svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater <Darkvater@openttd.org>
parents: 5587
diff changeset
926 /* Clear the road if only one piece is on the tile OR the AI tries
2ea5b88a8a32 (svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater <Darkvater@openttd.org>
parents: 5587
diff changeset
927 * to clear town road OR we are not using the DC_AUTO flag */
7832
1f9fb5d427f9 (svn r11382) -Codechange: renamed COUNTBITS to CountBits, as it is no longer a macro (skidd13)
truelight <truelight@openttd.org>
parents: 7819
diff changeset
928 if ((CountBits(b) == 1 && GetRoadBits(tile, ROADTYPE_TRAM) == ROAD_NONE) ||
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9322
diff changeset
929 ((flags & DC_AI_BUILDING) && GetOtherRoadBits(tile, ROADTYPE_ROAD) == ROAD_NONE && IsRoadOwner(tile, ROADTYPE_ROAD, OWNER_TOWN)) ||
5637
2ea5b88a8a32 (svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater <Darkvater@openttd.org>
parents: 5587
diff changeset
930 !(flags & DC_AUTO)
2ea5b88a8a32 (svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater <Darkvater@openttd.org>
parents: 5587
diff changeset
931 ) {
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
932 RoadTypes rts = GetRoadTypes(tile);
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
933 CommandCost ret(EXPENSES_CONSTRUCTION);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
934 for (RoadType rt = ROADTYPE_ROAD; rt < ROADTYPE_END; rt++) {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
935 if (HasBit(rts, rt)) {
8428
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
936 CommandCost tmp_ret = RemoveRoad(tile, flags, GetRoadBits(tile, rt), rt, true);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
937 if (CmdFailed(tmp_ret)) return tmp_ret;
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
938 ret.AddCost(tmp_ret);
6679
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
939 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
940 }
3e58cf5e349d (svn r9910) -Codechange: prepare road building/removing commands for more road types.
rubidium <rubidium@openttd.org>
parents: 6666
diff changeset
941 return ret;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
942 }
5637
2ea5b88a8a32 (svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater <Darkvater@openttd.org>
parents: 5587
diff changeset
943 return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST);
5643
00155b55016f (svn r8102) -Cleanup: Remove unreachable code (r8096), useless cast
Darkvater <Darkvater@openttd.org>
parents: 5637
diff changeset
944 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
945
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
946 case ROAD_TILE_CROSSING: {
6814
4cc8ebb6279d (svn r10053) -Fix: could not clear a level-crossing tile with tram tracks.
rubidium <rubidium@openttd.org>
parents: 6768
diff changeset
947 RoadTypes rts = GetRoadTypes(tile);
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
948 CommandCost ret(EXPENSES_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
949
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
950 if (flags & DC_AUTO) return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
951
6814
4cc8ebb6279d (svn r10053) -Fix: could not clear a level-crossing tile with tram tracks.
rubidium <rubidium@openttd.org>
parents: 6768
diff changeset
952 /* Must iterate over the roadtypes in a reverse manner because
4cc8ebb6279d (svn r10053) -Fix: could not clear a level-crossing tile with tram tracks.
rubidium <rubidium@openttd.org>
parents: 6768
diff changeset
953 * tram tracks must be removed before the road bits. */
8859
40fb100b7b49 (svn r12622) -Fix: infinite loop in case your compiler decides that enums are unsigned by default. Patch by Dominik.
rubidium <rubidium@openttd.org>
parents: 8821
diff changeset
954 RoadType rt = ROADTYPE_HWAY;
40fb100b7b49 (svn r12622) -Fix: infinite loop in case your compiler decides that enums are unsigned by default. Patch by Dominik.
rubidium <rubidium@openttd.org>
parents: 8821
diff changeset
955 do {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
956 if (HasBit(rts, rt)) {
8428
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
957 CommandCost tmp_ret = RemoveRoad(tile, flags, GetCrossingRoadBits(tile), rt, false);
6814
4cc8ebb6279d (svn r10053) -Fix: could not clear a level-crossing tile with tram tracks.
rubidium <rubidium@openttd.org>
parents: 6768
diff changeset
958 if (CmdFailed(tmp_ret)) return tmp_ret;
6950
d2846442a133 (svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium <rubidium@openttd.org>
parents: 6946
diff changeset
959 ret.AddCost(tmp_ret);
6814
4cc8ebb6279d (svn r10053) -Fix: could not clear a level-crossing tile with tram tracks.
rubidium <rubidium@openttd.org>
parents: 6768
diff changeset
960 }
8859
40fb100b7b49 (svn r12622) -Fix: infinite loop in case your compiler decides that enums are unsigned by default. Patch by Dominik.
rubidium <rubidium@openttd.org>
parents: 8821
diff changeset
961 } while (rt-- != 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
962
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
963 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
964 DoCommand(tile, 0, 0, flags, 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
965 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
966 return ret;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
967 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
968
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
969 default:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
970 case ROAD_TILE_DEPOT:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
971 if (flags & DC_AUTO) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
972 return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
973 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
974 return RemoveRoadDepot(tile, flags);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
975 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
976 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
977
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
978
6248
0789677a15a0 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents: 6172
diff changeset
979 struct DrawRoadTileStruct {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
980 uint16 image;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
981 byte subcoord_x;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
982 byte subcoord_y;
6248
0789677a15a0 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents: 6172
diff changeset
983 };
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
984
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
985 #include "table/road_land.h"
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
986
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
987 /**
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
988 * Get the foundationtype of a RoadBits Slope combination
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
989 *
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
990 * @param tileh The Slope part
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
991 * @param bits The RoadBits part
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
992 * @return The resulting Foundation
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
993 */
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
994 Foundation GetRoadFoundation(Slope tileh, RoadBits 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
995 {
8734
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
996 /* Flat land and land without a road doesn't require a foundation */
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
997 if (tileh == SLOPE_FLAT || bits == ROAD_NONE) return FOUNDATION_NONE;
c370e9d5f5c4 (svn r12419) -Cleanup: of the internal road-piece building and removing.
skidd13 <skidd13@openttd.org>
parents: 8732
diff changeset
998
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
999 if (!IsSteepSlope(tileh)) {
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1000 /* Leveled RoadBits on a slope */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1001 if ((_invalid_tileh_slopes_road[0][tileh] & bits) == ROAD_NONE) return FOUNDATION_LEVELED;
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1002
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1003 /* Straight roads without foundation on a slope */
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1004 if (!IsSlopeWithOneCornerRaised(tileh) &&
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1005 (_invalid_tileh_slopes_road[1][tileh] & bits) == ROAD_NONE)
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1006 return FOUNDATION_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
1007 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1008
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1009 /* Roads on steep Slopes or on Slopes with one corner raised */
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
1010 return (bits == ROAD_X ? FOUNDATION_INCLINED_X : FOUNDATION_INCLINED_Y);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1011 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1012
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1013 const byte _road_sloped_sprites[14] = {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1014 0, 0, 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
1015 0, 1, 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
1016 3, 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
1017 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
1018 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1019
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1020 /**
6541
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1021 * Whether to draw unpaved roads regardless of the town zone.
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1022 * By default, OpenTTD always draws roads as unpaved if they are on a desert
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1023 * tile or above the snowline. Newgrf files, however, can set a bit that allows
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1024 * paved roads to be built on desert tiles as they would be on grassy tiles.
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1025 *
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1026 * @param tile The tile the road is on
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1027 * @param roadside What sort of road this is
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1028 * @return True if the road should be drawn unpaved regardless of the roadside.
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1029 */
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1030 static bool AlwaysDrawUnpavedRoads(TileIndex tile, Roadside roadside)
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1031 {
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1032 return (IsOnSnow(tile) &&
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: 9358
diff changeset
1033 !(_settings_game.game_creation.landscape == LT_TROPIC && HasGrfMiscBit(GMB_DESERT_PAVED_ROADS) &&
6541
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1034 roadside != ROADSIDE_BARREN && roadside != ROADSIDE_GRASS && roadside != ROADSIDE_GRASS_ROAD_WORKS));
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1035 }
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1036
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1037 /**
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1038 * Draws the catenary for the given tile
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1039 * @param ti information about the tile (slopes, height etc)
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1040 * @param tram the roadbits for the tram
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1041 */
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1042 void DrawTramCatenary(const TileInfo *ti, RoadBits tram)
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1043 {
8806
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8747
diff changeset
1044 /* Do not draw catenary if it is invisible */
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8747
diff changeset
1045 if (IsInvisibilitySet(TO_CATENARY)) return;
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8747
diff changeset
1046
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1047 /* Don't draw the catenary under a low bridge */
8528
58090cf32d23 (svn r12103) -Feature(tte): separate catenary transparency settings from building transparency settings
smatz <smatz@openttd.org>
parents: 8520
diff changeset
1048 if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && !IsTransparencySet(TO_CATENARY)) {
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1049 uint height = GetBridgeHeight(GetNorthernBridgeEnd(ti->tile));
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1050
6699
323f494a7076 (svn r9931) -Fix: some glitches with catenary and bridges.
rubidium <rubidium@openttd.org>
parents: 6697
diff changeset
1051 if (height <= GetTileMaxZ(ti->tile) + TILE_HEIGHT) return;
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1052 }
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1053
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1054 SpriteID front;
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1055 SpriteID back;
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1056
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1057 if (ti->tileh != SLOPE_FLAT) {
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1058 back = SPR_TRAMWAY_BACK_WIRES_SLOPED + _road_sloped_sprites[ti->tileh - 1];
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1059 front = SPR_TRAMWAY_FRONT_WIRES_SLOPED + _road_sloped_sprites[ti->tileh - 1];
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1060 } else {
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1061 back = SPR_TRAMWAY_BASE + _road_backpole_sprites_1[tram];
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1062 front = SPR_TRAMWAY_BASE + _road_frontwire_sprites_1[tram];
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1063 }
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1064
8528
58090cf32d23 (svn r12103) -Feature(tte): separate catenary transparency settings from building transparency settings
smatz <smatz@openttd.org>
parents: 8520
diff changeset
1065 AddSortableSpriteToDraw(back, PAL_NONE, ti->x, ti->y, 16, 16, TILE_HEIGHT + BB_HEIGHT_UNDER_BRIDGE, ti->z, IsTransparencySet(TO_CATENARY));
58090cf32d23 (svn r12103) -Feature(tte): separate catenary transparency settings from building transparency settings
smatz <smatz@openttd.org>
parents: 8520
diff changeset
1066 AddSortableSpriteToDraw(front, PAL_NONE, ti->x, ti->y, 16, 16, TILE_HEIGHT + BB_HEIGHT_UNDER_BRIDGE, ti->z, IsTransparencySet(TO_CATENARY));
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1067 }
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1068
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1069 /**
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1070 * Draws details on/around the road
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1071 * @param img the sprite to draw
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1072 * @param ti the tile to draw on
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1073 * @param dx the offset from the top of the BB of the tile
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1074 * @param dy the offset from the top of the BB of the tile
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1075 * @param h the height of the sprite to draw
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1076 */
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1077 static void DrawRoadDetail(SpriteID img, const TileInfo *ti, int dx, int dy, int h)
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1078 {
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1079 int x = ti->x | dx;
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1080 int y = ti->y | dy;
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1081 byte z = ti->z;
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1082 if (ti->tileh != SLOPE_FLAT) z = GetSlopeZ(x, y);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1083 AddSortableSpriteToDraw(img, PAL_NONE, x, y, 2, 2, h, z);
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1084 }
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1085
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1086 /**
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1087 * Draw ground sprite and road pieces
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1088 * @param ti TileInfo
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1089 */
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1090 static void DrawRoadBits(TileInfo *ti)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1091 {
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: 6626
diff changeset
1092 RoadBits road = GetRoadBits(ti->tile, ROADTYPE_ROAD);
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1093 RoadBits tram = GetRoadBits(ti->tile, ROADTYPE_TRAM);
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1094
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1095 SpriteID image = 0;
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1096 SpriteID pal = PAL_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
1097
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1098 if (ti->tileh != SLOPE_FLAT) {
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
1099 DrawFoundation(ti, GetRoadFoundation(ti->tileh, road | tram));
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1100
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
1101 /* DrawFoundation() modifies ti.
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
1102 * Default sloped sprites.. */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1103 if (ti->tileh != SLOPE_FLAT) image = _road_sloped_sprites[ti->tileh - 1] + 0x53F;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1104 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1105
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1106 if (image == 0) image = _road_tile_sprites_1[road != ROAD_NONE ? road : tram];
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
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1108 Roadside roadside = GetRoadside(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
1109
6541
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1110 if (AlwaysDrawUnpavedRoads(ti->tile, roadside)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1111 image += 19;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1112 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1113 switch (roadside) {
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1114 case ROADSIDE_BARREN: pal = PALETTE_TO_BARE_LAND; 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
1115 case ROADSIDE_GRASS: break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1116 case ROADSIDE_GRASS_ROAD_WORKS: break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1117 default: image -= 19; break; // Paved
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1118 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1119 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1120
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1121 DrawGroundSprite(image, 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
1122
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1123 /* For tram we overlay the road graphics with either tram tracks only
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1124 * (when there is actual road beneath the trams) or with tram tracks
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1125 * and some dirts which hides the road graphics */
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1126 if (tram != ROAD_NONE) {
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1127 if (ti->tileh != SLOPE_FLAT) {
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1128 image = _road_sloped_sprites[ti->tileh - 1] + SPR_TRAMWAY_SLOPED_OFFSET;
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1129 } else {
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1130 image = _road_tile_sprites_1[tram] - SPR_ROAD_Y;
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1131 }
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1132 image += (road == ROAD_NONE) ? SPR_TRAMWAY_TRAM : SPR_TRAMWAY_OVERLAY;
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1133 DrawGroundSprite(image, pal);
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1134 }
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1135
6965
1ab6e2557bef (svn r10221) -Fix: the one way sprites weren't drawn in the correct order, so they could remove the tramtrack in some cases.
rubidium <rubidium@openttd.org>
parents: 6950
diff changeset
1136 if (road != ROAD_NONE) {
1ab6e2557bef (svn r10221) -Fix: the one way sprites weren't drawn in the correct order, so they could remove the tramtrack in some cases.
rubidium <rubidium@openttd.org>
parents: 6950
diff changeset
1137 DisallowedRoadDirections drd = GetDisallowedRoadDirections(ti->tile);
1ab6e2557bef (svn r10221) -Fix: the one way sprites weren't drawn in the correct order, so they could remove the tramtrack in some cases.
rubidium <rubidium@openttd.org>
parents: 6950
diff changeset
1138 if (drd != DRD_NONE) {
1ab6e2557bef (svn r10221) -Fix: the one way sprites weren't drawn in the correct order, so they could remove the tramtrack in some cases.
rubidium <rubidium@openttd.org>
parents: 6950
diff changeset
1139 DrawRoadDetail(SPR_ONEWAY_BASE + drd - 1 + ((road == ROAD_X) ? 0 : 3), ti, 8, 8, 0);
1ab6e2557bef (svn r10221) -Fix: the one way sprites weren't drawn in the correct order, so they could remove the tramtrack in some cases.
rubidium <rubidium@openttd.org>
parents: 6950
diff changeset
1140 }
1ab6e2557bef (svn r10221) -Fix: the one way sprites weren't drawn in the correct order, so they could remove the tramtrack in some cases.
rubidium <rubidium@openttd.org>
parents: 6950
diff changeset
1141 }
1ab6e2557bef (svn r10221) -Fix: the one way sprites weren't drawn in the correct order, so they could remove the tramtrack in some cases.
rubidium <rubidium@openttd.org>
parents: 6950
diff changeset
1142
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1143 if (HasRoadWorks(ti->tile)) {
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
1144 /* Road works */
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1145 DrawGroundSprite((road | tram) & ROAD_X ? SPR_EXCAVATION_X : SPR_EXCAVATION_Y, PAL_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
1146 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1147 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1148
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1149 if (tram != ROAD_NONE) DrawTramCatenary(ti, tram);
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1150
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
1151 /* Return if full detail is disabled, or we are zoomed fully out. */
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
1152 if (!HasBit(_display_opt, DO_FULL_DETAIL) || _cur_dpi->zoom > ZOOM_LVL_DETAIL) 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
1153
8589
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1154 /* Do not draw details (street lights, trees) under low bridge */
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1155 if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && (roadside == ROADSIDE_TREES || roadside == ROADSIDE_STREET_LIGHTS)) {
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1156 uint height = GetBridgeHeight(GetNorthernBridgeEnd(ti->tile));
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1157 uint minz = GetTileMaxZ(ti->tile) + 2 * TILE_HEIGHT;
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1158
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1159 if (roadside == ROADSIDE_TREES) minz += TILE_HEIGHT;
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1160
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1161 if (height < minz) return;
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1162 }
86a968000cc9 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_)
smatz <smatz@openttd.org>
parents: 8571
diff changeset
1163
8647
16c86989601a (svn r12290) -Fix[FS#1807]: Do not draw trees nor lamps between tram tracks.(Roujin)
belugas <belugas@openttd.org>
parents: 8616
diff changeset
1164 /* If there are no road bits, return, as there is nothing left to do */
16c86989601a (svn r12290) -Fix[FS#1807]: Do not draw trees nor lamps between tram tracks.(Roujin)
belugas <belugas@openttd.org>
parents: 8616
diff changeset
1165 if (CountBits(road) < 2) return;
16c86989601a (svn r12290) -Fix[FS#1807]: Do not draw trees nor lamps between tram tracks.(Roujin)
belugas <belugas@openttd.org>
parents: 8616
diff changeset
1166
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
1167 /* Draw extra details. */
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1168 for (const DrawRoadTileStruct *drts = _road_display_table[roadside][road | tram]; drts->image != 0; drts++) {
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1169 DrawRoadDetail(drts->image, ti, drts->subcoord_x, drts->subcoord_y, 0x10);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1170 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1171 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1172
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1173 /** Tile callback function for rendering a road tile to the screen */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1174 static void DrawTile_Road(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
1175 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1176 switch (GetRoadTileType(ti->tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1177 case ROAD_TILE_NORMAL:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1178 DrawRoadBits(ti);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1179 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1180
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1181 case ROAD_TILE_CROSSING: {
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
1182 if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1183
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1184 SpriteID image = GetRailTypeInfo(GetRailType(ti->tile))->base_sprites.crossing;
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1185 SpriteID pal = PAL_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
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 if (GetCrossingRoadAxis(ti->tile) == AXIS_X) image++;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1188 if (IsCrossingBarred(ti->tile)) image += 2;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1189
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1190 Roadside roadside = GetRoadside(ti->tile);
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1191
6541
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1192 if (AlwaysDrawUnpavedRoads(ti->tile, roadside)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1193 image += 8;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1194 } else {
6541
b6b454522d0b (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros <maedhros@openttd.org>
parents: 6491
diff changeset
1195 switch (roadside) {
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1196 case ROADSIDE_BARREN: pal = PALETTE_TO_BARE_LAND; 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
1197 case ROADSIDE_GRASS: break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1198 default: image += 4; break; // Paved
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1199 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1200 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1201
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1202 DrawGroundSprite(image, pal);
9785
09b970522eb5 (svn r13927) -Add [YAPP]: Draw reserved tracks darker, toggeld by a patch setting. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9711
diff changeset
1203
09b970522eb5 (svn r13927) -Add [YAPP]: Draw reserved tracks darker, toggeld by a patch setting. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9711
diff changeset
1204 /* PBS debugging, draw reserved tracks darker */
10109
ef2f235f4ef4 (svn r14293) -Change: do not show PBS track reservation in the intro game
smatz <smatz@openttd.org>
parents: 10083
diff changeset
1205 if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && GetCrossingReservation(ti->tile)) {
9785
09b970522eb5 (svn r13927) -Add [YAPP]: Draw reserved tracks darker, toggeld by a patch setting. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9711
diff changeset
1206 DrawGroundSprite(GetCrossingRoadAxis(ti->tile) == AXIS_Y ? GetRailTypeInfo(GetRailType(ti->tile))->base_sprites.single_y : GetRailTypeInfo(GetRailType(ti->tile))->base_sprites.single_x, PALETTE_CRASH);
09b970522eb5 (svn r13927) -Add [YAPP]: Draw reserved tracks darker, toggeld by a patch setting. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9711
diff changeset
1207 }
09b970522eb5 (svn r13927) -Add [YAPP]: Draw reserved tracks darker, toggeld by a patch setting. (michi_cc)
rubidium <rubidium@openttd.org>
parents: 9711
diff changeset
1208
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1209 if (HasTileRoadType(ti->tile, ROADTYPE_TRAM)) {
6697
398474f3706e (svn r9929) -Fix [FS#803]: fix several drawing issues.
rubidium <rubidium@openttd.org>
parents: 6691
diff changeset
1210 DrawGroundSprite(SPR_TRAMWAY_OVERLAY + (GetCrossingRoadAxis(ti->tile) ^ 1), pal);
398474f3706e (svn r9929) -Fix [FS#803]: fix several drawing issues.
rubidium <rubidium@openttd.org>
parents: 6691
diff changeset
1211 DrawTramCatenary(ti, GetCrossingRoadBits(ti->tile));
398474f3706e (svn r9929) -Fix [FS#803]: fix several drawing issues.
rubidium <rubidium@openttd.org>
parents: 6691
diff changeset
1212 }
9154
046d0b6e0218 (svn r13016) -Codechange: unify the detection if rail catenary should be drawn
smatz <smatz@openttd.org>
parents: 9111
diff changeset
1213 if (HasCatenaryDrawn(GetRailType(ti->tile))) DrawCatenary(ti);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1214 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1215 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1216
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1217 default:
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1218 case ROAD_TILE_DEPOT: {
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
1219 if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1220
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1221 SpriteID palette = COMPANY_SPRITE_COLOR(GetTileOwner(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
1222
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1223 const DrawTileSprites *dts;
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1224 if (HasTileRoadType(ti->tile, ROADTYPE_TRAM)) {
6691
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1225 dts = &_tram_depot[GetRoadDepotDirection(ti->tile)];
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1226 } else {
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1227 dts = &_road_depot[GetRoadDepotDirection(ti->tile)];
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1228 }
d2fb32d942f7 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium <rubidium@openttd.org>
parents: 6689
diff changeset
1229
8571
b611278e4fed (svn r12149) -Codechange: Merge 'ground_sprite' and 'ground_pal' of DrawTileSprites into one PalSpriteID
frosch <frosch@openttd.org>
parents: 8570
diff changeset
1230 DrawGroundSprite(dts->ground.sprite, PAL_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
1231
8806
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8747
diff changeset
1232 /* End now if buildings are invisible */
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8747
diff changeset
1233 if (IsInvisibilitySet(TO_BUILDINGS)) break;
104bbcae351d (svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents: 8747
diff changeset
1234
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1235 for (const DrawTileSeqStruct *dtss = dts->seq; dtss->image.sprite != 0; dtss++) {
8570
2b1397dd930a (svn r12148) -Codechange: Merge 'image' and 'pal' of DrawTileSeqStruct into one PalSpriteID
frosch <frosch@openttd.org>
parents: 8563
diff changeset
1236 SpriteID image = dtss->image.sprite;
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1237 SpriteID 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
1238
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
1239 if (!IsTransparencySet(TO_BUILDINGS) && HasBit(image, PALETTE_MODIFIER_COLOR)) {
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1240 pal = palette;
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1241 } else {
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1242 pal = PAL_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
1243 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1244
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1245 AddSortableSpriteToDraw(
5668
3d6d9bff3dd8 (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents: 5643
diff changeset
1246 image, 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
1247 ti->x + dtss->delta_x, ti->y + dtss->delta_y,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1248 dtss->size_x, dtss->size_y,
7333
7110c41ab174 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents: 7332
diff changeset
1249 dtss->size_z, ti->z,
7849
e6ee8bfd9045 (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents: 7832
diff changeset
1250 IsTransparencySet(TO_BUILDINGS)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1251 );
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1252 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1253 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1254 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1255 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1256 DrawBridgeMiddle(ti);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1257 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1258
6666
61e17c4bac25 (svn r9897) -Codechange: prepare the toolbar for more road types.
rubidium <rubidium@openttd.org>
parents: 6662
diff changeset
1259 void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1260 {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1261 SpriteID palette = COMPANY_SPRITE_COLOR(_local_company);
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1262 const DrawTileSprites *dts = (rt == ROADTYPE_TRAM) ? &_tram_depot[dir] : &_road_depot[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
1263
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1264 x += 33;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1265 y += 17;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1266
8571
b611278e4fed (svn r12149) -Codechange: Merge 'ground_sprite' and 'ground_pal' of DrawTileSprites into one PalSpriteID
frosch <frosch@openttd.org>
parents: 8570
diff changeset
1267 DrawSprite(dts->ground.sprite, PAL_NONE, x, y);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1268
8821
2589a14c08fb (svn r12569) -Cleanup: variable scope and coding style in road*.cpp
smatz <smatz@openttd.org>
parents: 8806
diff changeset
1269 for (const DrawTileSeqStruct *dtss = dts->seq; dtss->image.sprite != 0; dtss++) {
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 Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z);
8570
2b1397dd930a (svn r12148) -Codechange: Merge 'image' and 'pal' of DrawTileSeqStruct into one PalSpriteID
frosch <frosch@openttd.org>
parents: 8563
diff changeset
1271 SpriteID image = dtss->image.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
1272
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7857
diff changeset
1273 DrawSprite(image, HasBit(image, PALETTE_MODIFIER_COLOR) ? palette : PAL_NONE, x + pt.x, y + pt.y);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1274 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1275 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1276
10289
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1277 void InvalidateTownForRoadTile()
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1278 {
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1279 TileIndex map_size = MapSize();
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1280
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1281 for (TileIndex t = 0; t < map_size; t++) {
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1282 if (IsTileType(t, MP_ROAD) && GetRoadOwner(t, ROADTYPE_ROAD) != OWNER_TOWN) {
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1283 /* GetRoadOwner(t, ROADTYPE_ROAD) is valid for road tiles even when there is no road */
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1284 SetTownIndex(t, (TownID)INVALID_TOWN);
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1285 }
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1286 }
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1287 }
5f3f0d0a6e07 (svn r14528) -Codechange: cache the closest town for all road tiles instead of only roads owned by tiles. This replaces a O(n) search over all towns from the road's tileloop with a O(1) lookup (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10260
diff changeset
1288
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 static uint GetSlopeZ_Road(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
1290 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1291 uint z;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1292 Slope tileh = GetTileSlope(tile, &z);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1293
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1294 if (tileh == SLOPE_FLAT) return z;
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1295 if (IsNormalRoad(tile)) {
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
1296 Foundation f = GetRoadFoundation(tileh, GetAllRoadBits(tile));
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
1297 z += ApplyFoundationToSlope(f, &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
1298 return z + GetPartialZ(x & 0xF, y & 0xF, tileh);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1299 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1300 return z + TILE_HEIGHT;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1301 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1302 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1303
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
1304 static Foundation GetFoundation_Road(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
1305 {
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1306 if (IsNormalRoad(tile)) {
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
1307 return GetRoadFoundation(tileh, GetAllRoadBits(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
1308 } else {
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
1309 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
1310 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1311 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1312
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1313 static void GetAcceptedCargo_Road(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
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 /* 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
1316 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1317
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1318 static void AnimateTile_Road(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
1319 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1320 if (IsLevelCrossing(tile)) 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
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
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1323
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1324 static const Roadside _town_road_types[][2] = {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1325 { ROADSIDE_GRASS, ROADSIDE_GRASS },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1326 { ROADSIDE_PAVED, ROADSIDE_PAVED },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1327 { ROADSIDE_PAVED, ROADSIDE_PAVED },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1328 { ROADSIDE_TREES, ROADSIDE_TREES },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1329 { ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1330 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1331
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1332 static const Roadside _town_road_types_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
1333 { ROADSIDE_GRASS, ROADSIDE_GRASS },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1334 { ROADSIDE_PAVED, ROADSIDE_PAVED },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1335 { ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1336 { ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED },
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1337 { ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1338 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1339
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1340
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1341 static void TileLoop_Road(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
1342 {
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: 9358
diff changeset
1343 switch (_settings_game.game_creation.landscape) {
6357
96b1652c6011 (svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas <belugas@openttd.org>
parents: 6343
diff changeset
1344 case LT_ARCTIC:
6343
f75b72d9fc98 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros <maedhros@openttd.org>
parents: 6259
diff changeset
1345 if (IsOnSnow(tile) != (GetTileZ(tile) > GetSnowLine())) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1346 ToggleSnow(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1347 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
1348 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1349 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1350
6357
96b1652c6011 (svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas <belugas@openttd.org>
parents: 6343
diff changeset
1351 case LT_TROPIC:
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1352 if (GetTropicZone(tile) == TROPICZONE_DESERT && !IsOnDesert(tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1353 ToggleDesert(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1354 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
1355 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1356 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1357 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1358
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1359 if (IsRoadDepot(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
1360
10236
59398a628f10 (svn r14464) -Codechange: replace (uint)-1 with UINT_MAX (PhilSophus)
rubidium <rubidium@openttd.org>
parents: 10207
diff changeset
1361 const Town *t = ClosestTownFromTile(tile, UINT_MAX);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1362 if (!HasRoadWorks(tile)) {
8308
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8264
diff changeset
1363 HouseZonesBits grp = HZB_TOWN_EDGE;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1364
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1365 if (t != NULL) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1366 grp = GetTownRadiusGroup(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
1367
6393
ffd35446c110 (svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas <belugas@openttd.org>
parents: 6368
diff changeset
1368 /* Show an animation to indicate road work */
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 if (t->road_build_months != 0 &&
8308
e9042729a5c5 (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones
belugas <belugas@openttd.org>
parents: 8264
diff changeset
1370 (DistanceManhattan(t->xy, tile) < 8 || grp != HZB_TOWN_EDGE) &&
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1371 IsNormalRoad(tile) && CountBits(GetAllRoadBits(tile)) > 1 ) {
7967
e30c5ec2d272 (svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13 <skidd13@openttd.org>
parents: 7954
diff changeset
1372 if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicleOnGround(tile) && Chance16(1, 40)) {
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1373 StartRoadWorks(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1374
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1375 SndPlayTileFx(SND_21_JACKHAMMER, tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1376 CreateEffectVehicleAbove(
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1377 TileX(tile) * TILE_SIZE + 7,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1378 TileY(tile) * TILE_SIZE + 7,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1379 0,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1380 EV_BULLDOZER);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1381 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
1382 return;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1383 }
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 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1386
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1387 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1388 /* Adjust road ground type depending on 'grp' (grp is the distance to the center) */
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: 9358
diff changeset
1389 const Roadside* new_rs = (_settings_game.game_creation.landscape == LT_TOYLAND) ? _town_road_types_2[grp] : _town_road_types[grp];
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1390 Roadside cur_rs = GetRoadside(tile);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1391
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1392 /* We have our desired type, do nothing */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1393 if (cur_rs == new_rs[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
1394
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1395 /* We have the pre-type of the desired type, switch to the desired type */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1396 if (cur_rs == new_rs[1]) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1397 cur_rs = new_rs[0];
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1398 /* We have barren land, install the pre-type */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1399 } else if (cur_rs == ROADSIDE_BARREN) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1400 cur_rs = new_rs[1];
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1401 /* We're totally off limits, remove any installation and make barren land */
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1402 } else {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1403 cur_rs = ROADSIDE_BARREN;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1404 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1405 SetRoadside(tile, cur_rs);
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1406 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
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 } else if (IncreaseRoadWorksCounter(tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1409 TerminateRoadWorks(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: 7601
diff changeset
1410
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: 9358
diff changeset
1411 if (_settings_game.economy.mod_road_rebuild) {
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: 7601
diff changeset
1412 /* Generate a nicer town surface */
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: 7601
diff changeset
1413 const RoadBits old_rb = GetAnyRoadBits(tile, ROADTYPE_ROAD);
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: 7601
diff changeset
1414 const RoadBits new_rb = CleanUpRoadBits(tile, old_rb);
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: 7601
diff changeset
1415
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: 7601
diff changeset
1416 if (old_rb != new_rb) {
8428
f92ccc2f6f17 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD
smatz <smatz@openttd.org>
parents: 8413
diff changeset
1417 RemoveRoad(tile, DC_EXEC | DC_AUTO | DC_NO_WATER, (old_rb ^ new_rb), ROADTYPE_ROAD, true);
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: 7601
diff changeset
1418 }
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: 7601
diff changeset
1419 }
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: 7601
diff changeset
1420
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1421 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
1422 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1423 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1424
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1425 static void ClickTile_Road(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
1426 {
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1427 if (IsRoadDepot(tile)) ShowDepotWindow(tile, VEH_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
1428 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1429
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1430 /* Converts RoadBits to TrackBits */
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1431 static const byte _road_trackbits[16] = {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1432 0x0, 0x0, 0x0, 0x10, 0x0, 0x2, 0x8, 0x1A, 0x0, 0x4, 0x1, 0x15, 0x20, 0x26, 0x29, 0x3F,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1433 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1434
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1435 static TrackStatus GetTileTrackStatus_Road(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
1436 {
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1437 TrackdirBits trackdirbits = TRACKDIR_BIT_NONE;
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1438 TrackdirBits red_signals = TRACKDIR_BIT_NONE; // crossing barred
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1439 switch (mode) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1440 case TRANSPORT_RAIL:
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1441 if (IsLevelCrossing(tile)) trackdirbits = TrackBitsToTrackdirBits(GetCrossingRailBits(tile));
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1442 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
1443
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1444 case TRANSPORT_ROAD:
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1445 if ((GetRoadTypes(tile) & sub_mode) == 0) 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
1446 switch (GetRoadTileType(tile)) {
6683
6984c0dbbb07 (svn r9914) -Codechange: prepare GTTS and the pathfinders to handle multiple road types on a single tile.
rubidium <rubidium@openttd.org>
parents: 6679
diff changeset
1447 case ROAD_TILE_NORMAL: {
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1448 const uint drd_to_multiplier[DRD_END] = { 0x101, 0x100, 0x1, 0x0 };
6683
6984c0dbbb07 (svn r9914) -Codechange: prepare GTTS and the pathfinders to handle multiple road types on a single tile.
rubidium <rubidium@openttd.org>
parents: 6679
diff changeset
1449 RoadType rt = (RoadType)FindFirstBit(sub_mode);
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1450 RoadBits bits = GetRoadBits(tile, rt);
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1451
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1452 /* no roadbit at this side of tile, return 0 */
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1453 if (side != INVALID_DIAGDIR && (DiagDirToRoadBits(side) & bits) == 0) break;
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1454
6764
6ce333c8fd7e (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium <rubidium@openttd.org>
parents: 6761
diff changeset
1455 uint multiplier = drd_to_multiplier[rt == ROADTYPE_TRAM ? DRD_NONE : GetDisallowedRoadDirections(tile)];
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1456 if (!HasRoadWorks(tile)) trackdirbits = (TrackdirBits)(_road_trackbits[bits] * multiplier);
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1457 break;
6683
6984c0dbbb07 (svn r9914) -Codechange: prepare GTTS and the pathfinders to handle multiple road types on a single tile.
rubidium <rubidium@openttd.org>
parents: 6679
diff changeset
1458 }
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 case ROAD_TILE_CROSSING: {
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1461 Axis axis = GetCrossingRoadAxis(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
1462
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1463 if (side != INVALID_DIAGDIR && axis != DiagDirToAxis(side)) break;
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1464
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1465 trackdirbits = TrackBitsToTrackdirBits(AxisToTrackBits(axis));
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1466 if (IsCrossingBarred(tile)) red_signals = trackdirbits;
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1467 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
1468 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1469
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1470 default:
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1471 case ROAD_TILE_DEPOT: {
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1472 DiagDirection dir = GetRoadDepotDirection(tile);
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1473
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1474 if (side != INVALID_DIAGDIR && side != dir) break;
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1475
9224
c8a0fa0e208a (svn r13090) -Codechange: add functions for direct conversion from DiagDirection to Track and Trackbits
smatz <smatz@openttd.org>
parents: 9154
diff changeset
1476 trackdirbits = TrackBitsToTrackdirBits(DiagDirToDiagTrackBits(dir));
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1477 break;
8596
ae0c04ca28d2 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz <smatz@openttd.org>
parents: 8589
diff changeset
1478 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1479 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1480 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1481
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1482 default: break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1483 }
8616
9e46ac001a8c (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch <frosch@openttd.org>
parents: 8603
diff changeset
1484 return CombineTrackStatus(trackdirbits, red_signals);
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1485 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1486
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1487 static const StringID _road_tile_strings[] = {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1488 STR_1814_ROAD,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1489 STR_1814_ROAD,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1490 STR_1814_ROAD,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1491 STR_1815_ROAD_WITH_STREETLIGHTS,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1492 STR_1814_ROAD,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1493 STR_1816_TREE_LINED_ROAD,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1494 STR_1814_ROAD,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1495 STR_1814_ROAD,
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1496 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1497
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1498 static void GetTileDesc_Road(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
1499 {
9322
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1500 Owner rail_owner = INVALID_OWNER;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1501 Owner road_owner = INVALID_OWNER;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1502 Owner tram_owner = INVALID_OWNER;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
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 switch (GetRoadTileType(tile)) {
9322
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1505 case ROAD_TILE_CROSSING: {
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1506 td->str = STR_1818_ROAD_RAIL_LEVEL_CROSSING;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1507 RoadTypes rts = GetRoadTypes(tile);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1508 rail_owner = GetTileOwner(tile);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1509 if (HasBit(rts, ROADTYPE_ROAD)) road_owner = GetRoadOwner(tile, ROADTYPE_ROAD);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1510 if (HasBit(rts, ROADTYPE_TRAM)) tram_owner = GetRoadOwner(tile, ROADTYPE_TRAM);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1511 break;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1512 }
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1513
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1514 case ROAD_TILE_DEPOT:
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1515 td->str = STR_1817_ROAD_VEHICLE_DEPOT;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1516 road_owner = GetTileOwner(tile); // Tile has only one owner, roadtype does not matter
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1517 break;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1518
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1519 default: {
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1520 RoadTypes rts = GetRoadTypes(tile);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1521 td->str = (HasBit(rts, ROADTYPE_ROAD) ? _road_tile_strings[GetRoadside(tile)] : STR_TRAMWAY);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1522 if (HasBit(rts, ROADTYPE_ROAD)) road_owner = GetRoadOwner(tile, ROADTYPE_ROAD);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1523 if (HasBit(rts, ROADTYPE_TRAM)) tram_owner = GetRoadOwner(tile, ROADTYPE_TRAM);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1524 break;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1525 }
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1526 }
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1527
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1528 /* Now we have to discover, if the tile has only one owner or many:
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1529 * - Find a first_owner of the tile. (Currently road or tram must be present, but this will break when the third type becomes available)
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1530 * - Compare the found owner with the other owners, and test if they differ.
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1531 * Note: If road exists it will be the first_owner.
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1532 */
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1533 Owner first_owner = (road_owner == INVALID_OWNER ? tram_owner : road_owner);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1534 bool mixed_owners = (tram_owner != INVALID_OWNER && tram_owner != first_owner) || (rail_owner != INVALID_OWNER && rail_owner != first_owner);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1535
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1536 if (mixed_owners) {
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1537 /* Multiple owners */
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1538 td->owner_type[0] = (rail_owner == INVALID_OWNER ? STR_NULL : STR_RAIL_OWNER);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1539 td->owner[0] = rail_owner;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1540 td->owner_type[1] = (road_owner == INVALID_OWNER ? STR_NULL : STR_ROAD_OWNER);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1541 td->owner[1] = road_owner;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1542 td->owner_type[2] = (tram_owner == INVALID_OWNER ? STR_NULL : STR_TRAM_OWNER);
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1543 td->owner[2] = tram_owner;
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1544 } else {
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1545 /* One to rule them all */
258ab31489e0 (svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch <frosch@openttd.org>
parents: 9298
diff changeset
1546 td->owner[0] = first_owner;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1547 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1548 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1549
6723
331e72ee78e5 (svn r9955) -Codechange: Make _roadveh_enter_depot_unk0 slightly less mysterious.
maedhros <maedhros@openttd.org>
parents: 6719
diff changeset
1550 /**
331e72ee78e5 (svn r9955) -Codechange: Make _roadveh_enter_depot_unk0 slightly less mysterious.
maedhros <maedhros@openttd.org>
parents: 6719
diff changeset
1551 * Given the direction the road depot is pointing, this is the direction the
331e72ee78e5 (svn r9955) -Codechange: Make _roadveh_enter_depot_unk0 slightly less mysterious.
maedhros <maedhros@openttd.org>
parents: 6719
diff changeset
1552 * vehicle should be travelling in in order to enter the depot.
331e72ee78e5 (svn r9955) -Codechange: Make _roadveh_enter_depot_unk0 slightly less mysterious.
maedhros <maedhros@openttd.org>
parents: 6719
diff changeset
1553 */
331e72ee78e5 (svn r9955) -Codechange: Make _roadveh_enter_depot_unk0 slightly less mysterious.
maedhros <maedhros@openttd.org>
parents: 6719
diff changeset
1554 static const byte _roadveh_enter_depot_dir[4] = {
331e72ee78e5 (svn r9955) -Codechange: Make _roadveh_enter_depot_unk0 slightly less mysterious.
maedhros <maedhros@openttd.org>
parents: 6719
diff changeset
1555 TRACKDIR_X_SW, TRACKDIR_Y_NW, TRACKDIR_X_NE, TRACKDIR_Y_SE
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 };
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1557
8119
b6ec923e9fa8 (svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium <rubidium@openttd.org>
parents: 8116
diff changeset
1558 static VehicleEnterTileStatus VehicleEnter_Road(Vehicle *v, TileIndex tile, int x, int y)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1559 {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1560 switch (GetRoadTileType(tile)) {
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1561 case ROAD_TILE_CROSSING:
8342
441cda3cfbdb (svn r11908) -Fix: update crossing when merging a company, when building a crossing and after loading older savegame
smatz <smatz@openttd.org>
parents: 8308
diff changeset
1562 if (v->type == VEH_TRAIN) {
441cda3cfbdb (svn r11908) -Fix: update crossing when merging a company, when building a crossing and after loading older savegame
smatz <smatz@openttd.org>
parents: 8308
diff changeset
1563 /* it should be barred */
441cda3cfbdb (svn r11908) -Fix: update crossing when merging a company, when building a crossing and after loading older savegame
smatz <smatz@openttd.org>
parents: 8308
diff changeset
1564 assert(IsCrossingBarred(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
1565 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1566 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1567
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1568 case ROAD_TILE_DEPOT:
6259
4a39d6291d58 (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium <rubidium@openttd.org>
parents: 6256
diff changeset
1569 if (v->type == VEH_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
1570 v->u.road.frame == 11 &&
6723
331e72ee78e5 (svn r9955) -Codechange: Make _roadveh_enter_depot_unk0 slightly less mysterious.
maedhros <maedhros@openttd.org>
parents: 6719
diff changeset
1571 _roadveh_enter_depot_dir[GetRoadDepotDirection(tile)] == v->u.road.state) {
6857
0005a9ed1903 (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros <maedhros@openttd.org>
parents: 6814
diff changeset
1572 v->u.road.state = RVSB_IN_DEPOT;
0005a9ed1903 (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros <maedhros@openttd.org>
parents: 6814
diff changeset
1573 v->vehstatus |= VS_HIDDEN;
0005a9ed1903 (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros <maedhros@openttd.org>
parents: 6814
diff changeset
1574 v->direction = ReverseDir(v->direction);
7492
09743324277c (svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium <rubidium@openttd.org>
parents: 7442
diff changeset
1575 if (v->Next() == NULL) VehicleEnterDepot(v);
6857
0005a9ed1903 (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros <maedhros@openttd.org>
parents: 6814
diff changeset
1576 v->tile = tile;
0005a9ed1903 (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros <maedhros@openttd.org>
parents: 6814
diff changeset
1577
0005a9ed1903 (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros <maedhros@openttd.org>
parents: 6814
diff changeset
1578 InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
5991
1b793d99b5ba (svn r8698) -Codechange: enumify the returns of VehicleEnterTile
rubidium <rubidium@openttd.org>
parents: 5942
diff changeset
1579 return VETSB_ENTERED_WORMHOLE;
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1580 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1581 break;
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1582
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1583 default: 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 }
5991
1b793d99b5ba (svn r8698) -Codechange: enumify the returns of VehicleEnterTile
rubidium <rubidium@openttd.org>
parents: 5942
diff changeset
1585 return VETSB_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
1586 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1587
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1588
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1589 static void ChangeTileOwner_Road(TileIndex tile, Owner old_owner, Owner new_owner)
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1590 {
8563
992fa65afba1 (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch <frosch@openttd.org>
parents: 8560
diff changeset
1591 if (IsRoadDepot(tile)) {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1592 if (GetTileOwner(tile) == old_owner) {
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1593 if (new_owner == INVALID_OWNER) {
8519
0e4b2a37af1f (svn r12094) -Codechange: use DC_BANKRUPT command flag when removing player property to allow further fixes
smatz <smatz@openttd.org>
parents: 8428
diff changeset
1594 DoCommand(tile, 0, 0, DC_EXEC | DC_BANKRUPT, CMD_LANDSCAPE_CLEAR);
6717
754723a35f2b (svn r9949) -Fix: (road) depots got deowned on bankrupts.
rubidium <rubidium@openttd.org>
parents: 6716
diff changeset
1595 } else {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1596 SetTileOwner(tile, new_owner);
6717
754723a35f2b (svn r9949) -Fix: (road) depots got deowned on bankrupts.
rubidium <rubidium@openttd.org>
parents: 6716
diff changeset
1597 }
6689
c8daf1a1ec28 (svn r9921) -Fix (r9892): ownership wasn't properly propagated on owner changes.
rubidium <rubidium@openttd.org>
parents: 6683
diff changeset
1598 }
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: 6626
diff changeset
1599 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
1600 }
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1601
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: 6626
diff changeset
1602 for (RoadType rt = ROADTYPE_ROAD; rt < ROADTYPE_END; rt++) {
9341
98ef22a4841d (svn r13233) -Fix: Replace some (incorrect) evaluations of TileOwner by RoadOwner.
frosch <frosch@openttd.org>
parents: 9322
diff changeset
1603 /* Update all roadtypes, no matter if they are present */
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1604 if (GetRoadOwner(tile, rt) == old_owner) {
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1605 SetRoadOwner(tile, rt, new_owner == INVALID_OWNER ? OWNER_NONE : new_owner);
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: 6626
diff changeset
1606 }
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: 6626
diff changeset
1607 }
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
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: 6626
diff changeset
1609 if (IsLevelCrossing(tile)) {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1610 if (GetTileOwner(tile) == old_owner) {
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1611 if (new_owner == INVALID_OWNER) {
8598
ef2c93a9589d (svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability
smatz <smatz@openttd.org>
parents: 8596
diff changeset
1612 DoCommand(tile, 0, GetCrossingRailTrack(tile), DC_EXEC | DC_BANKRUPT, CMD_REMOVE_SINGLE_RAIL);
6689
c8daf1a1ec28 (svn r9921) -Fix (r9892): ownership wasn't properly propagated on owner changes.
rubidium <rubidium@openttd.org>
parents: 6683
diff changeset
1613 } else {
10207
c54d140df948 (svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents: 10130
diff changeset
1614 SetTileOwner(tile, new_owner);
6689
c8daf1a1ec28 (svn r9921) -Fix (r9892): ownership wasn't properly propagated on owner changes.
rubidium <rubidium@openttd.org>
parents: 6683
diff changeset
1615 }
c8daf1a1ec28 (svn r9921) -Fix (r9892): ownership wasn't properly propagated on owner changes.
rubidium <rubidium@openttd.org>
parents: 6683
diff changeset
1616 }
5584
4b26bd55bd24 (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff changeset
1617 }
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
7494
3f6f5fcc079a (svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium <rubidium@openttd.org>
parents: 7492
diff changeset
1620 static CommandCost TerraformTile_Road(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: 7492
diff changeset
1621 {
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: 9358
diff changeset
1622 if (_settings_game.construction.build_on_slopes && AutoslopeEnabled()) {
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: 7539
diff changeset
1623 switch (GetRoadTileType(tile)) {
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: 7539
diff changeset
1624 case ROAD_TILE_CROSSING:
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
1625 if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HasBit(VALID_LEVEL_CROSSING_SLOPES, 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: 7539
diff changeset
1626 break;
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: 7539
diff changeset
1627
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: 7539
diff changeset
1628 case ROAD_TILE_DEPOT:
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
1629 if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRoadDepotDirection(tile))) 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: 7539
diff changeset
1630 break;
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: 7539
diff changeset
1631
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: 7539
diff changeset
1632 case ROAD_TILE_NORMAL: {
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: 7539
diff changeset
1633 RoadBits bits = GetAllRoadBits(tile);
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: 7539
diff changeset
1634 RoadBits bits_copy = bits;
10017
005e91956321 (svn r14176) -Fix: better 'safe' than ... 'save'
smatz <smatz@openttd.org>
parents: 9789
diff changeset
1635 /* Check if the slope-road_bits combination is valid at all, i.e. it is safe to call GetRoadFoundation(). */
8744
bcc06c9be6ef (svn r12440) -Fix [FS#1694]: Make the road building and road removing conditions more union
skidd13 <skidd13@openttd.org>
parents: 8734
diff changeset
1636 if (!CmdFailed(CheckRoadSlope(tileh_new, &bits_copy, ROAD_NONE, ROAD_NONE))) {
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: 7539
diff changeset
1637 /* CheckRoadSlope() sometimes changes the road_bits, if it does not agree with them. */
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: 7539
diff changeset
1638 if (bits == bits_copy) {
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: 7539
diff changeset
1639 uint z_old;
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: 7539
diff changeset
1640 Slope tileh_old = GetTileSlope(tile, &z_old);
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: 7539
diff changeset
1641
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: 7539
diff changeset
1642 /* Get the slope on top of the foundation */
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: 7539
diff changeset
1643 z_old += ApplyFoundationToSlope(GetRoadFoundation(tileh_old, bits), &tileh_old);
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: 7539
diff changeset
1644 z_new += ApplyFoundationToSlope(GetRoadFoundation(tileh_new, bits), &tileh_new);
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: 7539
diff changeset
1645
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: 7539
diff changeset
1646 /* The surface slope must not be changed */
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
1647 if ((z_old == z_new) && (tileh_old == 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: 7539
diff changeset
1648 }
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: 7539
diff changeset
1649 }
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: 7539
diff changeset
1650 break;
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: 7539
diff changeset
1651 }
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: 7539
diff changeset
1652
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: 7539
diff changeset
1653 default: NOT_REACHED();
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: 7539
diff changeset
1654 }
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: 7539
diff changeset
1655 }
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: 7539
diff changeset
1656
7494
3f6f5fcc079a (svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium <rubidium@openttd.org>
parents: 7492
diff changeset
1657 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: 7492
diff changeset
1658 }
3f6f5fcc079a (svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium <rubidium@openttd.org>
parents: 7492
diff changeset
1659
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1660 /** Tile callback functions for road tiles */
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
1661 extern const TileTypeProcs _tile_type_road_procs = {
10260
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1662 DrawTile_Road, // draw_tile_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1663 GetSlopeZ_Road, // get_slope_z_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1664 ClearTile_Road, // clear_tile_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1665 GetAcceptedCargo_Road, // get_accepted_cargo_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1666 GetTileDesc_Road, // get_tile_desc_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1667 GetTileTrackStatus_Road, // get_tile_track_status_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1668 ClickTile_Road, // click_tile_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1669 AnimateTile_Road, // animate_tile_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1670 TileLoop_Road, // tile_loop_clear
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1671 ChangeTileOwner_Road, // change_tile_owner_clear
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1672 NULL, // get_produced_cargo_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1673 VehicleEnter_Road, // vehicle_enter_tile_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1674 GetFoundation_Road, // get_foundation_proc
d23fed9a51e2 (svn r14491) -Documentation: updates/additions of doxygen docs (Alberth)
rubidium <rubidium@openttd.org>
parents: 10236
diff changeset
1675 TerraformTile_Road, // 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
1676 };