newgrf_engine.c
changeset 4058 7d1e904e79b5
parent 4057 863fce30596d
child 4059 b1e1c1193f0a
--- a/newgrf_engine.c	Thu Jun 22 21:25:51 2006 +0000
+++ b/newgrf_engine.c	Thu Jun 22 21:31:09 2006 +0000
@@ -502,6 +502,21 @@
 }
 
 
+static uint32 GetVehicleTypeInfo(EngineID engine_type)
+{
+	/* Bit 0  Vehicle type is available on the market
+	 * Bit 1  Vehicle type is in the testing phase
+	 * Bit 2  Exclusive testing offer for a human player active */
+	const Engine *e = GetEngine(engine_type);
+	uint32 var = 0;
+
+	if (e->player_avail == 0xFF) SETBIT(var, 0);
+	if (e->age < e->duration_phase_1) SETBIT(var, 1);
+	if (e->player_avail > 0 && e->player_avail != 0xFF) SETBIT(var, 2);
+	return var;
+}
+
+
 static uint32 GetGRFParameter(EngineID engine_type, byte parameter)
 {
 	const GRFFile *file = GetEngineGRF(engine_type);
@@ -520,6 +535,7 @@
 		switch (variable) {
 			case 0x43: return _current_player; /* Owner information */
 			case 0x46: return 0;               /* Motion counter */
+			case 0x48: return GetVehicleTypeInfo(object->u.vehicle.self_type); /* Vehicle Type Info */
 			case 0xC4: return _cur_year;       /* Build year */
 			case 0xDA: return INVALID_VEHICLE; /* Next vehicle */
 			case 0x7F: return GetGRFParameter(object->u.vehicle.self_type, parameter); /* Read GRF parameter */
@@ -626,6 +642,8 @@
 			return (_cargo_classes[cid] << 16) | (_cargoc.weights[v->cargo_type] << 8) | cid;
 		}
 
+		case 0x48: return GetVehicleTypeInfo(v->engine_type); /* Vehicle Type Info */
+
 		/* Variables which use the parameter */
 		case 0x60: /* Count consist's engine ID occurance */
 			if (v->type != VEH_Train) return v->engine_type == parameter;