changeset 13177:5d3ff7c33daf draft

(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.
author frosch <frosch@openttd.org>
date Sat, 03 Oct 2009 14:46:48 +0000
parents 6d44d50cdee6
children ec4dc42ad747
files src/articulated_vehicles.cpp src/roadveh.h src/roadveh_cmd.cpp src/train.h src/train_cmd.cpp
diffstat 5 files changed, 7 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/articulated_vehicles.cpp
+++ b/src/articulated_vehicles.cpp
@@ -318,7 +318,7 @@
 				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 @@
 				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;
 
--- a/src/roadveh.h
+++ b/src/roadveh.h
@@ -89,7 +89,7 @@
 /** 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.
 };
 
 /**
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -255,6 +255,7 @@
 		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;
--- a/src/train.h
+++ b/src/train.h
@@ -96,9 +96,7 @@
 	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.
 };
 
 /**
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -720,6 +720,7 @@
 		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 @@
 //		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;