Changeset - r3940:eb699b175cdf
[Not reviewed]
master
0 2 0
peter1138 - 18 years ago 2006-06-03 15:10:39
peter1138@openttd.org
(svn r5084) - Add owner attribute to canals and locks. This makes them more useful in multiplayer games, as before, anyone could delete any canal or lock tile. This doesn't affect whose ships can use whose canals or locks.
2 files changed with 26 insertions and 8 deletions:
0 comments (0 inline, 0 general)
water_cmd.c
Show inline comments
 
@@ -148,7 +148,7 @@ static int32 DoBuildShiplift(TileIndex t
 
	}
 

	
 
	if (flags & DC_EXEC) {
 
		MakeLock(tile, dir);
 
		MakeLock(tile, _current_player, dir);
 
		MarkTileDirtyByTile(tile);
 
		MarkTileDirtyByTile(tile - delta);
 
		MarkTileDirtyByTile(tile + delta);
 
@@ -161,6 +161,8 @@ static int32 RemoveShiplift(TileIndex ti
 
{
 
	TileIndexDiff delta = TileOffsByDir(GetLockDirection(tile));
 

	
 
	if (!CheckTileOwnership(tile)) return CMD_ERROR;
 

	
 
	// make sure no vehicle is on the tile.
 
	if (!EnsureNoVehicle(tile) || !EnsureNoVehicle(tile + delta) || !EnsureNoVehicle(tile - delta))
 
		return CMD_ERROR;
 
@@ -249,7 +251,11 @@ int32 CmdBuildCanal(TileIndex tile, uint
 
		cost += ret;
 

	
 
		if (flags & DC_EXEC) {
 
			MakeWater(tile);
 
			if (TileHeight(tile) == 0) {
 
				MakeWater(tile);
 
			} else {
 
				MakeCanal(tile, _current_player);
 
			}
 
			MarkTileDirtyByTile(tile);
 
			MarkTilesAroundDirty(tile);
 
		}
 
@@ -279,6 +285,8 @@ static int32 ClearTile_Water(TileIndex t
 
				return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP);
 
			}
 

	
 
			if (GetTileOwner(tile) != OWNER_WATER && !CheckTileOwnership(tile)) return CMD_ERROR;
 

	
 
			if (flags & DC_EXEC) DoClearSquare(tile);
 
			return _price.clear_water;
 

	
water_map.h
Show inline comments
 
@@ -95,6 +95,16 @@ static inline void MakeShore(TileIndex t
 
	_m[t].m5 = 1;
 
}
 

	
 
static inline void MakeCanal(TileIndex t, Owner o)
 
{
 
	SetTileType(t, MP_WATER);
 
	SetTileOwner(t, o);
 
	_m[t].m2 = 0;
 
	_m[t].m3 = 0;
 
	_m[t].m4 = 0;
 
	_m[t].m5 = 0;
 
}
 

	
 
static inline void MakeShipDepot(TileIndex t, Owner o, DepotPart base, Axis a)
 
{
 
	SetTileType(t, MP_WATER);
 
@@ -105,23 +115,23 @@ static inline void MakeShipDepot(TileInd
 
	_m[t].m5 = base + a * 2;
 
}
 

	
 
static inline void MakeLockTile(TileIndex t, byte section)
 
static inline void MakeLockTile(TileIndex t, Owner o, byte section)
 
{
 
	SetTileType(t, MP_WATER);
 
	SetTileOwner(t, OWNER_WATER);
 
	SetTileOwner(t, o);
 
	_m[t].m2 = 0;
 
	_m[t].m3 = 0;
 
	_m[t].m4 = 0;
 
	_m[t].m5 = section;
 
}
 

	
 
static inline void MakeLock(TileIndex t, DiagDirection d)
 
static inline void MakeLock(TileIndex t, Owner o, DiagDirection d)
 
{
 
	TileIndexDiff delta = TileOffsByDir(d);
 

	
 
	MakeLockTile(t, LOCK_MIDDLE + d);
 
	MakeLockTile(t - delta, LOCK_LOWER + d);
 
	MakeLockTile(t + delta, LOCK_UPPER + d);
 
	MakeLockTile(t, o, LOCK_MIDDLE + d);
 
	MakeLockTile(t - delta, o, LOCK_LOWER + d);
 
	MakeLockTile(t + delta, o, LOCK_UPPER + d);
 
}
 

	
 
#endif
0 comments (0 inline, 0 general)