mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-04 06:00:15 +00:00
(svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
This commit is contained in:
parent
08d73eb696
commit
911273948b
28
src/rail.h
28
src/rail.h
@ -807,6 +807,34 @@ static inline Money RailBuildCost(RailType railtype)
|
||||
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);
|
||||
|
@ -1201,7 +1201,7 @@ static CommandCost DoConvertRail(TileIndex tile, RailType totype, bool exec)
|
||||
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);
|
||||
|
@ -606,7 +606,7 @@ CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
|
||||
VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
|
||||
}
|
||||
|
||||
return CommandCost(RailBuildCost(totype) / 2);
|
||||
return CommandCost(RailConvertCost(GetRailType(tile), totype));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1309,7 +1309,7 @@ CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
|
||||
VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
|
||||
}
|
||||
|
||||
return CommandCost(RailBuildCost(totype) / 2);
|
||||
return CommandCost(RailConvertCost(GetRailType(tile), totype));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -774,7 +774,7 @@ CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec
|
||||
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(TileIndex tile, RailType totype, bool exec
|
||||
}
|
||||
}
|
||||
|
||||
return CommandCost((DistanceManhattan(tile, endtile) + 1) * (RailBuildCost(totype) / 2));
|
||||
return CommandCost((DistanceManhattan(tile, endtile) + 1) * RailConvertCost(GetRailType(tile), totype));
|
||||
} else {
|
||||
return CMD_ERROR;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user