(svn r1536) Move GET_TILEHEIGHT, GET_TILETYPE and IS_TILETYPE to map.h, turn them into inline functions and add some asserts

This commit is contained in:
tron 2005-01-16 11:24:58 +00:00
parent d2643dc483
commit ae796740aa
33 changed files with 239 additions and 217 deletions

34
ai.c
View File

@ -1599,7 +1599,7 @@ clear_town_stuff:;
}
} else if (p->mode == 2) {
// Rail
if (IS_TILETYPE(c, MP_RAILWAY))
if (IsTileType(c, MP_RAILWAY))
return CMD_ERROR;
j = p->attr;
@ -1618,7 +1618,7 @@ clear_town_stuff:;
/* signals too? */
if (j&3) {
// Can't build signals on a road.
if (IS_TILETYPE(c, MP_STREET))
if (IsTileType(c, MP_STREET))
return CMD_ERROR;
if (flag & DC_EXEC) {
@ -2179,7 +2179,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
int offs;
TileIndex tilenew;
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
if (!(_map5[tile] & 0x80)) {
// Clear the tunnel and continue at the other side of it.
if (DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR) == CMD_ERROR)
@ -2219,7 +2219,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
bit = FindFirstBit(b);
// Then remove and signals if there are any.
if (IS_TILETYPE(tile, MP_RAILWAY) &&
if (IsTileType(tile, MP_RAILWAY) &&
(_map5[tile]&0xC0) == 0x40) {
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_REMOVE_SIGNALS);
}
@ -2542,7 +2542,7 @@ static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData
_cleared_town = NULL;
if (p->mode == 2) {
if (IS_TILETYPE(c, MP_STREET) &&
if (IsTileType(c, MP_STREET) &&
(_map5[c]&0xF0)==0 &&
(_map5[c]&p->attr)!=0) {
roadflag |= 2;
@ -2590,7 +2590,7 @@ clear_town_stuff:;
if (GetTileSlope(c, NULL) != 0)
return CMD_ERROR;
if (!(IS_TILETYPE(c, MP_STREET) && (_map5[c]&0xF0)==0)) {
if (!(IsTileType(c, MP_STREET) && (_map5[c] & 0xF0) == 0)) {
r = DoCommandByTile(c, 0, 0, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_LANDSCAPE_CLEAR);
if (r == CMD_ERROR) return CMD_ERROR;
}
@ -2773,7 +2773,7 @@ static bool AiEnumFollowRoad(uint tile, AiRoadEnum *a, int track, uint length, b
if (dist <= a->best_dist) {
tile2 = TILE_MASK(tile + TileOffsByDir(_dir_by_track[track]));
if (IS_TILETYPE(tile2, MP_STREET) &&
if (IsTileType(tile2, MP_STREET) &&
(_map5[tile2]&0xF0) == 0) {
a->best_dist = dist;
a->best_tile = tile;
@ -3426,9 +3426,9 @@ static void AiStateBuildDefaultAirportBlocks(Player *p)
rule = AiFindBestDefaultAirportBlock(aib->use_tile, aib->cargo, p->ai.build_kind, &cost);
#if 0
if (!IS_TILETYPE(aib->use_tile, MP_STREET) &&
!IS_TILETYPE(aib->use_tile, MP_RAILWAY) &&
!IS_TILETYPE(aib->use_tile, MP_STATION)
if (!IsTileType(aib->use_tile, MP_STREET) &&
!IsTileType(aib->use_tile, MP_RAILWAY) &&
!IsTileType(aib->use_tile, MP_STATION)
) {
_map_type_and_height[aib->use_tile] = 0xa1;
@ -3643,7 +3643,7 @@ static void AiRemovePlayerRailOrRoad(Player *p, uint tile)
{
byte m5;
if (IS_TILETYPE(tile, MP_RAILWAY)) {
if (IsTileType(tile, MP_RAILWAY)) {
if (_map_owner[tile] != _current_player)
return;
m5 = _map5[tile];
@ -3702,7 +3702,7 @@ pos_3:
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
}
} else if (IS_TILETYPE(tile, MP_STREET)) {
} else if (IsTileType(tile, MP_STREET)) {
if (_map_owner[tile] != _current_player)
return;
@ -3713,19 +3713,19 @@ pos_3:
int dir;
// Check if there are any stations around.
if (IS_TILETYPE(tile + TILE_XY(-1,0), MP_STATION) &&
if (IsTileType(tile + TILE_XY(-1,0), MP_STATION) &&
_map_owner[tile + TILE_XY(-1,0)] == _current_player)
return;
if (IS_TILETYPE(tile + TILE_XY(1,0), MP_STATION) &&
if (IsTileType(tile + TILE_XY(1,0), MP_STATION) &&
_map_owner[tile + TILE_XY(1,0)] == _current_player)
return;
if (IS_TILETYPE(tile + TILE_XY(0,-1), MP_STATION) &&
if (IsTileType(tile + TILE_XY(0,-1), MP_STATION) &&
_map_owner[tile + TILE_XY(0,-1)] == _current_player)
return;
if (IS_TILETYPE(tile + TILE_XY(0,1), MP_STATION) &&
if (IsTileType(tile + TILE_XY(0,1), MP_STATION) &&
_map_owner[tile + TILE_XY(0,1)] == _current_player)
return;
@ -3739,7 +3739,7 @@ pos_3:
DC_EXEC,
CMD_REMOVE_ROAD);
}
} else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
} else if (IsTileType(tile, MP_TUNNELBRIDGE)) {
byte b;
if (_map_owner[tile] != _current_player || (_map5[tile] & 0xC6) != 0x80)

4
ai.h
View File

@ -230,8 +230,8 @@ enum {
// A macro for mp_street, where 0x20 is depot
// mp_tunnelbridge, where 0xf0 is a bridge, and 0x4/0x2 means: roadtunnel/bridge
#define AI_PATHFINDER_IS_ROAD(tile) ((IS_TILETYPE(tile, MP_STREET) && !(_map5[tile] & 0x20)) || \
(IS_TILETYPE(tile, MP_TUNNELBRIDGE) && \
#define AI_PATHFINDER_IS_ROAD(tile) ((IsTileType(tile, MP_STREET) && !(_map5[tile] & 0x20)) || \
(IsTileType(tile, MP_TUNNELBRIDGE) && \
(((_map5[tile] & 0x80) == 0 && (_map5[tile] & 0x4) == 0x4) || \
((_map5[tile] & 0x80) != 0 && (_map5[tile] & 0x2) == 0x2))))

View File

@ -174,11 +174,11 @@ int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte fla
if (old_dir != -1 && old_dir != dir) break;
old_dir = dir;
// There is already some road, and it is a bridge.. don't build!!!
if (!IS_TILETYPE(route[part], MP_TUNNELBRIDGE)) {
if (!IsTileType(route[part], MP_TUNNELBRIDGE)) {
// Build the tile
res = DoCommandByTile(route[part], dir, 0, flag | DC_NO_WATER, CMD_BUILD_ROAD);
// Currently, we ignore CMD_ERRORs!
if (res == CMD_ERROR && flag == DC_EXEC && !IS_TILETYPE(route[part], MP_STREET) && !EnsureNoVehicle(route[part])) {
if (res == CMD_ERROR && flag == DC_EXEC && !IsTileType(route[part], MP_STREET) && !EnsureNoVehicle(route[part])) {
// Problem.. let's just abort it all!
DEBUG(ai,0)("Darn, the route could not be builded.. aborting!");
p->ainew.state = AI_STATE_NOTHING;

View File

@ -607,7 +607,7 @@ static void AiNew_State_FindStation(Player *p) {
for (x = TileX(tile) - AI_FINDSTATION_TILE_RANGE; x <= TileX(tile) + AI_FINDSTATION_TILE_RANGE; x++) {
for (y = TileY(tile) - AI_FINDSTATION_TILE_RANGE; y <= TileY(tile) + AI_FINDSTATION_TILE_RANGE; y++) {
new_tile = TILE_XY(x,y);
if (IS_TILETYPE(new_tile, MP_CLEAR) || IS_TILETYPE(new_tile, MP_TREES)) {
if (IsTileType(new_tile, MP_CLEAR) || IsTileType(new_tile, MP_TREES)) {
// This tile we can build on!
// Check acceptance
// XXX - Get the catchment area
@ -744,7 +744,7 @@ static void AiNew_State_FindDepot(Player *p) {
for (i=2;i<p->ainew.path_info.route_length-2;i++) {
tile = p->ainew.path_info.route[i];
for (j = 0; j < 4; j++) {
if (IS_TILETYPE(tile + TileOffsByDir(j), MP_STREET)) {
if (IsTileType(tile + TileOffsByDir(j), MP_STREET)) {
// Its a street, test if it is a depot
if (_map5[tile + TileOffsByDir(j)] & 0x20) {
// We found a depot, is it ours? (TELL ME!!!)
@ -787,10 +787,10 @@ static void AiNew_State_FindDepot(Player *p) {
tile + TileOffsByDir(j) == p->ainew.path_info.route[i+1]) continue;
// Not around a bridge?
if (p->ainew.path_info.route_extra[i] != 0) continue;
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) continue;
if (IsTileType(tile, MP_TUNNELBRIDGE)) continue;
// Is the terrain clear?
if (IS_TILETYPE(tile + TileOffsByDir(j), MP_CLEAR) ||
IS_TILETYPE(tile + TileOffsByDir(j), MP_TREES)) {
if (IsTileType(tile + TileOffsByDir(j), MP_CLEAR) ||
IsTileType(tile + TileOffsByDir(j), MP_TREES)) {
TileInfo ti;
FindLandscapeHeightByTile(&ti, tile);
// If the current tile is on a slope (tileh != 0) then we do not allow this
@ -929,11 +929,11 @@ static void AiNew_State_BuildStation(Player *p) {
int res = 0;
assert(p->ainew.state == AI_STATE_BUILD_STATION);
if (p->ainew.temp == 0) {
if (!IS_TILETYPE(p->ainew.from_tile, MP_STATION))
if (!IsTileType(p->ainew.from_tile, MP_STATION))
res = AiNew_Build_Station(p, p->ainew.tbt, p->ainew.from_tile, 0, 0, p->ainew.from_direction, DC_EXEC);
}
else {
if (!IS_TILETYPE(p->ainew.to_tile, MP_STATION))
if (!IsTileType(p->ainew.to_tile, MP_STATION))
res = AiNew_Build_Station(p, p->ainew.tbt, p->ainew.to_tile, 0, 0, p->ainew.to_direction, DC_EXEC);
p->ainew.state = AI_STATE_BUILD_PATH;
}
@ -1000,10 +1000,10 @@ static void AiNew_State_BuildPath(Player *p) {
r = DoCommandByTile(tile, _roadbits_by_dir[dir1], 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
dir1 = TileOffsByDir(dir1);
if (IS_TILETYPE(tile+dir1, MP_CLEAR) || IS_TILETYPE(tile+dir1, MP_TREES)) {
if (IsTileType(tile + dir1, MP_CLEAR) || IsTileType(tile + dir1, MP_TREES)) {
r = DoCommandByTile(tile+dir1, AiNew_GetRoadDirection(tile, tile+dir1, tile+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
if (IS_TILETYPE(tile+dir1+dir1, MP_CLEAR) || IS_TILETYPE(tile+dir1+dir1, MP_TREES))
if (IsTileType(tile + dir1 + dir1, MP_CLEAR) || IsTileType(tile + dir1 + dir1, MP_TREES))
DoCommandByTile(tile+dir1+dir1, AiNew_GetRoadDirection(tile+dir1, tile+dir1+dir1, tile+dir1+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
}
}
@ -1012,10 +1012,10 @@ static void AiNew_State_BuildPath(Player *p) {
r = DoCommandByTile(tile, _roadbits_by_dir[dir2], 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
dir2 = TileOffsByDir(dir2);
if (IS_TILETYPE(tile+dir2, MP_CLEAR) || IS_TILETYPE(tile+dir2, MP_TREES)) {
if (IsTileType(tile + dir2, MP_CLEAR) || IsTileType(tile + dir2, MP_TREES)) {
r = DoCommandByTile(tile+dir2, AiNew_GetRoadDirection(tile, tile+dir2, tile+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
if (IS_TILETYPE(tile+dir2+dir2, MP_CLEAR) || IS_TILETYPE(tile+dir2+dir2, MP_TREES))
if (IsTileType(tile + dir2 + dir2, MP_CLEAR) || IsTileType(tile + dir2 + dir2, MP_TREES))
DoCommandByTile(tile+dir2+dir2, AiNew_GetRoadDirection(tile+dir2, tile+dir2+dir2, tile+dir2+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
}
}
@ -1024,10 +1024,10 @@ static void AiNew_State_BuildPath(Player *p) {
r = DoCommandByTile(tile, _roadbits_by_dir[dir3^2], 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
dir3 = TileOffsByDir(dir3);
if (IS_TILETYPE(tile+dir3, MP_CLEAR) || IS_TILETYPE(tile+dir3, MP_TREES)) {
if (IsTileType(tile + dir3, MP_CLEAR) || IsTileType(tile + dir3, MP_TREES)) {
r = DoCommandByTile(tile+dir3, AiNew_GetRoadDirection(tile, tile+dir3, tile+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
if (IS_TILETYPE(tile+dir3+dir3, MP_CLEAR) || IS_TILETYPE(tile+dir3+dir3, MP_TREES))
if (IsTileType(tile + dir3 + dir3, MP_CLEAR) || IsTileType(tile + dir3 + dir3, MP_TREES))
DoCommandByTile(tile+dir3+dir3, AiNew_GetRoadDirection(tile+dir3, tile+dir3+dir3, tile+dir3+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
}
}
@ -1046,7 +1046,7 @@ static void AiNew_State_BuildDepot(Player *p) {
int res = 0;
assert(p->ainew.state == AI_STATE_BUILD_DEPOT);
if (IS_TILETYPE(p->ainew.depot_tile, MP_STREET) && _map5[p->ainew.depot_tile] & 0x20) {
if (IsTileType(p->ainew.depot_tile, MP_STREET) && _map5[p->ainew.depot_tile] & 0x20) {
if (_map_owner[p->ainew.depot_tile] == _current_player) {
// The depot is already builded!
p->ainew.state = AI_STATE_BUILD_VEHICLE;

View File

@ -36,7 +36,7 @@ int32 AyStar_AiPathFinder_EndNodeCheck(AyStar *aystar, OpenListNode *current) {
// It is not allowed to have a station on the end of a bridge or tunnel ;)
if (current->path.node.user_data[0] != 0) return AYSTAR_DONE;
if (TILES_BETWEEN(current->path.node.tile, PathFinderInfo->end_tile_tl, PathFinderInfo->end_tile_br))
if (IS_TILETYPE(current->path.node.tile, MP_CLEAR) || IS_TILETYPE(current->path.node.tile, MP_TREES))
if (IsTileType(current->path.node.tile, MP_CLEAR) || IsTileType(current->path.node.tile, MP_TREES))
if (current->path.parent == NULL || TestCanBuildStationHere(current->path.node.tile,AiNew_GetDirection(current->path.parent->node.tile, current->path.node.tile)))
return AYSTAR_FOUND_END_NODE;
@ -119,7 +119,7 @@ void clean_AyStar_AiPathFinder(AyStar *aystar, Ai_PathFinderInfo *PathFinderInfo
// Now we add all the starting tiles
for (x = TileX(PathFinderInfo->start_tile_tl); x <= TileX(PathFinderInfo->start_tile_br); x++) {
for (y = TileY(PathFinderInfo->start_tile_tl); y <= TileY(PathFinderInfo->start_tile_br); y++) {
if (!(IS_TILETYPE(TILE_XY(x,y), MP_CLEAR) || IS_TILETYPE(TILE_XY(x,y), MP_TREES))) continue;
if (!(IsTileType(TILE_XY(x,y), MP_CLEAR) || IsTileType(TILE_XY(x,y), MP_TREES))) continue;
if (!TestCanBuildStationHere(TILE_XY(x,y),TEST_STATION_NO_DIR)) continue;
start_node.node.tile = TILE_XY(x,y);
aystar->addstart(aystar, &start_node.node);
@ -187,19 +187,19 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
// If the next step is a bridge, we have to enter it the right way
if (!PathFinderInfo->rail_or_road && AI_PATHFINDER_IS_ROAD(current->path.node.tile + TileOffsByDir(i))) {
if (IS_TILETYPE(current->path.node.tile + TileOffsByDir(i), MP_TUNNELBRIDGE)) {
if (IsTileType(current->path.node.tile + TileOffsByDir(i), MP_TUNNELBRIDGE)) {
// An existing bridge... let's test the direction ;)
if ((_map5[current->path.node.tile + TileOffsByDir(i)] & 1U) != (i & 1)) continue;
// This problem only is valid for tunnels:
// When the last tile was not yet a tunnel, check if we enter from the right side..
if (!IS_TILETYPE(current->path.node.tile, MP_TUNNELBRIDGE) && (_map5[current->path.node.tile + TileOffsByDir(i)] & 0x80) == 0) {
if (!IsTileType(current->path.node.tile, MP_TUNNELBRIDGE) && (_map5[current->path.node.tile + TileOffsByDir(i)] & 0x80) == 0) {
if (i != (_map5[current->path.node.tile + TileOffsByDir(i)] & 3U)) continue;
}
}
}
// But also if we are on a bridge, we can only move a certain direction
if (!PathFinderInfo->rail_or_road && AI_PATHFINDER_IS_ROAD(current->path.node.tile)) {
if (IS_TILETYPE(current->path.node.tile, MP_TUNNELBRIDGE)) {
if (IsTileType(current->path.node.tile, MP_TUNNELBRIDGE)) {
// An existing bridge/tunnel... let's test the direction ;)
if ((_map5[current->path.node.tile] & 1U) != (i & 1)) continue;
}
@ -241,7 +241,7 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
// Road check
dir = AiNew_GetRoadDirection(current->path.parent->node.tile, current->path.node.tile, current->path.node.tile + TileOffsByDir(i));
if (AI_PATHFINDER_IS_ROAD(current->path.node.tile)) {
if (IS_TILETYPE(current->path.node.tile, MP_TUNNELBRIDGE)) {
if (IsTileType(current->path.node.tile, MP_TUNNELBRIDGE)) {
// We have a bridge, how nicely! We should mark it...
dir = 0;
} else {
@ -285,8 +285,8 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
// Bridges can only be build on land that is not flat
// And if there is a road or rail blocking
if (ti.tileh != 0 ||
(PathFinderInfo->rail_or_road && IS_TILETYPE(tile + TileOffsByDir(dir), MP_STREET)) ||
(!PathFinderInfo->rail_or_road && IS_TILETYPE(tile + TileOffsByDir(dir), MP_RAILWAY))) {
(PathFinderInfo->rail_or_road && IsTileType(tile + TileOffsByDir(dir), MP_STREET)) ||
(!PathFinderInfo->rail_or_road && IsTileType(tile + TileOffsByDir(dir), MP_RAILWAY))) {
for (;;) {
new_tile += TileOffsByDir(dir);
@ -378,7 +378,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
}
} else {
if (!(AI_PATHFINDER_IS_ROAD(parent->path.node.tile) && IS_TILETYPE(parent->path.node.tile, MP_TUNNELBRIDGE))) {
if (!(AI_PATHFINDER_IS_ROAD(parent->path.node.tile) && IsTileType(parent->path.node.tile, MP_TUNNELBRIDGE))) {
r = GetRoadFoundation(parent_ti.tileh, AiNew_GetRoadDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile));
if (r >= 15 || r == 0)
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;

View File

@ -277,7 +277,7 @@ bool IsAircraftHangarTile(TileIndex tile)
// 0x56 - hangar facing other way international airport (86)
// 0x20 - hangar large airport (32)
// 0x41 - hangar small airport (65)
return IS_TILETYPE(tile, MP_STATION) &&
return IsTileType(tile, MP_STATION) &&
(_map5[tile] == 32 || _map5[tile] == 65 || _map5[tile] == 86);
}

View File

@ -577,7 +577,7 @@ static void AircraftViewWndProc(Window *w, WindowEvent *e)
{
uint tile = v->tile;
if (IS_TILETYPE(tile, MP_STATION) &&
if (IsTileType(tile, MP_STATION) &&
(_map5[tile] == 32 || _map5[tile] == 65) &&
v->vehstatus&VS_STOPPED)
disabled = 0;

View File

@ -395,7 +395,7 @@ int32 CmdPurchaseLandArea(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!EnsureNoVehicle(tile))
return CMD_ERROR;
if (IS_TILETYPE(tile, MP_UNMOVABLE) &&
if (IsTileType(tile, MP_UNMOVABLE) &&
_map5[tile] == 3 &&
_map_owner[tile] == _current_player)
return_cmd_error(STR_5807_YOU_ALREADY_OWN_IT);
@ -549,16 +549,16 @@ void TileLoopClearHelper(uint tile)
uint dirty = -1;
img_1 = 0;
if (IS_TILETYPE(tile, MP_CLEAR)) {
if (IsTileType(tile, MP_CLEAR)) {
img_1 = img_by_map5[(_map5[tile] & 0x1C) >> 2];
} else if (IS_TILETYPE(tile, MP_TREES) && (_map2[tile] & 0x30) == 0x20) {
} else if (IsTileType(tile, MP_TREES) && (_map2[tile] & 0x30) == 0x20) {
img_1 = 1;
}
img_2 = 0;
if (IS_TILETYPE(TILE_ADDXY(tile, 1, 0), MP_CLEAR)) {
if (IsTileType(TILE_ADDXY(tile, 1, 0), MP_CLEAR)) {
img_2 = img_by_map5[(_map5[TILE_ADDXY(tile, 1, 0)] & 0x1C) >> 2];
} else if (IS_TILETYPE(TILE_ADDXY(tile, 1, 0), MP_TREES) && (_map2[TILE_ADDXY(tile, 1, 0)] & 0x30) == 0x20) {
} else if (IsTileType(TILE_ADDXY(tile, 1, 0), MP_TREES) && (_map2[TILE_ADDXY(tile, 1, 0)] & 0x30) == 0x20) {
img_2 = 1;
}
@ -575,9 +575,9 @@ void TileLoopClearHelper(uint tile)
}
img_2 = 0;
if (IS_TILETYPE(TILE_ADDXY(tile, 0, 1), MP_CLEAR)) {
if (IsTileType(TILE_ADDXY(tile, 0, 1), MP_CLEAR)) {
img_2 = img_by_map5[(_map5[TILE_ADDXY(tile, 0, 1)] & 0x1C) >> 2];
} else if (IS_TILETYPE(TILE_ADDXY(tile, 0, 1), MP_TREES) && (_map2[TILE_ADDXY(tile, 0, 1)] & 0x30) == 0x20) {
} else if (IsTileType(TILE_ADDXY(tile, 0, 1), MP_TREES) && (_map2[TILE_ADDXY(tile, 0, 1)] & 0x30) == 0x20) {
img_2 = 1;
}
@ -741,7 +741,7 @@ void GenerateClearTile()
i = (Random() & 0x3FF) | 0x400;
do {
tile = TILE_MASK(Random());
if (IS_TILETYPE(tile, MP_CLEAR))
if (IsTileType(tile, MP_CLEAR))
_map5[tile] = (byte)((_map5[tile] & ~(3<<2)) | (1<<2));
} while (--i);
@ -750,14 +750,14 @@ void GenerateClearTile()
do {
r = Random();
tile = TILE_MASK(r);
if (IS_TILETYPE(tile, MP_CLEAR)) {
if (IsTileType(tile, MP_CLEAR)) {
j = ((r >> 16) & 0xF) + 5;
for(;;) {
_map5[tile] = (byte)((_map5[tile] & ~(3<<2)) | (2<<2));
do {
if (--j == 0) goto get_out;
tile_new = tile + TileOffsByDir(Random() & 3);
} while (!IS_TILETYPE(tile_new, MP_CLEAR));
} while (!IsTileType(tile_new, MP_CLEAR));
tile = tile_new;
}
get_out:;

View File

@ -164,7 +164,7 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
} else if (v->current_order.station == 0) {
tile = v->tile; /**/
if (IS_TILETYPE(tile, MP_STATION) &&
if (IsTileType(tile, MP_STATION) &&
IS_BYTE_INSIDE(_map5[tile], 8, 0x43) &&
IS_HUMAN_PLAYER(_map_owner[tile])) {
@ -189,7 +189,7 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
tile = v->tile; /**/
if (IS_TILETYPE(tile, MP_STATION) &&
if (IsTileType(tile, MP_STATION) &&
IS_BYTE_INSIDE(_map5[tile], 8, 0x43) &&
IS_HUMAN_PLAYER(_map_owner[tile])) {
@ -231,7 +231,7 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
}
tile = v->tile;/**/
if (IS_TILETYPE(tile, MP_STATION) &&
if (IsTileType(tile, MP_STATION) &&
IS_BYTE_INSIDE(_map5[tile], 8, 0x43) &&
IS_HUMAN_PLAYER(_map_owner[tile])) {
@ -325,7 +325,7 @@ static void DestructIndustry(Industry *i)
uint tile;
for(tile=0; tile != MapSize(); tile++) {
if (IS_TILETYPE(tile, MP_INDUSTRY) && _map2[tile] == i->index) {
if (IsTileType(tile, MP_INDUSTRY) && _map2[tile] == i->index) {
_map_owner[tile] = 0;
MarkTileDirtyByTile(tile);
}
@ -391,7 +391,7 @@ static void DisasterTick_2(Vehicle *v)
return;
tile = TILE_FROM_XY(x,y);
if (!IS_TILETYPE(tile, MP_INDUSTRY))
if (!IsTileType(tile, MP_INDUSTRY))
return;
v->dest_tile = ind = _map2[tile];
@ -462,7 +462,7 @@ static void DisasterTick_3(Vehicle *v)
return;
tile = TILE_FROM_XY(x,y);
if (!IS_TILETYPE(tile, MP_INDUSTRY))
if (!IsTileType(tile, MP_INDUSTRY))
return;
v->dest_tile = ind = _map2[tile];
@ -570,7 +570,7 @@ static void DisasterTick_4(Vehicle *v)
tile_org = tile = TILE_MASK(Random());
do {
if (IS_TILETYPE(tile, MP_RAILWAY) &&
if (IsTileType(tile, MP_RAILWAY) &&
(_map5[tile]&~3)!=0xC0 && IS_HUMAN_PLAYER(_map_owner[tile]))
break;
tile = TILE_MASK(tile+1);

View File

@ -836,11 +836,11 @@ static void ChangeTileOwner_Industry(uint tile, byte old_player, byte new_player
void DeleteIndustry(Industry *i)
{
BEGIN_TILE_LOOP(tile_cur, i->width, i->height, i->xy);
if (IS_TILETYPE(tile_cur, MP_INDUSTRY)) {
if (IsTileType(tile_cur, MP_INDUSTRY)) {
if (_map2[tile_cur] == i->index) {
DoClearSquare(tile_cur);
}
} else if (IS_TILETYPE(tile_cur, MP_STATION) && _map5[tile_cur] == 0x4B) {
} else if (IsTileType(tile_cur, MP_STATION) && _map5[tile_cur] == 0x4B) {
DeleteOilRig(tile_cur);
}
END_TILE_LOOP(tile_cur, i->width, i->height, i->xy);
@ -856,12 +856,12 @@ static const byte _plantfarmfield_type[] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5,
static bool IsBadFarmFieldTile(uint tile)
{
if (IS_TILETYPE(tile,MP_CLEAR)) {
if (IsTileType(tile, MP_CLEAR)) {
byte m5 = _map5[tile] & 0x1C;
if (m5 == 0xC || m5 == 0x10)
return true;
return false;
} else if (IS_TILETYPE(tile,MP_TREES)) {
} else if (IsTileType(tile, MP_TREES)) {
return false;
} else {
return true;
@ -870,12 +870,12 @@ static bool IsBadFarmFieldTile(uint tile)
static bool IsBadFarmFieldTile2(uint tile)
{
if (IS_TILETYPE(tile,MP_CLEAR)) {
if (IsTileType(tile, MP_CLEAR)) {
byte m5 = _map5[tile] & 0x1C;
if (m5 == 0x10)
return true;
return false;
} else if (IS_TILETYPE(tile,MP_TREES)) {
} else if (IsTileType(tile, MP_TREES)) {
return false;
} else {
return true;
@ -889,7 +889,7 @@ static void SetupFarmFieldFence(uint tile, int size, byte type, int direction)
do {
tile = TILE_MASK(tile);
if (IS_TILETYPE(tile, MP_CLEAR) || IS_TILETYPE(tile, MP_TREES)) {
if (IsTileType(tile, MP_CLEAR) || IsTileType(tile, MP_TREES)) {
or = type;
if (or == 1 && (uint16)Random() <= 9362) or = 2;
@ -999,7 +999,7 @@ static void ChopLumberMillTrees(Industry *i)
j = a;
do {
tile = TILE_MASK(tile);
if (IS_TILETYPE(tile, MP_TREES)) {
if (IsTileType(tile, MP_TREES)) {
uint old_player = _current_player;
/* found a tree */

View File

@ -93,7 +93,7 @@ void FindLandscapeHeightByTile(TileInfo *ti, uint tile)
ti->tile = tile;
ti->map5 = _map5[tile];
ti->type = GET_TILETYPE(tile);
ti->type = TileType(tile);
ti->tileh = GetTileSlope(tile, &ti->z);
// ti->z = min * 8;
}
@ -295,28 +295,28 @@ void DoClearSquare(uint tile)
uint32 GetTileTrackStatus(uint tile, TransportType mode)
{
return _tile_type_procs[GET_TILETYPE(tile)]->get_tile_track_status_proc(tile, mode);
return _tile_type_procs[TileType(tile)]->get_tile_track_status_proc(tile, mode);
}
void ChangeTileOwner(uint tile, byte old_player, byte new_player)
{
_tile_type_procs[GET_TILETYPE(tile)]->change_tile_owner_proc(tile, old_player, new_player);
_tile_type_procs[TileType(tile)]->change_tile_owner_proc(tile, old_player, new_player);
}
void GetAcceptedCargo(uint tile, AcceptedCargo ac)
{
memset(ac, 0, sizeof(AcceptedCargo));
_tile_type_procs[GET_TILETYPE(tile)]->get_accepted_cargo_proc(tile, ac);
_tile_type_procs[TileType(tile)]->get_accepted_cargo_proc(tile, ac);
}
void AnimateTile(uint tile)
{
_tile_type_procs[GET_TILETYPE(tile)]->animate_tile_proc(tile);
_tile_type_procs[TileType(tile)]->animate_tile_proc(tile);
}
void ClickTile(uint tile)
{
_tile_type_procs[GET_TILETYPE(tile)]->click_tile_proc(tile);
_tile_type_procs[TileType(tile)]->click_tile_proc(tile);
}
void DrawTile(TileInfo *ti)
@ -326,7 +326,7 @@ void DrawTile(TileInfo *ti)
void GetTileDesc(uint tile, TileDesc *td)
{
_tile_type_procs[GET_TILETYPE(tile)]->get_tile_desc_proc(tile, td);
_tile_type_procs[TileType(tile)]->get_tile_desc_proc(tile, td);
}
/* Clear a piece of landscape
@ -340,7 +340,7 @@ int32 CmdLandscapeClear(int x, int y, uint32 flags, uint32 p1, uint32 p2)
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
tile = TILE_FROM_XY(x,y);
return _tile_type_procs[GET_TILETYPE(tile)]->clear_tile_proc(tile, flags);
return _tile_type_procs[TileType(tile)]->clear_tile_proc(tile, flags);
}
// p1 = end tile
@ -467,7 +467,7 @@ void RunTileLoop()
assert( (tile & ~TILELOOP_ASSERTMASK) == 0);
count = (MapSizeX() / TILELOOP_SIZE) * (MapSizeY() / TILELOOP_SIZE);
do {
_tile_type_procs[GET_TILETYPE(tile)]->tile_loop_proc(tile);
_tile_type_procs[TileType(tile)]->tile_loop_proc(tile);
if (TileX(tile) < MapSizeX() - TILELOOP_SIZE) {
tile += TILELOOP_SIZE; /* no overflow */
@ -509,7 +509,7 @@ void ConvertGroundTilesIntoWaterTiles()
int h;
while(true) {
if (IS_TILETYPE(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h == 0) {
if (IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h == 0) {
_map_type_and_height[tile] = MP_WATER << 4;
_map5[tile] = 0;
_map_owner[tile] = OWNER_WATER;
@ -654,7 +654,7 @@ static void CreateDesertOrRainForest()
for (data = _make_desert_or_rainforest_data;
data != endof(_make_desert_or_rainforest_data); ++data) {
TileIndex t = TILE_MASK(tile + ToTileIndexDiff(*data));
if (IS_TILETYPE(t, MP_CLEAR) && (_map5[t] & 0x1c) == 0x14) break;
if (IsTileType(t, MP_CLEAR) && (_map5[t] & 0x1c) == 0x14) break;
}
if (data == endof(_make_desert_or_rainforest_data))
SetMapExtraBits(tile, 2);

View File

@ -70,10 +70,6 @@ static inline int64 BIGMULS(int32 a, int32 b) {
#define LANDSCAPE_SIZE_FACTOR 1
#define IS_TILETYPE(_t_, _s_) (_map_type_and_height[(_t_)] >> 4 == (_s_))
#define GET_TILETYPE(_t_) (_map_type_and_height[(_t_)] >> 4)
#define GET_TILEHEIGHT(_t_) ((_map_type_and_height[_t_] & 0xF) * 8)
enum {
CORRECT_Z_BITS = 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7
};

View File

@ -1193,7 +1193,7 @@ static void PlaceProc_LowerBigLand(uint tile)
static void PlaceProc_RockyArea(uint tile)
{
if (!IS_TILETYPE(tile, MP_CLEAR) && !IS_TILETYPE(tile, MP_TREES))
if (!IsTileType(tile, MP_CLEAR) && !IsTileType(tile, MP_TREES))
return;
ModifyTile(tile, MP_SETTYPE(MP_CLEAR) | MP_MAP5, (_map5[tile] & ~0x1C) | 0xB);

18
map.h
View File

@ -72,4 +72,22 @@ static inline TileIndexDiff TileOffsByDir(uint dir)
return ToTileIndexDiff(_tileoffs_by_dir[dir]);
}
static inline uint TileHeight(TileIndex tile)
{
assert(tile < MapSize());
return (_map_type_and_height[tile] & 0xf) * 8;
}
static inline int TileType(TileIndex tile)
{
assert(tile < MapSize());
return _map_type_and_height[tile] >> 4;
}
static inline bool IsTileType(TileIndex tile, int type)
{
return TileType(tile) == type;
}
#endif

View File

@ -1478,7 +1478,7 @@ bool LoadOldSaveGame(const char *file)
// go through the tables and see if we can find any ttdpatch presignals. Then convert those to our format.
for (i = 0; i != map_size; i++) {
if (IS_TILETYPE(i, MP_RAILWAY) && (_map5[i] & 0xC0) == 0x40) {
if (IsTileType(i, MP_RAILWAY) && (_map5[i] & 0xC0) == 0x40) {
// this byte is always zero in real ttd.
if (_map3_hi[i]) {
// convert ttdpatch presignal format to openttd presignal format.

View File

@ -184,7 +184,7 @@ static Order GetOrderCmdFromTile(Vehicle *v, uint tile)
// check depot first
if (_patches.gotodepot) {
switch(GET_TILETYPE(tile)) {
switch (TileType(tile)) {
case MP_RAILWAY:
if (v->type == VEH_Train && _map_owner[tile] == _local_player) {
if ((_map5[tile]&0xFC)==0xC0) {
@ -231,7 +231,7 @@ static Order GetOrderCmdFromTile(Vehicle *v, uint tile)
}
// check waypoint
if (IS_TILETYPE(tile, MP_RAILWAY)
if (IsTileType(tile, MP_RAILWAY)
&& v->type == VEH_Train
&& _map_owner[tile] == _local_player
&& (_map5[tile]&0xFE)==0xC4) {
@ -241,7 +241,7 @@ static Order GetOrderCmdFromTile(Vehicle *v, uint tile)
return order;
}
if (IS_TILETYPE(tile, MP_STATION)) {
if (IsTileType(tile, MP_STATION)) {
st = GetStation(st_index = _map2[tile]);
if (st->owner == _current_player || st->owner == OWNER_NONE) {

View File

@ -131,10 +131,10 @@ static void TPFMode2(TrackPathFinder *tpf, uint tile, int direction)
int owner = -1;
if (tpf->tracktype == TRANSPORT_RAIL) {
if ((IS_TILETYPE(tile, MP_RAILWAY) || IS_TILETYPE(tile, MP_STATION) || IS_TILETYPE(tile, MP_TUNNELBRIDGE))) {
if (IsTileType(tile, MP_RAILWAY) || IsTileType(tile, MP_STATION) || IsTileType(tile, MP_TUNNELBRIDGE)) {
owner = _map_owner[tile];
/* Check if we are on the middle of a bridge (has no owner) */
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xC0) == 0xC0)
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xC0) == 0xC0)
owner = -1;
}
}
@ -146,9 +146,9 @@ static void TPFMode2(TrackPathFinder *tpf, uint tile, int direction)
/* Check in case of rail if the owner is the same */
if (tpf->tracktype == TRANSPORT_RAIL) {
if ((IS_TILETYPE(tile, MP_RAILWAY) || IS_TILETYPE(tile, MP_STATION) || IS_TILETYPE(tile, MP_TUNNELBRIDGE)))
if (IsTileType(tile, MP_RAILWAY) || IsTileType(tile, MP_STATION) || IsTileType(tile, MP_TUNNELBRIDGE))
/* Check if we are on the middle of a bridge (has no owner) */
if (!IS_TILETYPE(tile, MP_TUNNELBRIDGE) || (_map5[tile] & 0xC0) != 0xC0)
if (!IsTileType(tile, MP_TUNNELBRIDGE) || (_map5[tile] & 0xC0) != 0xC0)
if (owner != -1 && _map_owner[tile] != owner)
return;
}
@ -231,7 +231,7 @@ FindLengthOfTunnelResult FindLengthOfTunnel(uint tile, int direction)
tile = TILE_FROM_XY(x,y);
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) &&
if (IsTileType(tile, MP_TUNNELBRIDGE) &&
(_map5[tile] & 0xF0) == 0 && // tunnel entrance/exit
//((_map5[tile]>>2)&3) == type && // rail/road-tunnel <-- This is not necesary to check, right?
((_map5[tile] & 3)^2) == direction && // entrance towards: 0 = NE, 1 = SE, 2 = SW, 3 = NW
@ -281,7 +281,7 @@ static void TPFMode1(TrackPathFinder *tpf, uint tile, int direction)
RememberData rd;
uint tile_org = tile;
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xF0)==0) {
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xF0) == 0) {
if ((_map5[tile] & 3) != direction || ((_map5[tile]>>2)&3) != tpf->tracktype)
return;
tile = SkipToEndOfTunnel(tpf, tile, direction);
@ -290,11 +290,11 @@ static void TPFMode1(TrackPathFinder *tpf, uint tile, int direction)
/* Check in case of rail if the owner is the same */
if (tpf->tracktype == TRANSPORT_RAIL) {
if ((IS_TILETYPE(tile_org, MP_RAILWAY) || IS_TILETYPE(tile_org, MP_STATION) || IS_TILETYPE(tile_org, MP_TUNNELBRIDGE)))
if ((IS_TILETYPE(tile, MP_RAILWAY) || IS_TILETYPE(tile, MP_STATION) || IS_TILETYPE(tile, MP_TUNNELBRIDGE)))
if (IsTileType(tile_org, MP_RAILWAY) || IsTileType(tile_org, MP_STATION) || IsTileType(tile_org, MP_TUNNELBRIDGE))
if (IsTileType(tile, MP_RAILWAY) || IsTileType(tile, MP_STATION) || IsTileType(tile, MP_TUNNELBRIDGE))
/* Check if we are on a bridge (middle parts don't have an owner */
if (!IS_TILETYPE(tile, MP_TUNNELBRIDGE) || (_map5[tile] & 0xC0) != 0xC0)
if (!IS_TILETYPE(tile_org, MP_TUNNELBRIDGE) || (_map5[tile_org] & 0xC0) != 0xC0)
if (!IsTileType(tile, MP_TUNNELBRIDGE) || (_map5[tile] & 0xC0) != 0xC0)
if (!IsTileType(tile_org, MP_TUNNELBRIDGE) || (_map5[tile_org] & 0xC0) != 0xC0)
if (_map_owner[tile_org] != _map_owner[tile])
return;
}
@ -628,7 +628,7 @@ static void NTPEnum(NewTrackPathFinder *tpf, uint tile, uint direction)
si.state = 0;
restart:
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xF0)==0) {
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xF0) == 0) {
/* This is a tunnel tile */
if ( (uint)(_map5[tile] & 3) != (direction ^ 2)) { /* ^ 2 is reversing the direction */
/* We are not just driving out of the tunnel */
@ -653,7 +653,7 @@ restart:
goto popnext;
// not a regular rail tile?
if (!IS_TILETYPE(tile, MP_RAILWAY) || (bits = _map5[tile]) & 0xC0) {
if (!IsTileType(tile, MP_RAILWAY) || (bits = _map5[tile]) & 0xC0) {
bits = GetTileTrackStatus(tile, TRANSPORT_RAIL) & _tpfmode1_and[direction];
bits = (bits | (bits >> 8)) & 0x3F;
break;

View File

@ -235,7 +235,7 @@ static uint32 CheckRailSlope(int tileh, uint rail_bits, uint existing, uint tile
rail_bits |= existing;
// don't allow building on the lower side of a coast
if (IS_TILETYPE(tile, MP_WATER) && ~_valid_tileh_slopes[2][tileh] & rail_bits) {
if (IsTileType(tile, MP_WATER) && ~_valid_tileh_slopes[2][tileh] & rail_bits) {
return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER);
}
@ -279,7 +279,7 @@ int32 CmdBuildSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (ti.type == MP_TUNNELBRIDGE) {
/* BUILD ON BRIDGE CODE */
if (!EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)))
if (!EnsureNoVehicleZ(tile, TileHeight(tile)))
return CMD_ERROR;
if ((ti.map5 & 0xF8) == 0xC0) {
@ -438,7 +438,7 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return CMD_ERROR;
if (ti.type == MP_TUNNELBRIDGE) {
if (!EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)))
if (!EnsureNoVehicleZ(tile, TileHeight(tile)))
return CMD_ERROR;
if ((ti.map5 & 0xF8) != 0xE0)
@ -721,7 +721,7 @@ int32 CmdBuildTrainWaypoint(int x, int y, uint32 flags, uint32 p1, uint32 p2)
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
if (!IS_TILETYPE(tile, MP_RAILWAY) || ((dir=0, _map5[tile] != 1) && (dir=1, _map5[tile] != 2)))
if (!IsTileType(tile, MP_RAILWAY) || ((dir = 0, _map5[tile] != 1) && (dir = 1, _map5[tile] != 2)))
return_cmd_error(STR_1005_NO_SUITABLE_RAILROAD_TRACK);
if (!CheckTileOwnership(tile))
@ -793,7 +793,7 @@ static int32 RemoveTrainWaypoint(uint tile, uint32 flags, bool justremove)
Waypoint *cp;
// make sure it's a waypoint
if (!IS_TILETYPE(tile, MP_RAILWAY) || !IS_RAIL_WAYPOINT(_map5[tile]))
if (!IsTileType(tile, MP_RAILWAY) || !IS_RAIL_WAYPOINT(_map5[tile]))
return CMD_ERROR;
if (!CheckTileOwnership(tile) && !(_current_player==17))
@ -885,7 +885,7 @@ int32 CmdBuildSignals(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return CMD_ERROR;
// must be railway, and not a depot, and it must have a track in the suggested position.
if (!IS_TILETYPE(tile, MP_RAILWAY) || (m5=_map5[tile], m5&0x80) || !HASBIT(m5, track))
if (!IsTileType(tile, MP_RAILWAY) || (m5 = _map5[tile], m5 & 0x80) || !HASBIT(m5, track))
return CMD_ERROR;
_error_message = STR_1005_NO_SUITABLE_RAILROAD_TRACK;
@ -1159,10 +1159,10 @@ int32 CmdConvertRail(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
uint tile = TILE_FROM_XY(x,y);
DoConvertRailProc *p;
if (IS_TILETYPE(tile, MP_RAILWAY)) p = DoConvertRail;
else if (IS_TILETYPE(tile, MP_STATION)) p = DoConvertStationRail;
else if (IS_TILETYPE(tile, MP_STREET)) p = DoConvertStreetRail;
else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) p = DoConvertTunnelBridgeRail;
if (IsTileType(tile, MP_RAILWAY)) p = DoConvertRail;
else if (IsTileType(tile, MP_STATION)) p = DoConvertStationRail;
else if (IsTileType(tile, MP_STREET)) p = DoConvertStreetRail;
else if (IsTileType(tile, MP_TUNNELBRIDGE)) p = DoConvertTunnelBridgeRail;
else continue;
ret = p(tile, p2, false);
@ -1749,7 +1749,7 @@ typedef struct SetSignalsData {
static bool SetSignalsEnumProc(uint tile, SetSignalsData *ssd, int track, uint length, byte *state)
{
// the tile has signals?
if (IS_TILETYPE(tile, MP_RAILWAY)) {
if (IsTileType(tile, MP_RAILWAY)) {
if ((_map5[tile]&RAIL_TYPE_MASK) == RAIL_TYPE_SIGNALS) {
if ((_map3_lo[tile] & _signals_table_both[track]) != 0) {
@ -2040,28 +2040,28 @@ static void TileLoop_Track(uint tile)
owner = _map_owner[tile];
if ( (!(rail&(RAIL_BIT_DIAG2|RAIL_BIT_UPPER|RAIL_BIT_LEFT)) && (rail&RAIL_BIT_DIAG1)) || rail==(RAIL_BIT_LOWER|RAIL_BIT_RIGHT)) {
if (!IS_TILETYPE(tile + TILE_XY(0,-1), MP_RAILWAY) ||
if (!IsTileType(tile + TILE_XY(0,-1), MP_RAILWAY) ||
owner != _map_owner[tile + TILE_XY(0,-1)] ||
(_map5[tile + TILE_XY(0,-1)]==RAIL_BIT_UPPER || _map5[tile + TILE_XY(0,-1)]==RAIL_BIT_LEFT))
a2 = RAIL_GROUND_FENCE_NW;
}
if ( (!(rail&(RAIL_BIT_DIAG2|RAIL_BIT_LOWER|RAIL_BIT_RIGHT)) && (rail&RAIL_BIT_DIAG1)) || rail==(RAIL_BIT_UPPER|RAIL_BIT_LEFT)) {
if (!IS_TILETYPE(tile + TILE_XY(0,1), MP_RAILWAY) ||
if (!IsTileType(tile + TILE_XY(0,1), MP_RAILWAY) ||
owner != _map_owner[tile + TILE_XY(0,1)] ||
(_map5[tile + TILE_XY(0,1)]==RAIL_BIT_LOWER || _map5[tile + TILE_XY(0,1)]==RAIL_BIT_RIGHT))
a2 = (a2 == RAIL_GROUND_FENCE_NW) ? RAIL_GROUND_FENCE_SENW : RAIL_GROUND_FENCE_SE;
}
if ( (!(rail&(RAIL_BIT_DIAG1|RAIL_BIT_UPPER|RAIL_BIT_RIGHT)) && (rail&RAIL_BIT_DIAG2)) || rail==(RAIL_BIT_LOWER|RAIL_BIT_LEFT)) {
if (!IS_TILETYPE(tile + TILE_XY(-1,0), MP_RAILWAY) ||
if (!IsTileType(tile + TILE_XY(-1,0), MP_RAILWAY) ||
owner != _map_owner[tile + TILE_XY(-1,0)] ||
(_map5[tile + TILE_XY(-1,0)]==RAIL_BIT_UPPER || _map5[tile + TILE_XY(-1,0)]==RAIL_BIT_RIGHT))
a2 = RAIL_GROUND_FENCE_NE;
}
if ( (!(rail&(RAIL_BIT_DIAG1|RAIL_BIT_LOWER|RAIL_BIT_LEFT)) && (rail&RAIL_BIT_DIAG2)) || rail==(RAIL_BIT_UPPER|RAIL_BIT_RIGHT)) {
if (!IS_TILETYPE(tile + TILE_XY(1,0), MP_RAILWAY) ||
if (!IsTileType(tile + TILE_XY(1,0), MP_RAILWAY) ||
owner != _map_owner[tile + TILE_XY(1,0)] ||
(_map5[tile + TILE_XY(1,0)]==RAIL_BIT_LOWER || _map5[tile + TILE_XY(1,0)]==RAIL_BIT_LEFT))
a2 = (a2 == RAIL_GROUND_FENCE_NE) ? RAIL_GROUND_FENCE_NESW : RAIL_GROUND_FENCE_SW;

View File

@ -100,7 +100,7 @@ void CcRailDepot(bool success, uint tile, uint32 p1, uint32 p2)
tile += TileOffsByDir(dir);
if (IS_TILETYPE(tile, MP_RAILWAY)) {
if (IsTileType(tile, MP_RAILWAY)) {
PlaceExtraDepotRail(tile, _place_depot_extra[dir]);
PlaceExtraDepotRail(tile, _place_depot_extra[dir + 4]);
PlaceExtraDepotRail(tile, _place_depot_extra[dir + 8]);
@ -394,11 +394,11 @@ static int GetBestFit1x1(int x, int y)
};
tile += ToTileIndexDiff(_tile_inc[i]);
m[i] = 0;
if (IS_TILETYPE(tile, MP_RAILWAY) && _map5[tile] < 0x80)
if (IsTileType(tile, MP_RAILWAY) && _map5[tile] < 0x80)
m[i] = _map5[tile]&0x3F;
// handle tracks under bridge
if(IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile]&0xF8)==0xE0)
if(IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile]&0xF8)==0xE0)
m[i] = (byte) !(_map5[tile]&0x01) + 1;
if (_remove_button_clicked) m[i] ^= 0x3F;

View File

@ -25,7 +25,7 @@ bool HasTileRoadAt(uint tile, int i)
int mask;
byte b;
switch(GET_TILETYPE(tile)) {
switch (TileType(tile)) {
case MP_STREET:
b = _map5[tile];
@ -76,7 +76,7 @@ static bool CheckAllowRemoveRoad(uint tile, uint br, bool *edge_road)
return true;
// A railway crossing has the road owner in the map3_lo byte.
if (IS_TILETYPE(tile, MP_STREET) && (_map5[tile] & 0xF0) == 0x10) {
if (IsTileType(tile, MP_STREET) && (_map5[tile] & 0xF0) == 0x10) {
owner = _map3_lo[tile];
} else {
owner = _map_owner[tile];
@ -117,7 +117,7 @@ static bool CheckAllowRemoveRoad(uint tile, uint br, bool *edge_road)
bool IsRoadDepotTile(TileIndex tile)
{
return IS_TILETYPE(tile, MP_STREET) &&
return IsTileType(tile, MP_STREET) &&
(_map5[tile] & 0xF0) == 0x20;
}
@ -164,7 +164,7 @@ int32 CmdRemoveRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2)
}
if (ti.type == MP_TUNNELBRIDGE) {
if (!EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)))
if (!EnsureNoVehicleZ(tile, TileHeight(tile)))
return CMD_ERROR;
if ((ti.map5 & 0xE9) == 0xE8) {

View File

@ -67,7 +67,7 @@ static void BuildRoadOutsideStation(uint tile, int direction)
static const byte _roadbits_by_dir[4] = {2,1,8,4};
tile += TileOffsByDir(direction);
// if there is a roadpiece just outside of the station entrance, build a connecting route
if (IS_TILETYPE(tile, MP_STREET) && !(_map5[tile]&0x20)) {
if (IsTileType(tile, MP_STREET) && !(_map5[tile] & 0x20)) {
DoCommandP(tile, _roadbits_by_dir[direction], 0, NULL, CMD_BUILD_ROAD);
}
}

View File

@ -253,7 +253,7 @@ static bool EnumRoadSignalFindDepot(uint tile, RoadFindDepotData *rfdd, int trac
{
tile += TileOffsByDir(_road_pf_directions[track]);
if (IS_TILETYPE(tile, MP_STREET) &&
if (IsTileType(tile, MP_STREET) &&
(_map5[tile] & 0xF0) == 0x20 &&
_map_owner[tile] == rfdd->owner) {
@ -417,7 +417,7 @@ static void RoadVehDelete(Vehicle *v)
RebuildVehicleLists();
InvalidateWindow(WC_COMPANY, v->owner);
if(IS_TILETYPE(v->tile, MP_STATION))
if (IsTileType(v->tile, MP_STATION))
ClearCrashedStation(v);
BeginVehicleMove(v);
@ -511,7 +511,7 @@ static void RoadVehCheckTrainCrash(Vehicle *v)
tile = v->tile;
// Make sure it's a road/rail crossing
if (!IS_TILETYPE(tile, MP_STREET) ||
if (!IsTileType(tile, MP_STREET) ||
(_map5[tile] & 0xF0) != 0x10)
return;
@ -942,11 +942,11 @@ static int RoadFindPathToDest(Vehicle *v, uint tile, int direction)
bitmask = (uint16)r;
}
if (IS_TILETYPE(tile, MP_STREET)) {
if (IsTileType(tile, MP_STREET)) {
if ((_map5[tile]&0xF0) == 0x20 && v->owner == _map_owner[tile])
/* Road crossing */
bitmask |= _road_veh_fp_ax_or[_map5[tile]&3];
} else if (IS_TILETYPE(tile, MP_STATION)) {
} else if (IsTileType(tile, MP_STATION)) {
if (_map_owner[tile] == OWNER_NONE || _map_owner[tile] == v->owner) {
/* Our station */
Station *st = GetStation(_map2[tile]);
@ -990,11 +990,11 @@ static int RoadFindPathToDest(Vehicle *v, uint tile, int direction)
return_track(FindFirstBit2x64(bitmask));
}
if (IS_TILETYPE(desttile, MP_STREET)) {
if (IsTileType(desttile, MP_STREET)) {
m5 = _map5[desttile];
if ((m5&0xF0) == 0x20)
goto do_it;
} else if (IS_TILETYPE(desttile, MP_STATION)) {
} else if (IsTileType(desttile, MP_STATION)) {
m5 = _map5[desttile];
if (IS_BYTE_INSIDE(m5, 0x43, 0x4B)) {
m5 -= 0x43;
@ -1147,7 +1147,7 @@ static void RoadVehEventHandler(Vehicle *v)
return;
}
if (IS_TILETYPE(gp.new_tile, MP_TUNNELBRIDGE) &&
if (IsTileType(gp.new_tile, MP_TUNNELBRIDGE) &&
(_map5[gp.new_tile]&0xF0) == 0 &&
(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y)&4)) {
@ -1198,7 +1198,7 @@ again:
r = VehicleEnterTile(v, tile, x, y);
if (r & 8) {
if (!IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
if (!IsTileType(tile, MP_TUNNELBRIDGE)) {
v->cur_speed = 0;
return;
}
@ -1206,7 +1206,7 @@ again:
goto again;
}
if (IS_BYTE_INSIDE(v->u.road.state, 0x20, 0x30) && IS_TILETYPE(v->tile, MP_STATION)) {
if (IS_BYTE_INSIDE(v->u.road.state, 0x20, 0x30) && IsTileType(v->tile, MP_STATION)) {
if ((tmp&7) >= 6) { v->cur_speed = 0; return; }
if (IS_BYTE_INSIDE(_map5[v->tile], 0x43, 0x4B)) {
Station *st = GetStation(_map2[v->tile]);

View File

@ -84,7 +84,7 @@ static int FindClosestShipDepot(Vehicle *v)
for(i=0; i!=lengthof(_depots); i++) {
tile = _depots[i].xy;
if (IS_TILETYPE(tile, MP_WATER) && _map_owner[tile] == owner) {
if (IsTileType(tile, MP_WATER) && _map_owner[tile] == owner) {
dist = GetTileDist(tile, tile2);
if (dist < best_dist) {
best_dist = dist;

View File

@ -297,7 +297,7 @@ static inline uint32 GetSmallMapCountoursPixels(uint tile)
{
uint t;
t = GET_TILETYPE(tile);
t = TileType(tile);
if (t == MP_TUNNELBRIDGE) {
t = _map5[tile];
if ((t & 0x80) == 0) t>>=1;
@ -327,7 +327,7 @@ static inline uint32 GetSmallMapVehiclesPixels(uint tile)
{
uint t;
t = GET_TILETYPE(tile);
t = TileType(tile);
if (t == MP_TUNNELBRIDGE) {
t = _map5[tile];
if ((t & 0x80) == 0) t>>=1;
@ -380,7 +380,7 @@ static inline uint32 GetSmallMapIndustriesPixels(uint tile)
{
int t;
t = GET_TILETYPE(tile);
t = TileType(tile);
if (t == MP_INDUSTRY) {
byte color = _industry_smallmap_colors[_map5[tile]];
return color + (color << 8) + (color << 16) + (color << 24);
@ -413,7 +413,7 @@ static inline uint32 GetSmallMapRoutesPixels(uint tile)
int t;
uint32 bits;
t = GET_TILETYPE(tile);
t = TileType(tile);
if (t == MP_STATION) {
byte m5 = _map5[tile];
(bits = MKCOLOR(0x56565656), m5 < 8) || // 8 - railroad station (green)
@ -469,7 +469,7 @@ static inline uint32 GetSmallMapVegetationPixels(uint tile)
int i,t;
uint32 bits;
t = GET_TILETYPE(tile);
t = TileType(tile);
if (t == MP_CLEAR) {
i = (_map5[tile] & 0x1F) - 4;
if (i >= 0) i = (i >> 2);
@ -514,7 +514,7 @@ static inline uint32 GetSmallMapOwnerPixels(uint tile)
{
int t;
t = GET_TILETYPE(tile);
t = TileType(tile);
if (t == MP_HOUSE || _map_owner[tile] == OWNER_TOWN) {
t = 0x80;
} else if (t == MP_INDUSTRY) {

View File

@ -73,7 +73,7 @@ static Station *GetStationAround(uint tile, int w, int h, int closest_station)
{
// check around to see if there's any stations there
BEGIN_TILE_LOOP(tile_cur, w + 2, h + 2, tile - TILE_XY(1,1))
if (IS_TILETYPE(tile_cur, MP_STATION)) {
if (IsTileType(tile_cur, MP_STATION)) {
int t;
t = _map2[tile_cur];
{
@ -118,7 +118,7 @@ static bool CheckStationSpreadOut(Station *st, uint tile, int w, int h)
uint t;
for (i = 0; i != MapSize(); i++) {
if (IS_TILETYPE(i, MP_STATION) && _map2[i] == station_index) {
if (IsTileType(i, MP_STATION) && _map2[i] == station_index) {
t = TileX(i);
if (t < x1) x1 = t;
if (t > x2) x2 = t;
@ -180,7 +180,7 @@ static int CountMapSquareAround(uint tile, byte type, byte min, byte max) {
for (p = _count_square_table; p != endof(_count_square_table); ++p) {
tile = TILE_MASK(tile + ToTileIndexDiff(*p));
if (IS_TILETYPE(tile, type) && _map5[tile] >= min && _map5[tile] <= max)
if (IsTileType(tile, type) && _map5[tile] >= min && _map5[tile] <= max)
num++;
}
@ -435,7 +435,7 @@ void GetProductionAroundTiles(uint *produced, uint tile, int w, int h, int rad)
if (!(IS_INSIDE_1D(xc, x, w) && IS_INSIDE_1D(yc, y, h))) {
GetProducedCargoProc *gpc;
uint tile = TILE_XY(xc, yc);
gpc = _tile_type_procs[GET_TILETYPE(tile)]->get_produced_cargo_proc;
gpc = _tile_type_procs[TileType(tile)]->get_produced_cargo_proc;
if (gpc != NULL) {
cargos[0] = cargos[1] = 0xFF;
gpc(tile, cargos);
@ -480,7 +480,7 @@ void GetAcceptanceAroundTiles(uint *accepts, uint tile, int w, int h, int rad)
xc = x1;
do {
uint tile = TILE_XY(xc, yc);
if (!IS_TILETYPE(tile, MP_STATION)) {
if (!IsTileType(tile, MP_STATION)) {
AcceptedCargo ac;
int i;
@ -647,7 +647,7 @@ int32 CheckFlatLandBelow(uint tile, uint w, uint h, uint flags, uint invalid_dir
// if station is set, then we have special handling to allow building on top of already existing stations.
// so station points to -1 if we can build on any station. or it points to a station if we're only allowed to build
// on exactly that station.
if ( (station != NULL) && IS_TILETYPE(tile_cur, MP_STATION)) {
if (station != NULL && IsTileType(tile_cur, MP_STATION)) {
if (_map5[tile_cur] >= 8) {
_error_message = ClearTile_Station(tile_cur, DC_AUTO); // get error message
return CMD_ERROR;
@ -914,7 +914,7 @@ int32 CmdBuildRailroadStation(int x_org, int y_org, uint32 flags, uint32 p1, uin
static bool TileBelongsToRailStation(Station *st, uint tile)
{
return IS_TILETYPE(tile, MP_STATION) && _map2[tile] == st->index && _map5[tile] < 8;
return IsTileType(tile, MP_STATION) && _map2[tile] == st->index && _map5[tile] < 8;
}
static void MakeRailwayStationAreaSmaller(Station *st)
@ -965,7 +965,7 @@ int32 CmdRemoveFromRailroadStation(int x, int y, uint32 flags, uint32 p1, uint32
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
// make sure the specified tile belongs to the current player, and that it is a railroad station.
if (!IS_TILETYPE(tile, MP_STATION) || _map5[tile] >= 8 || !_patches.nonuniform_stations) return CMD_ERROR;
if (!IsTileType(tile, MP_STATION) || _map5[tile] >= 8 || !_patches.nonuniform_stations) return CMD_ERROR;
st = GetStation(_map2[tile]);
if (_current_player != OWNER_WATER && (!CheckOwnership(st->owner) || !EnsureNoVehicle(tile))) return CMD_ERROR;
@ -2174,7 +2174,7 @@ static void ClickTile_Station(uint tile)
}
static inline bool IsTrainStationTile(uint tile) {
return IS_TILETYPE(tile, MP_STATION) && IS_BYTE_INSIDE(_map5[tile], 0, 8);
return IsTileType(tile, MP_STATION) && IS_BYTE_INSIDE(_map5[tile], 0, 8);
}
static const byte _enter_station_speedtable[12] = {
@ -2530,7 +2530,7 @@ uint MoveGoodsToStation(uint tile, int w, int h, int type, uint amount)
BEGIN_TILE_LOOP(cur_tile, w, h, tile - TILE_XY(max_rad,max_rad))
cur_tile = TILE_MASK(cur_tile);
if (IS_TILETYPE(cur_tile, MP_STATION)) {
if (IsTileType(cur_tile, MP_STATION)) {
st_index = _map2[cur_tile];
for(i=0; i!=8; i++) {
if (around[i] == 0xFF) {

View File

@ -207,7 +207,7 @@ static void MakeSingleHouseBigger(uint tile)
{
byte b;
assert(IS_TILETYPE(tile, MP_HOUSE));
assert(IsTileType(tile, MP_HOUSE));
b = _map5[tile];
if (b & 0x80)
@ -515,7 +515,7 @@ static void LevelTownLand(uint tile)
}
}
#define IS_WATER_TILE(t) (IS_TILETYPE((t), MP_WATER) && _map5[(t)] == 0)
#define IS_WATER_TILE(t) (IsTileType((t), MP_WATER) && _map5[(t)] == 0)
static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
{
@ -563,8 +563,8 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
return;
// Return if neither side of the new road is a house
if (!IS_TILETYPE(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 1])), MP_HOUSE) &&
!IS_TILETYPE(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 3])), MP_HOUSE))
if (!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 1])), MP_HOUSE) &&
!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 3])), MP_HOUSE))
return;
// That means that the road is only allowed if there is a house
@ -580,14 +580,14 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
} else {
// Reached a tunnel? Then continue at the other side of it.
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile]&~3)==4) {
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile]& ~3) == 4) {
FindLengthOfTunnelResult flotr = FindLengthOfTunnel(tile, _map5[tile]&3);
*tile_ptr = flotr.tile;
return;
}
// For any other kind of tunnel/bridge, bail out.
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE))
if (IsTileType(tile, MP_TUNNELBRIDGE))
return;
// Possibly extend the road in a direction.
@ -614,7 +614,7 @@ static void GrowTownInTile(uint *tile_ptr, uint mask, int block, Town *t1)
// always ok if no road allowed.
if (!IsRoadAllowedHere(tmptile, i) || CHANCE16(6,10)) {
// But not if there already is a house there.
if (!IS_TILETYPE(tmptile, MP_HOUSE)) {
if (!IsTileType(tmptile, MP_HOUSE)) {
// Level the land if possible
LevelTownLand(tmptile);
@ -1223,7 +1223,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
m5 = (r >> 16) & 0x3F;
}
assert(IS_TILETYPE(tile, MP_CLEAR));
assert(IsTileType(tile, MP_CLEAR));
ModifyTile(tile,
MP_SETTYPE(MP_HOUSE) | MP_MAP2 | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5 | MP_MAPOWNER,
@ -1236,7 +1236,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
eflags = _housetype_extra_flags[house];
if (eflags&0x18) {
assert(IS_TILETYPE(tile + TILE_XY(0,1), MP_CLEAR));
assert(IsTileType(tile + TILE_XY(0,1), MP_CLEAR));
ModifyTile(tile + TILE_XY(0,1),
MP_SETTYPE(MP_HOUSE) | MP_MAP2 | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5 | MP_MAPOWNER,
++house, /* map2 */
@ -1247,7 +1247,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
}
if (eflags&0x14) {
assert(IS_TILETYPE(tile + TILE_XY(1,0), MP_CLEAR));
assert(IsTileType(tile + TILE_XY(1,0), MP_CLEAR));
ModifyTile(tile + TILE_XY(1,0),
MP_SETTYPE(MP_HOUSE) | MP_MAP2 | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5 | MP_MAPOWNER,
++house, /* map2 */
@ -1258,7 +1258,7 @@ static void DoBuildTownHouse(Town *t, uint tile)
}
if (eflags&0x10) {
assert(IS_TILETYPE(tile + TILE_XY(1,1), MP_CLEAR));
assert(IsTileType(tile + TILE_XY(1,1), MP_CLEAR));
ModifyTile(tile + TILE_XY(1,1),
MP_SETTYPE(MP_HOUSE) | MP_MAP2 | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAP5 | MP_MAPOWNER,
++house, /* map2 */
@ -1290,7 +1290,7 @@ static bool BuildTownHouse(Town *t, uint tile)
static void DoClearTownHouseHelper(uint tile)
{
assert(IS_TILETYPE(tile, MP_HOUSE));
assert(IsTileType(tile, MP_HOUSE));
DoClearSquare(tile);
DeleteAnimatedTile(tile);
}
@ -1299,7 +1299,7 @@ static void ClearTownHouse(Town *t, uint tile) {
uint house = _map2[tile];
uint eflags;
assert(IS_TILETYPE(tile, MP_HOUSE));
assert(IsTileType(tile, MP_HOUSE));
// need to align the tile to point to the upper left corner of the house
if (house >= 3) { // house id 0,1,2 MUST be single tile houses, or this code breaks.
@ -1395,11 +1395,11 @@ void DeleteTown(Town *t)
// Go through all tiles and delete those belonging to the town
tile = 0;
do {
if (IS_TILETYPE(tile, MP_HOUSE)) {
if (IsTileType(tile, MP_HOUSE)) {
if (ClosestTownFromTile(tile, (uint)-1) == t) {
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
}
} else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) || IS_TILETYPE(tile, MP_STREET)) {
} else if (IsTileType(tile, MP_TUNNELBRIDGE) || IsTileType(tile, MP_STREET)) {
if (_map_owner[tile] == OWNER_TOWN && ClosestTownFromTile(tile, (uint)-1) == t) {
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
}
@ -1656,7 +1656,7 @@ static void UpdateTownGrowRate(Town *t)
}
if (_opt.landscape == LT_HILLY) {
if (GET_TILEHEIGHT(t->xy) >= _opt.snow_line && t->act_food == 0 && t->population > 90)
if (TileHeight(t->xy) >= _opt.snow_line && t->act_food == 0 && t->population > 90)
return;
} else if (_opt.landscape == LT_DESERT) {
if (GetMapExtraBits(t->xy) == 1 && (t->act_food==0 || t->act_water==0) && t->population > 60)

View File

@ -487,13 +487,13 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
bool IsTrainDepotTile(TileIndex tile)
{
return IS_TILETYPE(tile, MP_RAILWAY) &&
return IsTileType(tile, MP_RAILWAY) &&
(_map5[tile] & 0xFC) == 0xC0;
}
static bool IsTunnelTile(TileIndex tile)
{
return IS_TILETYPE(tile, MP_TUNNELBRIDGE) &&
return IsTileType(tile, MP_TUNNELBRIDGE) &&
(_map5[tile]&0x80) == 0;
}
@ -983,7 +983,7 @@ static void ReverseTrainDirection(Vehicle *v)
/* Calculate next tile */
tile += TileOffsByDir(t);
/* Test if we have a rail/road-crossing */
if (IS_TILETYPE(tile, MP_STREET) && (_map5[tile] & 0xF0)==0x10) {
if (IsTileType(tile, MP_STREET) && (_map5[tile] & 0xF0) == 0x10) {
/* Check if there is a train on the tile itself */
if (VehicleFromPos(tile, &tile, TestTrainOnCrossing) == NULL) {
/* If light is on, switch light off */
@ -1119,7 +1119,7 @@ typedef struct TrainFindDepotData {
static bool TrainFindDepotEnumProc(uint tile, TrainFindDepotData *tfdd, int track, uint length, byte *state)
{
if (IS_TILETYPE(tile, MP_RAILWAY) && _map_owner[tile] == tfdd->owner) {
if (IsTileType(tile, MP_RAILWAY) && _map_owner[tile] == tfdd->owner) {
if ((_map5[tile] & ~0x3) == 0xC0) {
if (length < tfdd->best_length) {
tfdd->best_length = length;
@ -1357,7 +1357,7 @@ typedef struct TrainTrackFollowerData {
} TrainTrackFollowerData;
static bool TrainTrackFollower(uint tile, TrainTrackFollowerData *ttfd, int track, uint length, byte *state){
if (IS_TILETYPE(tile, MP_RAILWAY) && (_map5[tile]&0xC0) == 0x40) {
if (IsTileType(tile, MP_RAILWAY) && (_map5[tile]&0xC0) == 0x40) {
// the tile has a signal
byte m3 = _map3_lo[tile];
if (!(m3 & _signal_onedir[track])) {
@ -1380,7 +1380,7 @@ static bool TrainTrackFollower(uint tile, TrainTrackFollowerData *ttfd, int trac
// did we reach the final station?
if ((ttfd->station_index == -1 && tile == ttfd->dest_coords) ||
(IS_TILETYPE(tile, MP_STATION) && IS_BYTE_INSIDE(_map5[tile], 0, 8) && _map2[tile] == ttfd->station_index)) {
(IsTileType(tile, MP_STATION) && IS_BYTE_INSIDE(_map5[tile], 0, 8) && _map2[tile] == ttfd->station_index)) {
/* We do not check for dest_coords if we have a station_index,
* because in that case the dest_coords are just an
* approximation of where the station is */
@ -1895,9 +1895,9 @@ static int GetDirectionToVehicle(Vehicle *v, int x, int y)
/* Check if the vehicle is compatible with the specified tile */
static bool CheckCompatibleRail(Vehicle *v, uint tile)
{
if (IS_TILETYPE(tile, MP_RAILWAY) || IS_TILETYPE(tile, MP_STATION)) {
if (IsTileType(tile, MP_RAILWAY) || IsTileType(tile, MP_STATION)) {
// normal tracks, jump to owner check
} else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
} else if (IsTileType(tile, MP_TUNNELBRIDGE)) {
if ((_map5[tile] & 0xC0) == 0xC0) {// is bridge middle part?
TileInfo ti;
FindLandscapeHeightByTile(&ti, tile);
@ -1909,7 +1909,7 @@ static bool CheckCompatibleRail(Vehicle *v, uint tile)
if(v->z_pos != ti.z) // train is going over bridge
return true;
}
} else if (IS_TILETYPE(tile, MP_STREET)) { // train is going over a road-crossing
} else if (IsTileType(tile, MP_STREET)) { // train is going over a road-crossing
// tracks over roads, do owner check of tracks (_map_owner[tile])
if (_map_owner[tile] != v->owner || (v->subtype == 0 && (_map3_hi[tile] & 0xF) != v->u.rail.railtype))
return false;
@ -1977,7 +1977,7 @@ static const byte _otherside_signal_directions[14] = {
static void TrainMovedChangeSignals(uint tile, int dir)
{
int i;
if (IS_TILETYPE(tile, MP_RAILWAY) && (_map5[tile]&0xC0)==0x40) {
if (IsTileType(tile, MP_RAILWAY) && (_map5[tile] & 0xC0) == 0x40) {
i = FindFirstBit2x64((_map5[tile]+(_map5[tile]<<8)) & _reachable_tracks[dir]);
UpdateSignalsOnSegment(tile, _otherside_signal_directions[i]);
}
@ -2215,7 +2215,7 @@ static void TrainController(Vehicle *v)
/* in tunnel */
GetNewVehiclePos(v, &gp);
if (IS_TILETYPE(gp.new_tile, MP_TUNNELBRIDGE) &&
if (IsTileType(gp.new_tile, MP_TUNNELBRIDGE) &&
!(_map5[gp.new_tile] & 0xF0)) {
r = VehicleEnterTile(v, gp.new_tile, gp.x, gp.y);
if (r & 0x4) goto common;
@ -2443,14 +2443,14 @@ static bool TrainCheckIfLineEnds(Vehicle *v)
tile = v->tile;
// tunnel entrance?
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) &&
if (IsTileType(tile, MP_TUNNELBRIDGE) &&
(_map5[tile] & 0xF0) == 0 && (byte)((_map5[tile] & 3)*2+1) == v->direction)
return true;
// depot?
/* XXX -- When enabled, this makes it possible to crash trains of others
(by building a depot right against a station) */
/* if (IS_TILETYPE(tile, MP_RAILWAY) && (_map5[tile] & 0xFC) == 0xC0)
/* if (IsTileType(tile, MP_RAILWAY) && (_map5[tile] & 0xFC) == 0xC0)
return true;*/
/* Determine the non-diagonal direction in which we will exit this tile */
@ -2500,7 +2500,7 @@ static bool TrainCheckIfLineEnds(Vehicle *v)
}
if ((ts &= (ts >> 16)) == 0) {
// make a rail/road crossing red
if (IS_TILETYPE(tile, MP_STREET) && (_map5[tile] & 0xF0)==0x10) {
if (IsTileType(tile, MP_STREET) && (_map5[tile] & 0xF0) == 0x10) {
if (!(_map5[tile] & 4)) {
_map5[tile] |= 4;
SndPlayVehicleFx(SND_0E_LEVEL_CROSSING, v);

View File

@ -81,7 +81,7 @@ static void DoPlaceMoreTrees(uint tile)
/* Only on tiles within 13 squares from tile,
on clear tiles, and NOT on farm-tiles or rocks */
if (dist <= 13 && IS_TILETYPE(cur_tile, MP_CLEAR) &&
if (dist <= 13 && IsTileType(cur_tile, MP_CLEAR) &&
(_map5[cur_tile] & 0x1F) != 0x0F && (_map5[cur_tile] & 0x1C) != 8) {
PlaceTree(cur_tile, r, dist <= 6 ? 0xC0 : 0);
}
@ -107,7 +107,7 @@ void PlaceTreesRandomly()
r = Random();
tile = TILE_MASK(r);
/* Only on clear tiles, and NOT on farm-tiles or rocks */
if (IS_TILETYPE(tile, MP_CLEAR) && (_map5[tile] & 0x1F) != 0x0F && (_map5[tile] & 0x1C) != 8) {
if (IsTileType(tile, MP_CLEAR) && (_map5[tile] & 0x1F) != 0x0F && (_map5[tile] & 0x1C) != 8) {
PlaceTree(tile, r, 0);
}
} while (--i);
@ -119,7 +119,7 @@ void PlaceTreesRandomly()
do {
r = Random();
tile = TILE_MASK(r);
if (IS_TILETYPE(tile, MP_CLEAR) && GetMapExtraBits(tile) == 2) {
if (IsTileType(tile, MP_CLEAR) && GetMapExtraBits(tile) == 2) {
PlaceTree(tile, r, 0);
}
} while (--i);
@ -516,7 +516,7 @@ static void TileLoop_Trees(uint tile)
tile += ToTileIndexDiff(_tileloop_trees_dir[Random() & 7]);
if (!IS_TILETYPE(tile, MP_CLEAR))
if (!IsTileType(tile, MP_CLEAR))
return;
if ( (_map5[tile] & 0x1C) == 4) {
@ -579,7 +579,7 @@ void OnTick_Trees()
/* place a tree at a random rainforest spot */
if (_opt.landscape == LT_DESERT &&
(r=Random(),tile=TILE_MASK(r),GetMapExtraBits(tile)==2) &&
IS_TILETYPE(tile, MP_CLEAR) &&
IsTileType(tile, MP_CLEAR) &&
(m=_map5[tile]&0x1C, m<=4) &&
(tree=GetRandomTreeType(tile, r>>24)) >= 0) {
@ -600,7 +600,7 @@ void OnTick_Trees()
/* place a tree at a random spot */
r = Random();
tile = TILE_MASK(r);
if (IS_TILETYPE(tile, MP_CLEAR) &&
if (IsTileType(tile, MP_CLEAR) &&
(m=_map5[tile]&0x1C, m==0 || m==4 || m==0x10) &&
(tree=GetRandomTreeType(tile, r>>24)) >= 0) {
int m2;

6
ttd.c
View File

@ -1193,13 +1193,13 @@ void ConvertTownOwner()
uint tile;
for (tile = 0; tile != MapSize(); tile++) {
if (IS_TILETYPE(tile, MP_STREET)) {
if (IsTileType(tile, MP_STREET)) {
if ((_map5[tile] & 0xF0) == 0x10 && _map3_lo[tile] & 0x80)
_map3_lo[tile] = OWNER_TOWN;
if (_map_owner[tile] & 0x80)
_map_owner[tile] = OWNER_TOWN;
} else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
} else if (IsTileType(tile, MP_TUNNELBRIDGE)) {
if (_map_owner[tile] & 0x80)
_map_owner[tile] = OWNER_TOWN;
}
@ -1292,7 +1292,7 @@ bool AfterLoadGame(uint version)
uint h = MapSizeY();
BEGIN_TILE_LOOP(tile_cur, w, h, tile)
if (IS_TILETYPE(tile_cur, MP_WATER) && _map_owner[tile_cur] >= MAX_PLAYERS)
if (IsTileType(tile_cur, MP_WATER) && _map_owner[tile_cur] >= MAX_PLAYERS)
_map_owner[tile_cur] = OWNER_WATER;
END_TILE_LOOP(tile_cur, w, h, tile)
}

View File

@ -593,7 +593,15 @@ uint CheckTunnelBusy(uint tile, int *length)
uint starttile = tile;
Vehicle *v;
do { tile += delta; len++; } while (!IS_TILETYPE(tile, MP_TUNNELBRIDGE) || _map5[tile]&0xF0 || (byte)(_map5[tile] ^ 2) != m5 || GetTileZ(tile) != z);
do {
tile += delta;
len++;
} while (
!IsTileType(tile, MP_TUNNELBRIDGE) ||
(_map5[tile] & 0xF0) != 0 ||
(byte)(_map5[tile] ^ 2) != m5 ||
GetTileZ(tile) != z
);
if ((v=FindVehicleBetween(starttile, tile, z)) != NULL) {
_error_message = v->type == VEH_Train ? STR_5000_TRAIN_IN_TUNNEL : STR_5001_ROAD_VEHICLE_IN_TUNNEL;
@ -655,7 +663,7 @@ static uint FindEdgesOfBridge(uint tile, uint *endtile)
// find start of bridge
for(;;) {
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xE0) == 0x80)
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xE0) == 0x80)
break;
tile += direction ? TILE_XY(0,-1) : TILE_XY(-1,0);
}
@ -664,7 +672,7 @@ static uint FindEdgesOfBridge(uint tile, uint *endtile)
// find end of bridge
for(;;) {
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xE0) == 0xA0)
if (IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xE0) == 0xA0)
break;
tile += direction ? TILE_XY(0,1) : TILE_XY(1,0);
}
@ -690,7 +698,7 @@ static int32 DoClearBridge(uint tile, uint32 flags)
int32 cost;
// check if we own the tile below the bridge..
if (_current_player != OWNER_WATER && (!CheckTileOwnership(tile) || !EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)) ))
if (_current_player != OWNER_WATER && (!CheckTileOwnership(tile) || !EnsureNoVehicleZ(tile, TileHeight(tile))))
return CMD_ERROR;
cost = (_map5[tile] & 8) ? _price.remove_road * 2 : _price.remove_rail;
@ -703,11 +711,11 @@ static int32 DoClearBridge(uint tile, uint32 flags)
return cost;
/* delete canal under bridge */
} else if(_map5[tile]==0xC8 && GET_TILEHEIGHT(tile)!=0) {
} else if(_map5[tile] == 0xC8 && TileHeight(tile) != 0) {
int32 cost;
// check for vehicles under bridge
if ( !EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)) )
if (!EnsureNoVehicleZ(tile, TileHeight(tile)))
return CMD_ERROR;
cost = _price.clear_water;
if (flags & DC_EXEC) {
@ -735,7 +743,7 @@ static int32 DoClearBridge(uint tile, uint32 flags)
*/
tile += direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
endtile -= direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
if ((v=FindVehicleBetween(tile, endtile, GET_TILEHEIGHT(tile) + 8)) != NULL) {
if ((v = FindVehicleBetween(tile, endtile, TileHeight(tile) + 8)) != NULL) {
VehicleInTheWayErrMsg(v);
return CMD_ERROR;
}
@ -844,7 +852,7 @@ int32 DoConvertTunnelBridgeRail(uint tile, uint totype, bool exec)
} else if ((_map5[tile] & 0xF8) == 0xE0) {
// bridge middle part with rail below
// only check for train under bridge
if (!CheckTileOwnership(tile) || !EnsureNoVehicleZ(tile, GET_TILEHEIGHT(tile)))
if (!CheckTileOwnership(tile) || !EnsureNoVehicleZ(tile, TileHeight(tile)))
return CMD_ERROR;
// tile is already of requested type?
@ -912,7 +920,7 @@ uint GetBridgeHeight(const TileInfo *ti)
z_correction += 8;
// return the height there (the height of the NORTH CORNER)
return GET_TILEHEIGHT(tile) + z_correction;
return TileHeight(tile) + z_correction;
}
static const byte _bridge_foundations[2][16] = {

View File

@ -240,7 +240,7 @@ static bool checkRadioTowerNearby(uint tile)
BEGIN_TILE_LOOP(tile, 9, 9, tile_s)
// already a radio tower here?
if (IS_TILETYPE(tile, MP_UNMOVABLE) && _map5[tile] == 0)
if (IsTileType(tile, MP_UNMOVABLE) && _map5[tile] == 0)
return false;
END_TILE_LOOP(tile, 9, 9, tile_s)
return true;
@ -265,7 +265,7 @@ void GenerateUnmovables()
tile = r % MapSize();
// TILE_MASK seems to be not working correctly. Radio masts accumulate in one area.
// tile = TILE_MASK(r);
if (IS_TILETYPE(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h >= 32) {
if (IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h >= 32) {
if(!checkRadioTowerNearby(tile))
continue;
_map_type_and_height[tile] |= MP_UNMOVABLE << 4;
@ -296,7 +296,7 @@ restart:
if (--j == 0)
goto restart;
tile = TILE_MASK(tile + ToTileIndexDiff(_tile_add[dir]));
} while (!(IS_TILETYPE(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h <= 16));
} while (!(IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h <= 16));
assert(tile == TILE_MASK(tile));

View File

@ -604,7 +604,7 @@ static void EffectTick_0(Vehicle *v)
BeginVehicleMove(v);
tile = TILE_FROM_XY(v->x_pos, v->y_pos);
if (!IS_TILETYPE(tile, MP_INDUSTRY)) {
if (!IsTileType(tile, MP_INDUSTRY)) {
EndVehicleMove(v);
DeleteVehicle(v);
return;
@ -1074,7 +1074,7 @@ again:
SndPlayVehicleFx(SND_31_EXTRACT, v);
tile = TILE_FROM_XY(v->x_pos, v->y_pos);
if (IS_TILETYPE(tile, MP_INDUSTRY) &&
if (IsTileType(tile, MP_INDUSTRY) &&
_map5[tile]==0xA2) {
AddAnimatedTile(tile);
}
@ -1642,13 +1642,13 @@ byte GetDirectionTowards(Vehicle *v, int x, int y)
uint32 VehicleEnterTile(Vehicle *v, uint tile, int x, int y)
{
uint old_tile = v->tile;
uint32 result = _tile_type_procs[GET_TILETYPE(tile)]->vehicle_enter_tile_proc(v, tile, x, y);
uint32 result = _tile_type_procs[TileType(tile)]->vehicle_enter_tile_proc(v, tile, x, y);
/* When vehicle_enter_tile_proc returns 8, that apparently means that
* we cannot enter the tile at all. In that case, don't call
* leave_tile. */
if (!(result & 8) && old_tile != tile) {
VehicleLeaveTileProc *proc = _tile_type_procs[GET_TILETYPE(old_tile)]->vehicle_leave_tile_proc;
VehicleLeaveTileProc *proc = _tile_type_procs[TileType(old_tile)]->vehicle_leave_tile_proc;
if (proc != NULL)
proc(v, old_tile, x, y);
}

View File

@ -13,7 +13,7 @@ static void FloodVehicle(Vehicle *v);
bool IsShipDepotTile(TileIndex tile)
{
return IS_TILETYPE(tile, MP_WATER) && (_map5[tile]&~3) == 0x80;
return IsTileType(tile, MP_WATER) && (_map5[tile] & ~3) == 0x80;
}
static bool IsClearWaterTile(uint tile)
@ -206,12 +206,12 @@ int32 CmdBuildCanal(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
// can't make water of water!
if (IS_TILETYPE(tile, MP_WATER)) {
if (IsTileType(tile, MP_WATER)) {
_error_message = STR_1007_ALREADY_BUILT;
} else {
/* is middle piece of a bridge? */
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && _map5[tile] & 0x40) { /* build under bridge */
if (IsTileType(tile, MP_TUNNELBRIDGE) && _map5[tile] & 0x40) { /* build under bridge */
if(_map5[tile] & 0x20) { // transport route under bridge
_error_message = STR_5800_OBJECT_IN_THE_WAY;
ret = CMD_ERROR;
@ -230,7 +230,7 @@ int32 CmdBuildCanal(int x, int y, uint32 flags, uint32 p1, uint32 p2)
/* execute modifications */
if (flags & DC_EXEC) {
if(IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
// change owner to OWNER_WATER and set land under bridge bit to water
ModifyTile(tile, MP_MAP5 | MP_MAPOWNER, OWNER_WATER, _map5[tile] | 0x08);
} else {
@ -318,13 +318,13 @@ static int32 ClearTile_Water(uint tile, byte flags) {
static bool IsWateredTile(uint tile)
{
byte m5 = _map5[tile];
if (IS_TILETYPE(tile, MP_WATER)) {
if (IsTileType(tile, MP_WATER)) {
return m5 != 1;
} else if (IS_TILETYPE(tile, MP_STATION)) {
} else if (IsTileType(tile, MP_STATION)) {
// returns true if it is a dock-station (m5 inside values is m5<75 all stations,
// 83<=m5<=114 new airports
return !(m5 < 75 || (m5 >= 83 && m5 <= 114));
} else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
} else if (IsTileType(tile, MP_TUNNELBRIDGE)) {
return (m5 & 0xF8) == 0xC8;
} else
return false;
@ -459,7 +459,7 @@ static void GetAcceptedCargo_Water(uint tile, AcceptedCargo ac)
static void GetTileDesc_Water(uint tile, TileDesc *td)
{
if (_map5[tile] == 0 && GET_TILEHEIGHT(tile) == 0)
if (_map5[tile] == 0 && TileHeight(tile) == 0)
td->str = STR_3804_WATER;
else if (_map5[tile] == 0)
td->str = STR_LANDINFO_CANAL;
@ -501,7 +501,7 @@ static void TileLoopWaterHelper(uint tile, const TileIndexDiffC *offs)
ModifyTile(tile, MP_SETTYPE(MP_WATER) | MP_MAPOWNER | MP_MAP5 | MP_MAP2_CLEAR | MP_MAP3LO_CLEAR | MP_MAP3HI_CLEAR,OWNER_WATER,1);
}
} else {
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
byte m5 = _map5[tile];
if ( (m5&0xF8) == 0xC8 || (m5&0xF8) == 0xF0)
return;