# HG changeset patch # User frosch # Date 2009-10-03 14:46:48 # Node ID 424b7af45d3ac0b2c21dc1c37bd59083d6d87567 # Parent 5557c567ff54b86b37d5f716d09806e7ad0697d4 (svn r17684) -Fix: tcache.first_engine and rcache.first_engine need to be set before first callback/sprite-resolving. For RV fronts it was missing at all, causing livery selection to fail. diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -318,7 +318,7 @@ void AddArticulatedParts(Vehicle *first, t->subtype = 0; t->track = front->track; t->railtype = front->railtype; - t->tcache.first_engine = front->engine_type; + t->tcache.first_engine = front->engine_type; // needs to be set before first callback t->spritenum = e_artic->u.rail.image_index; if (e_artic->CanCarryCargo()) { @@ -339,7 +339,7 @@ void AddArticulatedParts(Vehicle *first, v = rv; rv->subtype = 0; - rv->rcache.first_engine = front->engine_type; + rv->rcache.first_engine = front->engine_type; // needs to be set before first callback rv->rcache.cached_veh_length = 8; // Callback is called when the consist is finished rv->state = RVSB_IN_DEPOT; diff --git a/src/roadveh.h b/src/roadveh.h --- a/src/roadveh.h +++ b/src/roadveh.h @@ -89,7 +89,7 @@ void RoadVehUpdateCache(RoadVehicle *v); /** Cached oftenly queried (NewGRF) values */ struct RoadVehicleCache { byte cached_veh_length; - EngineID first_engine; + EngineID first_engine; ///< cached EngineID of the front vehicle. INVALID_VEHICLE for the front vehicle itself. }; /** diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -255,6 +255,7 @@ CommandCost CmdBuildRoadVeh(TileIndex ti v->last_station_visited = INVALID_STATION; v->max_speed = rvi->max_speed; v->engine_type = (EngineID)p1; + v->rcache.first_engine = INVALID_ENGINE; // needs to be set before first callback v->reliability = e->reliability; v->reliability_spd_dec = e->reliability_spd_dec; diff --git a/src/train.h b/src/train.h --- a/src/train.h +++ b/src/train.h @@ -96,9 +96,7 @@ struct TrainCache { byte cached_vis_effect; byte user_def_data; - /* NOSAVE: for wagon override - id of the first engine in train - * 0xffff == not in train */ - EngineID first_engine; + EngineID first_engine; ///< cached EngineID of the front vehicle. INVALID_VEHICLE for the front vehicle itself. }; /** diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -720,6 +720,7 @@ static CommandCost CmdBuildRailWagon(Eng v->spritenum = rvi->image_index; v->engine_type = engine; + v->tcache.first_engine = INVALID_ENGINE; // needs to be set before first callback DiagDirection dir = GetRailDepotDirection(tile); @@ -900,6 +901,7 @@ CommandCost CmdBuildRailVehicle(TileInde // v->dest_tile = 0; v->engine_type = p1; + v->tcache.first_engine = INVALID_ENGINE; // needs to be set before first callback v->reliability = e->reliability; v->reliability_spd_dec = e->reliability_spd_dec;