mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r15517) -Fix [FS#2642](r6455): Wagonoverrides and articulated engine parts use the colour scheme of the engine, but not its recolour callback, nor its 2CC flag. Same applies to roadvehicles.
This commit is contained in:
parent
3542b1dced
commit
336fda62be
|
@ -432,7 +432,9 @@ static uint8 LiveryHelper(EngineID engine, const Vehicle *v)
|
|||
if (!IsValidCompanyID(_current_company)) return 0;
|
||||
l = GetEngineLivery(engine, _current_company, INVALID_ENGINE, NULL);
|
||||
} else if (v->type == VEH_TRAIN) {
|
||||
l = GetEngineLivery((v->u.rail.first_engine != INVALID_ENGINE && (IsArticulatedPart(v) || UsesWagonOverride(v))) ? v->u.rail.first_engine : v->engine_type, v->owner, v->u.rail.first_engine, v);
|
||||
l = GetEngineLivery(v->engine_type, v->owner, v->u.rail.first_engine, v);
|
||||
} else if (v->type == VEH_ROAD) {
|
||||
l = GetEngineLivery(v->engine_type, v->owner, v->u.road.first_engine, v);
|
||||
} else {
|
||||
l = GetEngineLivery(v->engine_type, v->owner, INVALID_ENGINE, v);
|
||||
}
|
||||
|
|
|
@ -1832,6 +1832,13 @@ const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID
|
|||
default: NOT_REACHED();
|
||||
case VEH_TRAIN: {
|
||||
const RailVehicleInfo *rvi = RailVehInfo(engine_type);
|
||||
if (v != NULL && parent_engine_type != INVALID_ENGINE && (UsesWagonOverride(v) || (IsArticulatedPart(v) && rvi->railveh_type != RAILVEH_WAGON))) {
|
||||
/* Wagonoverrides use the coloir scheme of the front engine.
|
||||
* Articulated parts use the colour scheme of the first part. (Not supported for articulated wagons) */
|
||||
engine_type = parent_engine_type;
|
||||
rvi = RailVehInfo(engine_type);
|
||||
/* Note: Luckily cargo_type is not needed for engines */
|
||||
}
|
||||
|
||||
if (cargo_type == CT_INVALID) cargo_type = rvi->cargo_type;
|
||||
if (rvi->railveh_type == RAILVEH_WAGON) {
|
||||
|
@ -1867,8 +1874,15 @@ const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID
|
|||
}
|
||||
|
||||
case VEH_ROAD: {
|
||||
/* Always use the livery of the front */
|
||||
if (v != NULL && parent_engine_type != INVALID_ENGINE) {
|
||||
engine_type = parent_engine_type;
|
||||
cargo_type = v->First()->cargo_type;
|
||||
}
|
||||
const RoadVehicleInfo *rvi = RoadVehInfo(engine_type);
|
||||
if (cargo_type == CT_INVALID) cargo_type = rvi->cargo_type;
|
||||
|
||||
/* Important: Use Tram Flag of front part. Luckily engine_type refers to the front part here. */
|
||||
if (HasBit(EngInfo(engine_type)->misc_flags, EF_ROAD_TRAM)) {
|
||||
/* Tram */
|
||||
scheme = IsCargoInClass(cargo_type, CC_PASSENGERS) ? LS_PASSENGER_TRAM : LS_FREIGHT_TRAM;
|
||||
|
@ -1952,10 +1966,9 @@ SpriteID GetEnginePalette(EngineID engine_type, CompanyID company)
|
|||
SpriteID GetVehiclePalette(const Vehicle *v)
|
||||
{
|
||||
if (v->type == VEH_TRAIN) {
|
||||
return GetEngineColourMap(
|
||||
(v->u.rail.first_engine != INVALID_ENGINE && (UsesWagonOverride(v) || (IsArticulatedPart(v) && RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON))) ?
|
||||
v->u.rail.first_engine : v->engine_type,
|
||||
v->owner, v->u.rail.first_engine, v);
|
||||
return GetEngineColourMap(v->engine_type, v->owner, v->u.rail.first_engine, v);
|
||||
} else if (v->type == VEH_ROAD) {
|
||||
return GetEngineColourMap(v->engine_type, v->owner, v->u.road.first_engine, v);
|
||||
}
|
||||
|
||||
return GetEngineColourMap(v->engine_type, v->owner, INVALID_ENGINE, v);
|
||||
|
|
Loading…
Reference in New Issue