Changeset - r8043:83739684a751
[Not reviewed]
master
0 5 0
smatz - 17 years ago 2007-12-08 19:53:30
smatz@openttd.org
(svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
5 files changed with 33 insertions and 5 deletions:
0 comments (0 inline, 0 general)
src/rail.h
Show inline comments
 
@@ -807,6 +807,34 @@ static inline Money RailBuildCost(RailTy
 
	return (_price.build_rail * _railtype_cost_multiplier[railtype]) >> 3;
 
}
 

	
 
/**
 
 * Calculates the cost of rail conversion
 
 * @param from The railtype we are converting from
 
 * @param to   The railtype we are converting to
 
 * @return Cost per TrackBit
 
 */
 
static inline Money RailConvertCost(RailType from, RailType to)
 
{
 
	/* rail -> el. rail
 
	 * calculate the price as 5 / 4 of (cost build el. rail) - (cost build rail)
 
	 * (the price of workers to get to place is that 1/4)
 
	 */
 
	if (HasPowerOnRail(from, to)) {
 
		return ((RailBuildCost(to) - RailBuildCost(from)) * 5) >> 2;
 
	}
 

	
 
	/* el. rail -> rail
 
	 * calculate the price as 1 / 4 of (cost build el. rail) - (cost build rail)
 
	 * (the price of workers is 1 / 4 + price of copper sold to a recycle center)
 
	 */
 
	if (HasPowerOnRail(to, from)) {
 
		return (RailBuildCost(from) - RailBuildCost(to)) >> 2;
 
	}
 

	
 
	/* make the price the same as remove + build new type */
 
	return RailBuildCost(to) + _price.remove_rail;
 
}
 

	
 
void *UpdateTrainPowerProc(Vehicle *v, void *data);
 
void DrawTrainDepotSprite(int x, int y, int image, RailType railtype);
 
void DrawDefaultWaypointSprite(int x, int y, RailType railtype);
src/rail_cmd.cpp
Show inline comments
 
@@ -1201,7 +1201,7 @@ static CommandCost DoConvertRail(TileInd
 
		VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
 
	}
 

	
 
	return CommandCost(RailBuildCost(totype) / 2);
 
	return CommandCost(RailConvertCost(GetRailType(tile), totype) * CountBits(GetTrackBits(tile)));
 
}
 

	
 
extern CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec);
src/road_cmd.cpp
Show inline comments
 
@@ -606,7 +606,7 @@ CommandCost DoConvertStreetRail(TileInde
 
		VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
 
	}
 

	
 
	return CommandCost(RailBuildCost(totype) / 2);
 
	return CommandCost(RailConvertCost(GetRailType(tile), totype));
 
}
 

	
 

	
src/station_cmd.cpp
Show inline comments
 
@@ -1309,7 +1309,7 @@ CommandCost DoConvertStationRail(TileInd
 
		VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
 
	}
 

	
 
	return CommandCost(RailBuildCost(totype) / 2);
 
	return CommandCost(RailConvertCost(GetRailType(tile), totype));
 
}
 

	
 
/**
src/tunnelbridge_cmd.cpp
Show inline comments
 
@@ -774,7 +774,7 @@ CommandCost DoConvertTunnelBridgeRail(Ti
 
			VehicleFromPos(endtile, &endtile, UpdateTrainPowerProc);
 
		}
 

	
 
		return CommandCost((length + 1) * (RailBuildCost(totype) / 2));
 
		return CommandCost((length + 1) * RailConvertCost(GetRailType(tile), totype));
 
	} else if (IsBridge(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) {
 
		TileIndex endtile = GetOtherBridgeEnd(tile);
 
		byte bridge_height = GetBridgeHeight(tile);
 
@@ -806,7 +806,7 @@ CommandCost DoConvertTunnelBridgeRail(Ti
 
			}
 
		}
 

	
 
		return CommandCost((DistanceManhattan(tile, endtile) + 1) * (RailBuildCost(totype) / 2));
 
		return CommandCost((DistanceManhattan(tile, endtile) + 1) * RailConvertCost(GetRailType(tile), totype));
 
	} else {
 
		return CMD_ERROR;
 
	}
0 comments (0 inline, 0 general)