changeset 6176:863c86137fc1 draft

(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.
author maedhros <maedhros@openttd.org>
date Wed, 28 Feb 2007 17:59:05 +0000
parents d8e9bbb53e7d
children ed54dc50aeaf
files src/aircraft_cmd.cpp src/newgrf_engine.cpp src/roadveh_cmd.cpp src/ship_cmd.cpp src/train_cmd.cpp src/vehicle.h
diffstat 6 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -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
+++ b/src/newgrf_engine.cpp
@@ -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
+++ b/src/roadveh_cmd.cpp
@@ -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
+++ b/src/ship_cmd.cpp
@@ -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
+++ b/src/train_cmd.cpp
@@ -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
+++ b/src/vehicle.h
@@ -86,6 +86,7 @@
 enum VehicleFlags {
 	VF_LOADING_FINISHED,
 	VF_CARGO_UNLOADING,
+	VF_BUILT_AS_PROTOTYPE,
 };
 
 /* Effect vehicle types */