author | rubidium |
Thu, 30 Aug 2007 17:17:04 +0000 | |
changeset 7494 | ab05bad37410 |
parent 7443 | afccc2f43989 |
child 7497 | 40e457c0a8ac |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
3 |
/** @file water_cmd.cpp */ |
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1796
diff
changeset
|
6 |
#include "openttd.h" |
3189
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
7 |
#include "bridge_map.h" |
6160
fa42299e967e
(svn r8908) -Codechange: declaration of DrawBridgeMiddle does not belong in a map accessors header.
rubidium
parents:
6134
diff
changeset
|
8 |
#include "bridge.h" |
6134 | 9 |
#include "cmd_helper.h" |
3338
7cff208f0446
(svn r4120) Use the new station functions where appropriate
tron
parents:
3275
diff
changeset
|
10 |
#include "station_map.h" |
1363
775a7ee52369
(svn r1867) Include tables/sprites.h only in files which need it
tron
parents:
1359
diff
changeset
|
11 |
#include "table/sprites.h" |
507
04b5403aaf6b
(svn r815) Include strings.h only in the files which need it.
tron
parents:
497
diff
changeset
|
12 |
#include "table/strings.h" |
7266
b16e67e992b4
(svn r10587) -Codechange: move the string/dparam related stuff from variables.h to strings.h
rubidium
parents:
7010
diff
changeset
|
13 |
#include "strings.h" |
2163
b17b313113a0
(svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents:
2148
diff
changeset
|
14 |
#include "functions.h" |
6453
226bcddeba32
(svn r9609) -Codechange: Move some function prototypes out of functions.h and into landscape.h, and add a few where they didn't exist.
maedhros
parents:
6432
diff
changeset
|
15 |
#include "landscape.h" |
679
04ca2cd69420
(svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
588
diff
changeset
|
16 |
#include "map.h" |
1209
2e00193652b2
(svn r1713) Split off several functions which query/set information about a single tile from map.h and put them into a seperate file tile.h
tron
parents:
1132
diff
changeset
|
17 |
#include "tile.h" |
0 | 18 |
#include "vehicle.h" |
19 |
#include "viewport.h" |
|
20 |
#include "command.h" |
|
21 |
#include "town.h" |
|
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
22 |
#include "news.h" |
337
cbe0c766c947
(svn r513) Merge revisions 402, 416, 417, 478, 479, 511, 512 from map to trunk
tron
parents:
314
diff
changeset
|
23 |
#include "sound.h" |
1313
f1013ec3d318
(svn r1817) -Codechange: Moved depot-functions to depot.c
truelight
parents:
1214
diff
changeset
|
24 |
#include "depot.h" |
1752
d65cd19f7117
(svn r2256) - Fix: Trains cannot find a depot when they are in a tunnel. (glx)
matthijs
parents:
1632
diff
changeset
|
25 |
#include "vehicle_gui.h" |
2676
59b65b4fb480
(svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents:
2657
diff
changeset
|
26 |
#include "train.h" |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
27 |
#include "roadveh.h" |
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
28 |
#include "water_map.h" |
5210
3415ef43c70a
(svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents:
4848
diff
changeset
|
29 |
#include "newgrf.h" |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
30 |
#include "newgrf_canal.h" |
7389
08d6a6265ced
(svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium
parents:
7335
diff
changeset
|
31 |
#include "misc/autoptr.hpp" |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
32 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
33 |
static const SpriteID _water_shore_sprites[] = { |
2517
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
34 |
0, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
35 |
SPR_SHORE_TILEH_1, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
36 |
SPR_SHORE_TILEH_2, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
37 |
SPR_SHORE_TILEH_3, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
38 |
SPR_SHORE_TILEH_4, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
39 |
0, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
40 |
SPR_SHORE_TILEH_6, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
41 |
0, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
42 |
SPR_SHORE_TILEH_8, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
43 |
SPR_SHORE_TILEH_9, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
44 |
0, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
45 |
0, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
46 |
SPR_SHORE_TILEH_12, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
47 |
0, |
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2502
diff
changeset
|
48 |
0 |
2261
d3554e5d3e86
(svn r2781) Fix some of the issues with variables in .h files.
ludde
parents:
2186
diff
changeset
|
49 |
}; |
d3554e5d3e86
(svn r2781) Fix some of the issues with variables in .h files.
ludde
parents:
2186
diff
changeset
|
50 |
|
d3554e5d3e86
(svn r2781) Fix some of the issues with variables in .h files.
ludde
parents:
2186
diff
changeset
|
51 |
|
5940
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
52 |
static Vehicle *FindFloodableVehicleOnTile(TileIndex tile); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
53 |
static void FloodVehicle(Vehicle *v); |
0 | 54 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
55 |
/** Build a ship depot. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
56 |
* @param tile tile where ship depot is built |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
57 |
* @param flags type of operation |
6134 | 58 |
* @param p1 bit 0 depot orientation (Axis) |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
59 |
* @param p2 unused |
0 | 60 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
61 |
CommandCost CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 62 |
{ |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
63 |
TileIndex tile2; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
64 |
|
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
65 |
CommandCost cost, ret; |
0 | 66 |
|
67 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
|
68 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
69 |
if (!EnsureNoVehicle(tile)) return CMD_ERROR; |
0 | 70 |
|
6134 | 71 |
Axis axis = Extract<Axis, 0>(p1); |
72 |
||
73 |
tile2 = tile + (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
74 |
if (!EnsureNoVehicle(tile2)) return CMD_ERROR; |
0 | 75 |
|
76 |
if (!IsClearWaterTile(tile) || !IsClearWaterTile(tile2)) |
|
77 |
return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER); |
|
78 |
||
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
79 |
if (IsBridgeAbove(tile) || IsBridgeAbove(tile2)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
80 |
|
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
81 |
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
82 |
if (CmdFailed(ret)) return CMD_ERROR; |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
83 |
ret = DoCommand(tile2, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
84 |
if (CmdFailed(ret)) return CMD_ERROR; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
85 |
|
7389
08d6a6265ced
(svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium
parents:
7335
diff
changeset
|
86 |
Depot *depot = new Depot(tile); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
87 |
if (depot == NULL) return CMD_ERROR; |
7389
08d6a6265ced
(svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium
parents:
7335
diff
changeset
|
88 |
AutoPtrT<Depot> d_auto_delete = depot; |
0 | 89 |
|
90 |
if (flags & DC_EXEC) { |
|
1313
f1013ec3d318
(svn r1817) -Codechange: Moved depot-functions to depot.c
truelight
parents:
1214
diff
changeset
|
91 |
depot->town_index = ClosestTownFromTile(tile, (uint)-1)->index; |
0 | 92 |
|
6134 | 93 |
MakeShipDepot(tile, _current_player, DEPOT_NORTH, axis); |
94 |
MakeShipDepot(tile2, _current_player, DEPOT_SOUTH, axis); |
|
3372
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
95 |
MarkTileDirtyByTile(tile); |
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
96 |
MarkTileDirtyByTile(tile2); |
7389
08d6a6265ced
(svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium
parents:
7335
diff
changeset
|
97 |
d_auto_delete.Detach(); |
0 | 98 |
} |
99 |
||
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
100 |
return cost.AddCost(_price.build_ship_depot); |
0 | 101 |
} |
102 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
103 |
static CommandCost RemoveShipDepot(TileIndex tile, uint32 flags) |
0 | 104 |
{ |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
105 |
TileIndex tile2; |
0 | 106 |
|
3373
2838aadd3a28
(svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents:
3372
diff
changeset
|
107 |
if (!IsShipDepot(tile)) return CMD_ERROR; |
2951 | 108 |
if (!CheckTileOwnership(tile)) return CMD_ERROR; |
109 |
if (!EnsureNoVehicle(tile)) return CMD_ERROR; |
|
0 | 110 |
|
3373
2838aadd3a28
(svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents:
3372
diff
changeset
|
111 |
tile2 = GetOtherShipDepotTile(tile); |
0 | 112 |
|
2951 | 113 |
if (!EnsureNoVehicle(tile2)) return CMD_ERROR; |
0 | 114 |
|
115 |
if (flags & DC_EXEC) { |
|
3373
2838aadd3a28
(svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents:
3372
diff
changeset
|
116 |
/* Kill the depot, which is registered at the northernmost tile. Use that one */ |
7389
08d6a6265ced
(svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium
parents:
7335
diff
changeset
|
117 |
delete GetDepotByTile(tile2 < tile ? tile2 : tile); |
0 | 118 |
|
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
119 |
MakeWater(tile); |
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
120 |
MakeWater(tile2); |
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
121 |
MarkTileDirtyByTile(tile); |
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
122 |
MarkTileDirtyByTile(tile2); |
0 | 123 |
} |
124 |
||
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
125 |
return CommandCost(_price.remove_ship_depot); |
0 | 126 |
} |
127 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
128 |
/** build a shiplift */ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
129 |
static CommandCost DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags) |
0 | 130 |
{ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
131 |
CommandCost ret; |
0 | 132 |
int delta; |
133 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
134 |
/* middle tile */ |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
135 |
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
2737
fb1556b8f5e0
(svn r3282) - Codechange: Replace tests against CMD_ERROR with CmdFailed()
peter1138
parents:
2676
diff
changeset
|
136 |
if (CmdFailed(ret)) return CMD_ERROR; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
137 |
|
4559
aa0c13e39840
(svn r6406) -Codechange: Rename TileOffsByDir to TileOffsByDiagDir because it accepts
Darkvater
parents:
4434
diff
changeset
|
138 |
delta = TileOffsByDiagDir(dir); |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
139 |
/* lower tile */ |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
140 |
ret = DoCommand(tile - delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
2737
fb1556b8f5e0
(svn r3282) - Codechange: Replace tests against CMD_ERROR with CmdFailed()
peter1138
parents:
2676
diff
changeset
|
141 |
if (CmdFailed(ret)) return CMD_ERROR; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
142 |
if (GetTileSlope(tile - delta, NULL) != SLOPE_FLAT) { |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
143 |
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
144 |
} |
0 | 145 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
146 |
/* upper tile */ |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
147 |
ret = DoCommand(tile + delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
2737
fb1556b8f5e0
(svn r3282) - Codechange: Replace tests against CMD_ERROR with CmdFailed()
peter1138
parents:
2676
diff
changeset
|
148 |
if (CmdFailed(ret)) return CMD_ERROR; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
149 |
if (GetTileSlope(tile + delta, NULL) != SLOPE_FLAT) { |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
150 |
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
151 |
} |
0 | 152 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
153 |
if ((MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) || |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
154 |
(MayHaveBridgeAbove(tile - delta) && IsBridgeAbove(tile - delta)) || |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
155 |
(MayHaveBridgeAbove(tile + delta) && IsBridgeAbove(tile + delta))) { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
156 |
return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
157 |
} |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
158 |
|
0 | 159 |
if (flags & DC_EXEC) { |
3940
8965b9bfaabc
(svn r5084) - Add owner attribute to canals and locks. This makes them more useful in multiplayer games, as before, anyone could delete any canal or lock tile. This doesn't affect whose ships can use whose canals or locks.
peter1138
parents:
3939
diff
changeset
|
160 |
MakeLock(tile, _current_player, dir); |
3372
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
161 |
MarkTileDirtyByTile(tile); |
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
162 |
MarkTileDirtyByTile(tile - delta); |
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
163 |
MarkTileDirtyByTile(tile + delta); |
0 | 164 |
} |
165 |
||
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
166 |
return CommandCost(_price.clear_water * 22 >> 3); |
0 | 167 |
} |
168 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
169 |
static CommandCost RemoveShiplift(TileIndex tile, uint32 flags) |
0 | 170 |
{ |
4559
aa0c13e39840
(svn r6406) -Codechange: Rename TileOffsByDir to TileOffsByDiagDir because it accepts
Darkvater
parents:
4434
diff
changeset
|
171 |
TileIndexDiff delta = TileOffsByDiagDir(GetLockDirection(tile)); |
0 | 172 |
|
7270
7bbf428c2ead
(svn r10593) -Fix [FS#1038]: one could not remove locks that were build in a (very) old version of OpenTTD.
rubidium
parents:
7266
diff
changeset
|
173 |
if (!CheckTileOwnership(tile) && GetTileOwner(tile) != OWNER_NONE) return CMD_ERROR; |
3940
8965b9bfaabc
(svn r5084) - Add owner attribute to canals and locks. This makes them more useful in multiplayer games, as before, anyone could delete any canal or lock tile. This doesn't affect whose ships can use whose canals or locks.
peter1138
parents:
3939
diff
changeset
|
174 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
175 |
/* make sure no vehicle is on the tile. */ |
0 | 176 |
if (!EnsureNoVehicle(tile) || !EnsureNoVehicle(tile + delta) || !EnsureNoVehicle(tile - delta)) |
177 |
return CMD_ERROR; |
|
178 |
||
179 |
if (flags & DC_EXEC) { |
|
180 |
DoClearSquare(tile); |
|
181 |
DoClearSquare(tile + delta); |
|
182 |
DoClearSquare(tile - delta); |
|
183 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
184 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
185 |
return CommandCost(_price.clear_water * 2); |
0 | 186 |
} |
187 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
188 |
static void MarkTilesAroundDirty(TileIndex tile) |
0 | 189 |
{ |
190 |
MarkTileDirtyByTile(TILE_ADDXY(tile, 0, 1)); |
|
191 |
MarkTileDirtyByTile(TILE_ADDXY(tile, 0, -1)); |
|
192 |
MarkTileDirtyByTile(TILE_ADDXY(tile, 1, 0)); |
|
193 |
MarkTileDirtyByTile(TILE_ADDXY(tile, -1, 0)); |
|
194 |
} |
|
195 |
||
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
196 |
/** Builds a lock (ship-lift) |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
197 |
* @param tile tile where to place the lock |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
198 |
* @param flags type of operation |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
199 |
* @param p1 unused |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
200 |
* @param p2 unused |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
201 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
202 |
CommandCost CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 203 |
{ |
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3111
diff
changeset
|
204 |
DiagDirection dir; |
889
64d2f7d5f02b
(svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky.
darkvater
parents:
863
diff
changeset
|
205 |
|
64d2f7d5f02b
(svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky.
darkvater
parents:
863
diff
changeset
|
206 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
0 | 207 |
|
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3111
diff
changeset
|
208 |
switch (GetTileSlope(tile, NULL)) { |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
209 |
case SLOPE_SW: dir = DIAGDIR_SW; break; |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
210 |
case SLOPE_SE: dir = DIAGDIR_SE; break; |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
211 |
case SLOPE_NW: dir = DIAGDIR_NW; break; |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
212 |
case SLOPE_NE: dir = DIAGDIR_NE; break; |
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3111
diff
changeset
|
213 |
default: return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
214 |
} |
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3111
diff
changeset
|
215 |
return DoBuildShiplift(tile, dir, flags); |
0 | 216 |
} |
217 |
||
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
218 |
/** Build a piece of canal. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
219 |
* @param tile end tile of stretch-dragging |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
220 |
* @param flags type of operation |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
221 |
* @param p1 start tile of stretch-dragging |
6286
a67f2c376804
(svn r9105) -Fix [FS#629]: disable the ability to make flooding water with the canal build tool. In the scenario editor you can still make both canals and flooding water at height level 0.
rubidium
parents:
6259
diff
changeset
|
222 |
* @param p2 ctrl pressed - toggles ocean / canals at sealevel (ocean only allowed in the scenario editor) |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
223 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
224 |
CommandCost CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 225 |
{ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
226 |
CommandCost cost; |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
227 |
int size_x, size_y; |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
228 |
int x; |
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
229 |
int y; |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
230 |
int sx, sy; |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
231 |
|
2934
3f29a7212713
(svn r3490) -Fix: A bunch (10) of off-by-one errors when checking if a TileIndex points to a tile on the map
tron
parents:
2737
diff
changeset
|
232 |
if (p1 >= MapSize()) return CMD_ERROR; |
6286
a67f2c376804
(svn r9105) -Fix [FS#629]: disable the ability to make flooding water with the canal build tool. In the scenario editor you can still make both canals and flooding water at height level 0.
rubidium
parents:
6259
diff
changeset
|
233 |
/* Outside of the editor you can only build canals, not oceans */ |
a67f2c376804
(svn r9105) -Fix [FS#629]: disable the ability to make flooding water with the canal build tool. In the scenario editor you can still make both canals and flooding water at height level 0.
rubidium
parents:
6259
diff
changeset
|
234 |
if (HASBIT(p2, 0) && _game_mode != GM_EDITOR) return CMD_ERROR; |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
235 |
|
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
236 |
x = TileX(tile); |
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
237 |
y = TileY(tile); |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
238 |
sx = TileX(p1); |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
239 |
sy = TileY(p1); |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
240 |
|
0 | 241 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
242 |
||
6106 | 243 |
if (x < sx) Swap(x, sx); |
244 |
if (y < sy) Swap(y, sy); |
|
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
245 |
size_x = (x - sx) + 1; |
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
246 |
size_y = (y - sy) + 1; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
247 |
|
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
248 |
/* Outside the editor you can only drag canals, and not areas */ |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
249 |
if (_game_mode != GM_EDITOR && (sx != x && sy != y)) return CMD_ERROR; |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
250 |
|
1981 | 251 |
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) { |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
252 |
CommandCost ret; |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
253 |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
254 |
if (GetTileSlope(tile, NULL) != SLOPE_FLAT) { |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
255 |
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
256 |
} |
0 | 257 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
258 |
/* can't make water of water! */ |
4087
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
259 |
if (IsTileType(tile, MP_WATER) && (!IsTileOwner(tile, OWNER_WATER) || HASBIT(p2, 0))) continue; |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
260 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
261 |
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
262 |
if (CmdFailed(ret)) return ret; |
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
263 |
cost.AddCost(ret); |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
264 |
|
3189
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
265 |
if (flags & DC_EXEC) { |
5516
1e0db37c23d3
(svn r7817) -Fix (r7573): Bridge merge broke building canals at level 0.
Darkvater
parents:
5475
diff
changeset
|
266 |
if (TileHeight(tile) == 0 && HASBIT(p2, 0)) { |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
267 |
MakeWater(tile); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
268 |
} else { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
269 |
MakeCanal(tile, _current_player); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
270 |
} |
3189
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
271 |
MarkTileDirtyByTile(tile); |
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
272 |
MarkTilesAroundDirty(tile); |
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
273 |
} |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
274 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
275 |
cost.AddCost(_price.clear_water); |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
276 |
} END_TILE_LOOP(tile, size_x, size_y, 0); |
0 | 277 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
278 |
if (cost.GetCost() == 0) { |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
279 |
return_cmd_error(STR_1007_ALREADY_BUILT); |
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
280 |
} else { |
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
281 |
return cost; |
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
282 |
} |
0 | 283 |
} |
284 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
285 |
static CommandCost ClearTile_Water(TileIndex tile, byte flags) |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
286 |
{ |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
287 |
switch (GetWaterTileType(tile)) { |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
288 |
case WATER_TILE_CLEAR: |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
289 |
if (flags & DC_NO_WATER) return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER); |
0 | 290 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
291 |
/* Make sure no vehicle is on the tile */ |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
292 |
if (!EnsureNoVehicle(tile)) return CMD_ERROR; |
0 | 293 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
294 |
/* Make sure it's not an edge tile. */ |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
295 |
if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) || |
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
296 |
!IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) { |
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
297 |
return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); |
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
298 |
} |
3017
a75caf4efa2d
(svn r3597) Miscellaneous (I like that word) changes: Fix some indentation, add consts, reduce indentation level by short-circuit logic, convert if cascades to switch, whitespace, bracing, plus some minor stuff
tron
parents:
2989
diff
changeset
|
299 |
|
7270
7bbf428c2ead
(svn r10593) -Fix [FS#1038]: one could not remove locks that were build in a (very) old version of OpenTTD.
rubidium
parents:
7266
diff
changeset
|
300 |
if (GetTileOwner(tile) != OWNER_WATER && GetTileOwner(tile) != OWNER_NONE && !CheckTileOwnership(tile)) return CMD_ERROR; |
3940
8965b9bfaabc
(svn r5084) - Add owner attribute to canals and locks. This makes them more useful in multiplayer games, as before, anyone could delete any canal or lock tile. This doesn't affect whose ships can use whose canals or locks.
peter1138
parents:
3939
diff
changeset
|
301 |
|
3017
a75caf4efa2d
(svn r3597) Miscellaneous (I like that word) changes: Fix some indentation, add consts, reduce indentation level by short-circuit logic, convert if cascades to switch, whitespace, bracing, plus some minor stuff
tron
parents:
2989
diff
changeset
|
302 |
if (flags & DC_EXEC) DoClearSquare(tile); |
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
303 |
return CommandCost(_price.clear_water); |
0 | 304 |
|
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
305 |
case WATER_TILE_COAST: { |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
306 |
Slope slope = GetTileSlope(tile, NULL); |
3439 | 307 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
308 |
/* Make sure no vehicle is on the tile */ |
3439 | 309 |
if (!EnsureNoVehicle(tile)) return CMD_ERROR; |
310 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
311 |
/* Make sure it's not an edge tile. */ |
3439 | 312 |
if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) || |
313 |
!IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) { |
|
314 |
return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); |
|
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
315 |
} |
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
316 |
|
3439 | 317 |
if (flags & DC_EXEC) DoClearSquare(tile); |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
318 |
if (slope == SLOPE_N || slope == SLOPE_E || slope == SLOPE_S || slope == SLOPE_W) { |
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
319 |
return CommandCost(_price.clear_water); |
3439 | 320 |
} else { |
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
321 |
return CommandCost(_price.purchase_land); |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
322 |
} |
3439 | 323 |
} |
324 |
||
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
325 |
case WATER_TILE_LOCK: { |
3439 | 326 |
static const TileIndexDiffC _shiplift_tomiddle_offs[] = { |
327 |
{ 0, 0}, {0, 0}, { 0, 0}, {0, 0}, // middle |
|
328 |
{-1, 0}, {0, 1}, { 1, 0}, {0, -1}, // lower |
|
329 |
{ 1, 0}, {0, -1}, {-1, 0}, {0, 1}, // upper |
|
330 |
}; |
|
331 |
||
332 |
if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED); |
|
333 |
if (_current_player == OWNER_WATER) return CMD_ERROR; |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
334 |
/* move to the middle tile.. */ |
3439 | 335 |
return RemoveShiplift(tile + ToTileIndexDiff(_shiplift_tomiddle_offs[GetSection(tile)]), flags); |
336 |
} |
|
337 |
||
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
338 |
case WATER_TILE_DEPOT: |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
339 |
if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED); |
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
340 |
return RemoveShipDepot(tile, flags); |
3439 | 341 |
|
342 |
default: |
|
343 |
NOT_REACHED(); |
|
0 | 344 |
} |
345 |
} |
|
346 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
347 |
/** return true if a tile is a water tile. */ |
1048 | 348 |
static bool IsWateredTile(TileIndex tile) |
0 | 349 |
{ |
1214
8262981ac274
(svn r1718) Use the enum TileType as parameter/return type for [GS]etTileType() instead of plain int.
tron
parents:
1209
diff
changeset
|
350 |
switch (GetTileType(tile)) { |
3977
513433ebd092
(svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents:
3940
diff
changeset
|
351 |
case MP_WATER: |
4087
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
352 |
if (!IsCoast(tile)) return true; |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
353 |
|
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
354 |
switch (GetTileSlope(tile, NULL)) { |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
355 |
case SLOPE_W: |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
356 |
case SLOPE_S: |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
357 |
case SLOPE_E: |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
358 |
case SLOPE_N: |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
359 |
return true; |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
360 |
|
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
361 |
default: |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
362 |
return false; |
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
363 |
} |
3977
513433ebd092
(svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents:
3940
diff
changeset
|
364 |
|
5905
422a010c5286
(svn r8528) -Codechange: Rename IsBuoy_() to IsBuoy() now that the naming conflict no longer exists.
celestar
parents:
5749
diff
changeset
|
365 |
case MP_STATION: return IsOilRig(tile) || IsDock(tile) || IsBuoy(tile); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
366 |
default: return false; |
1048 | 367 |
} |
0 | 368 |
} |
369 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
370 |
/** draw a canal styled water tile with dikes around */ |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
371 |
void DrawCanalWater(TileIndex tile) |
0 | 372 |
{ |
373 |
uint wa; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
374 |
|
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
375 |
/* Test for custom graphics, else use the default */ |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
376 |
SpriteID dikes_base = GetCanalSprite(CF_DIKES, tile); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
377 |
if (dikes_base == 0) dikes_base = SPR_CANALS_BASE + 57; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
378 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
379 |
/* determine the edges around with water. */ |
0 | 380 |
wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0; |
381 |
wa += IsWateredTile(TILE_ADDXY(tile, 0, 1)) << 1; |
|
382 |
wa += IsWateredTile(TILE_ADDXY(tile, 1, 0)) << 2; |
|
383 |
wa += IsWateredTile(TILE_ADDXY(tile, 0, -1)) << 3; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
384 |
|
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
385 |
if (!(wa & 1)) DrawGroundSprite(dikes_base, PAL_NONE); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
386 |
if (!(wa & 2)) DrawGroundSprite(dikes_base + 1, PAL_NONE); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
387 |
if (!(wa & 4)) DrawGroundSprite(dikes_base + 2, PAL_NONE); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
388 |
if (!(wa & 8)) DrawGroundSprite(dikes_base + 3, PAL_NONE); |
0 | 389 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
390 |
/* right corner */ |
2989 | 391 |
switch (wa & 0x03) { |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
392 |
case 0: DrawGroundSprite(dikes_base + 4, PAL_NONE); break; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
393 |
case 3: if (!IsWateredTile(TILE_ADDXY(tile, -1, 1))) DrawGroundSprite(dikes_base + 8, PAL_NONE); break; |
2989 | 394 |
} |
0 | 395 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
396 |
/* bottom corner */ |
2989 | 397 |
switch (wa & 0x06) { |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
398 |
case 0: DrawGroundSprite(dikes_base + 5, PAL_NONE); break; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
399 |
case 6: if (!IsWateredTile(TILE_ADDXY(tile, 1, 1))) DrawGroundSprite(dikes_base + 9, PAL_NONE); break; |
2989 | 400 |
} |
0 | 401 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
402 |
/* left corner */ |
2989 | 403 |
switch (wa & 0x0C) { |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
404 |
case 0: DrawGroundSprite(dikes_base + 6, PAL_NONE); break; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
405 |
case 12: if (!IsWateredTile(TILE_ADDXY(tile, 1, -1))) DrawGroundSprite(dikes_base + 10, PAL_NONE); break; |
2989 | 406 |
} |
0 | 407 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
408 |
/* upper corner */ |
2989 | 409 |
switch (wa & 0x09) { |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
410 |
case 0: DrawGroundSprite(dikes_base + 7, PAL_NONE); break; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
411 |
case 9: if (!IsWateredTile(TILE_ADDXY(tile, -1, -1))) DrawGroundSprite(dikes_base + 11, PAL_NONE); break; |
2989 | 412 |
} |
0 | 413 |
} |
414 |
||
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6181
diff
changeset
|
415 |
struct LocksDrawTileStruct { |
0 | 416 |
int8 delta_x, delta_y, delta_z; |
417 |
byte width, height, depth; |
|
418 |
SpriteID image; |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6181
diff
changeset
|
419 |
}; |
0 | 420 |
|
421 |
#include "table/water_land.h" |
|
422 |
||
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2261
diff
changeset
|
423 |
static void DrawWaterStuff(const TileInfo *ti, const WaterDrawTileStruct *wdts, |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
424 |
SpriteID palette, uint base |
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
425 |
) |
0 | 426 |
{ |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
427 |
SpriteID image; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
428 |
SpriteID water_base = GetCanalSprite(CF_WATERSLOPE, ti->tile); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
429 |
SpriteID locks_base = GetCanalSprite(CF_LOCKS, ti->tile); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
430 |
|
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
431 |
/* If no custom graphics, use defaults */ |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
432 |
if (water_base == 0) water_base = SPR_CANALS_BASE + 5; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
433 |
if (locks_base == 0) { |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
434 |
locks_base = SPR_CANALS_BASE + 9; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
435 |
} else { |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
436 |
/* If using custom graphics, ignore the variation on height */ |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
437 |
base = 0; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
438 |
} |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
439 |
|
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
440 |
image = wdts++->image; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
441 |
if (image < 4) image += water_base; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
442 |
DrawGroundSprite(image, PAL_NONE); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
443 |
|
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
444 |
for (; wdts->delta_x != 0x80; wdts++) { |
7333
e48228e44be8
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7270
diff
changeset
|
445 |
AddSortableSpriteToDraw(wdts->image + base + ((wdts->image < 24) ? locks_base : 0), palette, |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
446 |
ti->x + wdts->delta_x, ti->y + wdts->delta_y, |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
447 |
wdts->width, wdts->height, |
7333
e48228e44be8
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7270
diff
changeset
|
448 |
wdts->unk, ti->z + wdts->delta_z, |
e48228e44be8
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7270
diff
changeset
|
449 |
HASBIT(_transparent_opt, TO_BUILDINGS)); |
0 | 450 |
} |
451 |
} |
|
452 |
||
453 |
static void DrawTile_Water(TileInfo *ti) |
|
454 |
{ |
|
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
455 |
switch (GetWaterTileType(ti->tile)) { |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
456 |
case WATER_TILE_CLEAR: |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
457 |
DrawGroundSprite(SPR_FLAT_WATER_TILE, PAL_NONE); |
4087
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
458 |
if (ti->z != 0 || !IsTileOwner(ti->tile, OWNER_WATER)) DrawCanalWater(ti->tile); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
459 |
DrawBridgeMiddle(ti); |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
460 |
break; |
0 | 461 |
|
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
462 |
case WATER_TILE_COAST: |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
463 |
assert(!IsSteepSlope(ti->tileh)); |
5210
3415ef43c70a
(svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents:
4848
diff
changeset
|
464 |
if (_coast_base != 0) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
465 |
DrawGroundSprite(_coast_base + ti->tileh, PAL_NONE); |
5210
3415ef43c70a
(svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents:
4848
diff
changeset
|
466 |
} else { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
467 |
DrawGroundSprite(_water_shore_sprites[ti->tileh], PAL_NONE); |
5210
3415ef43c70a
(svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents:
4848
diff
changeset
|
468 |
} |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
469 |
DrawBridgeMiddle(ti); |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
470 |
break; |
0 | 471 |
|
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
472 |
case WATER_TILE_LOCK: { |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
473 |
const WaterDrawTileStruct *t = _shiplift_display_seq[GetSection(ti->tile)]; |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
474 |
DrawWaterStuff(ti, t, 0, ti->z > t[3].delta_y ? 24 : 0); |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
475 |
} break; |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
476 |
|
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
477 |
case WATER_TILE_DEPOT: |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
478 |
DrawWaterStuff(ti, _shipdepot_display_seq[GetSection(ti->tile)], PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), 0); |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
479 |
break; |
0 | 480 |
} |
481 |
} |
|
482 |
||
483 |
void DrawShipDepotSprite(int x, int y, int image) |
|
484 |
{ |
|
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
485 |
const WaterDrawTileStruct *wdts = _shipdepot_display_seq[image]; |
0 | 486 |
|
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
487 |
DrawSprite(wdts++->image, PAL_NONE, x, y); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
488 |
|
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
489 |
for (; wdts->delta_x != 0x80; wdts++) { |
0 | 490 |
Point pt = RemapCoords(wdts->delta_x, wdts->delta_y, wdts->delta_z); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
491 |
DrawSprite(wdts->image, PLAYER_SPRITE_COLOR(_local_player), x + pt.x, y + pt.y); |
0 | 492 |
} |
493 |
} |
|
494 |
||
495 |
||
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
496 |
static uint GetSlopeZ_Water(TileIndex tile, uint x, uint y) |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
497 |
{ |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
498 |
uint z; |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
499 |
Slope tileh = GetTileSlope(tile, &z); |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
500 |
|
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
501 |
return z + GetPartialZ(x & 0xF, y & 0xF, tileh); |
0 | 502 |
} |
503 |
||
7335
141c6b86ec1f
(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
parents:
7333
diff
changeset
|
504 |
static Foundation GetFoundation_Water(TileIndex tile, Slope tileh) |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
505 |
{ |
7335
141c6b86ec1f
(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
parents:
7333
diff
changeset
|
506 |
return FOUNDATION_NONE; |
39 | 507 |
} |
508 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
509 |
static void GetAcceptedCargo_Water(TileIndex tile, AcceptedCargo ac) |
0 | 510 |
{ |
511 |
/* not used */ |
|
512 |
} |
|
513 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
514 |
static void GetTileDesc_Water(TileIndex tile, TileDesc *td) |
0 | 515 |
{ |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
516 |
switch (GetWaterTileType(tile)) { |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
517 |
case WATER_TILE_CLEAR: |
4087
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
518 |
if (TilePixelHeight(tile) == 0 || IsTileOwner(tile, OWNER_WATER)) { |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
519 |
td->str = STR_3804_WATER; |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
520 |
} else { |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
521 |
td->str = STR_LANDINFO_CANAL; |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
522 |
} |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
523 |
break; |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
524 |
case WATER_TILE_COAST: td->str = STR_3805_COAST_OR_RIVERBANK; break; |
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
525 |
case WATER_TILE_LOCK : td->str = STR_LANDINFO_LOCK; break; |
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
526 |
case WATER_TILE_DEPOT: td->str = STR_3806_SHIP_DEPOT; break; |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
527 |
default: assert(0); break; |
2951 | 528 |
} |
0 | 529 |
|
1901
03bf9bf99319
(svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents:
1891
diff
changeset
|
530 |
td->owner = GetTileOwner(tile); |
0 | 531 |
} |
532 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
533 |
static void AnimateTile_Water(TileIndex tile) |
0 | 534 |
{ |
535 |
/* not used */ |
|
536 |
} |
|
537 |
||
1075 | 538 |
static void TileLoopWaterHelper(TileIndex tile, const TileIndexDiffC *offs) |
0 | 539 |
{ |
1075 | 540 |
TileIndex target = TILE_ADD(tile, ToTileIndexDiff(offs[0])); |
0 | 541 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
542 |
/* type of this tile mustn't be water already. */ |
2639 | 543 |
if (IsTileType(target, MP_WATER)) return; |
0 | 544 |
|
1075 | 545 |
if (TileHeight(TILE_ADD(tile, ToTileIndexDiff(offs[1]))) != 0 || |
2639 | 546 |
TileHeight(TILE_ADD(tile, ToTileIndexDiff(offs[2]))) != 0) { |
1075 | 547 |
return; |
2639 | 548 |
} |
1075 | 549 |
|
550 |
if (TileHeight(TILE_ADD(tile, ToTileIndexDiff(offs[3]))) != 0 || |
|
551 |
TileHeight(TILE_ADD(tile, ToTileIndexDiff(offs[4]))) != 0) { |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
552 |
/* make coast.. */ |
1214
8262981ac274
(svn r1718) Use the enum TileType as parameter/return type for [GS]etTileType() instead of plain int.
tron
parents:
1209
diff
changeset
|
553 |
switch (GetTileType(target)) { |
1076
03a5f2b0a5c2
(svn r1577) Fix: [1103301] Railroad tracks on slopes weren't flooded
tron
parents:
1075
diff
changeset
|
554 |
case MP_RAILWAY: { |
3267
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3234
diff
changeset
|
555 |
TrackBits tracks; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
556 |
Slope slope; |
3267
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3234
diff
changeset
|
557 |
|
3275 | 558 |
if (!IsPlainRailTile(target)) break; |
3267
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3234
diff
changeset
|
559 |
|
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3234
diff
changeset
|
560 |
tracks = GetTrackBits(target); |
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3234
diff
changeset
|
561 |
slope = GetTileSlope(target, NULL); |
1076
03a5f2b0a5c2
(svn r1577) Fix: [1103301] Railroad tracks on slopes weren't flooded
tron
parents:
1075
diff
changeset
|
562 |
if (!( |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
563 |
(slope == SLOPE_W && tracks == TRACK_BIT_RIGHT) || |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
564 |
(slope == SLOPE_S && tracks == TRACK_BIT_UPPER) || |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
565 |
(slope == SLOPE_E && tracks == TRACK_BIT_LEFT) || |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
566 |
(slope == SLOPE_N && tracks == TRACK_BIT_LOWER) |
3267
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3234
diff
changeset
|
567 |
)) { |
1076
03a5f2b0a5c2
(svn r1577) Fix: [1103301] Railroad tracks on slopes weren't flooded
tron
parents:
1075
diff
changeset
|
568 |
break; |
3267
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3234
diff
changeset
|
569 |
} |
7443
afccc2f43989
(svn r10892) -Fix [FS#1127]: trains would not get flooded when they are at the lower part of a tile that would become a coast tile after flooding. Patch by frosch.
rubidium
parents:
7389
diff
changeset
|
570 |
|
afccc2f43989
(svn r10892) -Fix [FS#1127]: trains would not get flooded when they are at the lower part of a tile that would become a coast tile after flooding. Patch by frosch.
rubidium
parents:
7389
diff
changeset
|
571 |
Vehicle *v = FindFloodableVehicleOnTile(target); |
afccc2f43989
(svn r10892) -Fix [FS#1127]: trains would not get flooded when they are at the lower part of a tile that would become a coast tile after flooding. Patch by frosch.
rubidium
parents:
7389
diff
changeset
|
572 |
if (v != NULL) FloodVehicle(v); |
1076
03a5f2b0a5c2
(svn r1577) Fix: [1103301] Railroad tracks on slopes weren't flooded
tron
parents:
1075
diff
changeset
|
573 |
} |
03a5f2b0a5c2
(svn r1577) Fix: [1103301] Railroad tracks on slopes weren't flooded
tron
parents:
1075
diff
changeset
|
574 |
/* FALLTHROUGH */ |
03a5f2b0a5c2
(svn r1577) Fix: [1103301] Railroad tracks on slopes weren't flooded
tron
parents:
1075
diff
changeset
|
575 |
|
1075 | 576 |
case MP_CLEAR: |
577 |
case MP_TREES: |
|
578 |
_current_player = OWNER_WATER; |
|
6946
a48b23f1cc8a
(svn r10200) -Codechange: add "shortcut" for !CmdFailed (CmdSucceeded).
rubidium
parents:
6943
diff
changeset
|
579 |
if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) { |
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
580 |
MakeShore(target); |
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
581 |
MarkTileDirtyByTile(target); |
1075 | 582 |
} |
583 |
break; |
|
584 |
||
585 |
default: |
|
586 |
break; |
|
0 | 587 |
} |
588 |
} else { |
|
589 |
_current_player = OWNER_WATER; |
|
5940
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
590 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
591 |
Vehicle *v = FindFloodableVehicleOnTile(target); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
592 |
if (v != NULL) FloodVehicle(v); |
1075 | 593 |
|
6946
a48b23f1cc8a
(svn r10200) -Codechange: add "shortcut" for !CmdFailed (CmdSucceeded).
rubidium
parents:
6943
diff
changeset
|
594 |
if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) { |
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
595 |
MakeWater(target); |
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
596 |
MarkTileDirtyByTile(target); |
1075 | 597 |
} |
0 | 598 |
} |
599 |
} |
|
600 |
||
5940
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
601 |
/** |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
602 |
* Finds a vehicle to flood. |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
603 |
* It does not find vehicles that are already crashed on bridges, i.e. flooded. |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
604 |
* @param tile the tile where to find a vehicle to flood |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
605 |
* @return a vehicle too flood or NULL when there is no vehicle too flood. |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
606 |
*/ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
607 |
static Vehicle *FindFloodableVehicleOnTile(TileIndex tile) |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
608 |
{ |
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
609 |
if (IsTileType(tile, MP_STATION) && IsAirport(tile)) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
610 |
const Station *st = GetStationByTile(tile); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
611 |
const AirportFTAClass *airport = st->Airport(); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
612 |
for (uint x = 0; x < airport->size_x; x++) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
613 |
for (uint y = 0; y < airport->size_y; y++) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
614 |
tile = TILE_ADDXY(st->airport_tile, x, y); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
615 |
Vehicle *v = FindVehicleOnTileZ(tile, 1 + airport->delta_z); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
616 |
if (v != NULL && (v->vehstatus & VS_CRASHED) == 0) return v; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
617 |
} |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
618 |
} |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
619 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
620 |
/* No vehicle could be flooded on this airport anymore */ |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
621 |
return NULL; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
622 |
} |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
623 |
|
5940
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
624 |
if (!IsBridgeTile(tile)) return FindVehicleOnTileZ(tile, 0); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
625 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
626 |
TileIndex end = GetOtherBridgeEnd(tile); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
627 |
byte z = GetBridgeHeight(tile); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
628 |
Vehicle *v; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
629 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
630 |
/* check the start tile first since as this is closest to the water */ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
631 |
v = FindVehicleOnTileZ(tile, z); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
632 |
if (v != NULL && (v->vehstatus & VS_CRASHED) == 0) return v; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
633 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
634 |
/* check a vehicle in between both bridge heads */ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
635 |
v = FindVehicleBetween(tile, end, z, true); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
636 |
if (v != NULL) return v; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
637 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
638 |
/* check the end tile last to give fleeing vehicles a chance to escape */ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
639 |
v = FindVehicleOnTileZ(end, z); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
640 |
return (v != NULL && (v->vehstatus & VS_CRASHED) == 0) ? v : NULL; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
641 |
} |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
642 |
|
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
643 |
static void FloodVehicle(Vehicle *v) |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
644 |
{ |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
645 |
if (!(v->vehstatus & VS_CRASHED)) { |
168
79f9ed5b23e6
(svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents:
164
diff
changeset
|
646 |
uint16 pass = 0; |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
647 |
|
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
648 |
if (v->type == VEH_TRAIN || v->type == VEH_ROAD || v->type == VEH_AIRCRAFT) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
649 |
if (v->type == VEH_AIRCRAFT) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
650 |
/* Crashing aircraft are always at z_pos == 1, never on z_pos == 0, |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
651 |
* because that's always the shadow. Except for the heliport, because |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
652 |
* that station has a big z_offset for the aircraft. */ |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
653 |
if (!IsTileType(v->tile, MP_STATION) || !IsAirport(v->tile) || GetTileMaxZ(v->tile) != 0) return; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
654 |
const Station *st = GetStationByTile(v->tile); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
655 |
const AirportFTAClass *airport = st->Airport(); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
656 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
657 |
if (v->z_pos != airport->delta_z + 1) return; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
658 |
} |
4171 | 659 |
Vehicle *u; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
660 |
|
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
661 |
if (v->type != VEH_AIRCRAFT) v = GetFirstVehicleInChain(v); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
662 |
u = v; |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
663 |
|
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
664 |
/* crash all wagons, and count passengers */ |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
665 |
BEGIN_ENUM_WAGONS(v) |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6950
diff
changeset
|
666 |
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo.Count(); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
667 |
v->vehstatus |= VS_CRASHED; |
5940
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
668 |
MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
669 |
END_ENUM_WAGONS(v) |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
670 |
|
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
671 |
v = u; |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
672 |
|
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
673 |
switch (v->type) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
674 |
default: NOT_REACHED(); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
675 |
case VEH_TRAIN: |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
676 |
if (IsFrontEngine(v)) pass += 4; // driver |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
677 |
v->u.rail.crash_anim_pos = 4000; // max 4440, disappear pretty fast |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
678 |
break; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
679 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
680 |
case VEH_ROAD: |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
681 |
if (IsRoadVehFront(v)) pass += 1; // driver |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
682 |
v->u.road.crashed_ctr = 2000; // max 2220, disappear pretty fast |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
683 |
break; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
684 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
685 |
case VEH_AIRCRAFT: |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
686 |
pass += 2; // driver |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
687 |
v->u.air.crashed_counter = 9000; // max 10000, disappear pretty fast |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
688 |
break; |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
689 |
} |
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
690 |
|
588 | 691 |
RebuildVehicleLists(); |
2549 | 692 |
} else { |
168
79f9ed5b23e6
(svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents:
164
diff
changeset
|
693 |
return; |
2549 | 694 |
} |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
695 |
|
755
80091de50044
(svn r1211) -Feature: Introduce sticky windows to all vehicle windows...Just make sure you do not sticky more than 23 at a time. Also a lot of places in the code invalidated the 'status bar' of the vehicle, referring to it as widget 4. This is now widget 5 and has been #definitized
darkvater
parents:
726
diff
changeset
|
696 |
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
697 |
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
698 |
|
534
306bc86eb23e
(svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents:
507
diff
changeset
|
699 |
SetDParam(0, pass); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
700 |
AddNewsItem(STR_B006_FLOOD_VEHICLE_DESTROYED, |
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6453
diff
changeset
|
701 |
NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_VEHICLE, NT_ACCIDENT, 0), |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
702 |
v->index, |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
703 |
0); |
2549 | 704 |
CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE); |
705 |
SndPlayVehicleFx(SND_12_EXPLOSION, v); |
|
714
503e96f37d46
(svn r1166) Fix: [ 1040119 ] Flooded wagons in depots don't keep constantly exploding any more
dominik
parents:
679
diff
changeset
|
706 |
} |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
707 |
} |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
708 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
709 |
/** called from tunnelbridge_cmd, and by TileLoop_Industry() */ |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
710 |
void TileLoop_Water(TileIndex tile) |
0 | 711 |
{ |
909
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
712 |
static const TileIndexDiffC _tile_loop_offs_array[][5] = { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
713 |
// tile to mod shore? shore? |
909
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
714 |
{{-1, 0}, {0, 0}, {0, 1}, {-1, 0}, {-1, 1}}, |
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
715 |
{{ 0, 1}, {0, 1}, {1, 1}, { 0, 2}, { 1, 2}}, |
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
716 |
{{ 1, 0}, {1, 0}, {1, 1}, { 2, 0}, { 2, 1}}, |
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
717 |
{{ 0, -1}, {0, 0}, {1, 0}, { 0, -1}, { 1, -1}} |
0 | 718 |
}; |
719 |
||
5954
7ca0068d5cdb
(svn r8620) -Fix: buoys on canal tiles do not flood anymore (Maedhros).
rubidium
parents:
5940
diff
changeset
|
720 |
/* Ensure sea-level canals and buoys on canal borders do not flood */ |
7ca0068d5cdb
(svn r8620) -Fix: buoys on canal tiles do not flood anymore (Maedhros).
rubidium
parents:
5940
diff
changeset
|
721 |
if ((IsTileType(tile, MP_WATER) || IsBuoyTile(tile)) && !IsTileOwner(tile, OWNER_WATER)) return; |
4087
d6a79200cb20
(svn r5403) - Feature: Allow building canals at sea-level, using ctrl to toggle canal or plain water tile. This allows building of non-raisable sea-level water ways (useful in multiplayer) and dikes for low-level areas.
peter1138
parents:
4077
diff
changeset
|
722 |
|
926
a6d140a6a4de
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
909
diff
changeset
|
723 |
if (IS_INT_INSIDE(TileX(tile), 1, MapSizeX() - 3 + 1) && |
a6d140a6a4de
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
909
diff
changeset
|
724 |
IS_INT_INSIDE(TileY(tile), 1, MapSizeY() - 3 + 1)) { |
2989 | 725 |
uint i; |
726 |
||
2639 | 727 |
for (i = 0; i != lengthof(_tile_loop_offs_array); i++) { |
0 | 728 |
TileLoopWaterHelper(tile, _tile_loop_offs_array[i]); |
2639 | 729 |
} |
0 | 730 |
} |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
731 |
/* _current_player can be changed by TileLoopWaterHelper.. reset it back here */ |
314 | 732 |
_current_player = OWNER_NONE; |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
733 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
734 |
/* edges */ |
2951 | 735 |
if (TileX(tile) == 0 && IS_INT_INSIDE(TileY(tile), 1, MapSizeY() - 3 + 1)) { //NE |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
736 |
TileLoopWaterHelper(tile, _tile_loop_offs_array[2]); |
2951 | 737 |
} |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
738 |
|
2639 | 739 |
if (TileX(tile) == MapSizeX() - 2 && IS_INT_INSIDE(TileY(tile), 1, MapSizeY() - 3 + 1)) { //SW |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
740 |
TileLoopWaterHelper(tile, _tile_loop_offs_array[0]); |
2639 | 741 |
} |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
742 |
|
2639 | 743 |
if (TileY(tile) == 0 && IS_INT_INSIDE(TileX(tile), 1, MapSizeX() - 3 + 1)) { //NW |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
744 |
TileLoopWaterHelper(tile, _tile_loop_offs_array[1]); |
2639 | 745 |
} |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
746 |
|
2639 | 747 |
if (TileY(tile) == MapSizeY() - 2 && IS_INT_INSIDE(TileX(tile), 1, MapSizeX() - 3 + 1)) { //SE |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
748 |
TileLoopWaterHelper(tile, _tile_loop_offs_array[3]); |
2639 | 749 |
} |
0 | 750 |
} |
751 |
||
6683
b88ae30866ce
(svn r9914) -Codechange: prepare GTTS and the pathfinders to handle multiple road types on a single tile.
rubidium
parents:
6583
diff
changeset
|
752 |
static uint32 GetTileTrackStatus_Water(TileIndex tile, TransportType mode, uint sub_mode) |
0 | 753 |
{ |
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
754 |
static const byte coast_tracks[] = {0, 32, 4, 0, 16, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0}; |
4169
0d77cd42f6e6
(svn r5606) Replace some magic numbers by proper TrackBits enums and macros
tron
parents:
4101
diff
changeset
|
755 |
|
0d77cd42f6e6
(svn r5606) Replace some magic numbers by proper TrackBits enums and macros
tron
parents:
4101
diff
changeset
|
756 |
TrackBits ts; |
0d77cd42f6e6
(svn r5606) Replace some magic numbers by proper TrackBits enums and macros
tron
parents:
4101
diff
changeset
|
757 |
|
2951 | 758 |
if (mode != TRANSPORT_WATER) return 0; |
0 | 759 |
|
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
760 |
switch (GetWaterTileType(tile)) { |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
761 |
case WATER_TILE_CLEAR: ts = TRACK_BIT_ALL; break; |
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
762 |
case WATER_TILE_COAST: ts = (TrackBits)coast_tracks[GetTileSlope(tile, NULL) & 0xF]; break; |
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
763 |
case WATER_TILE_LOCK: ts = AxisToTrackBits(DiagDirToAxis(GetLockDirection(tile))); break; |
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
764 |
case WATER_TILE_DEPOT: ts = AxisToTrackBits(GetShipDepotAxis(tile)); break; |
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
765 |
default: return 0; |
0 | 766 |
} |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
767 |
if (TileX(tile) == 0) { |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
768 |
/* NE border: remove tracks that connects NE tile edge */ |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
769 |
ts &= ~(TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_RIGHT); |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
770 |
} |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
771 |
if (TileY(tile) == 0) { |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
772 |
/* NW border: remove tracks that connects NW tile edge */ |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
773 |
ts &= ~(TRACK_BIT_Y | TRACK_BIT_LEFT | TRACK_BIT_UPPER); |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
774 |
} |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
775 |
return ts * 0x101; |
0 | 776 |
} |
777 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
778 |
static void ClickTile_Water(TileIndex tile) |
0 | 779 |
{ |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
780 |
if (GetWaterTileType(tile) == WATER_TILE_DEPOT) { |
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
781 |
TileIndex tile2 = GetOtherShipDepotTile(tile); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
782 |
|
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6248
diff
changeset
|
783 |
ShowDepotWindow(tile < tile2 ? tile : tile2, VEH_SHIP); |
0 | 784 |
} |
785 |
} |
|
786 |
||
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2261
diff
changeset
|
787 |
static void ChangeTileOwner_Water(TileIndex tile, PlayerID old_player, PlayerID new_player) |
0 | 788 |
{ |
1901
03bf9bf99319
(svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents:
1891
diff
changeset
|
789 |
if (!IsTileOwner(tile, old_player)) return; |
0 | 790 |
|
4848
45f848b46222
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4638
diff
changeset
|
791 |
if (new_player != PLAYER_SPECTATOR) { |
1902 | 792 |
SetTileOwner(tile, new_player); |
7270
7bbf428c2ead
(svn r10593) -Fix [FS#1038]: one could not remove locks that were build in a (very) old version of OpenTTD.
rubidium
parents:
7266
diff
changeset
|
793 |
} else if (IsShipDepot(tile)) { |
7bbf428c2ead
(svn r10593) -Fix [FS#1038]: one could not remove locks that were build in a (very) old version of OpenTTD.
rubidium
parents:
7266
diff
changeset
|
794 |
DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR); |
0 | 795 |
} else { |
7270
7bbf428c2ead
(svn r10593) -Fix [FS#1038]: one could not remove locks that were build in a (very) old version of OpenTTD.
rubidium
parents:
7266
diff
changeset
|
796 |
SetTileOwner(tile, OWNER_NONE); |
0 | 797 |
} |
798 |
} |
|
799 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
800 |
static uint32 VehicleEnter_Water(Vehicle *v, TileIndex tile, int x, int y) |
0 | 801 |
{ |
5991
ec2eebfe86de
(svn r8698) -Codechange: enumify the returns of VehicleEnterTile
rubidium
parents:
5954
diff
changeset
|
802 |
return VETSB_CONTINUE; |
0 | 803 |
} |
804 |
||
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
805 |
static CommandCost TerraformTile_Water(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new) |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
806 |
{ |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
807 |
/* Canals can't be terraformed */ |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
808 |
if (IsClearWaterTile(tile) && IsCanal(tile)) return_cmd_error(STR_MUST_DEMOLISH_CANAL_FIRST); |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
809 |
|
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
810 |
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
811 |
} |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
812 |
|
0 | 813 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
814 |
extern const TileTypeProcs _tile_type_water_procs = { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
815 |
DrawTile_Water, /* draw_tile_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
816 |
GetSlopeZ_Water, /* get_slope_z_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
817 |
ClearTile_Water, /* clear_tile_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
818 |
GetAcceptedCargo_Water, /* get_accepted_cargo_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
819 |
GetTileDesc_Water, /* get_tile_desc_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
820 |
GetTileTrackStatus_Water, /* get_tile_track_status_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
821 |
ClickTile_Water, /* click_tile_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
822 |
AnimateTile_Water, /* animate_tile_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
823 |
TileLoop_Water, /* tile_loop_clear */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
824 |
ChangeTileOwner_Water, /* change_tile_owner_clear */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
825 |
NULL, /* get_produced_cargo_proc */ |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4231
diff
changeset
|
826 |
VehicleEnter_Water, /* vehicle_enter_tile_proc */ |
7335
141c6b86ec1f
(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
parents:
7333
diff
changeset
|
827 |
GetFoundation_Water, /* get_foundation_proc */ |
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
828 |
TerraformTile_Water, /* terraform_tile_proc */ |
0 | 829 |
}; |