changeset 9073:9d538b21af0b draft

(svn r12932) -Fix [FS#1970]: Articulated engines ignored GRF engine overrides.
author peter1138 <peter1138@openttd.org>
date Wed, 30 Apr 2008 17:42:08 +0000
parents e197fbb0bbb8
children b3bbfe976d06
files src/articulated_vehicles.cpp src/newgrf.cpp src/newgrf_engine.h
diffstat 3 files changed, 24 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/articulated_vehicles.cpp
+++ b/src/articulated_vehicles.cpp
@@ -11,20 +11,6 @@
 #include "newgrf_engine.h"
 #include "vehicle_func.h"
 
-static EngineID GetNewEngineID(const GRFFile *file, VehicleType type, uint16 internal_id)
-{
-	const Engine *e = NULL;
-	FOR_ALL_ENGINES(e) {
-		if (e->grffile != file) continue;
-		if (e->type != type) continue;
-		if (e->internal_id != internal_id) continue;
-
-		return e->index;
-	}
-
-	return INVALID_ENGINE;
-}
-
 uint CountArticulatedParts(EngineID engine_type, bool purchase_window)
 {
 	if (!HasBit(EngInfo(engine_type)->callbackmask, CBM_VEHICLE_ARTIC_ENGINE)) return 0;
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -359,6 +359,28 @@
 	return e;
 }
 
+EngineID GetNewEngineID(const GRFFile *file, VehicleType type, uint16 internal_id)
+{
+	extern uint32 GetNewGRFOverride(uint32 grfid);
+
+	const GRFFile *grf_match = NULL;
+	if (_patches.dynamic_engines) {
+		uint32 override = _grf_id_overrides[file->grfid];
+		if (override != 0) grf_match = GetFileByGRFID(override);
+	}
+
+	const Engine *e = NULL;
+	FOR_ALL_ENGINES(e) {
+		if (_patches.dynamic_engines && e->grffile != file && (grf_match == NULL || e->grffile != grf_match)) continue;
+		if (e->type != type) continue;
+		if (e->internal_id != internal_id) continue;
+
+		return e->index;
+	}
+
+	return INVALID_ENGINE;
+}
+
 /** Map the colour modifiers of TTDPatch to those that Open is using.
  * @param grf_sprite pointer to the structure been modified
  */
--- a/src/newgrf_engine.h
+++ b/src/newgrf_engine.h
@@ -59,4 +59,6 @@
 void AlterRailVehListOrder(EngineID engine, EngineID target);
 void CommitRailVehListOrderChanges();
 
+EngineID GetNewEngineID(const GRFFile *file, VehicleType type, uint16 internal_id);
+
 #endif /* NEWGRF_ENGINE_H */