(svn r8946) -Feature: [NewGRF] Add support for vehicle variables 0xFE and 0xFF bit 10,
authormaedhros
Wed, 28 Feb 2007 17:59:05 +0000
changeset 6176 153f0f24dc1b
parent 6175 313c2b5e7ae2
child 6177 9da29043c377
(svn r8946) -Feature: [NewGRF] Add support for vehicle variables 0xFE and 0xFF bit 10,
which is set when a vehicle was built during the exclusive testing phase.
src/aircraft_cmd.cpp
src/newgrf_engine.cpp
src/roadveh_cmd.cpp
src/ship_cmd.cpp
src/train_cmd.cpp
src/vehicle.h
--- a/src/aircraft_cmd.cpp	Wed Feb 28 17:18:36 2007 +0000
+++ b/src/aircraft_cmd.cpp	Wed Feb 28 17:59:05 2007 +0000
@@ -390,6 +390,9 @@
 		v->random_bits = VehicleRandomBits();
 		u->random_bits = VehicleRandomBits();
 
+		v->vehicle_flags = 0;
+		if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SETBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
+
 		VehiclePositionChanged(v);
 		VehiclePositionChanged(u);
 
--- a/src/newgrf_engine.cpp	Wed Feb 28 17:18:36 2007 +0000
+++ b/src/newgrf_engine.cpp	Wed Feb 28 17:59:05 2007 +0000
@@ -601,6 +601,21 @@
 			}
 
 		case 0x7F: return GetGRFParameter(v->engine_type, parameter); /* Read GRF parameter */
+
+		case 0xFE:
+		case 0xFF: {
+			uint16 modflags = 0;
+
+			/* TODO: There are some other bits that should be implemented:
+			 *   bit 5: Whether the rail vehicle is powered or not (mostly useful for wagons).
+			 *   bit 6: This is an electrically powered rail vehicle which is running on normal rail.
+			 *   bit 8: (Maybe?) Toggled whenever the train reverses.
+			 */
+
+			if (HASBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE)) SETBIT(modflags, 10);
+
+			return variable == 0xFE ? modflags : GB(modflags, 8, 8);
+		}
 	}
 
 	/* General vehicle properties */
--- a/src/roadveh_cmd.cpp	Wed Feb 28 17:18:36 2007 +0000
+++ b/src/roadveh_cmd.cpp	Wed Feb 28 17:59:05 2007 +0000
@@ -204,6 +204,9 @@
 		v->cur_image = 0xC15;
 		v->random_bits = VehicleRandomBits();
 
+		v->vehicle_flags = 0;
+		if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SETBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
+
 		VehiclePositionChanged(v);
 
 		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
--- a/src/ship_cmd.cpp	Wed Feb 28 17:18:36 2007 +0000
+++ b/src/ship_cmd.cpp	Wed Feb 28 17:59:05 2007 +0000
@@ -913,6 +913,9 @@
 		v->type = VEH_Ship;
 		v->random_bits = VehicleRandomBits();
 
+		v->vehicle_flags = 0;
+		if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SETBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
+
 		VehiclePositionChanged(v);
 
 		InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
--- a/src/train_cmd.cpp	Wed Feb 28 17:18:36 2007 +0000
+++ b/src/train_cmd.cpp	Wed Feb 28 17:59:05 2007 +0000
@@ -785,6 +785,9 @@
 			v->cur_image = 0xAC2;
 			v->random_bits = VehicleRandomBits();
 
+			v->vehicle_flags = 0;
+			if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SETBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
+
 			v->subtype = 0;
 			SetFrontEngine(v);
 			SetTrainEngine(v);
--- a/src/vehicle.h	Wed Feb 28 17:18:36 2007 +0000
+++ b/src/vehicle.h	Wed Feb 28 17:59:05 2007 +0000
@@ -86,6 +86,7 @@
 enum VehicleFlags {
 	VF_LOADING_FINISHED,
 	VF_CARGO_UNLOADING,
+	VF_BUILT_AS_PROTOTYPE,
 };
 
 /* Effect vehicle types */