author | KUDr |
Fri, 20 Apr 2007 19:43:06 +0000 | |
changeset 6513 | 454347ca3dfb |
parent 6491 | 00dc414c909d |
child 6541 | dfa5165a5ab7 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
3 |
/** @file road_cmd.cpp */ |
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1785
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:
3176
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" |
3101
a44fdf9faef1
(svn r3696) Add functions to turn a tile into a normal rail tile/depot/waypoint. This is just a tiny step, the rail code needs way more love and caring
tron
parents:
3100
diff
changeset
|
10 |
#include "rail_map.h" |
3144
33e42feae531
(svn r3763) Adapt to the new 'map accessors go in foo_map.h'-scheme
tron
parents:
3104
diff
changeset
|
11 |
#include "road_map.h" |
4232
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
12 |
#include "sprite.h" |
2008
cdb444f6d43c
(svn r2516) - Feature: [pbs] Implement path-based-signalling. This allows multiple trains within the same signal block, provided their paths dont intersect. For this the block must have all exit and entry signals be pbs signals. Place these by ctrl-clicking 4 times on a normal signal.
hackykid
parents:
1986
diff
changeset
|
13 |
#include "table/sprites.h" |
507
04b5403aaf6b
(svn r815) Include strings.h only in the files which need it.
tron
parents:
497
diff
changeset
|
14 |
#include "table/strings.h" |
2163
b17b313113a0
(svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents:
2148
diff
changeset
|
15 |
#include "functions.h" |
679
04ca2cd69420
(svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
541
diff
changeset
|
16 |
#include "map.h" |
6343
76d17f784c13
(svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents:
6259
diff
changeset
|
17 |
#include "landscape.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:
1095
diff
changeset
|
18 |
#include "tile.h" |
3319
16c0f06829a5
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
3286
diff
changeset
|
19 |
#include "town_map.h" |
0 | 20 |
#include "vehicle.h" |
21 |
#include "viewport.h" |
|
22 |
#include "command.h" |
|
23 |
#include "player.h" |
|
24 |
#include "town.h" |
|
25 |
#include "gfx.h" |
|
337
cbe0c766c947
(svn r513) Merge revisions 402, 416, 417, 478, 479, 511, 512 from map to trunk
tron
parents:
241
diff
changeset
|
26 |
#include "sound.h" |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
27 |
#include "yapf/yapf.h" |
1313
f1013ec3d318
(svn r1817) -Codechange: Moved depot-functions to depot.c
truelight
parents:
1281
diff
changeset
|
28 |
#include "depot.h" |
0 | 29 |
|
30 |
||
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
31 |
static uint CountRoadBits(RoadBits r) |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
32 |
{ |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
33 |
uint count = 0; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
34 |
|
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
35 |
if (r & ROAD_NW) ++count; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
36 |
if (r & ROAD_SW) ++count; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
37 |
if (r & ROAD_SE) ++count; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
38 |
if (r & ROAD_NE) ++count; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
39 |
return count; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
40 |
} |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
41 |
|
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
42 |
|
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
5991
diff
changeset
|
43 |
bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, bool *edge_road) |
0 | 44 |
{ |
3149
9685221d33fa
(svn r3770) Remove the _road_special_gettrackstatus hack. Egladil and me deem it unnecessary
tron
parents:
3146
diff
changeset
|
45 |
RoadBits present; |
9685221d33fa
(svn r3770) Remove the _road_special_gettrackstatus hack. Egladil and me deem it unnecessary
tron
parents:
3146
diff
changeset
|
46 |
RoadBits n; |
0 | 47 |
*edge_road = true; |
48 |
||
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
|
49 |
if (_game_mode == GM_EDITOR) return true; |
0 | 50 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
51 |
/* Only do the special processing for actual players. */ |
4850
93095755db8c
(svn r6776) -Codechange: Use IsValidPlayer() function to determine of a PlayerID is an
Darkvater
parents:
4849
diff
changeset
|
52 |
if (!IsValidPlayer(_current_player)) return true; |
0 | 53 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
54 |
/* Only do the special processing if the road is owned |
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
55 |
* by a town */ |
4849
1c6f21eb97f2
(svn r6775) -Codechange: Use some more proper types, especially Owner and PlayerID as
Darkvater
parents:
4848
diff
changeset
|
56 |
if (owner != OWNER_TOWN) return (owner == OWNER_NONE) || CheckOwnership(owner); |
0 | 57 |
|
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
|
58 |
if (_cheats.magic_bulldozer.value) return true; |
0 | 59 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
60 |
/* Get a bitmask of which neighbouring roads has a tile */ |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
61 |
n = ROAD_NONE; |
3149
9685221d33fa
(svn r3770) Remove the _road_special_gettrackstatus hack. Egladil and me deem it unnecessary
tron
parents:
3146
diff
changeset
|
62 |
present = GetAnyRoadBits(tile); |
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6483
diff
changeset
|
63 |
if (present & ROAD_NE && GetAnyRoadBits(TILE_ADDXY(tile, -1, 0)) & ROAD_SW) n |= ROAD_NE; |
3149
9685221d33fa
(svn r3770) Remove the _road_special_gettrackstatus hack. Egladil and me deem it unnecessary
tron
parents:
3146
diff
changeset
|
64 |
if (present & ROAD_SE && GetAnyRoadBits(TILE_ADDXY(tile, 0, 1)) & ROAD_NW) n |= ROAD_SE; |
9685221d33fa
(svn r3770) Remove the _road_special_gettrackstatus hack. Egladil and me deem it unnecessary
tron
parents:
3146
diff
changeset
|
65 |
if (present & ROAD_SW && GetAnyRoadBits(TILE_ADDXY(tile, 1, 0)) & ROAD_NE) n |= ROAD_SW; |
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6483
diff
changeset
|
66 |
if (present & ROAD_NW && GetAnyRoadBits(TILE_ADDXY(tile, 0, -1)) & ROAD_SE) n |= ROAD_NW; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
67 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
68 |
/* If 0 or 1 bits are set in n, or if no bits that match the bits to remove, |
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
69 |
* then allow it */ |
3149
9685221d33fa
(svn r3770) Remove the _road_special_gettrackstatus hack. Egladil and me deem it unnecessary
tron
parents:
3146
diff
changeset
|
70 |
if ((n & (n - 1)) != 0 && (n & remove) != 0) { |
0 | 71 |
Town *t; |
72 |
*edge_road = false; |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
73 |
/* you can remove all kind of roads with extra dynamite */ |
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
|
74 |
if (_patches.extra_dynamite) return true; |
0 | 75 |
|
6256
24e274c0ae42
(svn r9065) -Fix: possible dereference of NULL pointer.
rubidium
parents:
6248
diff
changeset
|
76 |
t = ClosestTownFromTile(tile, (uint)-1); |
1638
4779658c2d03
(svn r2142) - Fix: Game no longer crashes when you want to remove a piece of road under a bridge that belongs to the town. TODO: railcrossings store owner somewhere else, put it into _map_owner[]!
Darkvater
parents:
1398
diff
changeset
|
77 |
|
534
306bc86eb23e
(svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents:
507
diff
changeset
|
78 |
SetDParam(0, t->index); |
0 | 79 |
_error_message = STR_2009_LOCAL_AUTHORITY_REFUSES; |
80 |
return false; |
|
81 |
} |
|
82 |
||
83 |
return true; |
|
84 |
} |
|
85 |
||
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
5991
diff
changeset
|
86 |
static bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, bool *edge_road) |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
5991
diff
changeset
|
87 |
{ |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
5991
diff
changeset
|
88 |
return CheckAllowRemoveRoad(tile, remove, IsLevelCrossingTile(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile), edge_road); |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
5991
diff
changeset
|
89 |
} |
0 | 90 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
91 |
/** Delete a piece of road. |
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:
3435
diff
changeset
|
92 |
* @param tile tile where to remove road from |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6427
diff
changeset
|
93 |
* @param flags operation to perform |
6134 | 94 |
* @param p1 bit 0..3 road pieces to remove (RoadBits) |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
95 |
* @param p2 unused |
0 | 96 |
*/ |
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:
3435
diff
changeset
|
97 |
int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 98 |
{ |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
99 |
/* cost for removing inner/edge -roads */ |
1638
4779658c2d03
(svn r2142) - Fix: Game no longer crashes when you want to remove a piece of road under a bridge that belongs to the town. TODO: railcrossings store owner somewhere else, put it into _map_owner[]!
Darkvater
parents:
1398
diff
changeset
|
100 |
static const uint16 road_remove_cost[2] = {50, 18}; |
4779658c2d03
(svn r2142) - Fix: Game no longer crashes when you want to remove a piece of road under a bridge that belongs to the town. TODO: railcrossings store owner somewhere else, put it into _map_owner[]!
Darkvater
parents:
1398
diff
changeset
|
101 |
|
4849
1c6f21eb97f2
(svn r6775) -Codechange: Use some more proper types, especially Owner and PlayerID as
Darkvater
parents:
4848
diff
changeset
|
102 |
Owner owner; |
0 | 103 |
Town *t; |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
104 |
/* true if the roadpiece was always removeable, |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
105 |
* false if it was a center piece. Affects town ratings drop */ |
0 | 106 |
bool edge_road; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
107 |
|
0 | 108 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
109 |
||
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
110 |
if (!IsTileType(tile, MP_STREET)) return CMD_ERROR; |
2074
089fab08189c
(svn r2584) - Fix: Game no longer asserts when you use the remove-road tool on a town building or industry.
Darkvater
parents:
2049
diff
changeset
|
111 |
|
3560
b2fcf1898eec
(svn r4435) - Fix: an assertion triggered when trying to remove a bridge with the remove-tool (r4348 surfaced this). In CmdRemoveRoad tiletype was not checked for ownership. Intorudce IsLevelCrossingTile() which checks if a tile is a crossing without knowing the type. Suggested by peter1138 and Tron.
Darkvater
parents:
3491
diff
changeset
|
112 |
owner = IsLevelCrossingTile(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile); |
1638
4779658c2d03
(svn r2142) - Fix: Game no longer crashes when you want to remove a piece of road under a bridge that belongs to the town. TODO: railcrossings store owner somewhere else, put it into _map_owner[]!
Darkvater
parents:
1398
diff
changeset
|
113 |
|
4779658c2d03
(svn r2142) - Fix: Game no longer crashes when you want to remove a piece of road under a bridge that belongs to the town. TODO: railcrossings store owner somewhere else, put it into _map_owner[]!
Darkvater
parents:
1398
diff
changeset
|
114 |
if (owner == OWNER_TOWN && _game_mode != GM_EDITOR) { |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
115 |
t = GetTownByTile(tile); |
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
|
116 |
} else { |
1280
33a251c30758
(svn r1784) -Fix: removed ClosestTownFromTile where possible, or replaced it
truelight
parents:
1264
diff
changeset
|
117 |
t = NULL; |
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
|
118 |
} |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
119 |
|
6134 | 120 |
RoadBits pieces = Extract<RoadBits, 0>(p1); |
121 |
||
3149
9685221d33fa
(svn r3770) Remove the _road_special_gettrackstatus hack. Egladil and me deem it unnecessary
tron
parents:
3146
diff
changeset
|
122 |
if (!CheckAllowRemoveRoad(tile, pieces, &edge_road)) return CMD_ERROR; |
0 | 123 |
|
6406
8ccf18e94c67
(svn r9542) -Fix(FS# 712): When checking if a vehicle is on a given tile, and you are working on the ground tile, do not take aircrafts into account, as they do not pose any danger for the construction/destruction/conversion itself. Z stuff, in other words
belugas
parents:
6393
diff
changeset
|
124 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
3933 | 125 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
126 |
/* check if you're allowed to remove the street owned by a town |
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
127 |
* removal allowance depends on difficulty setting */ |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
128 |
if (!CheckforTownRating(flags, t, ROAD_REMOVE)) return CMD_ERROR; |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
129 |
|
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
130 |
switch (GetRoadTileType(tile)) { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
131 |
case ROAD_TILE_NORMAL: { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
132 |
RoadBits present = GetRoadBits(tile); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
133 |
RoadBits c = pieces; |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
134 |
|
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
135 |
if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
136 |
|
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
137 |
if (GetTileSlope(tile, NULL) != SLOPE_FLAT && |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
138 |
(present == ROAD_Y || present == ROAD_X)) { |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
139 |
c |= (RoadBits)((c & 0xC) >> 2); |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
140 |
c |= (RoadBits)((c & 0x3) << 2); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
141 |
} |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
142 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
143 |
/* limit the bits to delete to the existing bits. */ |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
144 |
c &= present; |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
145 |
if (c == 0) return CMD_ERROR; |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
146 |
|
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
147 |
if (flags & DC_EXEC) { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
148 |
ChangeTownRating(t, -road_remove_cost[(byte)edge_road], RATING_ROAD_MINIMUM); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
149 |
|
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
150 |
present ^= c; |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
151 |
if (present == 0) { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
152 |
DoClearSquare(tile); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
153 |
} else { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
154 |
SetRoadBits(tile, present); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
155 |
MarkTileDirtyByTile(tile); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
156 |
} |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
157 |
} |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
158 |
return CountRoadBits(c) * _price.remove_road; |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
159 |
} |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
160 |
|
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
161 |
case ROAD_TILE_CROSSING: { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
162 |
if (pieces & ComplementRoadBits(GetCrossingRoadBits(tile))) { |
3176 | 163 |
return CMD_ERROR; |
0 | 164 |
} |
165 |
||
166 |
if (flags & DC_EXEC) { |
|
1638
4779658c2d03
(svn r2142) - Fix: Game no longer crashes when you want to remove a piece of road under a bridge that belongs to the town. TODO: railcrossings store owner somewhere else, put it into _map_owner[]!
Darkvater
parents:
1398
diff
changeset
|
167 |
ChangeTownRating(t, -road_remove_cost[(byte)edge_road], RATING_ROAD_MINIMUM); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
168 |
|
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
6160
diff
changeset
|
169 |
MakeRailNormal(tile, GetTileOwner(tile), GetCrossingRailBits(tile), GetRailType(tile)); |
3060 | 170 |
MarkTileDirtyByTile(tile); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
171 |
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile))); |
0 | 172 |
} |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
173 |
return _price.remove_road * 2; |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
174 |
} |
3977
513433ebd092
(svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents:
3933
diff
changeset
|
175 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
176 |
default: |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
177 |
case ROAD_TILE_DEPOT: |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
178 |
return CMD_ERROR; |
0 | 179 |
} |
180 |
} |
|
181 |
||
182 |
||
3104
c039f8a65ba0
(svn r3699) Replace some magic numbers for checking for a suitable slope for a level crossing by some less magic numbers
tron
parents:
3103
diff
changeset
|
183 |
static const RoadBits _valid_tileh_slopes_road[][15] = { |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
184 |
/* set of normal ones */ |
0 | 185 |
{ |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
186 |
ROAD_ALL, ROAD_NONE, ROAD_NONE, |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
187 |
ROAD_X, ROAD_NONE, ROAD_NONE, // 3, 4, 5 |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
188 |
ROAD_Y, ROAD_NONE, ROAD_NONE, |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
189 |
ROAD_Y, ROAD_NONE, ROAD_NONE, // 9, 10, 11 |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
190 |
ROAD_X, ROAD_NONE, ROAD_NONE |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
191 |
}, |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
192 |
/* allowed road for an evenly raised platform */ |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
193 |
{ |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
194 |
ROAD_NONE, |
0 | 195 |
ROAD_SW | ROAD_NW, |
196 |
ROAD_SW | ROAD_SE, |
|
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
197 |
ROAD_Y | ROAD_SW, |
0 | 198 |
|
199 |
ROAD_SE | ROAD_NE, // 4 |
|
200 |
ROAD_ALL, |
|
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
201 |
ROAD_X | ROAD_SE, |
0 | 202 |
ROAD_ALL, |
203 |
||
204 |
ROAD_NW | ROAD_NE, // 8 |
|
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
205 |
ROAD_X | ROAD_NW, |
0 | 206 |
ROAD_ALL, |
207 |
ROAD_ALL, |
|
208 |
||
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
209 |
ROAD_Y | ROAD_NE, // 12 |
0 | 210 |
ROAD_ALL, |
211 |
ROAD_ALL |
|
13
3e7c1f74a996
(svn r14) Fix: railroad crossings on slopes are now possible
dominik
parents:
0
diff
changeset
|
212 |
}, |
0 | 213 |
}; |
214 |
||
215 |
||
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
216 |
static uint32 CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing) |
0 | 217 |
{ |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
218 |
RoadBits road_bits; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
219 |
|
4246
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
220 |
if (IsSteepSlope(tileh)) { |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
221 |
if (existing == 0) { |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
222 |
/* force full pieces. */ |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
223 |
*pieces |= (RoadBits)((*pieces & 0xC) >> 2); |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
224 |
*pieces |= (RoadBits)((*pieces & 0x3) << 2); |
4246
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
225 |
if (*pieces == ROAD_X || *pieces == ROAD_Y) return _price.terraform; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
226 |
} |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
227 |
return CMD_ERROR; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
228 |
} |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
229 |
road_bits = *pieces | existing; |
0 | 230 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
231 |
/* no special foundation */ |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
232 |
if ((~_valid_tileh_slopes_road[0][tileh] & road_bits) == 0) { |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
233 |
/* force that all bits are set when we have slopes */ |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
234 |
if (tileh != SLOPE_FLAT) *pieces |= _valid_tileh_slopes_road[0][tileh]; |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
235 |
return 0; // no extra cost |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
236 |
} |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
237 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
238 |
/* foundation is used. Whole tile is leveled up */ |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
239 |
if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == 0) { |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
240 |
return existing != 0 ? 0 : _price.terraform; |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
241 |
} |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
242 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
243 |
/* partly leveled up tile, only if there's no road on that tile */ |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
244 |
if (existing == 0 && (tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)) { |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
245 |
/* force full pieces. */ |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
246 |
*pieces |= (RoadBits)((*pieces & 0xC) >> 2); |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
247 |
*pieces |= (RoadBits)((*pieces & 0x3) << 2); |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
248 |
if (*pieces == ROAD_X || *pieces == ROAD_Y) return _price.terraform; |
0 | 249 |
} |
250 |
return CMD_ERROR; |
|
251 |
} |
|
252 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
253 |
/** Build a piece of road. |
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:
3435
diff
changeset
|
254 |
* @param tile tile where to build road |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6427
diff
changeset
|
255 |
* @param flags operation to perform |
6134 | 256 |
* @param p1 bit 0..3 road pieces to build (RoadBits) |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
257 |
* @param p2 the town that is building the road (0 if not applicable) |
0 | 258 |
*/ |
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:
3435
diff
changeset
|
259 |
int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 260 |
{ |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
261 |
int32 cost = 0; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
262 |
int32 ret; |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
263 |
RoadBits existing = ROAD_NONE; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
264 |
Slope tileh; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
265 |
|
0 | 266 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
267 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
268 |
/* Road pieces are max 4 bitset values (NE, NW, SE, SW) and town can only be non-zero |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
269 |
* if a non-player is building the road */ |
6134 | 270 |
if ((IsValidPlayer(_current_player) && p2 != 0) || (_current_player == OWNER_TOWN && !IsValidTownID(p2))) return CMD_ERROR; |
271 |
||
272 |
RoadBits pieces = Extract<RoadBits, 0>(p1); |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
273 |
|
3434
0ada2e311826
(svn r4263) -Codechange: Road building no longer uses FindLandscapeHeight. Last occurence of FindLandscapeTile in the tile-specific functions gone. Thanks to Tron for doing lots of work in this direction
celestar
parents:
3430
diff
changeset
|
274 |
tileh = GetTileSlope(tile, NULL); |
0 | 275 |
|
3434
0ada2e311826
(svn r4263) -Codechange: Road building no longer uses FindLandscapeHeight. Last occurence of FindLandscapeTile in the tile-specific functions gone. Thanks to Tron for doing lots of work in this direction
celestar
parents:
3430
diff
changeset
|
276 |
switch (GetTileType(tile)) { |
3060 | 277 |
case MP_STREET: |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
278 |
switch (GetRoadTileType(tile)) { |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
279 |
case ROAD_TILE_NORMAL: |
4046
5538f3a43418
(svn r5315) -Fix: Prohibit altering a road tile while road works are in progress
tron
parents:
4000
diff
changeset
|
280 |
if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS); |
5538f3a43418
(svn r5315) -Fix: Prohibit altering a road tile while road works are in progress
tron
parents:
4000
diff
changeset
|
281 |
|
3150
729951cb5448
(svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents:
3149
diff
changeset
|
282 |
existing = GetRoadBits(tile); |
729951cb5448
(svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents:
3149
diff
changeset
|
283 |
if ((existing & pieces) == pieces) { |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
284 |
return_cmd_error(STR_1007_ALREADY_BUILT); |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
285 |
} |
6406
8ccf18e94c67
(svn r9542) -Fix(FS# 712): When checking if a vehicle is on a given tile, and you are working on the ground tile, do not take aircrafts into account, as they do not pose any danger for the construction/destruction/conversion itself. Z stuff, in other words
belugas
parents:
6393
diff
changeset
|
286 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
287 |
break; |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
288 |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
289 |
case ROAD_TILE_CROSSING: |
3150
729951cb5448
(svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents:
3149
diff
changeset
|
290 |
if (pieces != GetCrossingRoadBits(tile)) { // XXX is this correct? |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
291 |
return_cmd_error(STR_1007_ALREADY_BUILT); |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
292 |
} |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
293 |
goto do_clear; |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
294 |
|
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
3068
diff
changeset
|
295 |
default: |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
296 |
case ROAD_TILE_DEPOT: |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
297 |
goto do_clear; |
3060 | 298 |
} |
299 |
break; |
|
0 | 300 |
|
3060 | 301 |
case MP_RAILWAY: { |
3099
571719b2cee3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3098
diff
changeset
|
302 |
Axis roaddir; |
13
3e7c1f74a996
(svn r14) Fix: railroad crossings on slopes are now possible
dominik
parents:
0
diff
changeset
|
303 |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
304 |
if (IsSteepSlope(tileh)) { |
3060 | 305 |
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
306 |
} |
|
307 |
||
3104
c039f8a65ba0
(svn r3699) Replace some magic numbers for checking for a suitable slope for a level crossing by some less magic numbers
tron
parents:
3103
diff
changeset
|
308 |
#define M(x) (1 << (x)) |
c039f8a65ba0
(svn r3699) Replace some magic numbers for checking for a suitable slope for a level crossing by some less magic numbers
tron
parents:
3103
diff
changeset
|
309 |
/* Level crossings may only be built on these slopes */ |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
310 |
if (!HASBIT(M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT), tileh)) { |
3060 | 311 |
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
312 |
} |
|
3104
c039f8a65ba0
(svn r3699) Replace some magic numbers for checking for a suitable slope for a level crossing by some less magic numbers
tron
parents:
3103
diff
changeset
|
313 |
#undef M |
3060 | 314 |
|
3792
67c865c9315c
(svn r4788) - Codechange: RAILTYPE_{NORMAL,ELECTRIC,...} and RAIL_TYPE_{NORMAL,SIGNAL,...} have nearly the same name, rename RAIL_TYPE_* to RAIL_TILE_* of extra clarity
rubidium
parents:
3673
diff
changeset
|
315 |
if (GetRailTileType(tile) != RAIL_TILE_NORMAL) goto do_clear; |
3269
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
316 |
switch (GetTrackBits(tile)) { |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
317 |
case TRACK_BIT_X: |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
318 |
if (pieces & ROAD_X) goto do_clear; |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
319 |
roaddir = AXIS_Y; |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
320 |
break; |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
321 |
|
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
322 |
case TRACK_BIT_Y: |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
323 |
if (pieces & ROAD_Y) goto do_clear; |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
324 |
roaddir = AXIS_X; |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
325 |
break; |
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
326 |
|
62fb247bf94b
(svn r3981) More work for the rail accessing functions and enums
tron
parents:
3267
diff
changeset
|
327 |
default: goto do_clear; |
3060 | 328 |
} |
329 |
||
6406
8ccf18e94c67
(svn r9542) -Fix(FS# 712): When checking if a vehicle is on a given tile, and you are working on the ground tile, do not take aircrafts into account, as they do not pose any danger for the construction/destruction/conversion itself. Z stuff, in other words
belugas
parents:
6393
diff
changeset
|
330 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
331 |
|
3060 | 332 |
if (flags & DC_EXEC) { |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
333 |
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile))); |
3242
4c32bf21153b
(svn r3916) Get/Set the rail type by [GS]etRailType{Crossing,OnBridge,}()
tron
parents:
3234
diff
changeset
|
334 |
MakeRoadCrossing(tile, _current_player, GetTileOwner(tile), roaddir, GetRailType(tile), p2); |
3100
a6706067501d
(svn r3695) Add 2 MarkTileByTile() which I forgot in r3689 (noticed by Belugas)
tron
parents:
3099
diff
changeset
|
335 |
MarkTileDirtyByTile(tile); |
3060 | 336 |
} |
337 |
return _price.build_road * 2; |
|
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
|
338 |
} |
0 | 339 |
|
3060 | 340 |
default: |
0 | 341 |
do_clear:; |
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:
3435
diff
changeset
|
342 |
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
343 |
if (CmdFailed(ret)) return ret; |
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
344 |
cost += ret; |
0 | 345 |
} |
346 |
||
3434
0ada2e311826
(svn r4263) -Codechange: Road building no longer uses FindLandscapeHeight. Last occurence of FindLandscapeTile in the tile-specific functions gone. Thanks to Tron for doing lots of work in this direction
celestar
parents:
3430
diff
changeset
|
347 |
ret = CheckRoadSlope(tileh, &pieces, existing); |
3670
8d4014eb04d5
(svn r4585) - Fix [FS#130] - Obscure road dragging bug. The road build command did not return the appropiate error message of invalid-slope when building road.
Darkvater
parents:
3657
diff
changeset
|
348 |
/* Return an error if we need to build a foundation (ret != 0) but the |
8d4014eb04d5
(svn r4585) - Fix [FS#130] - Obscure road dragging bug. The road build command did not return the appropiate error message of invalid-slope when building road.
Darkvater
parents:
3657
diff
changeset
|
349 |
* current patch-setting is turned off (or stupid AI@work) */ |
3673
00ba3772ca20
(svn r4590) - Fix (r4585): warning: suggest parentheses around && within ||. Sorry
Darkvater
parents:
3671
diff
changeset
|
350 |
if (CmdFailed(ret) || (ret != 0 && (!_patches.build_on_slopes || _is_old_ai_player))) |
3670
8d4014eb04d5
(svn r4585) - Fix [FS#130] - Obscure road dragging bug. The road build command did not return the appropiate error message of invalid-slope when building road.
Darkvater
parents:
3657
diff
changeset
|
351 |
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
8d4014eb04d5
(svn r4585) - Fix [FS#130] - Obscure road dragging bug. The road build command did not return the appropiate error message of invalid-slope when building road.
Darkvater
parents:
3657
diff
changeset
|
352 |
|
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
353 |
cost += ret; |
0 | 354 |
|
3434
0ada2e311826
(svn r4263) -Codechange: Road building no longer uses FindLandscapeHeight. Last occurence of FindLandscapeTile in the tile-specific functions gone. Thanks to Tron for doing lots of work in this direction
celestar
parents:
3430
diff
changeset
|
355 |
if (IsTileType(tile, MP_STREET)) { |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
356 |
/* Don't put the pieces that already exist */ |
3150
729951cb5448
(svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents:
3149
diff
changeset
|
357 |
pieces &= ComplementRoadBits(existing); |
0 | 358 |
} |
359 |
||
3381
91ee7484deff
(svn r4187) Simplify the code for building/removing a piece of road a bit
tron
parents:
3379
diff
changeset
|
360 |
cost += CountRoadBits(pieces) * _price.build_road; |
0 | 361 |
|
362 |
if (flags & DC_EXEC) { |
|
3434
0ada2e311826
(svn r4263) -Codechange: Road building no longer uses FindLandscapeHeight. Last occurence of FindLandscapeTile in the tile-specific functions gone. Thanks to Tron for doing lots of work in this direction
celestar
parents:
3430
diff
changeset
|
363 |
if (IsTileType(tile, MP_STREET)) { |
3150
729951cb5448
(svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents:
3149
diff
changeset
|
364 |
SetRoadBits(tile, existing | pieces); |
729951cb5448
(svn r3773) Shove some semantics down ottd's throat by replacing ints and magic numbers by enums and some related changes
tron
parents:
3149
diff
changeset
|
365 |
} else { |
3099
571719b2cee3
(svn r3689) Add functions to turn a tile into either a normal road tile, a level crossing or a road depot
tron
parents:
3098
diff
changeset
|
366 |
MakeRoadNormal(tile, _current_player, pieces, p2); |
0 | 367 |
} |
368 |
||
369 |
MarkTileDirtyByTile(tile); |
|
370 |
} |
|
371 |
return cost; |
|
372 |
} |
|
373 |
||
6368
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
374 |
/** |
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
375 |
* Switches the rail type on a level crossing. |
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
376 |
* @param tile The tile on which the railtype is to be convert. |
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
377 |
* @param totype The railtype we want to convert to |
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
378 |
* @param exec Switches between test and execute mode |
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
379 |
* @return The cost and state of the operation |
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
380 |
* @retval CMD_ERROR An error occured during the operation. |
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
381 |
*/ |
3435
dfba5b1c7c2d
(svn r4265) - Fix: compile warning on VS2005 (parameter 2 different from declaration)
Darkvater
parents:
3434
diff
changeset
|
382 |
int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec) |
0 | 383 |
{ |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
384 |
/* not a railroad crossing? */ |
1927
1181e7652e2f
(svn r2433) - CodeChange: unmagicify all road/train crossings with IsLevelCrossing() function (peter1138)
Darkvater
parents:
1902
diff
changeset
|
385 |
if (!IsLevelCrossing(tile)) return CMD_ERROR; |
0 | 386 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
387 |
/* not owned by me? */ |
6406
8ccf18e94c67
(svn r9542) -Fix(FS# 712): When checking if a vehicle is on a given tile, and you are working on the ground tile, do not take aircrafts into account, as they do not pose any danger for the construction/destruction/conversion itself. Z stuff, in other words
belugas
parents:
6393
diff
changeset
|
388 |
if (!CheckTileOwnership(tile) || !EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
0 | 389 |
|
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
6160
diff
changeset
|
390 |
if (GetRailType(tile) == totype) return CMD_ERROR; |
0 | 391 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
392 |
/* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */ |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
6160
diff
changeset
|
393 |
if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR; |
5116
3c0c3da214ca
(svn r7195) -Feature: [FS#297, optional elrails] New patches/vehicles option 'disable electrified railways'.
KUDr
parents:
5009
diff
changeset
|
394 |
|
0 | 395 |
if (exec) { |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
6160
diff
changeset
|
396 |
SetRailType(tile, totype); |
0 | 397 |
MarkTileDirtyByTile(tile); |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
398 |
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetCrossingRailBits(tile))); |
0 | 399 |
} |
400 |
||
6368
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
401 |
return _price.build_rail / 2; |
0 | 402 |
} |
403 |
||
404 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
405 |
/** Build a long piece of road. |
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:
3435
diff
changeset
|
406 |
* @param end_tile end tile of drag |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6427
diff
changeset
|
407 |
* @param flags operation to perform |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
408 |
* @param p1 start tile of drag |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
409 |
* @param p2 various bitstuffed elements |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
410 |
* - p2 = (bit 0) - start tile starts in the 2nd half of tile (p2 & 1) |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
411 |
* - p2 = (bit 1) - end tile starts in the 2nd half of tile (p2 & 2) |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
412 |
* - p2 = (bit 2) - direction: 0 = along x-axis, 1 = along y-axis (p2 & 4) |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
413 |
*/ |
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:
3435
diff
changeset
|
414 |
int32 CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 415 |
{ |
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:
3435
diff
changeset
|
416 |
TileIndex start_tile, tile; |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
417 |
int32 cost, ret; |
0 | 418 |
|
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:
817
diff
changeset
|
419 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
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:
817
diff
changeset
|
420 |
|
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:
2916
diff
changeset
|
421 |
if (p1 >= MapSize()) return CMD_ERROR; |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
422 |
|
0 | 423 |
start_tile = p1; |
424 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
425 |
/* Only drag in X or Y direction dictated by the direction variable */ |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
426 |
if (!HASBIT(p2, 2) && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
427 |
if (HASBIT(p2, 2) && TileX(start_tile) != TileX(end_tile)) return CMD_ERROR; // y-axis |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
428 |
|
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
429 |
/* Swap start and ending tile, also the half-tile drag var (bit 0 and 1) */ |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
430 |
if (start_tile > end_tile || (start_tile == end_tile && HASBIT(p2, 0))) { |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
431 |
TileIndex t = start_tile; |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
432 |
start_tile = end_tile; |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
433 |
end_tile = t; |
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6483
diff
changeset
|
434 |
p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0; |
0 | 435 |
} |
436 |
||
437 |
cost = 0; |
|
438 |
tile = start_tile; |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
439 |
/* Start tile is the small number. */ |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
440 |
for (;;) { |
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
441 |
RoadBits bits = HASBIT(p2, 2) ? ROAD_Y : ROAD_X; |
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
442 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
443 |
if (tile == end_tile && !HASBIT(p2, 1)) bits &= ROAD_NW | ROAD_NE; |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
444 |
if (tile == start_tile && HASBIT(p2, 0)) bits &= ROAD_SE | ROAD_SW; |
0 | 445 |
|
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:
3435
diff
changeset
|
446 |
ret = DoCommand(tile, bits, 0, flags, CMD_BUILD_ROAD); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
447 |
if (CmdFailed(ret)) { |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
448 |
if (_error_message != STR_1007_ALREADY_BUILT) return CMD_ERROR; |
3671
5b6a80e29dd6
(svn r4586) - Codechange: Recursive commands that rely on _error_message to handle success/failure can fail if a recursive call fails but doesn't set the error message, thus resulting in an old, possibly erroneous being used (see FS#130 prior to r4585). Now properly reset the global variable _error_message in these cases.
Darkvater
parents:
3670
diff
changeset
|
449 |
_error_message = INVALID_STRING_ID; |
2549 | 450 |
} else { |
0 | 451 |
cost += ret; |
2549 | 452 |
} |
0 | 453 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
454 |
if (tile == end_tile) break; |
0 | 455 |
|
1981 | 456 |
tile += HASBIT(p2, 2) ? TileDiffXY(0, 1) : TileDiffXY(1, 0); |
0 | 457 |
} |
458 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
459 |
return (cost == 0) ? CMD_ERROR : cost; |
0 | 460 |
} |
461 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
462 |
/** Remove a long piece of road. |
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:
3435
diff
changeset
|
463 |
* @param end_tile end tile of drag |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6427
diff
changeset
|
464 |
* @param flags operation to perform |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
465 |
* @param p1 start tile of drag |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
466 |
* @param p2 various bitstuffed elements |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
467 |
* - p2 = (bit 0) - start tile starts in the 2nd half of tile (p2 & 1) |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
468 |
* - p2 = (bit 1) - end tile starts in the 2nd half of tile (p2 & 2) |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
469 |
* - p2 = (bit 2) - direction: 0 = along x-axis, 1 = along y-axis (p2 & 4) |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
470 |
*/ |
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:
3435
diff
changeset
|
471 |
int32 CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 472 |
{ |
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:
3435
diff
changeset
|
473 |
TileIndex start_tile, tile; |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
474 |
int32 cost, ret; |
0 | 475 |
|
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:
817
diff
changeset
|
476 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
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:
817
diff
changeset
|
477 |
|
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:
2916
diff
changeset
|
478 |
if (p1 >= MapSize()) return CMD_ERROR; |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
479 |
|
0 | 480 |
start_tile = p1; |
481 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
482 |
/* Only drag in X or Y direction dictated by the direction variable */ |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
483 |
if (!HASBIT(p2, 2) && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
484 |
if (HASBIT(p2, 2) && TileX(start_tile) != TileX(end_tile)) return CMD_ERROR; // y-axis |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
485 |
|
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
486 |
/* Swap start and ending tile, also the half-tile drag var (bit 0 and 1) */ |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
487 |
if (start_tile > end_tile || (start_tile == end_tile && HASBIT(p2, 0))) { |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
488 |
TileIndex t = start_tile; |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
489 |
start_tile = end_tile; |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
490 |
end_tile = t; |
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
|
491 |
p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0; |
0 | 492 |
} |
493 |
||
494 |
cost = 0; |
|
495 |
tile = start_tile; |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
496 |
/* Start tile is the small number. */ |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
497 |
for (;;) { |
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
498 |
RoadBits bits = HASBIT(p2, 2) ? ROAD_Y : ROAD_X; |
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
499 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
500 |
if (tile == end_tile && !HASBIT(p2, 1)) bits &= ROAD_NW | ROAD_NE; |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
501 |
if (tile == start_tile && HASBIT(p2, 0)) bits &= ROAD_SE | ROAD_SW; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
502 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
503 |
/* try to remove the halves. */ |
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
504 |
if (bits != 0) { |
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:
3435
diff
changeset
|
505 |
ret = DoCommand(tile, bits, 0, flags, CMD_REMOVE_ROAD); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
506 |
if (!CmdFailed(ret)) cost += ret; |
0 | 507 |
} |
508 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
509 |
if (tile == end_tile) break; |
0 | 510 |
|
1981 | 511 |
tile += HASBIT(p2, 2) ? TileDiffXY(0, 1) : TileDiffXY(1, 0); |
0 | 512 |
} |
513 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
514 |
return (cost == 0) ? CMD_ERROR : cost; |
0 | 515 |
} |
516 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
517 |
/** Build a road 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:
3435
diff
changeset
|
518 |
* @param tile tile where to build the depot |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6427
diff
changeset
|
519 |
* @param flags operation to perform |
6134 | 520 |
* @param p1 bit 0..1 entrance direction (DiagDirection) |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
521 |
* @param p2 unused |
2085
876f20a0e843
(svn r2595) -Codechange: Introduced "IsSteepTileh" to find whether a tile is steep
celestar
parents:
2074
diff
changeset
|
522 |
* |
876f20a0e843
(svn r2595) -Codechange: Introduced "IsSteepTileh" to find whether a tile is steep
celestar
parents:
2074
diff
changeset
|
523 |
* @todo When checking for the tile slope, |
876f20a0e843
(svn r2595) -Codechange: Introduced "IsSteepTileh" to find whether a tile is steep
celestar
parents:
2074
diff
changeset
|
524 |
* distingush between "Flat land required" and "land sloped in wrong direction" |
0 | 525 |
*/ |
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:
3435
diff
changeset
|
526 |
int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 527 |
{ |
528 |
int32 cost; |
|
529 |
Depot *dep; |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
530 |
Slope tileh; |
0 | 531 |
|
532 |
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
|
533 |
||
6134 | 534 |
DiagDirection dir = Extract<DiagDirection, 0>(p1); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1638
diff
changeset
|
535 |
|
3055
ed20cba49858
(svn r3644) Don't use FindLandscapeHeightByTile() when it's overkill - often it was just a complicated way of writing GetTileSlope(tile, NULL)
tron
parents:
3017
diff
changeset
|
536 |
tileh = GetTileSlope(tile, NULL); |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
537 |
if (tileh != SLOPE_FLAT && ( |
2549 | 538 |
!_patches.build_on_slopes || |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
539 |
IsSteepSlope(tileh) || |
6134 | 540 |
!CanBuildDepotByTileh(dir, tileh) |
2549 | 541 |
)) { |
542 |
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); |
|
0 | 543 |
} |
544 |
||
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:
3435
diff
changeset
|
545 |
cost = 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:
1638
diff
changeset
|
546 |
if (CmdFailed(cost)) return CMD_ERROR; |
0 | 547 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
548 |
if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) 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:
5212
diff
changeset
|
549 |
|
0 | 550 |
dep = AllocateDepot(); |
2549 | 551 |
if (dep == NULL) return CMD_ERROR; |
0 | 552 |
|
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
553 |
if (flags & DC_EXEC) { |
0 | 554 |
dep->xy = tile; |
555 |
dep->town_index = ClosestTownFromTile(tile, (uint)-1)->index; |
|
556 |
||
6134 | 557 |
MakeRoadDepot(tile, _current_player, dir); |
3100
a6706067501d
(svn r3695) Add 2 MarkTileByTile() which I forgot in r3689 (noticed by Belugas)
tron
parents:
3099
diff
changeset
|
558 |
MarkTileDirtyByTile(tile); |
0 | 559 |
} |
560 |
return cost + _price.build_road_depot; |
|
561 |
} |
|
562 |
||
1979
82d8bcc16ce2
(svn r2485) Missed two uint -> TileIndex, thanks _Luca_
tron
parents:
1977
diff
changeset
|
563 |
static int32 RemoveRoadDepot(TileIndex tile, uint32 flags) |
0 | 564 |
{ |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
84
diff
changeset
|
565 |
if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER) |
0 | 566 |
return CMD_ERROR; |
567 |
||
2639 | 568 |
if (!EnsureNoVehicle(tile)) return CMD_ERROR; |
0 | 569 |
|
4388
c8a66d26e146
(svn r6141) -Codechange: introduced DepotID and used it as much as possible
truelight
parents:
4352
diff
changeset
|
570 |
if (flags & DC_EXEC) DeleteDepot(GetDepotByTile(tile)); |
0 | 571 |
|
572 |
return _price.remove_road_depot; |
|
573 |
} |
|
574 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
575 |
static int32 ClearTile_Road(TileIndex tile, byte flags) |
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
576 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
577 |
switch (GetRoadTileType(tile)) { |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
578 |
case ROAD_TILE_NORMAL: { |
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
3068
diff
changeset
|
579 |
RoadBits b = GetRoadBits(tile); |
0 | 580 |
|
5637
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
581 |
#define M(x) (1 << (x)) |
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
582 |
/* Clear the road if only one piece is on the tile OR the AI tries |
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
583 |
* to clear town road OR we are not using the DC_AUTO flag */ |
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
584 |
if ((M(b) & (M(ROAD_NW) | M(ROAD_SW) | M(ROAD_SE) | M(ROAD_NE))) || |
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
585 |
((flags & DC_AI_BUILDING) && IsTileOwner(tile, OWNER_TOWN)) || |
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
586 |
!(flags & DC_AUTO) |
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
587 |
) { |
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
588 |
return DoCommand(tile, b, 0, flags, CMD_REMOVE_ROAD); |
3060 | 589 |
} |
5637
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
590 |
return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST); |
5643
b373887faf8b
(svn r8102) -Cleanup: Remove unreachable code (r8096), useless cast
Darkvater
parents:
5637
diff
changeset
|
591 |
} |
5637
aa922e570f9a
(svn r8096) -Codechange: Invert the check if you are allowed to clear a road tile so there are not so many negations (too confusing) and added some comments to further clarify what happens.
Darkvater
parents:
5587
diff
changeset
|
592 |
#undef M |
0 | 593 |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
594 |
case ROAD_TILE_CROSSING: { |
3060 | 595 |
int32 ret; |
596 |
||
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
3068
diff
changeset
|
597 |
if (flags & DC_AUTO) return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST); |
3060 | 598 |
|
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:
3435
diff
changeset
|
599 |
ret = DoCommand(tile, GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD); |
3060 | 600 |
if (CmdFailed(ret)) return CMD_ERROR; |
601 |
||
602 |
if (flags & DC_EXEC) { |
|
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:
3435
diff
changeset
|
603 |
DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
3060 | 604 |
} |
605 |
return ret; |
|
606 |
} |
|
607 |
||
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
3068
diff
changeset
|
608 |
default: |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
609 |
case ROAD_TILE_DEPOT: |
3060 | 610 |
if (flags & DC_AUTO) { |
611 |
return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED); |
|
612 |
} |
|
613 |
return RemoveRoadDepot(tile, flags); |
|
0 | 614 |
} |
615 |
} |
|
616 |
||
617 |
||
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6172
diff
changeset
|
618 |
struct DrawRoadTileStruct { |
0 | 619 |
uint16 image; |
620 |
byte subcoord_x; |
|
621 |
byte subcoord_y; |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6172
diff
changeset
|
622 |
}; |
0 | 623 |
|
624 |
#include "table/road_land.h" |
|
625 |
||
626 |
||
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
627 |
uint GetRoadFoundation(Slope tileh, RoadBits bits) |
2548
49c8a096033f
(svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents:
2544
diff
changeset
|
628 |
{ |
3878
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
629 |
uint i; |
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
630 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
631 |
/* normal level sloped building */ |
4246
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
632 |
if (!IsSteepSlope(tileh) && |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
633 |
(~_valid_tileh_slopes_road[1][tileh] & bits) == 0) { |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
634 |
return tileh; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
635 |
} |
0 | 636 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
637 |
/* inclined sloped building */ |
3878
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
638 |
switch (bits) { |
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
639 |
case ROAD_X: i = 0; break; |
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
640 |
case ROAD_Y: i = 1; break; |
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
641 |
default: return 0; |
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
|
642 |
} |
3878
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
643 |
switch (tileh) { |
4246
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
644 |
case SLOPE_W: |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
645 |
case SLOPE_STEEP_W: i += 0; break; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
646 |
case SLOPE_S: |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
647 |
case SLOPE_STEEP_S: i += 2; break; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
648 |
case SLOPE_E: |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
649 |
case SLOPE_STEEP_E: i += 4; break; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
650 |
case SLOPE_N: |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
651 |
case SLOPE_STEEP_N: i += 6; break; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
652 |
default: return 0; |
3878
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
653 |
} |
ef06782573c0
(svn r4927) Replace 3 big ifs (which regard foundations) by a bit less confusing code
tron
parents:
3794
diff
changeset
|
654 |
return i + 15; |
0 | 655 |
} |
656 |
||
657 |
const byte _road_sloped_sprites[14] = { |
|
658 |
0, 0, 2, 0, |
|
659 |
0, 1, 0, 0, |
|
660 |
3, 0, 0, 0, |
|
661 |
0, 0 |
|
662 |
}; |
|
663 |
||
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
664 |
/** |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
665 |
* Draw ground sprite and road pieces |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
666 |
* @param ti TileInfo |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
667 |
*/ |
4081 | 668 |
static void DrawRoadBits(TileInfo* ti) |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
669 |
{ |
4081 | 670 |
RoadBits road = GetRoadBits(ti->tile); |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
671 |
const DrawRoadTileStruct *drts; |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
672 |
SpriteID image = 0; |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
673 |
SpriteID pal = PAL_NONE; |
4048 | 674 |
Roadside roadside; |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
675 |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
676 |
if (ti->tileh != SLOPE_FLAT) { |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
677 |
int foundation = GetRoadFoundation(ti->tileh, road); |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
678 |
|
2639 | 679 |
if (foundation != 0) DrawFoundation(ti, foundation); |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
680 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
681 |
/* DrawFoundation() modifies ti. |
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
682 |
* Default sloped sprites.. */ |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
683 |
if (ti->tileh != SLOPE_FLAT) image = _road_sloped_sprites[ti->tileh - 1] + 0x53F; |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
684 |
} |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
685 |
|
2639 | 686 |
if (image == 0) image = _road_tile_sprites_1[road]; |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
687 |
|
4048 | 688 |
roadside = GetRoadside(ti->tile); |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
689 |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
690 |
if (IsOnSnow(ti->tile)) { |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
691 |
image += 19; |
4048 | 692 |
} else { |
693 |
switch (roadside) { |
|
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
694 |
case ROADSIDE_BARREN: pal = PALETTE_TO_BARE_LAND; break; |
4048 | 695 |
case ROADSIDE_GRASS: break; |
696 |
case ROADSIDE_GRASS_ROAD_WORKS: break; |
|
697 |
default: image -= 19; break; // Paved |
|
698 |
} |
|
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
699 |
} |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
700 |
|
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
701 |
DrawGroundSprite(image, pal); |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
702 |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
703 |
if (HasRoadWorks(ti->tile)) { |
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
704 |
/* Road works */ |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
705 |
DrawGroundSprite(road & ROAD_X ? SPR_EXCAVATION_X : SPR_EXCAVATION_Y, PAL_NONE); |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
706 |
return; |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
707 |
} |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
708 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
709 |
/* Return if full detail is disabled, or we are zoomed fully out. */ |
5148
3641479afb1d
(svn r7240) -Fix: Always display the excavation of roadworks even when fully zoomed out (they are quite noticable) or "full details" are off (they are part of the game mechanics)
tron
parents:
5116
diff
changeset
|
710 |
if (!(_display_opt & DO_FULL_DETAIL) || _cur_dpi->zoom == 2) return; |
3641479afb1d
(svn r7240) -Fix: Always display the excavation of roadworks even when fully zoomed out (they are quite noticable) or "full details" are off (they are part of the game mechanics)
tron
parents:
5116
diff
changeset
|
711 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
712 |
/* Draw extra details. */ |
4048 | 713 |
for (drts = _road_display_table[roadside][road]; drts->image != 0; drts++) { |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
714 |
int x = ti->x | drts->subcoord_x; |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
715 |
int y = ti->y | drts->subcoord_y; |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
716 |
byte z = ti->z; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
717 |
if (ti->tileh != SLOPE_FLAT) z = GetSlopeZ(x, y); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
718 |
AddSortableSpriteToDraw(drts->image, PAL_NONE, x, y, 2, 2, 0x10, z); |
2471
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
719 |
} |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
720 |
} |
5935596f14a8
(svn r2997) -Codechange: Split road drawing code off from DrawTile_Road into a separate function to be used elsewhere.
peter1138
parents:
2469
diff
changeset
|
721 |
|
0 | 722 |
static void DrawTile_Road(TileInfo *ti) |
723 |
{ |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
724 |
switch (GetRoadTileType(ti->tile)) { |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
725 |
case ROAD_TILE_NORMAL: |
4081 | 726 |
DrawRoadBits(ti); |
3060 | 727 |
break; |
0 | 728 |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
729 |
case ROAD_TILE_CROSSING: { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
730 |
SpriteID image; |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
731 |
SpriteID pal = PAL_NONE; |
4000
4009d092b306
(svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents:
3977
diff
changeset
|
732 |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
733 |
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, ti->tileh); |
0 | 734 |
|
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
6160
diff
changeset
|
735 |
image = GetRailTypeInfo(GetRailType(ti->tile))->base_sprites.crossing; |
3060 | 736 |
|
3272
b3e2d8e19937
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3269
diff
changeset
|
737 |
if (GetCrossingRoadAxis(ti->tile) == AXIS_X) image++; |
3322
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3319
diff
changeset
|
738 |
if (IsCrossingBarred(ti->tile)) image += 2; |
3060 | 739 |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
740 |
if (IsOnSnow(ti->tile)) { |
3060 | 741 |
image += 8; |
742 |
} else { |
|
4048 | 743 |
switch (GetRoadside(ti->tile)) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
744 |
case ROADSIDE_BARREN: pal = PALETTE_TO_BARE_LAND; break; |
4048 | 745 |
case ROADSIDE_GRASS: break; |
746 |
default: image += 4; break; // Paved |
|
747 |
} |
|
3060 | 748 |
} |
749 |
||
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
750 |
DrawGroundSprite(image, pal); |
6172
e6d7a5b3d63f
(svn r8935) -Codechange: unification of track type between road and rail tiles, unification of ground type between normal rail tiles and depots/waypoints and removing the need for RailTileSubType.
rubidium
parents:
6160
diff
changeset
|
751 |
if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti); |
3060 | 752 |
break; |
0 | 753 |
} |
754 |
||
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
755 |
default: |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
756 |
case ROAD_TILE_DEPOT: { |
4232
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
757 |
const DrawTileSprites* dts; |
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
758 |
const DrawTileSeqStruct* dtss; |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
759 |
SpriteID palette; |
0 | 760 |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
761 |
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, ti->tileh); |
1398 | 762 |
|
4226
10d7608f4c6c
(svn r5772) Road depots always have an player as owner, so remove an useless check
tron
parents:
4212
diff
changeset
|
763 |
palette = PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)); |
0 | 764 |
|
4232
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
765 |
dts = &_road_depot[GetRoadDepotDirection(ti->tile)]; |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
766 |
DrawGroundSprite(dts->ground_sprite, PAL_NONE); |
3060 | 767 |
|
4232
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
768 |
for (dtss = dts->seq; dtss->image != 0; dtss++) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
769 |
SpriteID image = dtss->image; |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
770 |
SpriteID pal; |
3060 | 771 |
|
6427
7dc1012757d8
(svn r9563) -Feature: Add more finer control to transparency options, including a new toolbar, accessible from the map menu or Ctrl X. Patch by Wolf01.
peter1138
parents:
6406
diff
changeset
|
772 |
if (HASBIT(_transparent_opt, TO_BUILDINGS)) { |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
773 |
SETBIT(image, PALETTE_MODIFIER_TRANSPARENT); |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
774 |
pal = PALETTE_TO_TRANSPARENT; |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
775 |
} else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) { |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
776 |
pal = palette; |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
777 |
} else { |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
778 |
pal = PAL_NONE; |
4226
10d7608f4c6c
(svn r5772) Road depots always have an player as owner, so remove an useless check
tron
parents:
4212
diff
changeset
|
779 |
} |
3060 | 780 |
|
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
781 |
AddSortableSpriteToDraw( |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
782 |
image, pal, |
4232
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
783 |
ti->x + dtss->delta_x, ti->y + dtss->delta_y, |
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
784 |
dtss->size_x, dtss->size_y, |
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
785 |
dtss->size_z, ti->z |
3060 | 786 |
); |
787 |
} |
|
788 |
break; |
|
0 | 789 |
} |
790 |
} |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5212
diff
changeset
|
791 |
DrawBridgeMiddle(ti); |
0 | 792 |
} |
793 |
||
4212
85159aaf48fb
(svn r5723) - Move the declaration of DrawRoadDepotSprite() out of functions.h (but I'm not too happy with the new header)
tron
parents:
4158
diff
changeset
|
794 |
void DrawRoadDepotSprite(int x, int y, DiagDirection dir) |
0 | 795 |
{ |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
796 |
SpriteID palette = PLAYER_SPRITE_COLOR(_local_player); |
4232
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
797 |
const DrawTileSprites* dts = &_road_depot[dir]; |
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
798 |
const DrawTileSeqStruct* dtss; |
0 | 799 |
|
2639 | 800 |
x += 33; |
801 |
y += 17; |
|
0 | 802 |
|
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
803 |
DrawSprite(dts->ground_sprite, PAL_NONE, x, y); |
0 | 804 |
|
4232
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
805 |
for (dtss = dts->seq; dtss->image != 0; dtss++) { |
136a11474264
(svn r5796) Use DrawTileSprites/DrawTileSeqStruct for road depot drawing data, too
tron
parents:
4231
diff
changeset
|
806 |
Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
807 |
SpriteID image = dtss->image; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
808 |
|
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5643
diff
changeset
|
809 |
DrawSprite(image, HASBIT(image, PALETTE_MODIFIER_COLOR) ? palette : PAL_NONE, x + pt.x, y + pt.y); |
0 | 810 |
} |
811 |
} |
|
812 |
||
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4226
diff
changeset
|
813 |
static uint GetSlopeZ_Road(TileIndex tile, uint x, uint y) |
0 | 814 |
{ |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4226
diff
changeset
|
815 |
uint z; |
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4226
diff
changeset
|
816 |
Slope tileh = GetTileSlope(tile, &z); |
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
817 |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
818 |
if (tileh == SLOPE_FLAT) return z; |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4226
diff
changeset
|
819 |
if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) { |
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4226
diff
changeset
|
820 |
uint f = GetRoadFoundation(tileh, GetRoadBits(tile)); |
3060 | 821 |
|
3286
5177aab0ec21
(svn r4000) Rewrite GetSlope{Tileh,Z}_{Road,Track} in a less confusing way
tron
parents:
3277
diff
changeset
|
822 |
if (f != 0) { |
4246
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
823 |
if (IsSteepSlope(tileh)) { |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
824 |
z += TILE_HEIGHT; |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
825 |
} else if (f < 15) { |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
826 |
return z + TILE_HEIGHT; // leveled foundation |
6dcc0e44a367
(svn r5833) -Feature: Allow building of (certain) rails, roads and bridge ramps on steep sloped tiles
tron
parents:
4232
diff
changeset
|
827 |
} |
3286
5177aab0ec21
(svn r4000) Rewrite GetSlope{Tileh,Z}_{Road,Track} in a less confusing way
tron
parents:
3277
diff
changeset
|
828 |
tileh = _inclined_tileh[f - 15]; // inclined foundation |
0 | 829 |
} |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4226
diff
changeset
|
830 |
return z + GetPartialZ(x & 0xF, y & 0xF, tileh); |
3286
5177aab0ec21
(svn r4000) Rewrite GetSlope{Tileh,Z}_{Road,Track} in a less confusing way
tron
parents:
3277
diff
changeset
|
831 |
} else { |
3645
7f950533d510
(svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents:
3637
diff
changeset
|
832 |
return z + TILE_HEIGHT; |
0 | 833 |
} |
39 | 834 |
} |
835 |
||
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
836 |
static Slope GetSlopeTileh_Road(TileIndex tile, Slope tileh) |
39 | 837 |
{ |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
838 |
if (tileh == SLOPE_FLAT) return SLOPE_FLAT; |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
839 |
if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) { |
3418
ec9003ebf933
(svn r4242) Pass TileIndex and slope to GetSlopeTileh_*() instead of TileInfo
tron
parents:
3415
diff
changeset
|
840 |
uint f = GetRoadFoundation(tileh, GetRoadBits(tile)); |
3098
aed45c5c1e11
(svn r3687) Complete some bits I missed whenn adding accessor functions for road types and pieces
tron
parents:
3097
diff
changeset
|
841 |
|
3418
ec9003ebf933
(svn r4242) Pass TileIndex and slope to GetSlopeTileh_*() instead of TileInfo
tron
parents:
3415
diff
changeset
|
842 |
if (f == 0) return tileh; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
843 |
if (f < 15) return SLOPE_FLAT; // leveled foundation |
3286
5177aab0ec21
(svn r4000) Rewrite GetSlope{Tileh,Z}_{Road,Track} in a less confusing way
tron
parents:
3277
diff
changeset
|
844 |
return _inclined_tileh[f - 15]; // inclined foundation |
5177aab0ec21
(svn r4000) Rewrite GetSlope{Tileh,Z}_{Road,Track} in a less confusing way
tron
parents:
3277
diff
changeset
|
845 |
} else { |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3560
diff
changeset
|
846 |
return SLOPE_FLAT; |
39 | 847 |
} |
0 | 848 |
} |
849 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
850 |
static void GetAcceptedCargo_Road(TileIndex tile, AcceptedCargo ac) |
0 | 851 |
{ |
852 |
/* not used */ |
|
853 |
} |
|
854 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
855 |
static void AnimateTile_Road(TileIndex tile) |
0 | 856 |
{ |
2639 | 857 |
if (IsLevelCrossing(tile)) MarkTileDirtyByTile(tile); |
0 | 858 |
} |
859 |
||
4048 | 860 |
|
861 |
static const Roadside _town_road_types[][2] = { |
|
862 |
{ ROADSIDE_GRASS, ROADSIDE_GRASS }, |
|
863 |
{ ROADSIDE_PAVED, ROADSIDE_PAVED }, |
|
864 |
{ ROADSIDE_PAVED, ROADSIDE_PAVED }, |
|
865 |
{ ROADSIDE_TREES, ROADSIDE_TREES }, |
|
866 |
{ ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED } |
|
0 | 867 |
}; |
868 |
||
4048 | 869 |
static const Roadside _town_road_types_2[][2] = { |
870 |
{ ROADSIDE_GRASS, ROADSIDE_GRASS }, |
|
871 |
{ ROADSIDE_PAVED, ROADSIDE_PAVED }, |
|
872 |
{ ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED }, |
|
873 |
{ ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED }, |
|
874 |
{ ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED } |
|
0 | 875 |
}; |
876 |
||
877 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
878 |
static void TileLoop_Road(TileIndex tile) |
0 | 879 |
{ |
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
|
880 |
switch (_opt.landscape) { |
6357
f0f5e7d1713c
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6343
diff
changeset
|
881 |
case LT_ARCTIC: |
6343
76d17f784c13
(svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents:
6259
diff
changeset
|
882 |
if (IsOnSnow(tile) != (GetTileZ(tile) > GetSnowLine())) { |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
883 |
ToggleSnow(tile); |
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
|
884 |
MarkTileDirtyByTile(tile); |
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
|
885 |
} |
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
|
886 |
break; |
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
|
887 |
|
6357
f0f5e7d1713c
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6343
diff
changeset
|
888 |
case LT_TROPIC: |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
889 |
if (GetTropicZone(tile) == TROPICZONE_DESERT && !IsOnDesert(tile)) { |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
890 |
ToggleDesert(tile); |
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
|
891 |
MarkTileDirtyByTile(tile); |
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
|
892 |
} |
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
|
893 |
break; |
0 | 894 |
} |
895 |
||
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
896 |
if (GetRoadTileType(tile) == ROAD_TILE_DEPOT) return; |
0 | 897 |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
898 |
if (!HasRoadWorks(tile)) { |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
899 |
const Town* t = ClosestTownFromTile(tile, (uint)-1); |
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
900 |
int grp = 0; |
1280
33a251c30758
(svn r1784) -Fix: removed ClosestTownFromTile where possible, or replaced it
truelight
parents:
1264
diff
changeset
|
901 |
|
0 | 902 |
if (t != NULL) { |
903 |
grp = GetTownRadiusGroup(t, tile); |
|
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
904 |
|
6393
e1e4939d19b5
(svn r9523) -Cleanup: doxygen changes. Time to take care of "R"
belugas
parents:
6368
diff
changeset
|
905 |
/* Show an animation to indicate road work */ |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
906 |
if (t->road_build_months != 0 && |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
907 |
(DistanceManhattan(t->xy, tile) < 8 || grp != 0) && |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
908 |
GetRoadTileType(tile) == ROAD_TILE_NORMAL && (GetRoadBits(tile) == ROAD_X || GetRoadBits(tile) == ROAD_Y)) { |
6406
8ccf18e94c67
(svn r9542) -Fix(FS# 712): When checking if a vehicle is on a given tile, and you are working on the ground tile, do not take aircrafts into account, as they do not pose any danger for the construction/destruction/conversion itself. Z stuff, in other words
belugas
parents:
6393
diff
changeset
|
909 |
if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicleOnGround(tile) && CHANCE16(1, 20)) { |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
910 |
StartRoadWorks(tile); |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
911 |
|
541 | 912 |
SndPlayTileFx(SND_21_JACKHAMMER, tile); |
0 | 913 |
CreateEffectVehicleAbove( |
3421
7968a4b5ff0a
(svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents:
3418
diff
changeset
|
914 |
TileX(tile) * TILE_SIZE + 7, |
7968a4b5ff0a
(svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents:
3418
diff
changeset
|
915 |
TileY(tile) * TILE_SIZE + 7, |
0 | 916 |
0, |
1359
52782e5cf7c9
(svn r1863) Give the effect vehicle type enums more descriptive names and use the enum as parameter type for CreateEffectVehicle*()
tron
parents:
1327
diff
changeset
|
917 |
EV_BULLDOZER); |
0 | 918 |
MarkTileDirtyByTile(tile); |
919 |
return; |
|
920 |
} |
|
921 |
} |
|
922 |
} |
|
923 |
||
924 |
{ |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
925 |
/* Adjust road ground type depending on 'grp' (grp is the distance to the center) */ |
6357
f0f5e7d1713c
(svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents:
6343
diff
changeset
|
926 |
const Roadside* new_rs = (_opt.landscape == LT_TOYLAND) ? _town_road_types_2[grp] : _town_road_types[grp]; |
4048 | 927 |
Roadside cur_rs = GetRoadside(tile); |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
928 |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
929 |
/* We have our desired type, do nothing */ |
4048 | 930 |
if (cur_rs == new_rs[0]) return; |
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
931 |
|
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
932 |
/* We have the pre-type of the desired type, switch to the desired type */ |
4048 | 933 |
if (cur_rs == new_rs[1]) { |
934 |
cur_rs = new_rs[0]; |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
935 |
/* We have barren land, install the pre-type */ |
4048 | 936 |
} else if (cur_rs == ROADSIDE_BARREN) { |
937 |
cur_rs = new_rs[1]; |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
938 |
/* We're totally off limits, remove any installation and make barren land */ |
0 | 939 |
} else { |
4048 | 940 |
cur_rs = ROADSIDE_BARREN; |
0 | 941 |
} |
4048 | 942 |
SetRoadside(tile, cur_rs); |
0 | 943 |
MarkTileDirtyByTile(tile); |
944 |
} |
|
3430
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
945 |
} else if (IncreaseRoadWorksCounter(tile)) { |
fcc344e41319
(svn r4258) -Codechange: Add and make use of map accessors dealing with road ground types (including roadworks).
celestar
parents:
3421
diff
changeset
|
946 |
TerminateRoadWorks(tile); |
0 | 947 |
MarkTileDirtyByTile(tile); |
948 |
} |
|
949 |
} |
|
950 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
951 |
static void ClickTile_Road(TileIndex tile) |
0 | 952 |
{ |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6256
diff
changeset
|
953 |
if (GetRoadTileType(tile) == ROAD_TILE_DEPOT) ShowDepotWindow(tile, VEH_ROAD); |
0 | 954 |
} |
955 |
||
956 |
static const byte _road_trackbits[16] = { |
|
957 |
0x0, 0x0, 0x0, 0x10, 0x0, 0x2, 0x8, 0x1A, 0x0, 0x4, 0x1, 0x15, 0x20, 0x26, 0x29, 0x3F, |
|
958 |
}; |
|
959 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
960 |
static uint32 GetTileTrackStatus_Road(TileIndex tile, TransportType mode) |
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
961 |
{ |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
962 |
switch (mode) { |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
963 |
case TRANSPORT_RAIL: |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
964 |
if (!IsLevelCrossing(tile)) return 0; |
3267
feff95208a9f
(svn r3979) Move GetRailFoundation() to rail_map.h and use it and friends to get information about rail tiles
tron
parents:
3242
diff
changeset
|
965 |
return GetCrossingRailBits(tile) * 0x101; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
966 |
|
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
967 |
case TRANSPORT_ROAD: |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
968 |
switch (GetRoadTileType(tile)) { |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
969 |
case ROAD_TILE_NORMAL: |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
970 |
return HasRoadWorks(tile) ? 0 : _road_trackbits[GetRoadBits(tile)] * 0x101; |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
971 |
|
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
972 |
case ROAD_TILE_CROSSING: { |
4158 | 973 |
uint32 r = AxisToTrackBits(GetCrossingRoadAxis(tile)) * 0x101; |
3272
b3e2d8e19937
(svn r3984) Add a function to get the road axis of a level crossing
tron
parents:
3269
diff
changeset
|
974 |
|
3367 | 975 |
if (IsCrossingBarred(tile)) r *= 0x10001; |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
976 |
return r; |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
977 |
} |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
978 |
|
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
3068
diff
changeset
|
979 |
default: |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
980 |
case ROAD_TILE_DEPOT: |
4158 | 981 |
return AxisToTrackBits(DiagDirToAxis(GetRoadDepotDirection(tile))) * 0x101; |
201
c40d343115f8
(svn r202) -Codechange: I missed some files with trailing spaces.. this should be
truelight
parents:
159
diff
changeset
|
982 |
} |
3066
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
983 |
break; |
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
984 |
|
26c43ab051b8
(svn r3655) Simplify a boolean expression and turn 3 if-cascades into switches
tron
parents:
3061
diff
changeset
|
985 |
default: break; |
0 | 986 |
} |
987 |
return 0; |
|
988 |
} |
|
989 |
||
990 |
static const StringID _road_tile_strings[] = { |
|
991 |
STR_1814_ROAD, |
|
992 |
STR_1814_ROAD, |
|
993 |
STR_1814_ROAD, |
|
994 |
STR_1815_ROAD_WITH_STREETLIGHTS, |
|
995 |
STR_1814_ROAD, |
|
996 |
STR_1816_TREE_LINED_ROAD, |
|
997 |
STR_1814_ROAD, |
|
998 |
STR_1814_ROAD, |
|
999 |
}; |
|
1000 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
1001 |
static void GetTileDesc_Road(TileIndex tile, TileDesc *td) |
0 | 1002 |
{ |
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
|
1003 |
td->owner = GetTileOwner(tile); |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1004 |
switch (GetRoadTileType(tile)) { |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1005 |
case ROAD_TILE_CROSSING: td->str = STR_1818_ROAD_RAIL_LEVEL_CROSSING; break; |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1006 |
case ROAD_TILE_DEPOT: td->str = STR_1817_ROAD_VEHICLE_DEPOT; break; |
4048 | 1007 |
default: td->str = _road_tile_strings[GetRoadside(tile)]; break; |
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
3068
diff
changeset
|
1008 |
} |
0 | 1009 |
} |
1010 |
||
1011 |
static const byte _roadveh_enter_depot_unk0[4] = { |
|
1012 |
8, 9, 0, 1 |
|
1013 |
}; |
|
1014 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
1015 |
static uint32 VehicleEnter_Road(Vehicle *v, TileIndex tile, int x, int y) |
0 | 1016 |
{ |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1017 |
switch (GetRoadTileType(tile)) { |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1018 |
case ROAD_TILE_CROSSING: |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6256
diff
changeset
|
1019 |
if (v->type == VEH_TRAIN && !IsCrossingBarred(tile)) { |
3060 | 1020 |
/* train crossing a road */ |
1021 |
SndPlayVehicleFx(SND_0E_LEVEL_CROSSING, v); |
|
3322
41b4d25b126d
(svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing
celestar
parents:
3319
diff
changeset
|
1022 |
BarCrossing(tile); |
3060 | 1023 |
MarkTileDirtyByTile(tile); |
0 | 1024 |
} |
3060 | 1025 |
break; |
1026 |
||
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1027 |
case ROAD_TILE_DEPOT: |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6256
diff
changeset
|
1028 |
if (v->type == VEH_ROAD && |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
1029 |
v->u.road.frame == 11 && |
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4048
diff
changeset
|
1030 |
_roadveh_enter_depot_unk0[GetRoadDepotDirection(tile)] == v->u.road.state) { |
4725
40cccaaa042c
(svn r6637) -Codechange: merged all (vehicle type)EnterDepot into VehicleEnterDepot()
bjarni
parents:
4638
diff
changeset
|
1031 |
VehicleEnterDepot(v); |
5991
ec2eebfe86de
(svn r8698) -Codechange: enumify the returns of VehicleEnterTile
rubidium
parents:
5942
diff
changeset
|
1032 |
return VETSB_ENTERED_WORMHOLE; |
3060 | 1033 |
} |
1034 |
break; |
|
1035 |
||
1036 |
default: break; |
|
0 | 1037 |
} |
5991
ec2eebfe86de
(svn r8698) -Codechange: enumify the returns of VehicleEnterTile
rubidium
parents:
5942
diff
changeset
|
1038 |
return VETSB_CONTINUE; |
0 | 1039 |
} |
1040 |
||
1041 |
||
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2425
diff
changeset
|
1042 |
static void ChangeTileOwner_Road(TileIndex tile, PlayerID old_player, PlayerID new_player) |
0 | 1043 |
{ |
3274 | 1044 |
if (IsLevelCrossing(tile) && GetCrossingRoadOwner(tile) == old_player) { |
4848
45f848b46222
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4725
diff
changeset
|
1045 |
SetCrossingRoadOwner(tile, new_player == PLAYER_SPECTATOR ? OWNER_NONE : new_player); |
0 | 1046 |
} |
1047 |
||
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
|
1048 |
if (!IsTileOwner(tile, old_player)) return; |
0 | 1049 |
|
4848
45f848b46222
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4725
diff
changeset
|
1050 |
if (new_player != PLAYER_SPECTATOR) { |
1902 | 1051 |
SetTileOwner(tile, new_player); |
4000
4009d092b306
(svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents:
3977
diff
changeset
|
1052 |
} else { |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1053 |
switch (GetRoadTileType(tile)) { |
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1054 |
case ROAD_TILE_NORMAL: |
3060 | 1055 |
SetTileOwner(tile, OWNER_NONE); |
1056 |
break; |
|
1057 |
||
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1058 |
case ROAD_TILE_CROSSING: |
3319
16c0f06829a5
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
3286
diff
changeset
|
1059 |
MakeRoadNormal(tile, GetCrossingRoadOwner(tile), GetCrossingRoadBits(tile), GetTownIndex(tile)); |
3060 | 1060 |
break; |
1061 |
||
3069
9a1fd047b595
(svn r3658) Add functions and symbolic names to retrieve road tile types and road pieces
tron
parents:
3068
diff
changeset
|
1062 |
default: |
3793
7fe24e10ea63
(svn r4789) - Codechange: rename RoadType to RoadTileType and ROAD_{NORMAL,CROSSING,DEPOT} to ROAD_TILE_* for consistency
rubidium
parents:
3792
diff
changeset
|
1063 |
case ROAD_TILE_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:
3435
diff
changeset
|
1064 |
DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR); |
3060 | 1065 |
break; |
0 | 1066 |
} |
1067 |
} |
|
1068 |
} |
|
1069 |
||
1070 |
||
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
1071 |
extern const TileTypeProcs _tile_type_road_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:
4246
diff
changeset
|
1072 |
DrawTile_Road, /* 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:
4246
diff
changeset
|
1073 |
GetSlopeZ_Road, /* 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:
4246
diff
changeset
|
1074 |
ClearTile_Road, /* 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:
4246
diff
changeset
|
1075 |
GetAcceptedCargo_Road, /* 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:
4246
diff
changeset
|
1076 |
GetTileDesc_Road, /* 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:
4246
diff
changeset
|
1077 |
GetTileTrackStatus_Road, /* 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:
4246
diff
changeset
|
1078 |
ClickTile_Road, /* 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:
4246
diff
changeset
|
1079 |
AnimateTile_Road, /* 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:
4246
diff
changeset
|
1080 |
TileLoop_Road, /* 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:
4246
diff
changeset
|
1081 |
ChangeTileOwner_Road, /* 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:
4246
diff
changeset
|
1082 |
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:
4246
diff
changeset
|
1083 |
VehicleEnter_Road, /* vehicle_enter_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:
4246
diff
changeset
|
1084 |
GetSlopeTileh_Road, /* get_slope_tileh_proc */ |
0 | 1085 |
}; |