Skip to content

Commit

Permalink
(svn r15517) -Fix [FS#2642](r6455): Wagonoverrides and articulated en…
Browse files Browse the repository at this point in the history
…gine parts use the colour scheme of the engine, but not its recolour callback, nor its 2CC flag. Same applies to roadvehicles.
  • Loading branch information
frosch123 committed Feb 18, 2009
1 parent 3542b1d commit 336fda6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
4 changes: 3 additions & 1 deletion src/newgrf_engine.cpp
Expand Up @@ -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);
}
Expand Down
21 changes: 17 additions & 4 deletions src/vehicle.cpp
Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 336fda6

Please sign in to comment.