rail_cmd.c
changeset 1901 03bf9bf99319
parent 1891 862800791170
child 1902 86b7fb11f938
equal deleted inserted replaced
1900:1f3309a61546 1901:03bf9bf99319
   362 			if ((m5 & 0xF0) == 0 && ( // normal road?
   362 			if ((m5 & 0xF0) == 0 && ( // normal road?
   363 						(rail_bit == 1 && m5 == 0x05) ||
   363 						(rail_bit == 1 && m5 == 0x05) ||
   364 						(rail_bit == 2 && m5 == 0x0A) // correct direction?
   364 						(rail_bit == 2 && m5 == 0x0A) // correct direction?
   365 					)) {
   365 					)) {
   366 				if (flags & DC_EXEC) {
   366 				if (flags & DC_EXEC) {
   367 					_map3_lo[tile] = _map_owner[tile];
   367 					_map3_lo[tile] = GetTileOwner(tile);
   368 					_map_owner[tile] = _current_player;
   368 					_map_owner[tile] = _current_player;
   369 					_map3_hi[tile] = p1;
   369 					_map3_hi[tile] = p1;
   370 					_map5[tile] = 0x10 | (rail_bit == 1 ? 0x08 : 0x00); // level crossing
   370 					_map5[tile] = 0x10 | (rail_bit == 1 ? 0x08 : 0x00); // level crossing
   371 				}
   371 				}
   372 				break;
   372 				break;
  1065 
  1065 
  1066 	if (flags & DC_AUTO) {
  1066 	if (flags & DC_AUTO) {
  1067 		if (m5 & RAIL_TYPE_SPECIAL)
  1067 		if (m5 & RAIL_TYPE_SPECIAL)
  1068 			return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
  1068 			return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
  1069 
  1069 
  1070 		if (_map_owner[tile] != _current_player)
  1070 		if (!IsTileOwner(tile, _current_player))
  1071 			return_cmd_error(STR_1024_AREA_IS_OWNED_BY_ANOTHER);
  1071 			return_cmd_error(STR_1024_AREA_IS_OWNED_BY_ANOTHER);
  1072 
  1072 
  1073 		return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
  1073 		return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
  1074 	}
  1074 	}
  1075 
  1075 
  1322 static void DrawTile_Track(TileInfo *ti)
  1322 static void DrawTile_Track(TileInfo *ti)
  1323 {
  1323 {
  1324 	uint32 tracktype_offs, image;
  1324 	uint32 tracktype_offs, image;
  1325 	byte m5;
  1325 	byte m5;
  1326 
  1326 
  1327 	_drawtile_track_palette = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_map_owner[ti->tile]));
  1327 	_drawtile_track_palette = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)));
  1328 
  1328 
  1329 	tracktype_offs = (_map3_lo[ti->tile] & 0xF) * TRACKTYPE_SPRITE_PITCH;
  1329 	tracktype_offs = (_map3_lo[ti->tile] & 0xF) * TRACKTYPE_SPRITE_PITCH;
  1330 
  1330 
  1331 	m5 = (byte)ti->map5;
  1331 	m5 = (byte)ti->map5;
  1332 	if (!(m5 & RAIL_TYPE_SPECIAL)) {
  1332 	if (!(m5 & RAIL_TYPE_SPECIAL)) {
  1898 		} else if (rail == RAIL_BIT_LEFT) {
  1898 		} else if (rail == RAIL_BIT_LEFT) {
  1899 			a2 = RAIL_GROUND_FENCE_VERT1;
  1899 			a2 = RAIL_GROUND_FENCE_VERT1;
  1900 		} else if (rail == RAIL_BIT_RIGHT) {
  1900 		} else if (rail == RAIL_BIT_RIGHT) {
  1901 			a2 = RAIL_GROUND_FENCE_VERT2;
  1901 			a2 = RAIL_GROUND_FENCE_VERT2;
  1902 		} else {
  1902 		} else {
  1903 			owner = _map_owner[tile];
  1903 			owner = GetTileOwner(tile);
  1904 
  1904 
  1905 			if ( (!(rail&(RAIL_BIT_DIAG2|RAIL_BIT_UPPER|RAIL_BIT_LEFT)) && (rail&RAIL_BIT_DIAG1)) || rail==(RAIL_BIT_LOWER|RAIL_BIT_RIGHT)) {
  1905 			if ( (!(rail&(RAIL_BIT_DIAG2|RAIL_BIT_UPPER|RAIL_BIT_LEFT)) && (rail&RAIL_BIT_DIAG1)) || rail==(RAIL_BIT_LOWER|RAIL_BIT_RIGHT)) {
  1906 				if (!IsTileType(tile + TILE_XY(0,-1), MP_RAILWAY) ||
  1906 				if (!IsTileType(tile + TILE_XY(0,-1), MP_RAILWAY) ||
  1907 						owner != _map_owner[tile + TILE_XY(0,-1)] ||
  1907 						!IsTileOwner(tile + TILE_XY(0, -1), owner) ||
  1908 						(_map5[tile + TILE_XY(0,-1)]==RAIL_BIT_UPPER || _map5[tile + TILE_XY(0,-1)]==RAIL_BIT_LEFT))
  1908 						(_map5[tile + TILE_XY(0,-1)]==RAIL_BIT_UPPER || _map5[tile + TILE_XY(0,-1)]==RAIL_BIT_LEFT))
  1909 							a2 = RAIL_GROUND_FENCE_NW;
  1909 							a2 = RAIL_GROUND_FENCE_NW;
  1910 			}
  1910 			}
  1911 
  1911 
  1912 			if ( (!(rail&(RAIL_BIT_DIAG2|RAIL_BIT_LOWER|RAIL_BIT_RIGHT)) && (rail&RAIL_BIT_DIAG1)) || rail==(RAIL_BIT_UPPER|RAIL_BIT_LEFT)) {
  1912 			if ( (!(rail&(RAIL_BIT_DIAG2|RAIL_BIT_LOWER|RAIL_BIT_RIGHT)) && (rail&RAIL_BIT_DIAG1)) || rail==(RAIL_BIT_UPPER|RAIL_BIT_LEFT)) {
  1913 				if (!IsTileType(tile + TILE_XY(0,1), MP_RAILWAY) ||
  1913 				if (!IsTileType(tile + TILE_XY(0,1), MP_RAILWAY) ||
  1914 						owner != _map_owner[tile + TILE_XY(0,1)] ||
  1914 						!IsTileOwner(tile + TILE_XY(0, 1), owner) ||
  1915 						(_map5[tile + TILE_XY(0,1)]==RAIL_BIT_LOWER || _map5[tile + TILE_XY(0,1)]==RAIL_BIT_RIGHT))
  1915 						(_map5[tile + TILE_XY(0,1)]==RAIL_BIT_LOWER || _map5[tile + TILE_XY(0,1)]==RAIL_BIT_RIGHT))
  1916 							a2 = (a2 == RAIL_GROUND_FENCE_NW) ? RAIL_GROUND_FENCE_SENW : RAIL_GROUND_FENCE_SE;
  1916 							a2 = (a2 == RAIL_GROUND_FENCE_NW) ? RAIL_GROUND_FENCE_SENW : RAIL_GROUND_FENCE_SE;
  1917 			}
  1917 			}
  1918 
  1918 
  1919 			if ( (!(rail&(RAIL_BIT_DIAG1|RAIL_BIT_UPPER|RAIL_BIT_RIGHT)) && (rail&RAIL_BIT_DIAG2)) || rail==(RAIL_BIT_LOWER|RAIL_BIT_LEFT)) {
  1919 			if ( (!(rail&(RAIL_BIT_DIAG1|RAIL_BIT_UPPER|RAIL_BIT_RIGHT)) && (rail&RAIL_BIT_DIAG2)) || rail==(RAIL_BIT_LOWER|RAIL_BIT_LEFT)) {
  1920 				if (!IsTileType(tile + TILE_XY(-1,0), MP_RAILWAY) ||
  1920 				if (!IsTileType(tile + TILE_XY(-1,0), MP_RAILWAY) ||
  1921 						owner != _map_owner[tile + TILE_XY(-1,0)] ||
  1921 						!IsTileOwner(tile + TILE_XY(-1, 0), owner) ||
  1922 						(_map5[tile + TILE_XY(-1,0)]==RAIL_BIT_UPPER || _map5[tile + TILE_XY(-1,0)]==RAIL_BIT_RIGHT))
  1922 						(_map5[tile + TILE_XY(-1,0)]==RAIL_BIT_UPPER || _map5[tile + TILE_XY(-1,0)]==RAIL_BIT_RIGHT))
  1923 							a2 = RAIL_GROUND_FENCE_NE;
  1923 							a2 = RAIL_GROUND_FENCE_NE;
  1924 			}
  1924 			}
  1925 
  1925 
  1926 			if ( (!(rail&(RAIL_BIT_DIAG1|RAIL_BIT_LOWER|RAIL_BIT_LEFT)) && (rail&RAIL_BIT_DIAG2)) || rail==(RAIL_BIT_UPPER|RAIL_BIT_RIGHT)) {
  1926 			if ( (!(rail&(RAIL_BIT_DIAG1|RAIL_BIT_LOWER|RAIL_BIT_LEFT)) && (rail&RAIL_BIT_DIAG2)) || rail==(RAIL_BIT_UPPER|RAIL_BIT_RIGHT)) {
  1927 				if (!IsTileType(tile + TILE_XY(1,0), MP_RAILWAY) ||
  1927 				if (!IsTileType(tile + TILE_XY(1,0), MP_RAILWAY) ||
  1928 						owner != _map_owner[tile + TILE_XY(1,0)] ||
  1928 						!IsTileOwner(tile + TILE_XY(1, 0), owner) ||
  1929 						(_map5[tile + TILE_XY(1,0)]==RAIL_BIT_LOWER || _map5[tile + TILE_XY(1,0)]==RAIL_BIT_LEFT))
  1929 						(_map5[tile + TILE_XY(1,0)]==RAIL_BIT_LOWER || _map5[tile + TILE_XY(1,0)]==RAIL_BIT_LEFT))
  1930 							a2 = (a2 == RAIL_GROUND_FENCE_NE) ? RAIL_GROUND_FENCE_NESW : RAIL_GROUND_FENCE_SW;
  1930 							a2 = (a2 == RAIL_GROUND_FENCE_NE) ? RAIL_GROUND_FENCE_NESW : RAIL_GROUND_FENCE_SW;
  1931 			}
  1931 			}
  1932 		}
  1932 		}
  1933 	}
  1933 	}
  1995 
  1995 
  1996 }
  1996 }
  1997 
  1997 
  1998 static void GetTileDesc_Track(TileIndex tile, TileDesc *td)
  1998 static void GetTileDesc_Track(TileIndex tile, TileDesc *td)
  1999 {
  1999 {
  2000 	td->owner = _map_owner[tile];
  2000 	td->owner = GetTileOwner(tile);
  2001 	switch (_map5[tile] & RAIL_TYPE_MASK) {
  2001 	switch (_map5[tile] & RAIL_TYPE_MASK) {
  2002 		case RAIL_TYPE_NORMAL:
  2002 		case RAIL_TYPE_NORMAL:
  2003 			td->str = STR_1021_RAILROAD_TRACK;
  2003 			td->str = STR_1021_RAILROAD_TRACK;
  2004 			break;
  2004 			break;
  2005 
  2005 
  2023 	}
  2023 	}
  2024 }
  2024 }
  2025 
  2025 
  2026 static void ChangeTileOwner_Track(uint tile, byte old_player, byte new_player)
  2026 static void ChangeTileOwner_Track(uint tile, byte old_player, byte new_player)
  2027 {
  2027 {
  2028 	if (_map_owner[tile] != old_player)
  2028 	if (!IsTileOwner(tile, old_player)) return;
  2029 		return;
       
  2030 
  2029 
  2031 	if (new_player != 255) {
  2030 	if (new_player != 255) {
  2032 		_map_owner[tile] = new_player;
  2031 		_map_owner[tile] = new_player;
  2033 	}	else {
  2032 	}	else {
  2034 		DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
  2033 		DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);