changeset 18301:51ada4c1086e draft

(svn r23137) -Change: [NewGRF v8] New result format for callback 16.
author frosch <frosch@openttd.org>
date Tue, 08 Nov 2011 17:22:49 +0000
parents 4161e822c9f8
children 4925b06e241f
files src/articulated_vehicles.cpp src/newgrf_callbacks.h
diffstat 2 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/articulated_vehicles.cpp
+++ b/src/articulated_vehicles.cpp
@@ -15,6 +15,7 @@
 #include "vehicle_func.h"
 #include "engine_func.h"
 #include "company_func.h"
+#include "newgrf.h"
 
 #include "table/strings.h"
 #include "table/sprites.h"
@@ -33,12 +34,25 @@
 {
 	assert(front == NULL || front->engine_type == front_type);
 
+	const Engine *front_engine = Engine::Get(front_type);
+
 	uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, index, 0, front_type, front);
-	if (callback == CALLBACK_FAILED || GB(callback, 0, 8) == 0xFF) return INVALID_ENGINE;
+	if (callback == CALLBACK_FAILED) return INVALID_ENGINE;
 
-	if (mirrored != NULL) *mirrored = HasBit(callback, 7);
-	const Engine *front_engine = Engine::Get(front_type);
-	return GetNewEngineID(front_engine->GetGRF(), front_engine->type, GB(callback, 0, 7));
+	if (front_engine->GetGRF()->grf_version < 8) {
+		/* 8 bits, bit 7 for mirroring */
+		callback = GB(callback, 0, 8);
+		if (callback == 0xFF) return INVALID_ENGINE;
+		if (mirrored != NULL) *mirrored = HasBit(callback, 7);
+		callback = GB(callback, 0, 7);
+	} else {
+		/* 15 bits, bit 14 for mirroring */
+		if (callback == 0x7FFF) return INVALID_ENGINE;
+		if (mirrored != NULL) *mirrored = HasBit(callback, 14);
+		callback = GB(callback, 0, 14);
+	}
+
+	return GetNewEngineID(front_engine->GetGRF(), front_engine->type, callback);
 }
 
 /**
--- a/src/newgrf_callbacks.h
+++ b/src/newgrf_callbacks.h
@@ -50,7 +50,7 @@
 	CBID_VEHICLE_REFIT_CAPACITY          = 0x15, // 15 bit callback
 
 	/** Builds articulated engines for trains and RVs. */
-	CBID_VEHICLE_ARTIC_ENGINE            = 0x16, // 8 bit callback
+	CBID_VEHICLE_ARTIC_ENGINE            = 0x16, // 8 bit callback for grf version < 8
 
 	/** Determine whether the house can be built on the specified tile. */
 	CBID_HOUSE_ALLOW_CONSTRUCTION        = 0x17, // 8 bit callback